Quote, validate, book and track Stuart courier deliveries; cancel jobs and check zone coverage.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Cancels a single delivery (one dropoff) of a multi-drop job. A cancellation fee may apply; confirm with the user first. Stuart: POST /v2/deliveries/{deliveryId}/cancel.
Stuart delivery id.
Details.
Reason for the cancellation.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
Cancels a single delivery (one dropoff) of a multi-drop job. A cancellation fee may apply; confirm with the user first. Stuart: POST /v2/deliveries/{deliveryId}/cancel.
| Argument | Type | Description |
|---|---|---|
| comment | string | Details. |
| delivery_id* | any | Stuart delivery id. |
| public_reason_key | string | Reason for the cancellation. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"delivery_id"
],
"properties": {
"comment": {
"type": "string",
"maxLength": 1000,
"description": "Details."
},
"delivery_id": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
{
"type": "string",
"minLength": 1
}
],
"description": "Stuart delivery id."
},
"public_reason_key": {
"enum": [
"address_error",
"courier_issue",
"customer_cancellation_requested",
"duplicate_package",
"incorrect_package",
"no_supply",
"other",
"package_damaged",
"package_not_ready",
"pu_closed",
"technical_issue",
"wrong_package_size"
],
"type": "string",
"description": "Reason for the cancellation."
}
}
}Cancels a whole job and all its deliveries. Stuart may charge a cancellation fee once a courier is on the way; confirm with the user first. Give a reason key for reporting. Stuart: POST /v2/jobs/{jobId}/cancel.
| Argument | Type | Description |
|---|---|---|
| job_id* | any | Stuart job id. |
| comment | string | Details. |
| public_reason_key | string | Reason for the cancellation. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_id"
],
"properties": {
"job_id": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
{
"type": "string",
"minLength": 1
}
],
"description": "Stuart job id."
},
"comment": {
"type": "string",
"maxLength": 1000,
"description": "Details."
},
"public_reason_key": {
"enum": [
"address_error",
"courier_issue",
"customer_cancellation_requested",
"duplicate_package",
"incorrect_package",
"no_supply",
"other",
"package_damaged",
"package_not_ready",
"pu_closed",
"technical_issue",
"wrong_package_size"
],
"type": "string",
"description": "Reason for the cancellation."
}
}
}BOOKS A REAL, CHARGED DELIVERY: creates a job with one pickup and 1-8 dropoffs and starts looking for a courier right away (unless pickup_at schedules it: up to 4 days ahead, 30 for corporate accounts). Get a quote with stuart_estimate_price and check with stuart_validate_job first, and confirm with the user. Use the sandbox environment for tests. Stuart: POST /v2/jobs.
| Argument | Type | Description |
|---|---|---|
| pickup* | object | The single pickup point. |
| dropoffs* | array | 1 to 8 dropoff points. |
| pickup_at | string | ISO 8601 time the courier should arrive at the pickup. Omit to dispatch immediately. |
| assignment_code | string | Invoicing reference shown on invoices. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"pickup",
"dropoffs"
],
"properties": {
"pickup": {
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"type": "string",
"minLength": 1,
"description": "Street address only. Floor, door and building details go in comment."
},
"comment": {
"type": "string",
"maxLength": 1000,
"description": "Note for the courier (floor, door code location, ...)."
},
"contact": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"phone": {
"type": "string",
"description": "E.164, e.g. +442079476330. Required if the address is not precise."
},
"company": {
"type": "string"
},
"lastname": {
"type": "string"
},
"firstname": {
"type": "string"
}
},
"description": "Either firstname + lastname, or company, is required by Stuart."
},
"coordinates": {
"type": "object",
"required": [
"lat",
"long"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"long": {
"type": "number",
"maximum": 180,
"minimum": -180
}
},
"description": "Optional coordinates (up to 6 decimals). An address string is still required."
}
},
"description": "The single pickup point."
},
"dropoffs": {
"type": "array",
"items": {
"type": "object",
"required": [
"address",
"package_type"
],
"properties": {
"address": {
"type": "string",
"minLength": 1,
"description": "Street address only. Floor, door and building details go in comment."
},
"comment": {
"type": "string",
"maxLength": 1000
},
"contact": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"phone": {
"type": "string",
"description": "E.164, e.g. +442079476330. Required if the address is not precise."
},
"company": {
"type": "string"
},
"lastname": {
"type": "string"
},
"firstname": {
"type": "string"
}
},
"description": "Either firstname + lastname, or company, is required by Stuart."
},
"coordinates": {
"type": "object",
"required": [
"lat",
"long"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"long": {
"type": "number",
"maximum": 180,
"minimum": -180
}
},
"description": "Optional coordinates (up to 6 decimals). An address string is still required."
},
"package_type": {
"enum": [
"xsmall",
"small",
"medium",
"large",
"xlarge"
],
"type": "string",
"description": "Package size."
},
"client_reference": {
"type": "string",
"description": "Your own order reference (unique)."
},
"package_description": {
"type": "string",
"maxLength": 1000
},
"end_customer_time_window_end": {
"type": "string",
"description": "ISO 8601 end of the delivery window."
},
"end_customer_time_window_start": {
"type": "string",
"description": "ISO 8601 start of the delivery window promised to the end customer."
}
}
},
"maxItems": 8,
"minItems": 1,
"description": "1 to 8 dropoff points."
},
"pickup_at": {
"type": "string",
"description": "ISO 8601 time the courier should arrive at the pickup. Omit to dispatch immediately."
},
"assignment_code": {
"type": "string",
"description": "Invoicing reference shown on invoices."
}
}
}Estimated seconds to reach the destination address for a job (coordinates need the text address too). Nothing is booked. Stuart: POST /v2/jobs/cpt.
| Argument | Type | Description |
|---|---|---|
| pickup* | object | The single pickup point. |
| dropoffs* | array | 1 to 8 dropoff points. |
| pickup_at | string | ISO 8601 time the courier should arrive at the pickup. Omit to dispatch immediately. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"pickup",
"dropoffs"
],
"properties": {
"pickup": {
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"type": "string",
"minLength": 1,
"description": "Street address only. Floor, door and building details go in comment."
},
"comment": {
"type": "string",
"maxLength": 1000,
"description": "Note for the courier (floor, door code location, ...)."
},
"contact": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"phone": {
"type": "string",
"description": "E.164, e.g. +442079476330. Required if the address is not precise."
},
"company": {
"type": "string"
},
"lastname": {
"type": "string"
},
"firstname": {
"type": "string"
}
},
"description": "Either firstname + lastname, or company, is required by Stuart."
},
"coordinates": {
"type": "object",
"required": [
"lat",
"long"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"long": {
"type": "number",
"maximum": 180,
"minimum": -180
}
},
"description": "Optional coordinates (up to 6 decimals). An address string is still required."
}
},
"description": "The single pickup point."
},
"dropoffs": {
"type": "array",
"items": {
"type": "object",
"required": [
"address",
"package_type"
],
"properties": {
"address": {
"type": "string",
"minLength": 1,
"description": "Street address only. Floor, door and building details go in comment."
},
"comment": {
"type": "string",
"maxLength": 1000
},
"contact": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"phone": {
"type": "string",
"description": "E.164, e.g. +442079476330. Required if the address is not precise."
},
"company": {
"type": "string"
},
"lastname": {
"type": "string"
},
"firstname": {
"type": "string"
}
},
"description": "Either firstname + lastname, or company, is required by Stuart."
},
"coordinates": {
"type": "object",
"required": [
"lat",
"long"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"long": {
"type": "number",
"maximum": 180,
"minimum": -180
}
},
"description": "Optional coordinates (up to 6 decimals). An address string is still required."
},
"package_type": {
"enum": [
"xsmall",
"small",
"medium",
"large",
"xlarge"
],
"type": "string",
"description": "Package size."
},
"client_reference": {
"type": "string",
"description": "Your own order reference (unique)."
},
"package_description": {
"type": "string",
"maxLength": 1000
},
"end_customer_time_window_end": {
"type": "string",
"description": "ISO 8601 end of the delivery window."
},
"end_customer_time_window_start": {
"type": "string",
"description": "ISO 8601 start of the delivery window promised to the end customer."
}
}
},
"maxItems": 8,
"minItems": 1,
"description": "1 to 8 dropoff points."
},
"pickup_at": {
"type": "string",
"description": "ISO 8601 time the courier should arrive at the pickup. Omit to dispatch immediately."
}
}
}Estimated seconds until a courier could arrive at the pickup address, for the same job body as create. Nothing is booked. Stuart: POST /v2/jobs/eta.
| Argument | Type | Description |
|---|---|---|
| pickup* | object | The single pickup point. |
| dropoffs* | array | 1 to 8 dropoff points. |
| pickup_at | string | ISO 8601 time the courier should arrive at the pickup. Omit to dispatch immediately. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"pickup",
"dropoffs"
],
"properties": {
"pickup": {
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"type": "string",
"minLength": 1,
"description": "Street address only. Floor, door and building details go in comment."
},
"comment": {
"type": "string",
"maxLength": 1000,
"description": "Note for the courier (floor, door code location, ...)."
},
"contact": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"phone": {
"type": "string",
"description": "E.164, e.g. +442079476330. Required if the address is not precise."
},
"company": {
"type": "string"
},
"lastname": {
"type": "string"
},
"firstname": {
"type": "string"
}
},
"description": "Either firstname + lastname, or company, is required by Stuart."
},
"coordinates": {
"type": "object",
"required": [
"lat",
"long"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"long": {
"type": "number",
"maximum": 180,
"minimum": -180
}
},
"description": "Optional coordinates (up to 6 decimals). An address string is still required."
}
},
"description": "The single pickup point."
},
"dropoffs": {
"type": "array",
"items": {
"type": "object",
"required": [
"address",
"package_type"
],
"properties": {
"address": {
"type": "string",
"minLength": 1,
"description": "Street address only. Floor, door and building details go in comment."
},
"comment": {
"type": "string",
"maxLength": 1000
},
"contact": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"phone": {
"type": "string",
"description": "E.164, e.g. +442079476330. Required if the address is not precise."
},
"company": {
"type": "string"
},
"lastname": {
"type": "string"
},
"firstname": {
"type": "string"
}
},
"description": "Either firstname + lastname, or company, is required by Stuart."
},
"coordinates": {
"type": "object",
"required": [
"lat",
"long"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"long": {
"type": "number",
"maximum": 180,
"minimum": -180
}
},
"description": "Optional coordinates (up to 6 decimals). An address string is still required."
},
"package_type": {
"enum": [
"xsmall",
"small",
"medium",
"large",
"xlarge"
],
"type": "string",
"description": "Package size."
},
"client_reference": {
"type": "string",
"description": "Your own order reference (unique)."
},
"package_description": {
"type": "string",
"maxLength": 1000
},
"end_customer_time_window_end": {
"type": "string",
"description": "ISO 8601 end of the delivery window."
},
"end_customer_time_window_start": {
"type": "string",
"description": "ISO 8601 start of the delivery window promised to the end customer."
}
}
},
"maxItems": 8,
"minItems": 1,
"description": "1 to 8 dropoff points."
},
"pickup_at": {
"type": "string",
"description": "ISO 8601 time the courier should arrive at the pickup. Omit to dispatch immediately."
}
}
}Price of a job before you create it: amount excluding and including tax, and currency. Nothing is booked. Needs pickup address, dropoff address and package type. Stuart: POST /v2/jobs/pricing.
| Argument | Type | Description |
|---|---|---|
| pickup* | object | The single pickup point. |
| dropoffs* | array | 1 to 8 dropoff points. |
| pickup_at | string | ISO 8601 time the courier should arrive at the pickup. Omit to dispatch immediately. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"pickup",
"dropoffs"
],
"properties": {
"pickup": {
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"type": "string",
"minLength": 1,
"description": "Street address only. Floor, door and building details go in comment."
},
"comment": {
"type": "string",
"maxLength": 1000,
"description": "Note for the courier (floor, door code location, ...)."
},
"contact": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"phone": {
"type": "string",
"description": "E.164, e.g. +442079476330. Required if the address is not precise."
},
"company": {
"type": "string"
},
"lastname": {
"type": "string"
},
"firstname": {
"type": "string"
}
},
"description": "Either firstname + lastname, or company, is required by Stuart."
},
"coordinates": {
"type": "object",
"required": [
"lat",
"long"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"long": {
"type": "number",
"maximum": 180,
"minimum": -180
}
},
"description": "Optional coordinates (up to 6 decimals). An address string is still required."
}
},
"description": "The single pickup point."
},
"dropoffs": {
"type": "array",
"items": {
"type": "object",
"required": [
"address",
"package_type"
],
"properties": {
"address": {
"type": "string",
"minLength": 1,
"description": "Street address only. Floor, door and building details go in comment."
},
"comment": {
"type": "string",
"maxLength": 1000
},
"contact": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"phone": {
"type": "string",
"description": "E.164, e.g. +442079476330. Required if the address is not precise."
},
"company": {
"type": "string"
},
"lastname": {
"type": "string"
},
"firstname": {
"type": "string"
}
},
"description": "Either firstname + lastname, or company, is required by Stuart."
},
"coordinates": {
"type": "object",
"required": [
"lat",
"long"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"long": {
"type": "number",
"maximum": 180,
"minimum": -180
}
},
"description": "Optional coordinates (up to 6 decimals). An address string is still required."
},
"package_type": {
"enum": [
"xsmall",
"small",
"medium",
"large",
"xlarge"
],
"type": "string",
"description": "Package size."
},
"client_reference": {
"type": "string",
"description": "Your own order reference (unique)."
},
"package_description": {
"type": "string",
"maxLength": 1000
},
"end_customer_time_window_end": {
"type": "string",
"description": "ISO 8601 end of the delivery window."
},
"end_customer_time_window_start": {
"type": "string",
"description": "ISO 8601 start of the delivery window promised to the end customer."
}
}
},
"maxItems": 8,
"minItems": 1,
"description": "1 to 8 dropoff points."
},
"pickup_at": {
"type": "string",
"description": "ISO 8601 time the courier should arrive at the pickup. Omit to dispatch immediately."
}
}
}Anonymised phone number of the courier assigned to a delivery. Only works once a courier is assigned; expires when the delivery ends. Stuart: GET /v2/deliveries/{deliveryId}/phone_number.
| Argument | Type | Description |
|---|---|---|
| delivery_id* | any | Stuart delivery id (the id inside a job's deliveries, not the job id). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"delivery_id"
],
"properties": {
"delivery_id": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
{
"type": "string",
"minLength": 1
}
],
"description": "Stuart delivery id (the id inside a job's deliveries, not the job id)."
}
}
}One job in full: status, each delivery with tracking URL, pickup/dropoff addresses and contacts, ETA, cancellation, proof of delivery, driver, distance and pricing. Stuart: GET /v2/jobs/{jobId}.
| Argument | Type | Description |
|---|---|---|
| job_id* | any | Stuart job id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_id"
],
"properties": {
"job_id": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
{
"type": "string",
"minLength": 1
}
],
"description": "Stuart job id."
}
}
}GeoJSON of the picking or delivery area of an open Stuart zone (for example paris, london). Stuart: GET /v2/areas/{zone}.
| Argument | Type | Description |
|---|---|---|
| type* | string | Which area: pickup or dropoff. |
| zone* | string | Zone name, e.g. paris, london. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"zone",
"type"
],
"properties": {
"type": {
"enum": [
"picking",
"delivering"
],
"type": "string",
"description": "Which area: pickup or dropoff."
},
"zone": {
"type": "string",
"minLength": 1,
"description": "Zone name, e.g. paris, london."
}
}
}Available time slots (start and end, 15-minute steps) in a zone for a date, from the time of the request onward. Use a future date. Stuart: GET /v2/jobs/schedules/{zone}/{type}/{date}.
| Argument | Type | Description |
|---|---|---|
| date* | string | Date, YYYY-MM-DD. |
| type* | string | Slot type, e.g. pickup. |
| zone* | string | Zone name, e.g. paris, london. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"zone",
"type",
"date"
],
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Date, YYYY-MM-DD."
},
"type": {
"type": "string",
"minLength": 1,
"description": "Slot type, e.g. pickup."
},
"zone": {
"type": "string",
"minLength": 1,
"description": "Zone name, e.g. paris, london."
}
}
}List the delivery jobs of the last 90 days, newest pickup first, with status, deliveries (tracking URLs, courier proof), driver and pricing. Filter by status, active or your client_reference. Paginated: when a page returns per_page rows, ask for the next page. Stuart: GET /v2/jobs.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default 1). |
| active | boolean | true = only jobs still in progress. |
| status | string | Job status filter, e.g. in_progress, finished, canceled. |
| per_page | integer | Rows per page (default 25). |
| client_reference | string | Your own order reference. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number (default 1)."
},
"active": {
"type": "boolean",
"description": "true = only jobs still in progress."
},
"status": {
"type": "string",
"description": "Job status filter, e.g. in_progress, finished, canceled."
},
"per_page": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Rows per page (default 25)."
},
"client_reference": {
"type": "string",
"description": "Your own order reference."
}
}
}Tell Stuart the order is packed and ready for the courier to collect. Pass exactly one of job_id (all orders of the job) or delivery_id (one order). Send it only when the order is really ready. Stuart: POST /v2/jobs/{jobId}/order_ready or /v2/deliveries/{deliveryId}/order_ready.
| Argument | Type | Description |
|---|---|---|
| job_id | any | Stuart job id (all orders under the job). |
| delivery_id | any | Stuart delivery id (one order). |
| order_ready_at | string | ISO 8601 time it became ready; default = now (server time). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"job_id": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
{
"type": "string",
"minLength": 1
}
],
"description": "Stuart job id (all orders under the job)."
},
"delivery_id": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
{
"type": "string",
"minLength": 1
}
],
"description": "Stuart delivery id (one order)."
},
"order_ready_at": {
"type": "string",
"description": "ISO 8601 time it became ready; default = now (server time)."
}
}
}Change allowed details of a delivery in a job: client_reference, package_description, and the pickup/dropoff comment and contact (what is editable depends on the delivery status: once delivered only client_reference). Stuart: PATCH /v2/jobs/{jobId}.
| Argument | Type | Description |
|---|---|---|
| job_id* | any | Stuart job id. |
| pickup | object | |
| dropoff | object | |
| delivery_id* | any | Delivery id inside the job. |
| client_reference | string | |
| package_description | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_id",
"delivery_id"
],
"properties": {
"job_id": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
{
"type": "string",
"minLength": 1
}
],
"description": "Stuart job id."
},
"pickup": {
"type": "object",
"properties": {
"comment": {
"type": "string",
"maxLength": 1000
},
"contact": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"phone": {
"type": "string"
},
"lastname": {
"type": "string"
},
"firstname": {
"type": "string"
},
"company_name": {
"type": "string"
}
}
}
}
},
"dropoff": {
"type": "object",
"properties": {
"comment": {
"type": "string",
"maxLength": 1000
},
"contact": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"phone": {
"type": "string"
},
"lastname": {
"type": "string"
},
"firstname": {
"type": "string"
},
"company_name": {
"type": "string"
}
}
}
}
},
"delivery_id": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
{
"type": "string",
"minLength": 1
}
],
"description": "Delivery id inside the job."
},
"client_reference": {
"type": "string"
},
"package_description": {
"type": "string",
"maxLength": 1000
}
}
}Check that an address can be geocoded and lies inside a Stuart zone, as a pickup (picking) or a dropoff (delivering). A phone number is needed when the address is approximate. Stuart: POST /v2/addresses/validate.
| Argument | Type | Description |
|---|---|---|
| type* | string | picking = pickup address, delivering = dropoff address. |
| phone | string | Contact phone (E.164); required when the address is not precise. |
| address* | string | Full-text address. |
| coordinates | object | Optional coordinates (up to 6 decimals). An address string is still required. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"type",
"address"
],
"properties": {
"type": {
"enum": [
"picking",
"delivering"
],
"type": "string",
"description": "picking = pickup address, delivering = dropoff address."
},
"phone": {
"type": "string",
"description": "Contact phone (E.164); required when the address is not precise."
},
"address": {
"type": "string",
"minLength": 1,
"description": "Full-text address."
},
"coordinates": {
"type": "object",
"required": [
"lat",
"long"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"long": {
"type": "number",
"maximum": 180,
"minimum": -180
}
},
"description": "Optional coordinates (up to 6 decimals). An address string is still required."
}
}
}Check that a job would be accepted (addresses geocode inside a covered zone, fields valid) without creating it. Returns {valid}. Stuart: POST /v2/jobs/validate.
| Argument | Type | Description |
|---|---|---|
| pickup* | object | The single pickup point. |
| dropoffs* | array | 1 to 8 dropoff points. |
| pickup_at | string | ISO 8601 time the courier should arrive at the pickup. Omit to dispatch immediately. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"pickup",
"dropoffs"
],
"properties": {
"pickup": {
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"type": "string",
"minLength": 1,
"description": "Street address only. Floor, door and building details go in comment."
},
"comment": {
"type": "string",
"maxLength": 1000,
"description": "Note for the courier (floor, door code location, ...)."
},
"contact": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"phone": {
"type": "string",
"description": "E.164, e.g. +442079476330. Required if the address is not precise."
},
"company": {
"type": "string"
},
"lastname": {
"type": "string"
},
"firstname": {
"type": "string"
}
},
"description": "Either firstname + lastname, or company, is required by Stuart."
},
"coordinates": {
"type": "object",
"required": [
"lat",
"long"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"long": {
"type": "number",
"maximum": 180,
"minimum": -180
}
},
"description": "Optional coordinates (up to 6 decimals). An address string is still required."
}
},
"description": "The single pickup point."
},
"dropoffs": {
"type": "array",
"items": {
"type": "object",
"required": [
"address",
"package_type"
],
"properties": {
"address": {
"type": "string",
"minLength": 1,
"description": "Street address only. Floor, door and building details go in comment."
},
"comment": {
"type": "string",
"maxLength": 1000
},
"contact": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"phone": {
"type": "string",
"description": "E.164, e.g. +442079476330. Required if the address is not precise."
},
"company": {
"type": "string"
},
"lastname": {
"type": "string"
},
"firstname": {
"type": "string"
}
},
"description": "Either firstname + lastname, or company, is required by Stuart."
},
"coordinates": {
"type": "object",
"required": [
"lat",
"long"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"long": {
"type": "number",
"maximum": 180,
"minimum": -180
}
},
"description": "Optional coordinates (up to 6 decimals). An address string is still required."
},
"package_type": {
"enum": [
"xsmall",
"small",
"medium",
"large",
"xlarge"
],
"type": "string",
"description": "Package size."
},
"client_reference": {
"type": "string",
"description": "Your own order reference (unique)."
},
"package_description": {
"type": "string",
"maxLength": 1000
},
"end_customer_time_window_end": {
"type": "string",
"description": "ISO 8601 end of the delivery window."
},
"end_customer_time_window_start": {
"type": "string",
"description": "ISO 8601 start of the delivery window promised to the end customer."
}
}
},
"maxItems": 8,
"minItems": 1,
"description": "1 to 8 dropoff points."
},
"pickup_at": {
"type": "string",
"description": "ISO 8601 time the courier should arrive at the pickup. Omit to dispatch immediately."
}
}
}