Get started

Quickstart

Six calls from nothing to a confirmed booking, all in the sandbox. No real money moves and no real car is blocked.

1. Get a test key

Create a business account, then open API keys in your dashboard and create a test key. It starts with wc_test_ and works straight away, even before we have approved your business. Keep it on your server: it must never appear in a browser or a mobile app.

Keep it in an environment variable
export WACA_KEY="wc_test_…"

2. Check it works

Ask the API who you are. You get your business, your plan and what this key may do.

curl "https://engine-production-0004.up.railway.app/api/v1/me" \
  -H "Authorization: Bearer wc_test_YOUR_KEY"

Search the cars that are free for your customer’s dates. Each car comes with an exact price quote. Times are Nigerian time (UTC+1): send the offset.

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"

Nothing came back?

Cars can be booked only inside the periods their owner has opened, at least 2 hours from now. Try dates a week away, or add include_unavailable=true to see why a car is not free.

4. Create a booking

Book the car you picked. We hold it for about 20 minutes and return a checkoutUrl: send your customer there to pay. Add an Idempotency-Key so a retry can never create a second booking.

curl -X POST "https://engine-production-0004.up.railway.app/api/v1/rentals/bookings" \
  -H "Authorization: Bearer wc_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6b2f7c3e-6f0a-4a3e-9d1c-1c2b6f1a9e55" \
  -d '{
  "vehicleId": 12,
  "from": "2026-11-20T10:00:00+01:00",
  "to": "2026-11-23T10:00:00+01:00",
  "pickupLocation": "ABV",
  "dropoffLocation": "ABV",
  "extras": [
    "gps"
  ],
  "customer": {
    "name": "Chidi Obi",
    "email": "chidi@example.com",
    "phone": "+2348031234567",
    "licenseNumber": "ABC12345",
    "licenseExpiry": "2029-05-01T00:00:00+01:00"
  },
  "flightNumber": "W3123",
  "metadata": {
    "order_id": "A-1001"
  },
  "returnUrl": "https://shop.example/booking"
}'

Note the reference in the answer (for example WC-7KQ2M9XA).

5. Pay in the sandbox

In real life the customer pays at the checkout link and the booking confirms by itself. In the sandbox you can play that part:

curl -X POST "https://engine-production-0004.up.railway.app/api/v1/sandbox/bookings/WC-7KQ2M9XA/pay" \
  -H "Authorization: Bearer wc_test_YOUR_KEY"

The booking is now confirmed. Call the same endpoint with activate (the customer collects the car) and complete (the car is back) to move it on.

6. Follow what happens

Every step raised an event. Read them, newest first, with no setup:

curl "https://engine-production-0004.up.railway.app/api/v1/events" \
  -H "Authorization: Bearer wc_test_YOUR_KEY"

Or have us push them to your server as signed webhooks, which is what you will want in production.

Where next

  1. Read Conventions: money is in kobo, lists are paged, and writes are idempotent.
  2. Follow the guide for what you are building: a marketplace, your own fleet or car sales.
  3. Set up webhooks and verify their signature.
  4. Work through the go-live checklist.