API reference · Sales
Cars for sale
Search cars for sale, reserve one with a deposit, and follow the purchase through escrow.
/sales/vehiclesSearch cars for sale
Query parameters
makestringBrand (partial match).
Example:
toyotamodelstringModel (partial match).
citystringabuja or lagos.
classstringeconomy, sedan, suv, van or luxury.
yearMinintegerOldest model year.
yearMaxintegerNewest model year.
priceMinintegerLowest price, kobo.
priceMaxintegerHighest price, kobo.
sortstringprice_asc (default), price_desc or newest.
price_ascprice_descnewestpageintegerPage number.
limitintegerItems per page (1–50).
Response 200
A page: { data: [ … ], page, totalPages, total }. Each item in data:
idintegerrequiredPass as
listingIdto reserve.vehicleVehiclerequiredShow 15 fields
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.
priceintegerrequiredAmount in kobo (₦1 = 100 kobo).
reservationDepositintegerWhat the buyer pays now to hold the car.
mileageKmintegerconditionenumexcellentgoodfairneeds_workaccidentHistoryenumnoneminormajororiginenumnigerian_usedforeign_used_duty_paidnewvinstringChassis number.
descriptionstring · nullablestatusstring
Errors
401unauthorized: the API key is missing, wrong or revoked.
curl "https://engine-production-0004.up.railway.app/api/v1/sales/vehicles?make=toyota" \
-H "Authorization: Bearer wc_test_YOUR_KEY"/sales/vehicles/{id}Get a car for sale
Path parameters
idintegerrequiredThe listing id.
Example:
31
Response 200
In data:
idintegerrequiredPass as
listingIdto reserve.vehicleVehiclerequiredShow 15 fields
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.
priceintegerrequiredAmount in kobo (₦1 = 100 kobo).
reservationDepositintegerWhat the buyer pays now to hold the car.
mileageKmintegerconditionenumexcellentgoodfairneeds_workaccidentHistoryenumnoneminormajororiginenumnigerian_usedforeign_used_duty_paidnewvinstringChassis number.
descriptionstring · nullablestatusstring
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/sales/vehicles/31" \
-H "Authorization: Bearer wc_test_YOUR_KEY"/sales/ordersReserve a car
Reserves the car with a deposit (default 2% of the price, at least ₦50,000) and returns the deposit checkoutUrl. Only one buyer can hold a car at a time. The buyer pays the balance by bank transfer into escrow; the seller is paid only after the car and papers are handed over.
Headers
Idempotency-KeystringA unique value you choose (a UUID). Repeat the request with the same key and you get the same result, not a second booking.
Example:
6b2f7c3e-6f0a-4a3e-9d1c-1c2b6f1a9e55
Request body · application/json
listingIdintegerrequiredbuyerobjectrequiredShow 4 fields
namestringrequiredemailstringrequiredphonestringrequiredidNumberstringOptional: NIN or passport, for the transfer of ownership.
metadataobjectreturnUrlstring
Response 201
In data:
referencestringrequirede.g. WS-7KQ2M9XA.
statusenumrequiredpending_paymentreservedpaidcompletedcancelledexpiredtestbooleanvehicleVehiclerequiredShow 15 fields
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.
buyerCustomerShow 3 fields
namestringrequiredemailstringrequiredphonestringrequiredInternational format preferred, e.g. +2348031234567.
priceobjectrequiredShow 5 fields
currencystringtotalintegerAmount in kobo (₦1 = 100 kobo).
depositintegerAmount in kobo (₦1 = 100 kobo).
balanceDueintegerAmount in kobo (₦1 = 100 kobo).
refundedintegerAmount in kobo (₦1 = 100 kobo).
commissionintegerYour referral commission (businesses only).
holdExpiresAtdate-time · nullableISO 8601 date-time.
reservedUntildate-time · nullableWhile reserved: when the hold ends.
metadataobjectcreatedAtdate-timeISO 8601 date-time.
checkoutUrlstringThe deposit payment link (while unpaid).
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.409conflict or unavailable: not possible in the current state, or the car was just taken.
curl -X POST "https://engine-production-0004.up.railway.app/api/v1/sales/orders" \
-H "Authorization: Bearer wc_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 6b2f7c3e-6f0a-4a3e-9d1c-1c2b6f1a9e55" \
-d '{
"listingId": 31,
"buyer": {
"name": "Bola Ade",
"email": "bola@example.com",
"phone": "+2348066660002"
},
"metadata": {
"cart": "C-77"
}
}'{
"data": {
"reference": "WS-4HZ8P2LD",
"status": "pending_payment",
"test": false,
"vehicle": {
"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"
}
},
"buyer": {
"name": "Bola Ade",
"email": "bola@example.com",
"phone": "+2348066660002"
},
"price": {
"currency": "NGN",
"total": 800000000,
"deposit": 5000000,
"balanceDue": 795000000,
"refunded": 0
},
"commission": 1200000,
"holdExpiresAt": null,
"reservedUntil": "2026-11-08T12:00:00.000Z",
"metadata": {
"cart": "C-77"
},
"createdAt": "2026-11-01T12:00:00.000Z",
"checkoutUrl": "https://checkout.paystack.com/xyz789"
}
}/sales/ordersList orders
Query parameters
statusstringpending_payment, reserved, paid, completed, cancelled or expired.
listing_idintegerOnly this listing.
emailstringThe buyer’s email.
pageintegerPage 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:
referencestringrequirede.g. WS-7KQ2M9XA.
statusenumrequiredpending_paymentreservedpaidcompletedcancelledexpiredtestbooleanvehicleVehiclerequiredShow 15 fields
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.
buyerCustomerShow 3 fields
namestringrequiredemailstringrequiredphonestringrequiredInternational format preferred, e.g. +2348031234567.
priceobjectrequiredShow 5 fields
currencystringtotalintegerAmount in kobo (₦1 = 100 kobo).
depositintegerAmount in kobo (₦1 = 100 kobo).
balanceDueintegerAmount in kobo (₦1 = 100 kobo).
refundedintegerAmount in kobo (₦1 = 100 kobo).
commissionintegerYour referral commission (businesses only).
holdExpiresAtdate-time · nullableISO 8601 date-time.
reservedUntildate-time · nullableWhile reserved: when the hold ends.
metadataobjectcreatedAtdate-timeISO 8601 date-time.
checkoutUrlstringThe deposit payment link (while unpaid).
Errors
401unauthorized: the API key is missing, wrong or revoked.
curl "https://engine-production-0004.up.railway.app/api/v1/sales/orders?page=1&limit=20" \
-H "Authorization: Bearer wc_test_YOUR_KEY"/sales/orders/{reference}Get an order
Status: pending_payment → reserved (deposit paid, car held about 7 days) → paid (balance received into escrow) → completed (car and papers handed over), or cancelled / expired.
Path parameters
referencestringrequiredThe order reference.
Example:
WS-4HZ8P2LD
Response 200
In data:
referencestringrequirede.g. WS-7KQ2M9XA.
statusenumrequiredpending_paymentreservedpaidcompletedcancelledexpiredtestbooleanvehicleVehiclerequiredShow 15 fields
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.
buyerCustomerShow 3 fields
namestringrequiredemailstringrequiredphonestringrequiredInternational format preferred, e.g. +2348031234567.
priceobjectrequiredShow 5 fields
currencystringtotalintegerAmount in kobo (₦1 = 100 kobo).
depositintegerAmount in kobo (₦1 = 100 kobo).
balanceDueintegerAmount in kobo (₦1 = 100 kobo).
refundedintegerAmount in kobo (₦1 = 100 kobo).
commissionintegerYour referral commission (businesses only).
holdExpiresAtdate-time · nullableISO 8601 date-time.
reservedUntildate-time · nullableWhile reserved: when the hold ends.
metadataobjectcreatedAtdate-timeISO 8601 date-time.
checkoutUrlstringThe deposit payment link (while unpaid).
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/sales/orders/WS-4HZ8P2LD" \
-H "Authorization: Bearer wc_test_YOUR_KEY"{
"data": {
"reference": "WS-4HZ8P2LD",
"status": "reserved",
"test": false,
"vehicle": {
"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"
}
},
"buyer": {
"name": "Bola Ade",
"email": "bola@example.com",
"phone": "+2348066660002"
},
"price": {
"currency": "NGN",
"total": 800000000,
"deposit": 5000000,
"balanceDue": 795000000,
"refunded": 0
},
"commission": 1200000,
"holdExpiresAt": null,
"reservedUntil": "2026-11-08T12:00:00.000Z",
"metadata": {
"cart": "C-77"
},
"createdAt": "2026-11-01T12:00:00.000Z"
}
}/sales/orders/{reference}/cancelCancel an order
A buyer can withdraw before paying. After the deposit, our support team decides the refund: you get a 409.
Path parameters
referencestringrequiredThe order reference.
Example:
WS-4HZ8P2LD
Response 200
In data:
referencestringrequirede.g. WS-7KQ2M9XA.
statusenumrequiredpending_paymentreservedpaidcompletedcancelledexpiredtestbooleanvehicleVehiclerequiredShow 15 fields
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.
buyerCustomerShow 3 fields
namestringrequiredemailstringrequiredphonestringrequiredInternational format preferred, e.g. +2348031234567.
priceobjectrequiredShow 5 fields
currencystringtotalintegerAmount in kobo (₦1 = 100 kobo).
depositintegerAmount in kobo (₦1 = 100 kobo).
balanceDueintegerAmount in kobo (₦1 = 100 kobo).
refundedintegerAmount in kobo (₦1 = 100 kobo).
commissionintegerYour referral commission (businesses only).
holdExpiresAtdate-time · nullableISO 8601 date-time.
reservedUntildate-time · nullableWhile reserved: when the hold ends.
metadataobjectcreatedAtdate-timeISO 8601 date-time.
checkoutUrlstringThe deposit payment link (while unpaid).
Errors
401unauthorized: the API key is missing, wrong or revoked.404not_found: no such thing, or it is not yours.409conflict or unavailable: not possible in the current state, or the car was just taken.
curl -X POST "https://engine-production-0004.up.railway.app/api/v1/sales/orders/WS-4HZ8P2LD/cancel" \
-H "Authorization: Bearer wc_test_YOUR_KEY"