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:

ScopeGrants
readGET endpoints — vehicles, availability, quotes, reservations
read_writeAll read endpoints + POST /v1/reservations
fullAll 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:

ParameterTypeRequiredDescription
available_fromstringNoISO date — start of the period to check
available_tostringNoISO date — end of the period to check
statusstringNoFilter by vehicle status (active etc.)
typestringNoFilter by vehicleType
limitnumberNoMax records to return (default 100, max 500)
offsetnumberNoPagination 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:

ParameterTypeRequiredDescription
fromstringNoISO date — start of the window
tostringNoISO 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:

FieldTypeRequiredDescription
vehicleIdstringYesVehicle ID from the vehicles endpoint
startDatestringYesISO date
endDatestringYesISO date
addonSelectionsarrayNoOptional add-ons ([{ addonId, quantity }])
pickupLocationIdstringNoPickup location ID (affects pickup fee)
returnLocationIdstringNoReturn 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:

FieldTypeRequiredDescription
vehicleIdstringYesVehicle ID
startDatestringYesISO date — rental start
endDatestringYesISO date — rental end
customer.firstNamestringYesCustomer first name
customer.lastNamestringYesCustomer last name
customer.phonestringYesPhone number — used for deduplication
externalBookingNumberstringNoYour internal booking reference (stored as-is, returned in GET responses)
paymentStatusstringNonot_paid (default), partial, or paid — records the partner's payment status label
notesstringNoFree-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:

  • labelpaymentStatus is stored on the reservation as a partner-facing status label. No cash register transaction is created. This is the default for agent-type partners.
  • ledgerpaymentStatus is stored AND a confirmed income CashTransaction is minted in the company's cash register using the partner's configured income category. The amount is the server-computed grandTotal. 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:

ParameterTypeRequiredDescription
statusstringNoFilter by reservation status (pending, active, completed, cancelled)
fromstringNoISO date — filter reservations with startDate >= from
tostringNoISO date — filter reservations with endDate <= to
limitnumberNoMax records (default 100, max 500)
offsetnumberNoPagination 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

StatusMeaning
400Missing or invalid request fields
401Missing or invalid API key
403Key does not have the required scope for this endpoint
404Resource not found or belongs to a different company
409Vehicle is not available for the selected dates (booking conflict)
429Rate limit exceeded (200 req/min)
500Server error — contact the rental company's technical team