Get started
Errors, limits and conventions
Status codes tell you what went wrong, and the message tells you how to fix it. The same rules for dates, money and lists apply to every endpoint.
Error shape
Every error response has the same body: one object with a message written for the person reading your logs.
422 Unprocessable
{
"error": {
"message": "name: Too small: expected string to have >=1 characters"
}
}Status codes
| Status | Meaning | What to do |
|---|---|---|
| 200 | OK | The request worked. |
| 201 | Created | A stakeholder or security was created. The body has its id. |
| 400 | Bad request | A POST body was not valid JSON. |
| 401 | Unauthorized | The API key is missing, mistyped or revoked, or its creator has left the company or lost write access. The message says which. |
| 402 | Payment required | The company has no active plan in good standing. The message gives the reason; an owner can fix it on the Billing page. |
| 403 | Forbidden | The key does not have the scope this endpoint needs. The message names the scope. |
| 404 | Not found | No record with that id belongs to the key's company, or the path is not an endpoint. |
| 405 | Method not allowed | The API accepts GET and POST only. |
| 422 | Unprocessable | A field is missing or invalid. The message lists each field and what is wrong. |
| 429 | Too many requests | The key or your IP went over its rate limit. Wait for the Retry-After header's seconds, then retry. |
Rate limits
Each API key can make 600 requests a minute, and at most 100 in any 10-second window. Each IP address can make 1,200 requests a minute across all keys. Reads and writes count the same.
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Requests allowed per minute for this key: 600. |
X-RateLimit-Remaining | Requests left in the current minute. |
X-RateLimit-Reset | Seconds until the current minute's count resets. |
Retry-After | Sent with a 429: seconds to wait before retrying. |
Over the limit, the API answers 429 and does nothing. Wait for Retry-After seconds and send the request again. Write to support@capable.so before a large backfill if you need a higher limit.
Conventions
- Requests and responses are JSON. Send
Content-Type: application/jsonwith a POST body. - Dates are
YYYY-MM-DD, such as2026-11-17. Timestamps such ascreatedAtare ISO 8601 in UTC. - Money is a number in US dollars, such as
0.42for an exercise price. For a SAFE or a convertible note,quantityis the principal in dollars. - Percentages are numbers from 0 to 100, such as
20for a 20% discount. - Ids are opaque strings. Store them as given and do not parse them.
- Lists return every record in one response under
data. There is no pagination. - Fields with no value are
null, never left out. - Vesting and outstanding amounts are computed for today, unless the endpoint takes an
asOfdate.