Partner API
HTTP API for external partners — read live vehicle availability, price quotes, and push bookings that land directly in the CRM as pending reservations.
Interactive API reference (with a built-in "Try it" client): /en/api-reference.
Machine-readable spec: OpenAPI 3.1 (/api/v1/openapi.json).
Authentication
Every request must include a partner API key issued by the rental company's admin:
Authorization: Bearer dsk_<key>
Keys are scoped. Each request requires the scope shown in the endpoint table below:
| Scope | Grants |
|---|---|
read | GET endpoints — vehicles, availability, quotes, reservations |
read_write | All read endpoints + POST /v1/reservations |
full | All of the above + vehicle writes |
One key is bound to one company. Cross-tenant access is not possible — vehicle IDs and reservation IDs returned by the API belong to that company only.
Rate limit: 200 requests per minute per key. Exceeding the limit returns 429 Too Many Requests.
Base URL
https://inite.rent/api/v1
All dates are ISO 8601 strings (YYYY-MM-DD). All amounts are decimals in the company's local currency.
Vehicles
List available vehicles
Returns active vehicles (excludes maintenance and archived status). When available_from and available_to are provided, vehicles with an overlapping pending or active reservation are excluded.
Scope required: read
curl -H "Authorization: Bearer dsk_abc123" \
"https://inite.rent/api/v1/vehicles?available_from=2026-07-01&available_to=2026-07-07"
Query parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
available_from | string | No | ISO date — start of the period to check |
available_to | string | No | ISO date — end of the period to check |
status | string | No | Filter by vehicle status (active etc.) |
type | string | No | Filter by vehicleType |
limit | number | No | Max records to return (default 100, max 500) |
offset | number | No | Pagination offset (default 0) |
Response — 200:
{
"data": [
{
"id": "clv1abc000000vehicle",
"make": "Toyota",
"model": "Camry",
"category": "sedan",
"transmission": "automatic",
"seats": 5,
"bodyType": "sedan",
"shortDescription": "Comfortable mid-size sedan, ideal for city and highway",
"dailyRate": 4500,
"imageUrl": "https://inite.rent/uploads/camry-main.jpg",
"images": [
{ "url": "https://inite.rent/uploads/camry-main.jpg", "isPrimary": true, "sortOrder": 0 },
{ "url": "https://inite.rent/uploads/camry-2.jpg", "isPrimary": false, "sortOrder": 1 }
]
}
],
"count": 1,
"total": 1,
"limit": 100,
"offset": 0
}
Get a single vehicle
Scope required: read
Returns 404 if the vehicle does not belong to your company (cross-tenant isolation).
curl -H "Authorization: Bearer dsk_abc123" \
"https://inite.rent/api/v1/vehicles/clv1abc000000vehicle"
Response — 200:
{
"data": {
"id": "clv1abc000000vehicle",
"make": "Toyota",
"model": "Camry",
"category": "sedan",
"transmission": "automatic",
"seats": 5,
"bodyType": "sedan",
"shortDescription": "Comfortable mid-size sedan, ideal for city and highway",
"dailyRate": 4500,
"imageUrl": "https://inite.rent/uploads/camry-main.jpg",
"images": [
{ "url": "https://inite.rent/uploads/camry-main.jpg", "isPrimary": true, "sortOrder": 0 }
]
}
}
Response — 404:
{ "error": "Vehicle not found" }
Get vehicle availability
Returns busy date ranges (pending and active reservations) for a specific vehicle. Use this to build a calendar widget before presenting booking options to a customer.
Scope required: read
curl -H "Authorization: Bearer dsk_abc123" \
"https://inite.rent/api/v1/vehicles/clv1abc000000vehicle/availability?from=2026-07-01&to=2026-08-31"
Query parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
from | string | No | ISO date — start of the window |
to | string | No | ISO date — end of the window |
Omitting both parameters returns all future busy ranges. Cancelled and completed reservations are not included.
Response — 200:
{
"data": [
{ "startDate": "2026-07-10", "endDate": "2026-07-15" },
{ "startDate": "2026-07-22", "endDate": "2026-07-28" }
]
}
Price Quote
Returns a full price breakdown for a vehicle + date range. The company's VAT rate is applied server-side from the API key's company configuration — do not pass a VAT rate in the request body.
Scope required: read
Supports both GET (query parameters) and POST (JSON body) — useful when passing addon selections.
GET:
curl -H "Authorization: Bearer dsk_abc123" \
"https://inite.rent/api/v1/quote?vehicleId=clv1abc000000vehicle&startDate=2026-07-01&endDate=2026-07-07"
POST:
curl -X POST \
-H "Authorization: Bearer dsk_abc123" \
-H "Content-Type: application/json" \
-d '{
"vehicleId": "clv1abc000000vehicle",
"startDate": "2026-07-01",
"endDate": "2026-07-07",
"addonSelections": [
{ "addonId": "clv1addon0001", "quantity": 1 }
]
}' \
"https://inite.rent/api/v1/quote"
Parameters:
| Field | Type | Required | Description |
|---|---|---|---|
vehicleId | string | Yes | Vehicle ID from the vehicles endpoint |
startDate | string | Yes | ISO date |
endDate | string | Yes | ISO date |
addonSelections | array | No | Optional add-ons ([{ addonId, quantity }]) |
pickupLocationId | string | No | Pickup location ID (affects pickup fee) |
returnLocationId | string | No | Return location ID (affects return fee) |
Response — 200:
{
"grandTotal": 27000,
"baseTotal": 27000,
"addonsTotal": 0,
"pickupFee": 0,
"returnFee": 0,
"vatAmount": 4500,
"agentCommission": 0,
"distributableAmount": 22500,
"segments": [
{ "days": 6, "pricePerDay": 4500, "subtotal": 27000 }
],
"currency": "RUB"
}
Error — 400:
{ "error": "Missing required fields: vehicleId, startDate, endDate" }
Bookings
Create a reservation
Creates a pending reservation that immediately blocks the vehicle. The price is always recomputed server-side using the company's pricing rules — any totalAmount in the request body is ignored.
Scope required: read_write
Customer deduplication: The customer is matched by phone number within the company. If a customer with that phone already exists, the reservation is created for the existing customer record — no duplicate is created. If no match is found, a new customer record is created automatically.
curl -X POST \
-H "Authorization: Bearer dsk_abc123" \
-H "Content-Type: application/json" \
-d '{
"vehicleId": "clv1abc000000vehicle",
"startDate": "2026-07-01",
"endDate": "2026-07-07",
"customer": {
"firstName": "Ivan",
"lastName": "Petrov",
"phone": "+79001234567"
},
"externalBookingNumber": "AGG-20260701-001",
"paymentStatus": "partial",
"notes": "Customer requested airport pickup"
}' \
"https://inite.rent/api/v1/reservations"
Request body:
| Field | Type | Required | Description |
|---|---|---|---|
vehicleId | string | Yes | Vehicle ID |
startDate | string | Yes | ISO date — rental start |
endDate | string | Yes | ISO date — rental end |
customer.firstName | string | Yes | Customer first name |
customer.lastName | string | Yes | Customer last name |
customer.phone | string | Yes | Phone number — used for deduplication |
externalBookingNumber | string | No | Your internal booking reference (stored as-is, returned in GET responses) |
paymentStatus | string | No | not_paid (default), partial, or paid — records the partner's payment status label |
notes | string | No | Free-text notes attached to the reservation |
Customer fields can also be passed at the top level (not nested under customer) — both shapes are accepted.
Response — 201 Created:
{
"data": {
"id": "clv1res000000booking",
"status": "pending",
"bookingSource": "api",
"partnerId": "clv1partner000001",
"externalBookingNumber": "AGG-20260701-001"
}
}
Response — 400 Missing fields:
{
"error": "Missing required fields: vehicleId, startDate, endDate, customer.firstName, customer.lastName, customer.phone"
}
Response — 409 Conflict:
{ "error": "Vehicle is not available for the selected dates" }
The conflict check is transactional — if two requests race for the same vehicle and dates, only one succeeds and the other receives 409.
Payment mode: label vs ledger
The partner's paymentMode (configured by the rental company's admin) controls what happens with the paymentStatus you send:
label—paymentStatusis stored on the reservation as a partner-facing status label. No cash register transaction is created. This is the default for agent-type partners.ledger—paymentStatusis stored AND a confirmed incomeCashTransactionis minted in the company's cash register using the partner's configured income category. The amount is the server-computedgrandTotal. This is intended for aggregator-type partners where the payment clears through the partner's own system before the booking arrives.
The paymentMode is set by the rental company admin when registering your partner account — you cannot control it per-request.
List reservations
Returns reservations created through your partner key (and any reservations within the company matching the filters). Use this to poll for status changes after a booking is confirmed or modified by the rental company.
Scope required: read
curl -H "Authorization: Bearer dsk_abc123" \
"https://inite.rent/api/v1/reservations?status=pending&from=2026-07-01&to=2026-07-31&limit=50"
Query parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | No | Filter by reservation status (pending, active, completed, cancelled) |
from | string | No | ISO date — filter reservations with startDate >= from |
to | string | No | ISO date — filter reservations with endDate <= to |
limit | number | No | Max records (default 100, max 500) |
offset | number | No | Pagination offset (default 0) |
Response — 200:
{
"data": [
{
"id": "clv1res000000booking",
"status": "pending",
"startDate": "2026-07-01",
"endDate": "2026-07-07",
"totalAmount": 27000,
"paidAmount": 0,
"bookingSource": "api",
"partnerId": "clv1partner000001",
"externalBookingNumber": "AGG-20260701-001",
"partnerPaymentStatus": "partial",
"apiReceivedAt": "2026-06-20T10:30:00.000Z",
"customer": {
"id": "clv1cust000001",
"firstName": "Ivan",
"lastName": "Petrov",
"contact": { "phone": "+79001234567" }
},
"vehicle": {
"id": "clv1abc000000vehicle",
"make": "Toyota",
"model": "Camry"
}
}
],
"count": 1,
"total": 1,
"limit": 100,
"offset": 0
}
Error reference
| Status | Meaning |
|---|---|
| 400 | Missing or invalid request fields |
| 401 | Missing or invalid API key |
| 403 | Key does not have the required scope for this endpoint |
| 404 | Resource not found or belongs to a different company |
| 409 | Vehicle is not available for the selected dates (booking conflict) |
| 429 | Rate limit exceeded (200 req/min) |
| 500 | Server error — contact the rental company's technical team |