Partner with EzzyRide to list your vehicle inventory on our platform. Get in touch, get onboarded, and start syncing programmatically.
To get started, reach out to our team. We'll discuss your needs, set up your partner account, configure your field mappings, and issue you a secure API key. Once onboarded, use this documentation to integrate your vehicle feed.
Contact our team to discuss a partnership. We'll walk you through the onboarding process.
Once approved, we set up your account and issue a secure API key for authentication.
Share a sample payload and we configure how your fields, values, and feature names map to ours — no changes needed on your end.
POST your vehicle data. Re-syncs update existing vehicles based on your reference ID.
Once onboarded, you'll receive an API key. Include it in every request via the X-Api-Key header.
POST https://api.ezzyride.com/partner-api/v1/sync Headers: X-Api-Key: YOUR_API_KEY Content-Type: application/json Accept: application/json
Send an array of vehicle objects. Maximum 500 vehicles per request.
{
"vehicles": [
{
"external_reference": "SBT-12345", // Required — your unique ID
"brand": "Toyota",
"model": "Land Cruiser",
"year": 2022,
"transmission": "Automatic",
"fuel_type": "Diesel",
"mileage": 45000,
"engine_cc": 2800,
"selling_price": 85000000,
"color": "White",
"status": "In Stock",
"features": "Sunroof|Leather Seats|Navigation",
"description": "Clean vehicle, low mileage…"
}
]
}| Field | Type | Required | Notes |
|---|---|---|---|
| external_reference | string | Yes | Your unique identifier for this vehicle |
| brand | string | No | Vehicle make (mapped via value mapping) |
| model | string | No | Vehicle model name |
| year | integer | No | Manufacture year |
| transmission | string | No | automatic, manual, cvt (mapped) |
| fuel_type | string | No | petrol, diesel, hybrid, electric (mapped) |
| drive_type | string | No | fwd, rwd, awd, 4wd (mapped) |
| mileage | integer | No | Odometer reading in km |
| engine_cc | integer | No | Engine displacement in cc |
| selling_price | number | No | Price in your default currency — UGX for local partners, CIF in USD/JPY etc. for international (smart parsing supported) |
| color | string | No | Exterior color |
| status | string | No | Vehicle status (mapped via value mapping) |
| features | string | No | Delimited list (pipes, commas, or semicolons). Use your own feature names — we map them during onboarding. |
| description | string | No | Free-text description |
| images | array | No | Array of publicly accessible image URLs. First image becomes primary. Downloaded on first sync only. |
| videoUrl | string | No | YouTube or video URL for the vehicle |
A successful sync returns a summary of what happened.
{
"success": true,
"data": {
"sync_id": 42,
"total_vehicles": 15,
"imported_count": 14,
"failed_count": 1,
"skipped_count": 0,
"errors": [
{ "index": 7, "message": "Missing external_reference" }
]
}
}external_reference already exists, it will be updated — not duplicated.|, commas, or semicolons). During onboarding, share a sample payload with your account manager so they can map your feature names to our system. Use your own naming — no changes needed on your end.images array with publicly accessible URLs (not behind authentication). Supported formats: JPEG, PNG, WebP. We download and store them on first sync. The first URL becomes the primary image.videoUrl field with a YouTube or video link for the vehicle listing."status": "sold" or "status": "draft" in your next sync. Sold vehicles are taken offline automatically. Draft vehicles are hidden from the public listing.Tip: We recommend syncing your full inventory daily (or whenever stock changes) to keep listings up to date. Vehicles with the same external_reference are updated, never duplicated.
Testing: During onboarding, send a small test batch (1–2 vehicles) with "status": "draft". These will not appear on the website. Your account manager will verify the data looks correct before going live.
Replace YOUR_API_KEY with the API key provided by your EzzyRide account manager.
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Http;
class VehicleSyncController extends Controller
{
public function sync()
{
$apiKey = config('services.ezzyride.api_key'); // YOUR_API_KEY
$baseUrl = 'https://api.ezzyride.com';
$vehicles = [
[
'external_reference' => 'SBT-12345',
'brand' => 'Toyota',
'model' => 'Land Cruiser',
'year' => 2022,
'transmission' => 'Automatic',
'fuel_type' => 'Diesel',
'mileage' => 45000,
'engine_cc' => 2800,
'selling_price' => 85000000,
'status' => 'In Stock',
'features' => 'Sunroof|Leather Seats|Navigation',
],
// ... more vehicles
];
$response = Http::withHeaders([
'X-Api-Key' => $apiKey,
'Content-Type' => 'application/json',
'Accept' => 'application/json',
])->post("{$baseUrl}/partner-api/v1/sync", [
'vehicles' => $vehicles,
]);
if ($response->successful()) {
$result = $response->json('data');
logger()->info('Sync complete', [
'imported' => $result['imported_count'],
'failed' => $result['failed_count'],
]);
} else {
logger()->error('Sync failed', [
'status' => $response->status(),
'body' => $response->body(),
]);
}
return $response->json();
}
} When a customer on EzzyRide requests to purchase one of your vehicles, we can notify your system automatically. During onboarding, provide a callback URL to your account manager. We will send a POST request whenever a purchase request is made.
POST https://your-system.com/api/purchase-callback Headers: Content-Type: application/json { "event": "purchase_request", "external_reference": "YOUR-STOCK-REF", "vehicle_reference": "EZR-2026-00042", "vehicle": "Toyota Land Cruiser 2022", "customer": { "name": "John Doe", "email": "john@example.com", "phone": "+256700123456" }, "application_reference": "IMP-2026-00015", "requested_at": "2026-04-05T10:30:00+03:00" }
{
"success": true,
"message": "Purchase request received",
"partner_reference": "PR-2026-0042" // optional — your internal tracking reference
} If the vehicle has already been sold, reserved, or is otherwise unavailable on your side, respond with "success": false and a reason field. We will automatically release the reservation on our end and notify our team.
{
"success": false,
"reason": "sold", // "sold", "reserved", or "unavailable"
"message": "This vehicle was sold yesterday" // optional — additional context
}What happens on rejection: The vehicle is marked as sold/reserved (matching your reason), unpublished from the website, and the import application is cancelled. Our team is notified via email to contact the customer with alternative options.
external_reference (your stock number) to identify the vehicle.reason values: sold, reserved, unavailable| Status | Meaning | Action |
|---|---|---|
| 200 | Success | Check failed_count for per-vehicle errors |
| 401 | Unauthorized | Check your API key is correct and active |
| 422 | Validation error | Check the vehicles array format |
| 429 | Too many requests | Slow down and retry after a moment |
| 500 | Server error | Contact support if the issue persists |
Our team is ready to help with integration setup, field mapping configuration, or troubleshooting sync issues.
Contact Support