Перейти к содержимому

Partially update an order by its external id

PATCH
/api/v1/integration/orders/externalid/{externalId}
curl --request PATCH \
--url https://example.com/api/v1/integration/orders/externalid/example \
--header 'Content-Type: application/json' \
--data '{ "externalId": "example", "customId": "example", "price": 1, "planDeliveryPeriod": { "startDate": "2026-04-15T12:00:00Z", "endDate": "2026-04-15T12:00:00Z" }, "planPickupPeriod": { "startDate": "2026-04-15T12:00:00Z", "endDate": "2026-04-15T12:00:00Z" }, "addressFrom": { "line": "example", "lat": 1, "long": 1, "details": "example", "commentary": "example", "domofon": "example", "flat": "example", "floor": "example", "porch": "example" }, "addressTo": { "line": "example", "lat": 1, "long": 1, "details": "example", "commentary": "example", "domofon": "example", "flat": "example", "floor": "example", "porch": "example" }, "appType": "example", "volume": 1, "weight": 1, "priority": 1, "deliveryPrice": 1, "additionalDetails": "example", "details": "example", "assembled": true, "statusGroup": "example", "packaging": "example", "assignedDriverId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "assignedVehicleId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" }'

A field left null keeps its current value. Omitting the price keeps the current price, while an explicit value - including 0 - sets it exactly. The external id itself cannot be changed here.

externalId
required
string
Media typeapplication/json

A partial update of an order. Every field is optional: one left null keeps its current value.

object
externalId
required

Ignored on a patch. The id a source system knows the order by cannot be changed here.

null | string
customId
required

Your own reference for the order.

null | string
price
required

Price of the goods. Leaving it out keeps the current price; an explicit value, including 0, sets it exactly.

null | number format: double
planDeliveryPeriod
required
One of:
null
planPickupPeriod
required
One of:
null
addressFrom
required
One of:
null
addressTo
required
One of:
null
appType
required

Free-form classification. Stored and returned unchanged.

null | string
volume
required

Volume of the whole order.

null | number format: double
weight
required

Weight of the whole order.

null | number format: double
priority
required

Relative priority of the order.

null | integer format: int32
deliveryPrice
required

What the delivery itself costs, apart from the goods.

null | number format: double
additionalDetails
required

Free-form notes on the order.

null | string
details
required

Free-form notes on the order.

null | string
assembled
required

Whether the goods are already assembled.

null | boolean
statusGroup
required

Free-form grouping. It is not the order’s status.

null | string
packaging
required

Description of the packaging the goods are in.

null | string
assignedDriverId

Driver this order must go to, sent together with the vehicle. Null keeps the stored pair: a patch cannot clear an assignment.

null | string format: uuid
assignedVehicleId

Vehicle this order must go on, sent together with the Driver.

null | string format: uuid
Examplegenerated
{
"externalId": "example",
"customId": "example",
"price": 1,
"planDeliveryPeriod": {
"startDate": "2026-04-15T12:00:00Z",
"endDate": "2026-04-15T12:00:00Z"
},
"planPickupPeriod": {
"startDate": "2026-04-15T12:00:00Z",
"endDate": "2026-04-15T12:00:00Z"
},
"addressFrom": {
"line": "example",
"lat": 1,
"long": 1,
"details": "example",
"commentary": "example",
"domofon": "example",
"flat": "example",
"floor": "example",
"porch": "example"
},
"addressTo": {
"line": "example",
"lat": 1,
"long": 1,
"details": "example",
"commentary": "example",
"domofon": "example",
"flat": "example",
"floor": "example",
"porch": "example"
},
"appType": "example",
"volume": 1,
"weight": 1,
"priority": 1,
"deliveryPrice": 1,
"additionalDetails": "example",
"details": "example",
"assembled": true,
"statusGroup": "example",
"packaging": "example",
"assignedDriverId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"assignedVehicleId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"
}

OK

Media typeapplication/json

One order, as the pull feed reports it.

object
id
required

The order’s id in PickUpper.

string format: uuid
externalId
required

The id the source system created the order under, or null for an order created in PickUpper.

null | string
shortId
required

The short human-readable code operators use to refer to the order.

string
status
required

Where the order stands, as a name: New, InPlanning, Planned, InProgress, FullyDelivered, PartiallyDelivered, Returned, Collected, PartiallyCollected, NotCollected, Refused, Cancelled or Closed. A Pickup or Return order ends Collected, PartiallyCollected or NotCollected where a Delivery order ends FullyDelivered, PartiallyDelivered or Returned; a Rebox order uses the delivery values and is FullyDelivered only when the new item was handed over and the old one collected. New values may be added: treat a value you do not know as not final.

Allowed values: New InPlanning Planned InProgress FullyDelivered PartiallyDelivered Returned Refused Cancelled Closed Collected PartiallyCollected NotCollected
miniStatus
required

The tenant’s own sub-status within the current status, by name, or null when none is set. It is a label the tenant configures, not part of the status machine.

null | string
type
required

What the order is for, as a name: Delivery, Pickup, Return or Rebox.

Allowed values: Delivery Pickup Return Rebox
customId
required

The reference the source system sent with the order, stored and returned unchanged.

null | string
createdAtUtc
required

When the order was created (UTC).

string format: date-time
updatedAtUtc
required

When the order last changed (UTC). This is the value the feed orders by and that the since parameter compares against.

string format: date-time
tags
required

The ids of the tags on the order, always an array. Resolve a tag id through the tag endpoints.

Array<string>
Example
{
"status": "New",
"type": "Delivery"
}

Validation failed

Media typeapplication/problem+json

The body of a 400 response, served as application/problem+json. It follows the RFC 9457 problem-details shape: type, title, status and detail are the standard members, and errors is an extension that lists the offending fields.

object
type
required

A stable, machine-readable code for the error. Branch on this rather than on the wording of the title or the detail.

string
title
required

A short label for the kind of failure, such as Validation failed.

string
status
required

The HTTP status code of the response, which for this body is 400.

integer format: int32
detail
required

A human-readable explanation of this particular failure, or null.

null | string
errors

The fields the request was rejected over, one entry each. Omitted entirely when the failure carries no field-level context, so a 400 can arrive without this member.

Array<object> | null

One field the request was rejected over.

object
field
required

The name of the offending field, spelled as the request body spells it.

string
code
required

A stable, machine-readable code for this field’s failure.

string
value
required

The rejected value. Always present, and null when it was not safe to echo back.

null | string
message
required

A human-readable explanation of what is wrong with the field.

string
overridable

Set only by the dispatcher application’s manual planning operations — integration endpoints never set it. True when every problem in this refusal is a tenant-policy refusal the operator may override by re-sending the same request with force: true. Omitted otherwise.

null | boolean
Examplegenerated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"errors": [
{
"field": "example",
"code": "example",
"value": "example",
"message": "example"
}
],
"overridable": true
}

Missing or invalid credentials

Authenticated, but the role or scope does not allow this

Not found

Media typeapplication/problem+json

RFC 9457 problem body returned on every failure. type carries a stable machine-readable error code (see docs/api/error-codes.yaml), title a short human summary, status the HTTP status, detail the specific message.

object
type
null | string
title
null | string
status
null | integer format: int32
detail
null | string
instance
null | string
Examplegenerated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example"
}

Conflict

Media typeapplication/problem+json

RFC 9457 problem body returned on every failure. type carries a stable machine-readable error code (see docs/api/error-codes.yaml), title a short human summary, status the HTTP status, detail the specific message.

object
type
null | string
title
null | string
status
null | integer format: int32
detail
null | string
instance
null | string
Examplegenerated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example"
}

Rate limit exceeded, or an Idempotency-Key request is still in flight; retry after the Retry-After header

Media typeapplication/problem+json

RFC 9457 problem body returned on every failure. type carries a stable machine-readable error code (see docs/api/error-codes.yaml), title a short human summary, status the HTTP status, detail the specific message.

object
type
null | string
title
null | string
status
null | integer format: int32
detail
null | string
instance
null | string
Examplegenerated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example"
}

Unexpected error

Media typeapplication/problem+json

RFC 9457 problem body returned on every failure. type carries a stable machine-readable error code (see docs/api/error-codes.yaml), title a short human summary, status the HTTP status, detail the specific message.

object
type
null | string
title
null | string
status
null | integer format: int32
detail
null | string
instance
null | string
Examplegenerated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example"
}