API reference · Rentals

Rental cars

Search cars for rent, read a car’s calendar, and list the extras and covers a customer can add.

get/rentals/vehicles

Search cars for rent

With from and to, only cars that are free for the period are returned, each with a price quote. Add include_unavailable=true to see why a car is not free. Cars are bookable only inside the availability periods their owner (or you, for your own cars) has opened.

Query parameters

  • locationstring

    Pick-up airport code.

    Example: ABV

  • fromstring

    Pick-up, ISO 8601 with offset.

    Example: 2026-11-20T10:00:00+01:00

  • tostring

    Return, ISO 8601 with offset. At most 90 days after from.

    Example: 2026-11-23T10:00:00+01:00

  • classstring

    economy, sedan, suv, van or luxury.

  • transmissionstring

    automatic or manual.

  • fuelstring

    petrol, diesel, hybrid or electric.

  • min_seatsinteger

    Minimum number of seats.

  • min_priceinteger

    Cheapest daily price, kobo.

  • max_priceinteger

    Dearest daily price, kobo.

  • extrasstring

    Comma-separated extra codes, priced into each quote.

    Example: gps,child_seat

  • include_unavailableboolean

    true to include cars that are not free.

  • sortstring

    recommended (the default: well-reviewed cars come first, cars nobody has reviewed yet are treated as typical), rating (highest average first), price_asc, price_desc or newest.

    recommendedratingprice_ascprice_descnewest

  • pageinteger

    Page number, from 1.

    Example: 1

  • limitinteger

    Items per page (1–100). Default 20.

    Example: 20

Response 200

A page: { data: [ … ], page, totalPages, total }. Each item in data:

  • idintegerrequired
  • titlestringrequired

    e.g. “2021 Toyota Camry”.

  • makestring
  • modelstring
  • yearinteger
  • classenumrequired

    economysedansuvvanluxury

  • transmissionenum

    automaticmanual

  • fuelenum

    petroldieselhybridelectric

  • seatsinteger
  • colourstring · nullable
  • photosarray of string
  • dailyRateintegerrequired

    Price per 24 hours.

  • depositinteger

    Refundable deposit.

  • locationobjectrequired
    Show 4 fields
    • idinteger
    • codestringrequired
    • namestring
    • citystring
  • ratingobject · nullable
    Show 2 fields
    • averagenumber

      Average of 1 to 5 stars, one decimal.

    • countinteger

      Published reviews of this car.

  • availabilityAvailability
    Show 3 fields
    • availablebooleanrequired
    • reasonenum · nullable

      Why it is not available.

      too_soonalready_bookedoutside_availabilityunavailable

    • quoteQuote
      Show 9 fields
      • currencystring

        Always NGN.

      • daysintegerrequired

        Billable days: 24-hour blocks from pick-up, with 60 minutes’ grace.

      • dailyRateinteger

        Amount in kobo (₦1 = 100 kobo).

      • linesarray of QuoteLinerequired
      • listSubtotalinteger

        Before any discount.

      • discountobject · nullable
      • subtotalintegerrequired

        What the rental costs (car + extras). Revenue is split from this.

      • depositintegerrequired

        Refundable hold, never revenue.

      • totalintegerrequired

        subtotal + deposit: what is charged up front.

Errors

  • 400invalid: something in the request is wrong. The message says what.
  • 401unauthorized: the API key is missing, wrong or revoked.
  • 404not_found: no such thing, or it is not yours.
curl "https://engine-production-0004.up.railway.app/api/v1/rentals/vehicles?location=ABV&from=2026-11-20T10%3A00%3A00%2B01%3A00&to=2026-11-23T10%3A00%3A00%2B01%3A00&extras=gps%2Cchild_seat" \
  -H "Authorization: Bearer wc_test_YOUR_KEY"
Response · 200
{
  "data": [
    {
      "id": 12,
      "title": "2021 Toyota Camry",
      "make": "Toyota",
      "model": "Camry",
      "year": 2021,
      "class": "sedan",
      "transmission": "automatic",
      "fuel": "petrol",
      "seats": 5,
      "colour": "Silver",
      "photos": [
        "https://api.waca.com.ng/api/media/file/camry-1.jpg"
      ],
      "dailyRate": 4500000,
      "deposit": 8000000,
      "location": {
        "id": 1,
        "code": "ABV",
        "name": "Nnamdi Azikiwe International Airport, Abuja",
        "city": "abuja"
      },
      "availability": {
        "available": true,
        "reason": null,
        "quote": {
          "currency": "NGN",
          "days": 3,
          "dailyRate": 4500000,
          "lines": [
            {
              "code": "rental",
              "label": "Car rental",
              "quantity": 3,
              "unitAmount": 4500000,
              "amount": 13500000
            },
            {
              "code": "gps",
              "label": "GPS navigation",
              "quantity": 3,
              "unitAmount": 150000,
              "amount": 450000
            }
          ],
          "listSubtotal": 13950000,
          "discount": null,
          "subtotal": 13950000,
          "deposit": 8000000,
          "total": 21950000
        }
      }
    }
  ],
  "page": 1,
  "totalPages": 1,
  "total": 1
}
get/rentals/vehicles/{id}

Get a car

Path parameters

  • idintegerrequired

    The car’s id.

    Example: 12

Query parameters

  • fromstring

    Pick-up, to include availability and a quote.

  • tostring

    Return.

Response 200

In data:

  • idintegerrequired
  • titlestringrequired

    e.g. “2021 Toyota Camry”.

  • makestring
  • modelstring
  • yearinteger
  • classenumrequired

    economysedansuvvanluxury

  • transmissionenum

    automaticmanual

  • fuelenum

    petroldieselhybridelectric

  • seatsinteger
  • colourstring · nullable
  • photosarray of string
  • dailyRateintegerrequired

    Price per 24 hours.

  • depositinteger

    Refundable deposit.

  • locationobjectrequired
    Show 4 fields
    • idinteger
    • codestringrequired
    • namestring
    • citystring
  • ratingobject · nullable
    Show 2 fields
    • averagenumber

      Average of 1 to 5 stars, one decimal.

    • countinteger

      Published reviews of this car.

  • availabilityAvailability
    Show 3 fields
    • availablebooleanrequired
    • reasonenum · nullable

      Why it is not available.

      too_soonalready_bookedoutside_availabilityunavailable

    • quoteQuote
      Show 9 fields
      • currencystring

        Always NGN.

      • daysintegerrequired

        Billable days: 24-hour blocks from pick-up, with 60 minutes’ grace.

      • dailyRateinteger

        Amount in kobo (₦1 = 100 kobo).

      • linesarray of QuoteLinerequired
      • listSubtotalinteger

        Before any discount.

      • discountobject · nullable
      • subtotalintegerrequired

        What the rental costs (car + extras). Revenue is split from this.

      • depositintegerrequired

        Refundable hold, never revenue.

      • totalintegerrequired

        subtotal + deposit: what is charged up front.

Errors

  • 401unauthorized: the API key is missing, wrong or revoked.
  • 404not_found: no such thing, or it is not yours.
curl "https://engine-production-0004.up.railway.app/api/v1/rentals/vehicles/12" \
  -H "Authorization: Bearer wc_test_YOUR_KEY"
get/rentals/vehicles/{id}/availability

A car’s calendar

When the car can be booked, for drawing a calendar. windows are the periods the car is on offer, booked the periods already taken (never any customer details) and free what remains once the turnaround time between rentals is kept.

Path parameters

  • idintegerrequired

    The car’s id.

    Example: 12

Query parameters

  • fromstring

    Start of the range. Default now.

  • tostring

    End of the range. Default 60 days after from. At most 180 days.

Response 200

In data:

  • vehicleIdinteger
  • rangeobject
    Show 2 fields
    • fromdate-time

      ISO 8601 date-time.

    • todate-time

      ISO 8601 date-time.

  • windowsarray of object
    Show 2 fields
    • fromdate-time

      ISO 8601 date-time.

    • todate-time

      ISO 8601 date-time.

  • bookedarray of object
    Show 2 fields
    • fromdate-time

      ISO 8601 date-time.

    • todate-time

      ISO 8601 date-time.

  • freearray of object
    Show 2 fields
    • fromdate-time

      ISO 8601 date-time.

    • todate-time

      ISO 8601 date-time.

  • rulesobject
    Show 3 fields
    • minLeadMinutesinteger

      The earliest pick-up from now.

    • turnaroundMinutesinteger

      Time the car needs between two rentals.

    • maxRentalDaysinteger

Errors

  • 400invalid: something in the request is wrong. The message says what.
  • 401unauthorized: the API key is missing, wrong or revoked.
  • 404not_found: no such thing, or it is not yours.
curl "https://engine-production-0004.up.railway.app/api/v1/rentals/vehicles/12/availability" \
  -H "Authorization: Bearer wc_test_YOUR_KEY"
Response · 200
{
  "data": {
    "vehicleId": 12,
    "range": {
      "from": "2026-11-01T00:00:00.000Z",
      "to": "2026-12-01T00:00:00.000Z"
    },
    "windows": [
      {
        "from": "2026-11-01T00:00:00.000Z",
        "to": "2026-12-01T00:00:00.000Z"
      }
    ],
    "booked": [
      {
        "from": "2026-11-10T09:00:00.000Z",
        "to": "2026-11-12T09:00:00.000Z"
      }
    ],
    "free": [
      {
        "from": "2026-11-01T00:00:00.000Z",
        "to": "2026-11-10T07:30:00.000Z"
      },
      {
        "from": "2026-11-12T10:30:00.000Z",
        "to": "2026-12-01T00:00:00.000Z"
      }
    ],
    "rules": {
      "minLeadMinutes": 120,
      "turnaroundMinutes": 90,
      "maxRentalDays": 90
    }
  }
}
get/rentals/classes

Kinds of car on offer

Each class (economy, sedan, suv…) with how many cars there are and the cheapest daily price. Good for a “choose a type” screen.

Query parameters

  • locationstring

    Limit to one airport.

    Example: ABV

Response 200

A list in data. Each item:

  • classenum

    economysedansuvvanluxury

  • countinteger
  • fromDailyRateinteger

    Amount in kobo (₦1 = 100 kobo).

  • maxSeatsinteger
  • transmissionsarray of string

Errors

  • 401unauthorized: the API key is missing, wrong or revoked.
  • 404not_found: no such thing, or it is not yours.
curl "https://engine-production-0004.up.railway.app/api/v1/rentals/classes?location=ABV" \
  -H "Authorization: Bearer wc_test_YOUR_KEY"
Response · 200
{
  "data": [
    {
      "class": "economy",
      "count": 4,
      "fromDailyRate": 3000000,
      "maxSeats": 5,
      "transmissions": [
        "automatic",
        "manual"
      ]
    }
  ]
}
get/rentals/options

Extras and insurance covers

What a customer can add to a rental. Pass the codes in extras when you quote or book.

Response 200

A list in data. Each item:

  • codestringrequired

    Pass this in extras.

  • kindenum

    extrainsurance

  • namestringrequired
  • descriptionstring · nullable
  • pricingenumrequired

    per_dayflat

  • priceintegerrequired

    Amount in kobo (₦1 = 100 kobo).

Errors

  • 401unauthorized: the API key is missing, wrong or revoked.
curl "https://engine-production-0004.up.railway.app/api/v1/rentals/options" \
  -H "Authorization: Bearer wc_test_YOUR_KEY"
Response · 200
{
  "data": [
    {
      "code": "gps",
      "kind": "extra",
      "name": "GPS navigation",
      "description": "Offline maps for Nigeria",
      "pricing": "per_day",
      "price": 150000
    }
  ]
}