Dino's flagship developer flow is governed spend for agents: fund a wallet, create a spend account, issue a spending key, then call the public REST /v1 API.
#Current status
Today, the canonical shipped surface for agent spend is:
REST /v1- Dino spending keys
- dashboard approvals and ledger
CLI, MCP spend tools, and the TypeScript SDK are rolling out in stages. Use the REST flow below as the source of truth.
#What you need
Before making your first request:
- In the Dino dashboard, add a funding source to your team wallet.
- Create a spend account for the agent, automation, or service.
- Configure its budget, max transaction size, and optional approval threshold.
- Issue a Dino spending key for that spend account.
The plaintext spending key is only shown once.
#Request spend
Use the public agent-spend API:
curl -sS -X POST "https://api.dino.id/v1/spend" \
-H "Authorization: Bearer YOUR_DINO_SPEND_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"amount_cents": 12000,
"currency": "usd",
"merchant_name": "AWS",
"reason": "GPU runtime for evaluation job"
}'
#Possible responses
#Approved
{
"id": "req_123",
"status": "approved",
"decision_reason": "Spend request approved",
"budget_period": "monthly",
"remaining_budget_cents": 38000,
"remaining_monthly_budget_cents": 38000,
"amount_cents": 12000,
"currency": "usd",
"merchant_name": "AWS"
}
#Needs approval
{
"id": "req_124",
"status": "needs_approval",
"decision_reason": "Amount requires approval",
"budget_period": "monthly",
"remaining_budget_cents": 50000,
"remaining_monthly_budget_cents": 50000,
"amount_cents": 60000,
"currency": "usd",
"merchant_name": "OpenAI",
"approval_url": "https://app.dino.id/agents/approvals?spendRequestId=req_124"
}
#Declined
{
"id": "req_125",
"status": "declined",
"decision_reason": "Amount would exceed the budget for this period",
"budget_period": "monthly",
"remaining_budget_cents": 5000,
"remaining_monthly_budget_cents": 5000,
"amount_cents": 12000,
"currency": "usd",
"merchant_name": "Vercel"
}
#Check status
curl -sS "https://api.dino.id/v1/spend/req_123" \
-H "Authorization: Bearer YOUR_DINO_SPEND_KEY"
#Check remaining budget
curl -sS "https://api.dino.id/v1/balance" \
-H "Authorization: Bearer YOUR_DINO_SPEND_KEY"
#Error handling
Expect machine-readable errors in this shape:
{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded"
}
}
Common codes:
invalid_api_keyrevoked_api_keyinvalid_requestfunding_source_budget_exceededplan_spend_volume_exceededrate_limited
#Approvals and ledger
If a request returns needs_approval, route the operator to approval_url and treat the request as pending. Every decision is persisted to Dino's ledger for later audit.