API reference · Rentals
Rental cars
Search cars for rent, read a car’s calendar, and list the extras and covers a customer can add.
/rentals/vehiclesSearch 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
locationstringPick-up airport code.
Example:
ABVfromstringPick-up, ISO 8601 with offset.
Example:
2026-11-20T10:00:00+01:00tostringReturn, ISO 8601 with offset. At most 90 days after
from.Example:
2026-11-23T10:00:00+01:00classstringeconomy, sedan, suv, van or luxury.
transmissionstringautomatic or manual.
fuelstringpetrol, diesel, hybrid or electric.
min_seatsintegerMinimum number of seats.
min_priceintegerCheapest daily price, kobo.
max_priceintegerDearest daily price, kobo.
extrasstringComma-separated extra codes, priced into each quote.
Example:
gps,child_seatinclude_unavailablebooleantrue to include cars that are not free.
sortstringrecommended (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_descnewestpageintegerPage number, from 1.
Example:
1limitintegerItems per page (1–100). Default 20.
Example:
20
Response 200
A page: { data: [ … ], page, totalPages, total }. Each item in data:
idintegerrequiredtitlestringrequirede.g. “2021 Toyota Camry”.
makestringmodelstringyearintegerclassenumrequiredeconomysedansuvvanluxurytransmissionenumautomaticmanualfuelenumpetroldieselhybridelectricseatsintegercolourstring · nullablephotosarray of stringdailyRateintegerrequiredPrice per 24 hours.
depositintegerRefundable deposit.
locationobjectrequiredShow 4 fields
idintegercodestringrequirednamestringcitystring
ratingobject · nullableShow 2 fields
averagenumberAverage of 1 to 5 stars, one decimal.
countintegerPublished reviews of this car.
availabilityAvailabilityShow 3 fields
availablebooleanrequiredreasonenum · nullableWhy it is not available.
too_soonalready_bookedoutside_availabilityunavailablequoteQuoteShow 9 fields
currencystringAlways NGN.
daysintegerrequiredBillable days: 24-hour blocks from pick-up, with 60 minutes’ grace.
dailyRateintegerAmount in kobo (₦1 = 100 kobo).
linesarray of QuoteLinerequiredlistSubtotalintegerBefore any discount.
discountobject · nullablesubtotalintegerrequiredWhat the rental costs (car + extras). Revenue is split from this.
depositintegerrequiredRefundable hold, never revenue.
totalintegerrequiredsubtotal + 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"{
"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
}/rentals/vehicles/{id}Get a car
Path parameters
idintegerrequiredThe car’s id.
Example:
12
Query parameters
fromstringPick-up, to include availability and a quote.
tostringReturn.
Response 200
In data:
idintegerrequiredtitlestringrequirede.g. “2021 Toyota Camry”.
makestringmodelstringyearintegerclassenumrequiredeconomysedansuvvanluxurytransmissionenumautomaticmanualfuelenumpetroldieselhybridelectricseatsintegercolourstring · nullablephotosarray of stringdailyRateintegerrequiredPrice per 24 hours.
depositintegerRefundable deposit.
locationobjectrequiredShow 4 fields
idintegercodestringrequirednamestringcitystring
ratingobject · nullableShow 2 fields
averagenumberAverage of 1 to 5 stars, one decimal.
countintegerPublished reviews of this car.
availabilityAvailabilityShow 3 fields
availablebooleanrequiredreasonenum · nullableWhy it is not available.
too_soonalready_bookedoutside_availabilityunavailablequoteQuoteShow 9 fields
currencystringAlways NGN.
daysintegerrequiredBillable days: 24-hour blocks from pick-up, with 60 minutes’ grace.
dailyRateintegerAmount in kobo (₦1 = 100 kobo).
linesarray of QuoteLinerequiredlistSubtotalintegerBefore any discount.
discountobject · nullablesubtotalintegerrequiredWhat the rental costs (car + extras). Revenue is split from this.
depositintegerrequiredRefundable hold, never revenue.
totalintegerrequiredsubtotal + 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"/rentals/vehicles/{id}/availabilityA 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
idintegerrequiredThe car’s id.
Example:
12
Query parameters
fromstringStart of the range. Default now.
tostringEnd of the range. Default 60 days after
from. At most 180 days.
Response 200
In data:
vehicleIdintegerrangeobjectShow 2 fields
fromdate-timeISO 8601 date-time.
todate-timeISO 8601 date-time.
windowsarray of objectShow 2 fields
fromdate-timeISO 8601 date-time.
todate-timeISO 8601 date-time.
bookedarray of objectShow 2 fields
fromdate-timeISO 8601 date-time.
todate-timeISO 8601 date-time.
freearray of objectShow 2 fields
fromdate-timeISO 8601 date-time.
todate-timeISO 8601 date-time.
rulesobjectShow 3 fields
minLeadMinutesintegerThe earliest pick-up from now.
turnaroundMinutesintegerTime 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"{
"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
}
}
}/rentals/classesKinds 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
locationstringLimit to one airport.
Example:
ABV
Response 200
A list in data. Each item:
classenumeconomysedansuvvanluxurycountintegerfromDailyRateintegerAmount in kobo (₦1 = 100 kobo).
maxSeatsintegertransmissionsarray 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"{
"data": [
{
"class": "economy",
"count": 4,
"fromDailyRate": 3000000,
"maxSeats": 5,
"transmissions": [
"automatic",
"manual"
]
}
]
}/rentals/optionsExtras 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:
codestringrequiredPass this in
extras.kindenumextrainsurancenamestringrequireddescriptionstring · nullablepricingenumrequiredper_dayflatpriceintegerrequiredAmount 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"{
"data": [
{
"code": "gps",
"kind": "extra",
"name": "GPS navigation",
"description": "Offline maps for Nigeria",
"pricing": "per_day",
"price": 150000
}
]
}