API

Errors and limits

Errors are plain sentences you can show to a person, with a type your code can switch on.

Errors

Anything that isn't a 2xx answers with the same shape:

Response · 409
{
  "error": {
    "type": "conflict",
    "message": "That offer has already been answered or ran out."
  }
}
Response · 400
{
  "error": {
    "type": "invalid_request",
    "message": "price: Use a number of dollars, like 185 or 185.50.",
    "param": "price"
  }
}

Types

StatusTypeWhat it means
400invalid_requestSomething in the request needs fixing. param names the field when there is one.
401unauthorizedNo key, or the key isn't valid any more.
403forbiddenThe key doesn't have the permission this needs.
404not_foundNothing with that id, or it isn't yours.
409conflictIt can't happen in the state things are in: the listing already sold, the offer was already answered.
429rate_limitedThat's this month's requests.
503unavailableA part of the service isn't set up or is down, like the writing agent.
500server_errorSomething broke on our side. Quote the request id if you tell us.

Limits

While we're in beta, each person gets 10,000 requests a month across all their keys and agent links, free. The count starts over on the 1st (UTC). Every response with a key says where you are:

X-RateLimit-Limit: 10000
X-RateLimit-Remaining: 8760

Past the limit, requests answer 429 rate_limited until the month turns. You can see this month's count on the API page in the app.

Request ids

Every response has an X-Request-Id header (req_…). Server errors include it in the message, too. Send it to us and we can find exactly what happened.