Slider API
Add on-demand delivery to your website or app. Send orders to Slider's rider network through a simple REST API — your brand, your customer, our delivery.
The Slider API lets any business create deliveries programmatically. When your customer places an order on your platform, send it to Slider and our rider network handles pickup, delivery, and live tracking. Orders appear in your Slider dashboard, and you manage everything through your account wallet.
API Base URLs
| Environment | Base URL |
|---|---|
| Sandbox | https://api-sandbox.slider-app.com/v1 |
| Production | https://api.slider-app.com/v1 |
Authentication
Every request must include your API key in the X-Slider-Key header. You can get your API key from your Slider dashboard under API Credentials → API Keys.
X-Slider-Key:sk_live_your_api_key_hereQuick Start Guide
Follow these steps to integrate Slider into your platform. Start by testing in the sandbox environment, then move to production.
Step 1: Create Sandbox Accounts
Before creating test deliveries, you must create sandbox customer accounts in the Partner Dashboard.
- Log in to the Partner Dashboard
- Navigate to the Customers page
- Click "Create Customer"
- Copy the generated Customer Account ID — this is your
account_idfor API requests
account_id is required for every delivery. If you support multiple businesses, create separate accounts for each one.Step 2: Configure Webhooks (Optional)
Set up webhook callbacks to receive real-time delivery status updates.
- Go to Partner Applications
- Create or edit your application
- Provide your webhook URL for staging and production
- (Optional) Add authentication headers and tokens if needed. Leave empty if authentication is not required.
Step 3: Test in Sandbox
Use the Partner Dashboard to test the complete delivery workflow before integrating API calls.
- Log in to the Partner Dashboard
- Navigate to "Create Test Case"
- Create a delivery and use your sandbox
account_id - Accept the delivery as a test driver in the dashboard
- Progress it through each status to test webhooks
- Test cancellation with the "Cancel" button
Step 4: Integrate API Endpoints
Once sandbox testing is complete, integrate these key endpoints into your backend:
| Endpoint | Purpose |
|---|---|
POST /deliveries/fare | Calculate delivery price before creating order |
POST /deliveries | Create a delivery order |
GET /deliveries/{order_number} | Track delivery status |
DELETE /deliveries/{order_number} | Cancel a delivery |
Step 5: Request Production Access
Once your staging integration is complete and tested, request production access:
- Submit a Production Access request through the dashboard
- The Slider team reviews your integration
- Upon approval, production API keys and accounts are created
- Production accounts automatically appear in your dashboard
- Switch your integration to use production API endpoints
Create a Delivery
Creates a new delivery order. Slider assigns the nearest available rider and begins pickup. Returns a delivery object with a tracking ID.
Example request
# Create a delivery — rider is assigned instantly curl -X POST https://api.slider-app.com/v1/deliveries \ -H "X-Slider-Key: sk_live_your_api_key" \ -H "Content-Type: application/json" \ -d '{ "order_id": "12345678", "account_id": "67aad895d28efa2a4aa35263", "display_order_id": "SDNN-9970", "vehicle_type": "bike", "schedule_at": "2026-07-28T16:31:36Z", "driver_tip": 0, "pickup": { "address": "12 Al Feehah St - Mohamed Bin Zayed City - Abu Dhabi", "latitude": 25.2048, "longitude": 55.2708, "directions": "Shop 12, Ground Floor, Marina Mall", "contact_number": "+971501234567" }, "dropoff": { "address": "Dalma Mall", "latitude": 25.1972, "longitude": 55.2744, "directions": "Villa 7, Street 3, Jumeirah 1", "contact_number": "+971507654321" }, "payment_on_delivery": { "type": "cash", "amount": 120.00 } }'
Example response
{
"order_number": 61841588,
"order_id": "12345678",
"status": "searching_rider",
"vehicle_type": "bike",
"fare": 10,
"currency": "AED",
"distance_km": 1.67,
"tracking_url": "https://slider-app.com/t/90fo-hzv6.aPtdkiDcKW89",
"created_at": "2026-08-03T08:47:12+00:00"
}Parameters
Top-level fields
| Field | Type | Required | Description |
|---|---|---|---|
order_id | string | required | Unique order ID from your client server. Used for reference and reconciliation. Will be included in webhook payloads. |
account_id | string | required | The unique identifier of your client account in Slider. Found in your dashboard under Customer Accounts → Account ID. |
display_order_id | string | optional | A human-readable reference number displayed to the rider and customer (e.g. "SDNN-9970"). Useful for logistics tracking and driver communication at pickup/dropoff. |
vehicle_type | string | required | Vehicle for this delivery. Options: "bike", "car", or "any". See Vehicle Selection section. |
driver_tip | number | optional | Tip amount in AED for the rider. Adds to fare and incentivizes faster delivery. Default: 0. |
schedule_at | string / null | optional | ISO 8601 timestamp (UTC) for scheduled dispatch. Null or omitted = immediate. Minimum 30 minutes in the future. See Scheduling section. |
Pickup object required
| Field | Type | Required | Description |
|---|---|---|---|
latitude | number | required | Pickup latitude (decimal degrees) |
longitude | number | required | Pickup longitude (decimal degrees) |
directions | string | optional | Text directions for the rider — building, floor, unit, landmark |
contact_number | string | required | Phone number at pickup, E.164 format (e.g. +9715XXXXXXXX) |
Dropoff object required
| Field | Type | Required | Description |
|---|---|---|---|
latitude | number | required | Drop-off latitude (decimal degrees) |
longitude | number | required | Drop-off longitude (decimal degrees) |
directions | string | optional | Text directions for the rider — building, floor, unit, landmark |
contact_number | string | required | Phone number at drop-off, E.164 format |
Calculate Fare
Get delivery pricing before creating an order. The fare is calculated based on the current route from Google Maps and real-time traffic conditions.
How pricing works
Slider uses Google Maps to determine the optimal delivery route between pickup and dropoff. Pricing is calculated based on:
- Distance & duration: Computed from the best route returned by Google Maps
- Real-time traffic: Route and duration vary based on current traffic conditions
- Dynamic pricing: The same delivery may have different fares at different times due to traffic variations
- Vehicle type: Bike vs. car pricing, and vehicle availability (e.g., bike unavailable for long distances or intercity deliveries)
- Account-based pricing: Eligible accounts receive special negotiated rates
Example: A delivery requesting pickup and dropoff coordinates will return different fares on Monday morning vs. Friday evening due to traffic differences affecting route duration.
Example request
# Calculate fare for pickup and dropoff coordinates curl -X POST https://api.slider-app.com/v1/deliveries/fare \ -H "X-Slider-Key: sk_live_your_api_key" \ -H "Content-Type: application/json" \ -d '{ "account_id": "e13f3fe5-fec3-44a3-b1ba-2a5e03b37a0a", "pickup": { "latitude": 25.1491242, "longitude": 55.2461326 }, "delivery": { "latitude": 24.8970199, "longitude": 55.1596592 } }'
Example response
{
"distance_km": 48.05,
"duration_minutes": 42,
"vehicles": [
{
"vehicle_type": "bike",
"is_available": false,
"unavailable_reason": "Delivery distance exceeds allowed limit for bike.",
"delivery_fee": null
},
{
"vehicle_type": "car",
"is_available": true,
"unavailable_reason": null,
"delivery_fee": 52.24
}
]
}Request fields
| Field | Type | Required | Description |
|---|---|---|---|
account_id | string | required | The unique identifier of your client account in Slider. Used to determine special pricing for eligible accounts. |
pickup.latitude | number | required | Pickup latitude (decimal degrees) |
pickup.longitude | number | required | Pickup longitude (decimal degrees) |
delivery.latitude | number | required | Dropoff latitude (decimal degrees) |
delivery.longitude | number | required | Dropoff longitude (decimal degrees) |
Response fields
| Field | Type | Description |
|---|---|---|
distance_km | number | Distance in kilometers (Google Maps route) |
duration_minutes | number | Estimated delivery time in minutes (based on current traffic) |
vehicles | array | Array of available vehicle options with pricing |
vehicles[].vehicle_type | string | "bike" or "car" |
vehicles[].is_available | boolean | Whether this vehicle is available for the route. Bike may be unavailable if distance is too long or delivery is intercity. |
vehicles[].unavailable_reason | string / null | Human-readable reason why vehicle is unavailable (null if available) |
vehicles[].delivery_fee | number / null | Delivery cost in AED. Includes special account pricing if applicable. Null if vehicle unavailable. |
Vehicle Selection
The vehicle_type field controls which vehicle handles the delivery. Three options:
| Value | Description |
|---|---|
"bike" | Motorbike. Faster in traffic, lower cost. Maximum distance 35 km. |
"car" | Car. For larger items or longer distances. No distance cap. |
"any" | Let Slider choose the best available vehicle based on distance, item, and supply. Recommended default. |
"vehicle_type": "any" and Slider optimises the assignment for speed and cost. Use "bike" or "car" only when the item requires a specific vehicle.Scheduling
By default, deliveries are dispatched immediately. To schedule a delivery for a future time, set the schedule_at field to an ISO 8601 timestamp in UTC. Leave it null (or omit it) for instant dispatch.
// Immediate delivery "schedule_at": null // Scheduled for a specific time (ISO 8601, UTC) "schedule_at": "2026-07-28T16:31:36Z"
| Field | Type | Required | Description |
|---|---|---|---|
schedule_at | string / null | optional | ISO 8601 timestamp in UTC (e.g. "2026-07-28T16:31:36Z") for future dispatch. Null or omitted = immediate. Must be at least 30 minutes in the future. |
Cash / Card on Delivery
If your customer pays on delivery rather than prepaying on your site, use the payment_on_delivery object. The rider collects the amount and it is reconciled to your wallet. Omit this object entirely if the customer has already paid you online.
| Field | Type | Required | Description |
|---|---|---|---|
type | string | required | Either "cash" or "card" |
amount | number | required | Amount the rider collects from the customer, in AED |
• Cash on delivery — maximum AED 350 per order
• Card on delivery — maximum AED 500 per order
Requests above these limits are rejected with a
422 error.// Cash on delivery, rider collects AED 120 "payment_on_delivery": { "type": "cash", "amount": 120.00 } // Card on delivery, rider collects AED 480 via card machine "payment_on_delivery": { "type": "card", "amount": 480.00 } // Customer already paid online — omit the object entirely
Response
The API returns a delivery object with status, vehicle assignment, and tracking information.
Success Response (200 OK)
{
"order_number": 61841588,
"order_id": "12345684",
"status": "searching_rider",
"vehicle_type": "bike",
"fare": 10,
"currency": "AED",
"distance_km": 1.67,
"tracking_url": "https://slider-app.com/t/90fo-hzv6.aPtdkiDcKW89",
"created_at": "2026-08-03T08:47:12+00:00"
}| Field | Type | Description |
|---|---|---|
order_number | number | Internal order number assigned by Slider. Used for tracking. |
order_id | string | The order ID you provided in the request. Used for reconciliation. |
status | string | Current delivery status. Initial value: "searching_rider". Other values: "rider_assigned", "heading_to_pickup", "at_pickup", "picked_up", "in_transit", "delivered", "cancelled". |
vehicle_type | string | Vehicle assigned for this delivery: "bike" or "car". |
fare | number | Delivery fare in AED. |
currency | string | Currency code. Always "AED". |
distance_km | number | Total delivery distance in kilometers. |
tracking_url | string | Public tracking URL. Share with customer to monitor delivery progress in real-time. |
created_at | string | ISO 8601 timestamp (UTC) when the delivery was created. |
Get Delivery Status
Retrieve the current status, driver location, and delivery details for an order.
Example response
{
"order_number": 20969271,
"order_id": "12345685",
"status": "in_transit",
"order_time": "2026-08-03T08:58:03+00:00",
"vehicle_type": "bike",
"fare": 10,
"distance": 1.67,
"driver": {
"name": "Slider hero 2",
"phone_number": "+971588496496",
"latitude": 24.33163521,
"longitude": 54.5171723,
"vehicle": "Car"
},
"tracking_url": "https://slider-app.com/t/90fp-hzv8.SYhReGPNVtD5"
}Response fields
| Field | Type | Description |
|---|---|---|
order_number | number | Internal order number assigned by Slider |
order_id | string | Your order reference ID from the creation request |
status | string | Current delivery status (see Status values below) |
order_time | string | ISO 8601 timestamp (UTC) of when delivery should/did start. Scheduled time if provided, otherwise order creation time. |
vehicle_type | string | Vehicle assigned: "bike" or "car" |
fare | number | Delivery fare in AED |
distance | number | Total delivery distance in kilometers |
driver | object | Driver information with name, phone_number,latitude, longitude, and vehicle. Null if no driver assigned yet. |
tracking_url | string | Public tracking URL for customer real-time updates |
Status values
searching_riderrider_assignedheading_to_pickupat_pickuppicked_upin_transitdeliveredreturn_trip_startedcancelled
Cancel Delivery
Cancel a delivery order. Only pending deliveries can be cancelled. Completed or already cancelled orders cannot be modified.
Example response
{
"order_number": 20969271,
"order_id": "12345685",
"status": "cancelled",
"cancelled_at": "2026-08-03T10:30:00+00:00"
}Webhooks
Instead of polling for status, register a webhook URL in your dashboard to receive real-time updates. Slider sends a POST request to your URL every time a delivery's status changes.
Webhook authentication
Slider uses a token-based authentication mechanism for webhook requests. You can optionally secure your webhook endpoints with custom authentication.
| Field | Description |
|---|---|
Webhook URL | The HTTPS endpoint where Slider will send webhook notifications. Required. |
Token (Optional) | A secret token used for authentication. If provided, Slider will include it in the specified header. Can be any string value. |
Token Header | The HTTP header name where Slider will send your token. Common examples: Authorization, X-API-Key,X-Webhook-Token. Only used if token is provided. |
Webhook payload
{
"order_number": 20969271,
"order_id": "12345685",
"status": "rider_assigned",
"estimated_delivery_time": 15,
"tracking_link": "https://slider-app.com/t/4osd-9ary.lO_6-WOHpCmg",
"driver_info": {
"name": "Slider Driver",
"phone_number": "+971502012345",
"latitude": 24.33163521,
"longitude": 54.5171723,
"vehicle": "Car"
},
"timestamp": "2026-08-03T09:15:00+00:00"
}Webhook fields
| Field | Type | Description |
|---|---|---|
order_number | number | Internal order number assigned by Slider |
order_id | string | Your order reference ID from the creation request |
status | string | Current delivery status: searching_rider, rider_assigned, heading_to_pickup, at_pickup, picked_up, in_transit, delivered, return_trip_started, cancelled |
estimated_delivery_time | number | Estimated minutes until delivery (null if not applicable) |
tracking_link | string | Public tracking URL for customer real-time updates |
driver_info | object | Driver details: name, phone_number, latitude, longitude, vehicle. Null if no driver assigned. |
timestamp | string | ISO 8601 timestamp (UTC) when webhook was triggered |
Webhook events
Webhooks are sent for the following status changes:
| Event | Description |
|---|---|
rider_assigned | A rider has been assigned to the delivery |
heading_to_pickup | Rider is heading to pickup location |
at_pickup | Rider arrived at pickup location |
picked_up | Order picked up from location |
in_transit | Order in transit to dropoff location |
delivered | Order successfully delivered |
return_trip_started | Rider returning item to pickup (failed delivery) |
cancelled | Delivery cancelled |
2xx status within a few seconds. Queue any slow work on your side — Slider retries deliveries that do not acknowledge.Limits & Rules
| Rule | Limit |
|---|---|
| Bike maximum distance | 35 km — requests beyond this with "bike" are rejected. Use "car" or "any". |
| Car maximum distance | No fixed cap |
| Cash on delivery maximum | AED 350 per order |
| Card on delivery maximum | AED 500 per order |
| Scheduling minimum lead time | 30 minutes in the future |
| Wallet | Must hold sufficient balance to cover the fare at creation |
Error Codes
| Status Code | Error | Description |
|---|---|---|
400 | Bad Request | Missing required field or invalid format (e.g., bad coordinates) |
401 | Unauthorized | Invalid or missing X-Slider-Key header |
402 | Payment Required | Insufficient wallet balance |
403 | Forbidden | Customer account does not belong to your vendor or order does not belong to customer |
404 | Not Found | Delivery not found |
422 | Unprocessable Entity | Validation failed (e.g., COD amount exceeds limit, scheduled time too soon, service not available in area) |
500 | Internal Server Error | Unexpected server error |
Example error response
{
"success": false,
"message": "Order could not be processed due to insufficient wallet balance."
}