Skip to content

Account and keys

Your account, plan and usage, API keys, and the apps you connected over OAuth.

View as Markdown

Get your account

GET/account

Your plan, this month’s usage and your limits. The plan is a paid one only while its subscription is active; the subscription fields show either way, so a failed payment is visible.

Request
curl "https://sendocado.com/api/v1/account" \
  -H "Authorization: Bearer $SENDOCADO_API_KEY"
Response 200
{
  "id": "k1n7c2bq4vxd8a0e3f6g9h2j5m8p1r4s",
  "email": "founder@acme.example",
  "name": "Sam Rivera",
  "plan": {
    "id": "starter",
    "name": "Starter",
    "interval": "month",
    "status": "active",
    "current_period_end": 1791728000000,
    "is_canceled_at_period_end": false
  },
  "usage": {
    "contact_count": 2418,
    "month_send_count": 9310
  },
  "limits": {
    "max_contact_count": 5000,
    "max_monthly_send_count": 50000,
    "max_project_count": 3
  }
}

Errors

StatusTypeExample message
401unauthorizedSend a valid API key as "Authorization: Bearer sc_…", or sign in.
429rate_limitedToo many requests. Try again in 12 seconds.

Delete your account

DELETE/account

Cancels your subscription, then deletes every project, key and record of the account in the background. Agents connected over MCP cannot do this; only the app and this route can.

Request
curl -X DELETE "https://sendocado.com/api/v1/account" \
  -H "Authorization: Bearer $SENDOCADO_API_KEY"

Answers 204 with no body.

Errors

StatusTypeExample message
401unauthorizedSend a valid API key as "Authorization: Bearer sc_…", or sign in.
404account_not_foundAccount not found.
429rate_limitedToo many requests. Try again in 12 seconds.

Start a plan checkout

POST/billing/checkout-sessions

A Stripe Checkout page for a paid plan. Send the person to url; the plan applies once Stripe confirms the payment.

Body

Send JSON with every field; use null for a value you do not set.

FieldTypeNotes
plan_id"starter" | "growth"Required
interval"month" | "year"Required
Request
curl -X POST "https://sendocado.com/api/v1/billing/checkout-sessions" \
  -H "Authorization: Bearer $SENDOCADO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "plan_id": "starter",
  "interval": "year"
}'
Response 201
{
  "url": "https://checkout.stripe.com/c/pay/cs_live_a1B2c3D4"
}

Errors

StatusTypeExample message
400invalid_dataSend a JSON request body.
401unauthorizedSend a valid API key as "Authorization: Bearer sc_…", or sign in.
429rate_limitedToo many requests. Try again in 12 seconds.

Open the billing portal

POST/billing/portal-sessions

A Stripe billing portal page where you change plan, update the card, download invoices or cancel.

Request
curl -X POST "https://sendocado.com/api/v1/billing/portal-sessions" \
  -H "Authorization: Bearer $SENDOCADO_API_KEY"
Response 201
{
  "url": "https://billing.stripe.com/p/session/live_a1B2c3D4"
}

Errors

StatusTypeExample message
401unauthorizedSend a valid API key as "Authorization: Bearer sc_…", or sign in.
429rate_limitedToo many requests. Try again in 12 seconds.

List API keys

GET/api-keys

Your keys, without the keys themselves. A key works for every project you own.

Request
curl "https://sendocado.com/api/v1/api-keys" \
  -H "Authorization: Bearer $SENDOCADO_API_KEY"
Response 200
{
  "api_keys": [
    {
      "id": "pt49zhkken659o2v21i9mpflv9fupxqm",
      "name": "Production server",
      "prefix": "sc_Xk29fPq7",
      "created_at": 1788790400000,
      "last_used_at": 1789999880000
    }
  ],
  "next_cursor": null
}

Errors

StatusTypeExample message
401unauthorizedSend a valid API key as "Authorization: Bearer sc_…", or sign in.
429rate_limitedToo many requests. Try again in 12 seconds.

Create an API key

POST/api-keys

The only response that contains the key; store it now, it cannot be read again.

Body

Send JSON with every field; use null for a value you do not set.

FieldTypeNotes
namestringRequired
Request
curl -X POST "https://sendocado.com/api/v1/api-keys" \
  -H "Authorization: Bearer $SENDOCADO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Production server"
}'
Response 201
{
  "id": "pt49zhkken659o2v21i9mpflv9fupxqm",
  "name": "Production server",
  "prefix": "sc_Xk29fPq7",
  "created_at": 1790000000000,
  "last_used_at": null,
  "key": "sc_Xk29fPq7mN3vB8cR1tY6uW0zA4sD2fG5hJ9kL7qE1"
}

Errors

StatusTypeExample message
400invalid_dataSend a JSON request body.
401unauthorizedSend a valid API key as "Authorization: Bearer sc_…", or sign in.
409conflictThis campaign has enrollments, so it cannot be deleted. Pause it instead.
429rate_limitedToo many requests. Try again in 12 seconds.

Revoke an API key

DELETE/api-keys/{api_key_id}

The key stops working at once.

Parameters

NameInTypeNotes
api_key_idpathstringRequired
Request
curl -X DELETE "https://sendocado.com/api/v1/api-keys/$API_KEY_ID" \
  -H "Authorization: Bearer $SENDOCADO_API_KEY"

Answers 204 with no body.

Errors

StatusTypeExample message
401unauthorizedSend a valid API key as "Authorization: Bearer sc_…", or sign in.
404api_key_not_foundAPI key not found.
429rate_limitedToo many requests. Try again in 12 seconds.

List connected apps

GET/connected-apps

MCP clients you approved with OAuth, such as Claude or Cursor.

Request
curl "https://sendocado.com/api/v1/connected-apps" \
  -H "Authorization: Bearer $SENDOCADO_API_KEY"
Response 200
{
  "connected_apps": [
    {
      "oauth_client_id": "mmex6l2qagwncxvjcnqcnau0xltenc59",
      "name": "Claude",
      "connected_at": 1789740800000
    }
  ],
  "next_cursor": null
}

Errors

StatusTypeExample message
401unauthorizedSend a valid API key as "Authorization: Bearer sc_…", or sign in.
429rate_limitedToo many requests. Try again in 12 seconds.

Disconnect an app

DELETE/connected-apps/{oauth_client_id}

Deletes the app’s tokens; its next call fails with 401.

Parameters

NameInTypeNotes
oauth_client_idpathstringRequired
Request
curl -X DELETE "https://sendocado.com/api/v1/connected-apps/$OAUTH_CLIENT_ID" \
  -H "Authorization: Bearer $SENDOCADO_API_KEY"

Answers 204 with no body.

Errors

StatusTypeExample message
401unauthorizedSend a valid API key as "Authorization: Bearer sc_…", or sign in.
404connected_app_not_foundConnected app not found.
429rate_limitedToo many requests. Try again in 12 seconds.