from payments_py import Payments, PaymentOptions
from payments_py.common.types import PlanMetadata, AgentMetadata, AgentAPIAttributes
from payments_py.plans import get_free_price_config, get_fixed_credits_config
import requests
# Initialize as builder
builder = Payments.get_instance(
PaymentOptions(nvm_api_key="nvm:builder-key", environment="sandbox")
)
# Initialize as subscriber
subscriber = Payments.get_instance(
PaymentOptions(nvm_api_key="nvm:subscriber-key", environment="sandbox")
)
# 1. Builder creates plan and agent
plan_result = builder.plans.register_credits_plan(
plan_metadata=PlanMetadata(name="API Access Plan"),
price_config=get_free_price_config(), # Free for demo
credits_config=get_fixed_credits_config(100)
)
plan_id = plan_result['planId']
agent_result = builder.agents.register_agent(
agent_metadata=AgentMetadata(name="Demo Agent"),
agent_api=AgentAPIAttributes(
endpoints=[{"POST": "https://api.example.com/tasks"}],
agent_definition_url="https://api.example.com/openapi.json"
),
payment_plans=[plan_id]
)
agent_id = agent_result['agentId']
# 2. Subscriber orders the plan
subscriber.plans.order_plan(plan_id)
# 3. Subscriber generates access token
token_result = subscriber.x402.get_x402_access_token(
plan_id=plan_id,
agent_id=agent_id
)
access_token = token_result['accessToken']
# 4. Subscriber makes request to agent
response = requests.post(
"https://api.example.com/tasks",
headers={
"payment-signature": access_token,
"Content-Type": "application/json"
},
json={"prompt": "Hello, agent!"}
)
print(f"Status: {response.status_code}")
print(f"Response: {response.json()}")
# 5. Check updated balance
balance = subscriber.plans.get_plan_balance(plan_id)
print(f"Remaining credits: {balance.balance}")