Build with
CanvasOrbit

Everything you need to give an agent a card: the quick start, the API reference, the SDKs and the webhook events.

Your first card
in minutes

Install an SDK, create an API key and issue a single-use card from code. The same steps work in any agent framework.

Install the Node or Python SDK
Create an API key in the dashboard
Issue a single-use card from code
Listen for the card.charged webhook
Node SDK  –  Quick start
issue-card.js
// Install: npm install @canvasorbit/node
import { Client } from "@canvasorbit/node";
// Initialize with your API key
const client = new Client("co_live_sk_••••••••");
// Issue a single-use card for one purchase
const card = await client.cards.issue({
  agentId: "agent_research_01",
  budgetUsd: 49,
  type: "single_use",
  merchantLock: "browserless.io"
});
console.log(card.last4); // 8821

Three resources,
one REST API

Every endpoint takes JSON and returns JSON, and the version lives in the URL. Authenticate with a secret key in the Authorization header.

Cards

Issue, read, freeze and close virtual cards. Every card carries its policy as configuration your agent can read.

POST /v1/cards
GET /v1/cards/:id
POST /v1/cards/:id/freeze
DELETE /v1/cards/:id
Approvals

List the requests waiting for a person and answer them from your own tools, or let the dashboard and Slack do it.

GET /v1/approvals
POST /v1/approvals/:id/approve
POST /v1/approvals/:id/deny
Transactions

Every authorization and charge, with the agent, the merchant and the policy that allowed it. Exports for your auditors.

GET /v1/transactions
GET /v1/transactions/:id
GET /v1/transactions/export

Official SDKs for
Node and Python

Typed clients that handle retries, pagination and webhook signatures for you. Anything else can call the REST API directly.

Back to the quick start
Python SDK
pip install canvasorbit
Python 3.9 and newer
Sync and async clients
Node SDK
@canvasorbit/node
Node 18+
Full TypeScript types
REST API
JSON over HTTPS
v1
Versioned in the URL

Every card event,
pushed to you

Register an endpoint and we send a signed POST for every card event. Failed deliveries are retried with backoff for up to three days.

Signed with your webhook secret
Retried with exponential backoff
Ordered per card, never per account
Replayable from the dashboard
Python SDK  –  Verify a webhook
webhooks.py
import canvasorbit as co
# Verify the signature before trusting the payload
event = co.Webhook.verify(
  payload=request.body,
  signature=request.headers["CO-Signature"],
  secret="whsec_••••••••"
)
if event.type == "card.charged":
  record_receipt(event.data) # your code

Ship your first
agent payment

Create a free account, copy your API key and issue a card from the quick start above.

100 free cards on signup. No credit card needed.