Open Application Platform Docs

Slot quotes (beta)

For one new job, find which delivery slots a plan you hold can take and what each costs.

slots.quote Beta node

How to call it

REST

POST /v1/slots/quote

GraphQL

query openSlotsQuote

MCP

open_slots_quote

For one new job and a list of delivery slots, say which slots a plan you hold can take without breaking its rules, the best vehicle and position in each, what each adds, and the slots ranked cheapest first. Billed per node.

Request schema

Generated from the same validation rules the endpoint runs, so a field cannot be documented without being validated.

POST /v1/slots/quote

{
    "type": "object",
    "properties": {
        "departed_at": [],
        "job": {
            "type": "object",
            "properties": {
                "amount": {
                    "type": [
                        "array",
                        "null"
                    ]
                },
                "id": {
                    "type": "string",
                    "maxLength": 128
                },
                "location": {
                    "type": "object",
                    "properties": {
                        "lat": {
                            "type": "number",
                            "minimum": -90,
                            "maximum": 90
                        },
                        "lng": {
                            "type": "number",
                            "minimum": -180,
                            "maximum": 180
                        }
                    },
                    "required": [
                        "lat",
                        "lng"
                    ]
                },
                "service_seconds": {
                    "type": [
                        "integer",
                        "null"
                    ],
                    "minimum": 0
                },
                "skills": {
                    "type": "array",
                    "items": {
                        "type": "string",
                        "maxLength": 64
                    }
                }
            },
            "required": [
                "id",
                "location"
            ]
        },
        "jobs": {
            "type": "array",
            "maxItems": 2000,
            "items": {
                "type": "object",
                "properties": {
                    "amount": {
                        "type": [
                            "array",
                            "null"
                        ]
                    },
                    "id": {
                        "type": "string",
                        "maxLength": 128
                    },
                    "location": {
                        "type": "array"
                    },
                    "service_seconds": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "minimum": 0
                    },
                    "skills": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "maxLength": 64
                        }
                    },
                    "time_windows": {
                        "type": [
                            "array",
                            "null"
                        ]
                    }
                },
                "required": [
                    "id",
                    "location"
                ]
            }
        },
        "nearest": {
            "type": [
                "integer",
                "null"
            ],
            "minimum": 1,
            "maximum": 200
        },
        "objective": {
            "type": [
                "string",
                "null"
            ],
            "enum": [
                "duration",
                "distance"
            ]
        },
        "profile": {
            "type": [
                "string",
                "null"
            ],
            "enum": [
                "car",
                "van",
                "truck",
                "bike",
                "foot",
                "motorcycle"
            ]
        },
        "region": {
            "type": [
                "string",
                "null"
            ],
            "enum": [
                "NA",
                "EU",
                "AU",
                "ASIA",
                "na",
                "eu",
                "au",
                "asia"
            ]
        },
        "routes": {
            "type": "array",
            "maxItems": 200,
            "items": {
                "type": "object",
                "properties": {
                    "reverse": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "stops": {
                        "type": "array",
                        "maxItems": 2000,
                        "items": {
                            "type": "string",
                            "maxLength": 128
                        }
                    },
                    "vehicle_id": {
                        "type": "string",
                        "maxLength": 128
                    }
                },
                "required": [
                    "vehicle_id"
                ]
            }
        },
        "slots": {
            "type": "array",
            "minItems": 1,
            "maxItems": 96,
            "items": {
                "type": "object",
                "properties": {
                    "from": [],
                    "id": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 64
                    },
                    "to": []
                },
                "required": [
                    "from",
                    "to"
                ]
            }
        },
        "vehicles": {
            "type": "array",
            "minItems": 1,
            "maxItems": 200,
            "items": {
                "type": "object",
                "properties": {
                    "capacity": {
                        "type": [
                            "array",
                            "null"
                        ]
                    },
                    "end": {
                        "type": [
                            "array",
                            "null"
                        ]
                    },
                    "id": {
                        "type": "string",
                        "maxLength": 128
                    },
                    "max_distance_meters": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "minimum": 0
                    },
                    "max_tasks": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "minimum": 0
                    },
                    "max_travel_time_seconds": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "minimum": 0
                    },
                    "return_to_start": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "skills": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "maxLength": 64
                        }
                    },
                    "start": {
                        "type": [
                            "array",
                            "null"
                        ]
                    },
                    "time_window": {
                        "type": [
                            "array",
                            "null"
                        ]
                    }
                },
                "required": [
                    "id"
                ]
            }
        }
    },
    "additionalProperties": false,
    "required": [
        "job",
        "jobs",
        "routes",
        "slots",
        "vehicles"
    ]
}

Request example

{
    "departed_at": "2026-11-02T08:00:00-05:00",
    "vehicles": [
        {
            "id": "van-1",
            "start": {
                "lat": 45.5017,
                "lng": -73.5673
            },
            "return_to_start": true,
            "capacity": {
                "parcels": 10
            },
            "time_window": [
                "2026-11-02T08:00:00-05:00",
                "2026-11-02T17:00:00-05:00"
            ]
        },
        {
            "id": "van-2",
            "start": {
                "lat": 45.5017,
                "lng": -73.5673
            },
            "return_to_start": true,
            "capacity": {
                "parcels": 10
            }
        }
    ],
    "jobs": [
        {
            "id": "order-1001",
            "location": {
                "lat": 45.5088,
                "lng": -73.554
            },
            "service_seconds": 300,
            "amount": {
                "parcels": 2
            }
        },
        {
            "id": "order-1002",
            "location": {
                "lat": 45.4972,
                "lng": -73.5786
            },
            "service_seconds": 300,
            "amount": {
                "parcels": 3
            },
            "time_windows": [
                [
                    "2026-11-02T09:00:00-05:00",
                    "2026-11-02T12:00:00-05:00"
                ]
            ]
        },
        {
            "id": "order-1003",
            "location": {
                "lat": 45.5231,
                "lng": -73.5817
            },
            "service_seconds": 240,
            "amount": {
                "parcels": 1
            }
        }
    ],
    "routes": [
        {
            "vehicle_id": "van-1",
            "stops": [
                "order-1001",
                "order-1002"
            ]
        },
        {
            "vehicle_id": "van-2",
            "stops": [
                "order-1003"
            ]
        }
    ],
    "job": {
        "id": "order-2001",
        "location": {
            "lat": 45.5155,
            "lng": -73.5605
        },
        "service_seconds": 300,
        "amount": {
            "parcels": 1
        }
    },
    "slots": [
        {
            "id": "08-10",
            "from": "2026-11-02T08:00:00-05:00",
            "to": "2026-11-02T10:00:00-05:00"
        },
        {
            "id": "10-12",
            "from": "2026-11-02T10:00:00-05:00",
            "to": "2026-11-02T12:00:00-05:00"
        },
        {
            "id": "12-14",
            "from": "2026-11-02T12:00:00-05:00",
            "to": "2026-11-02T14:00:00-05:00"
        },
        {
            "id": "17-19",
            "from": "2026-11-02T17:00:00-05:00",
            "to": "2026-11-02T19:00:00-05:00"
        }
    ]
}

Response

What a successful call returns: the schema of `data` and `meta`, with a description of each field, followed by an example response from a real call.

POST /v1/slots/quote

Response schema

{
    "description": "Every slot with whether it can take the job, its best position and its rank. Billed per node.",
    "data": {
        "type": "object",
        "properties": {
            "job": {
                "type": "string",
                "description": "The job id."
            },
            "slots": {
                "type": "array",
                "description": "Every slot, in the order given.",
                "items": {
                    "type": "object",
                    "properties": {
                        "slot": {
                            "type": "string",
                            "description": "The slot id, or its number from 1."
                        },
                        "from": {
                            "type": "string",
                            "description": "Slot start, ISO 8601."
                        },
                        "to": {
                            "type": "string",
                            "description": "Slot end, ISO 8601."
                        },
                        "feasible": {
                            "type": "boolean",
                            "description": "Whether the plan can take the job in this slot without breaking a rule."
                        },
                        "best": {
                            "type": [
                                "object",
                                "null"
                            ],
                            "description": "The cheapest acceptable position in this slot; null when none.",
                            "properties": {
                                "vehicle_id": {
                                    "type": "string",
                                    "description": "The vehicle whose route takes the job."
                                },
                                "position": {
                                    "type": "integer",
                                    "description": "The job's place in that route's stops, from 1."
                                },
                                "after": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "description": "The stop the job follows; null when it comes first."
                                },
                                "added_distance_meters": {
                                    "type": "integer",
                                    "description": "Distance the route gains."
                                },
                                "added_duration_seconds": {
                                    "type": "integer",
                                    "description": "Driving time the route gains."
                                },
                                "added_waiting_seconds": {
                                    "type": "integer",
                                    "description": "Waiting the route gains (negative when the job fills time spent waiting)."
                                },
                                "arrival": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "description": "Arrival at the job, ISO 8601."
                                },
                                "waiting_seconds": {
                                    "type": "integer",
                                    "description": "Waiting at the job before its window opens."
                                },
                                "service_start": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "description": "When work at the job begins: arrival plus waiting."
                                },
                                "violations": {
                                    "type": "array",
                                    "description": "What this position breaks. Present only on a position that is not acceptable (`closest`)."
                                }
                            }
                        },
                        "rank": {
                            "type": [
                                "integer",
                                "null"
                            ],
                            "description": "1 for the cheapest feasible slot (least added driver time, or distance); null when not feasible."
                        }
                    }
                }
            },
            "summary": {
                "type": "object",
                "properties": {
                    "slots": {
                        "type": "integer",
                        "description": "Slots asked about."
                    },
                    "feasible": {
                        "type": "integer",
                        "description": "Slots that can take the job."
                    },
                    "cheapest": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "The id of the slot ranked 1."
                    }
                }
            }
        },
        "required": [
            "job",
            "slots",
            "summary"
        ]
    },
    "meta": {
        "type": "object",
        "properties": {},
        "additionalProperties": true
    }
}

Response example

{
    "request_id": "req_01k8zq3m5n7p9r1t3v5x7z9b2d",
    "capability": "slots.quote",
    "billing": {
        "unit": "node",
        "quantity": 4,
        "counted": true,
        "breakdown": {
            "planned_stops": 3,
            "new_jobs": 1
        }
    },
    "data": {
        "job": "order-2001",
        "slots": [
            {
                "slot": "08-10",
                "from": "2026-11-02T08:00:00-05:00",
                "to": "2026-11-02T10:00:00-05:00",
                "feasible": true,
                "best": {
                    "vehicle_id": "van-1",
                    "position": 2,
                    "after": "order-1001",
                    "added_distance_meters": 1505,
                    "added_duration_seconds": 213,
                    "added_waiting_seconds": -513,
                    "arrival": "2026-11-02T08:11:57-05:00",
                    "waiting_seconds": 0,
                    "service_start": "2026-11-02T08:11:57-05:00"
                },
                "rank": 1
            },
            {
                "slot": "10-12",
                "from": "2026-11-02T10:00:00-05:00",
                "to": "2026-11-02T12:00:00-05:00",
                "feasible": true,
                "best": {
                    "vehicle_id": "van-1",
                    "position": 3,
                    "after": "order-1002",
                    "added_distance_meters": 4526,
                    "added_duration_seconds": 544,
                    "added_waiting_seconds": 2879,
                    "arrival": "2026-11-02T09:12:01-05:00",
                    "waiting_seconds": 2879,
                    "service_start": "2026-11-02T10:00:00-05:00"
                },
                "rank": 2
            },
            {
                "slot": "12-14",
                "from": "2026-11-02T12:00:00-05:00",
                "to": "2026-11-02T14:00:00-05:00",
                "feasible": true,
                "best": {
                    "vehicle_id": "van-1",
                    "position": 3,
                    "after": "order-1002",
                    "added_distance_meters": 4526,
                    "added_duration_seconds": 544,
                    "added_waiting_seconds": 10079,
                    "arrival": "2026-11-02T09:12:01-05:00",
                    "waiting_seconds": 10079,
                    "service_start": "2026-11-02T12:00:00-05:00"
                },
                "rank": 3
            },
            {
                "slot": "17-19",
                "from": "2026-11-02T17:00:00-05:00",
                "to": "2026-11-02T19:00:00-05:00",
                "feasible": true,
                "best": {
                    "vehicle_id": "van-2",
                    "position": 2,
                    "after": "order-1003",
                    "added_distance_meters": 1402,
                    "added_duration_seconds": 211,
                    "added_waiting_seconds": 31353,
                    "arrival": "2026-11-02T08:17:27-05:00",
                    "waiting_seconds": 31353,
                    "service_start": "2026-11-02T17:00:00-05:00"
                },
                "rank": 4
            }
        ],
        "summary": {
            "slots": 4,
            "feasible": 4,
            "cheapest": "08-10"
        }
    },
    "meta": {
        "region": "NA",
        "profile": "car",
        "objective": "duration",
        "nearest": 25,
        "legs_measured": 13
    }
}

What it costs

Every point the solver must visit or depart from, including each vehicle's start and end.

Every billable response carries a billing block with the unit, the quantity and how the quantity was derived.

Errors it can return

Status Code Description
401 TOKEN_INVALID Unknown or revoked API token.
401 TOKEN_MISSING No API token. Send Authorization: Bearer <your token>.
402 QUOTA_EXHAUSTED The included allowance for this capability is used up for the current period.
403 CAPABILITY_NOT_ENABLED This capability is not enabled for your account. See :doc to enable it.
403 CAPABILITY_NOT_GRANTED_TO_KEY Your account has this capability, but this API key was not granted it.
403 OPEN_API_DISABLED Open Platform access is not enabled for this account.
422 UNSUPPORTED_REGION That routing region is not available. Use NA, EU, AU or ASIA.
422 VALIDATION_FAILED The request failed validation. See details.
429 RATE_LIMITED Too many requests. Please retry after the indicated delay.
500 INTERNAL_ERROR An unexpected error occurred. Quote the request_id when contacting support.
502 ENGINE_UNAVAILABLE The routing engine is temporarily unreachable. Please retry.