Showami (1.0)
The Showami API for creating, accepting, and updating showings and rentals.
Every request must include an X-Api-Key header. Keys are issued at one of two access levels:
- Full access — can read and modify resources via any HTTP method.
- Read-only — restricted to
GET,HEAD, andOPTIONSrequests. Any request using another method is rejected with403 Forbiddenand the body{ "message": "Read-only API keys cannot modify resources." }. Use a read-only key for integrations that only need to pull data (reporting, dashboards, audits). The sign-in endpoints (POST /api/v1/users/tokensandPOST /users/sign_in) are allowlisted so the key bearer can still exchange credentials for a user token.
The create endpoints (POST /api/v1/showings, POST /api/v1/tasks, POST /api/v1/rentals and POST /api/v1/consumers/showings) accept an optional Idempotency-Key header, so a request can be retried safely when its response never arrives (a timeout or dropped connection) without risking a duplicate booking.
- Use a unique value per showing you intend to create, such as a UUID or your own booking id, and send the same value on every retry of that request. Keys are scoped to the authenticated user (for consumer showings, to the consumer) and up to 255 characters.
- Once the original request has succeeded, a retry with the same key creates nothing and returns
200with the original showing(s), in their current state, plus anIdempotent-Replayed: trueresponse header. - A retry must send the same request body as the original (the order of JSON keys doesn't matter). Reusing a key with a different body returns
422with{ "message": "This Idempotency-Key was already used with a different request. Use a new key for a new request." }and creates nothing. - While the original is still being processed, a retry returns
409 Conflict; wait and retry again with the same key. - If the original failed (any non-
200response), nothing was booked and the key is released, so a retry with the same key is processed as a new request.
Requests are rate limited to keep the API responsive for every integration.
| Scope | Limit |
|---|---|
| All API requests, per client IP address | 50 requests per 10 seconds |
POST /users/sign_in, per IP address and per email | 5 attempts per 20 seconds |
A request over the limit gets 429 Too Many Requests. It's rejected before it reaches the API, so nothing was created or changed and the request is safe to retry.
- Check the status code, not the body. A
429from the general limit comes from our edge network, so its body may be HTML rather than JSON. - If the response has a
Retry-Afterheader, wait that many seconds before retrying. Otherwise wait at least 10 seconds, then back off exponentially (10s, 20s, 40s…) with some random jitter. Retrying right away keeps the window full and extends the block. - Send the same
Idempotency-Keywhen you retry a create (see "Idempotent creation"). - Spread bulk work out: a steady 5 requests per second stays under the limit, while a burst of 50 at once uses up the whole window. Use webhooks rather than polling where you can.
These limits may change. We'll give integration partners notice before lowering them. If your integration needs a higher limit, contact us.