Integration reference
API reference
Every operation the Rocket Partner API exposes, and the complete error-code table behind
{error:{code,message,requestId,retryable}}.Authentication
POST
/api/partner/v1/oauth/tokenExchange
client_id/client_secret for a bearer token. Form-encoded, unscoped.Reference data
GET
/api/partner/v1/fleetscope: fleet:readAll published vehicles with a complete partner specification.
GET
/api/partner/v1/fleet/{vehicleCode}scope: fleet:readA single vehicle by Rocket code.
GET
/api/partner/v1/locationsscope: locations:readThe 10 active locations.
GET
/api/partner/v1/locations/{locationCode}scope: locations:readA single location by Rocket code.
GET
/api/partner/v1/ratesscope: rates:readYour own account and rate codes.
Shop & quote
POST
/api/partner/v1/availabilityscope: availability:readSearch for offerable vehicle classes at a location and date range.
POST
/api/partner/v1/quotesscope: quotes:writePrice a specific vehicle class for booking.
Reservations
POST
/api/partner/v1/reservationsscope: reservations:writeCreate a reservation. Requires
Idempotency-Key.GET
/api/partner/v1/reservationsscope: reservations:readList your own reservations.
GET
/api/partner/v1/reservations/{reservationId}scope: reservations:readA single reservation.
/api/partner/v1/reservations/{reservationId}scope: reservations:writeDeliberately answers
501 MODIFICATION_NOT_SUPPORTED. Cancel and re-book.POST
/api/partner/v1/reservations/{reservationId}/cancelscope: reservations:cancelCancel a reservation. If money has already been taken, returns
409 CANCELLATION_NEEDS_STAFF instead of cancelling — a human applies the refund policy.Reservations cannot be modified in v1. Changing dates or vehicle means re-pricing, re-checking rate-plan validity, and deciding who absorbs a price difference — a commercial question with no agreed answer yet. Rocket would rather return an honest
501 than an endpoint whose behaviour on a price change nobody has decided.Idempotency
Reservation creation requires an Idempotency-Key header, 8–200 characters, unique per attempt. An identical retry (same key, same body) replays the original response with Idempotent-Replay: true — no second booking is created. The same key with a different body returns 409 IDEMPOTENCY_CONFLICT; nothing is created. A key reused after 24 hours is treated as fresh.
Rate limits
Limits are per API client, not per IP. A 429 carries Retry-After in seconds — honour it. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset.
Error codes
Switch on code, never on message. retryable is true only when retrying the identical request may succeed.
| Code | HTTP | Retryable | Meaning |
|---|---|---|---|
| UNAUTHORIZED | 401 | No | Authentication required. |
| INVALID_CLIENT | 401 | No | Client authentication failed. |
| INVALID_TOKEN | 401 | No | The access token is missing, malformed, or expired. |
| INSUFFICIENT_SCOPE | 403 | No | The access token does not carry the scope this operation requires. |
| PARTNER_DISABLED | 403 | No | This partner account is not active. |
| VALIDATION_ERROR | 400 | No | The request body failed validation. |
| MALFORMED_JSON | 400 | No | The request body is not valid JSON. |
| REQUEST_TOO_LARGE | 413 | No | The request body exceeds the maximum size. |
| UNSUPPORTED_MEDIA_TYPE | 415 | No | Content-Type must be application/json. |
| INVALID_ACCOUNT_CODE | 400 | No | The account code is unknown or not enabled for this partner. |
| INVALID_RATE_CODE | 400 | No | The rate code is unknown, not enabled, or outside its validity window. |
| RATE_NOT_APPROVED | 409 | No | This rate plan is awaiting Rocket commercial approval and cannot be sold yet. |
| INVALID_LOCATION | 400 | No | The location code is unknown or not active. |
| LOCATION_NOT_ONE_WAY | 400 | No | One-way rental is not available between these locations. |
| INVALID_VEHICLE | 400 | No | The vehicle code is unknown or not published to partners. |
| FLEET_PROFILE_INCOMPLETE | 409 | No | This vehicle has no complete partner specification yet and cannot be sold through the API. |
| NOT_FOUND | 404 | No | The requested resource does not exist. |
| NO_AVAILABILITY | 409 | No | No vehicle class is offerable for the requested criteria. |
| QUOTE_EXPIRED | 409 | No | The quote has expired. Request a new quote. |
| QUOTE_INVALID | 400 | No | The quote reference is not valid for this partner or has been tampered with. |
| QUOTE_STALE | 409 | No | The price has changed since the quote was issued. Request a new quote. |
| IDEMPOTENCY_KEY_REQUIRED | 400 | No | This operation requires an Idempotency-Key header. |
| IDEMPOTENCY_CONFLICT | 409 | No | This Idempotency-Key was already used with a different request body. |
| IDEMPOTENT_REPLAY_IN_FLIGHT | 409 | Yes | An identical request is still being processed. Retry shortly. |
| DUPLICATE_PARTNER_REFERENCE | 409 | No | A reservation already exists for this partner reference. |
| RESERVATION_REJECTED | 422 | No | Rocket declined the reservation. Quote the requestId to support for the reason. |
| INVALID_STATE_TRANSITION | 409 | No | The reservation is not in a state that allows this operation. |
| CANCELLATION_NEEDS_STAFF | 409 | No | Money has already been taken on this reservation, so cancellation is handled by Rocket staff. The request has been recorded and Rocket has been alerted. |
| MODIFICATION_NOT_SUPPORTED | 501 | No | Reservation modification is not supported in v1. Cancel and re-book. |
| RATE_LIMITED | 429 | Yes | Rate limit exceeded. |
| API_DISABLED | 503 | Yes | The partner API is not enabled on this environment. |
| DEPENDENCY_UNAVAILABLE | 503 | Yes | A downstream dependency is temporarily unavailable. |
| INTERNAL_ERROR | 500 | Yes | Unexpected error. Quote the requestId when reporting it. |