Skip to main content

Sandbox Mode

Use a test API key (pms_test_ prefix) to validate your integration without writing any data to the hotel’s system. When the hotel admin generates an API key, they receive both a live key and a test key as a pair. Ask the hotel admin for the test key to start development. Test keys run the exact same payload validation as live keys — every field rule in Error Handling applies identically.
Sandbox stops after payload validation. It does not reach the hotel’s actual guest list, so the conflict checks never run: you will not see ROOM_OCCUPIED, DUPLICATE_GUEST, ROOM_CLOSING or GUEST_NOT_FOUND in test mode, no matter what you send. Those are the responses most integrations handle badly, so exercise them against a live key on a hotel’s test property before you go into production.

Test Response Example

The _sandbox: true flag confirms you’re in test mode and no data was written. This flag is never present in live responses.

What to Test

Use sandbox mode to verify:
  1. Payload format — Confirm all your field formats are correct (dates, phone numbers, etc.)
  2. Error handling — Send intentionally invalid data to test your error handling code
  3. Rate limit handling — Confirm your code handles 429 responses gracefully
Idempotency cannot be observed in sandbox. Test-mode responses are not stored, so resending the same key returns a fresh response rather than a replay, and _idempotent never appears. Send the header from the first day — it is required — but verify replay behaviour with a live key.
Recommended workflow: Develop and test with a pms_test_ key first. Once your integration passes all test cases, switch to the pms_live_ key for production. The only change needed is the API key — all endpoints and request formats are identical.

Idempotency

All POST endpoints require an Idempotency-Key header. This prevents duplicate operations when network issues cause retries — for example, if your system sends a check-in request but doesn’t receive the response due to a timeout, you can safely resend the same request.

How It Works

  1. You include an Idempotency-Key header with every POST request
  2. RecepAI processes the request and stores the response, keyed to your idempotency key
  3. If you send another request with the same key to the same endpoint within 24 hours, RecepAI returns the cached response without re-processing

Rules

Use a structured format that’s unique per operation:
Examples:

Duplicate Response

When a cached response is returned, it includes an _idempotent flag:
The _idempotent: true flag tells you this is a cached replay, not a new operation. The response body, HTTP status, and requestId are all identical to the original response.

Important: Failed Requests Don’t Consume Keys

If your request returns a 4xx error (validation failure, room conflict, etc.), the idempotency key is not consumed. This means you can fix the issue and retry with the same key:

Rate Limits

Each endpoint has its own rate limit. Limits are per hotel. One IP address may also send at most 600 requests a minute in total.

Limits by Endpoint

Response Headers

Responses carry the endpoint’s rate limit in these headers:
Not every response carries them — a 429 from the per-IP limit never does. Read them when they are present.

Rate Limited Response (429)

When you exceed the limit:
A 429 from the per-IP limit carries the same Retry-After header and body.

Handling Rate Limits

Implement exponential backoff in your integration:
For the sync endpoint (10/hour): Schedule your daily sync at a fixed time (e.g., 08:00). One sync per day is sufficient. For real-time updates throughout the day, use the individual check-in, update, and checkout endpoints which have much higher limits (60/minute).

Request Logging

Requests that reach an endpoint are logged — including test-mode requests — so support can answer “what did the PMS actually send us”. Retention: live-key requests are kept for 90 days, test-key requests for 30 days, after which they are deleted automatically. When contacting support, always include the requestId from the response — it is how a single call is found.

Security Notes

  • All API traffic is encrypted via HTTPS (TLS 1.2+). HTTP requests are rejected.
  • Treat the API key as a secret: send it in the Authorization header, never in a URL or a query string.
  • All guest changes from the PMS are recorded in an activity log with the actor type pms, visible alongside staff actions on the Front Desk.