Skip to main content

Fulfillment Operations

Endpoints for fulfillment operations.

All endpoints require a bearer token (oh_... API key or user JWT) and are served under https://api.orderly-hub.com. Use the Try it consoles to run a request against the Preview (test) server.

Check whether Fulfillment Operations is enabled for the organization and whether setup is complete

GET/api/v1/fulfillment-operations/access

Responses

200 Access and setup-completion status

Response fields:

FieldTypeDescription
enabledboolean
setupCompletedboolean
{
"data": {
"enabled": true,
"setupCompleted": true
}
}

401 Missing or invalid authentication

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

403 Missing required scope

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

500 Unable to load Fulfillment Operations access

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}
GET/api/v1/fulfillment-operations/access

Check whether Fulfillment Operations is enabled for the organization and whether setup is complete

https://api-test.orderly-hub.com/api/v1/fulfillment-operations/access

Approve a prepared fulfillment action

POST/api/v1/fulfillment-operations/actions/{actionId}/approve

Parameters

NameInRequiredTypeDescription
actionIdpathyesstring

Request body

FieldTypeDescription
notestring
{
"note": "string"
}

Responses

200 Recorded approval decision

FulfillmentActionDecisionResult object:

FieldTypeDescription
action_idstring
case_idstring
statusapproved | rejected
{
"data": {
"action_id": "550e8400-e29b-41d4-a716-446655440000",
"case_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "approved"
}
}

400 Invalid fulfillment action id or decision payload

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

401 Missing or invalid authentication

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

403 A user identity is required, owner approval is required for elevated actions, or scope is missing

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

404 Fulfillment Operations is not available, or the fulfillment action was not found

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

409 Shipment state changed and the action must be reevaluated, or the action was already decided

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

410 Fulfillment action has expired

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

500 Unable to record action decision

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}
POST/api/v1/fulfillment-operations/actions/{actionId}/approve

Approve a prepared fulfillment action

https://api-test.orderly-hub.com/api/v1/fulfillment-operations/actions//approve

Reject a prepared fulfillment action

POST/api/v1/fulfillment-operations/actions/{actionId}/reject

Parameters

NameInRequiredTypeDescription
actionIdpathyesstring

Request body

FieldTypeDescription
notestring
{
"note": "string"
}

Responses

200 Recorded rejection decision

FulfillmentActionDecisionResult object:

FieldTypeDescription
action_idstring
case_idstring
statusapproved | rejected
{
"data": {
"action_id": "550e8400-e29b-41d4-a716-446655440000",
"case_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "approved"
}
}

400 Invalid fulfillment action id or decision payload

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

401 Missing or invalid authentication

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

403 A user identity is required, or scope is missing

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

404 Fulfillment Operations is not available, or the fulfillment action was not found

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

409 Shipment state changed and the action must be reevaluated, or the action was already decided

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

410 Fulfillment action has expired

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

500 Unable to record action decision

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}
POST/api/v1/fulfillment-operations/actions/{actionId}/reject

Reject a prepared fulfillment action

https://api-test.orderly-hub.com/api/v1/fulfillment-operations/actions//reject

List fulfillment cases for the organization

GET/api/v1/fulfillment-operations/cases

Parameters

NameInRequiredTypeDescription
statusqueryno
limitquerynointeger

Responses

200 Fulfillment cases

FulfillmentCase[] object:

FieldTypeDescription
idstring
missionstring
caseKeystring
titlestring
summarystring
statusopen | investigating | recommendation_ready | awaiting_approval | approved | dismissed | resolved | expired
prioritycritical | high | medium | low
riskScorenumber
confidencenumber
affectedShipmentCountinteger
decisionDeadlinestring
firstDetectedAtstring
lastEvaluatedAtstring
recommendation
action
{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"mission": "string",
"caseKey": "string",
"title": "string",
"summary": "string",
"status": "open",
"priority": "critical",
"riskScore": 0,
"confidence": 0,
"affectedShipmentCount": 0,
"decisionDeadline": "string",
"firstDetectedAt": "2026-07-23T12:00:00Z",
"lastEvaluatedAt": "2026-07-23T12:00:00Z",
"recommendation": "string",
"action": "string"
}
]
}

400 Invalid query parameters

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

401 Missing or invalid authentication

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

403 Missing required scope

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

404 Fulfillment Operations is not available for this organization

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

500 Unable to load fulfillment cases

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}
GET/api/v1/fulfillment-operations/cases

List fulfillment cases for the organization

https://api-test.orderly-hub.com/api/v1/fulfillment-operations/cases

Get a fulfillment case with its entities, evidence, scenarios, events, and recommendations

GET/api/v1/fulfillment-operations/cases/{caseId}

Parameters

NameInRequiredTypeDescription
caseIdpathyesstring

Responses

200 Fulfillment case detail

{
"data": "string"
}

400 Invalid fulfillment case id

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

401 Missing or invalid authentication

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

403 Missing required scope

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

404 Fulfillment Operations is not available, or the fulfillment case was not found

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

500 Unable to load fulfillment case or its evidence

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}
GET/api/v1/fulfillment-operations/cases/{caseId}

Get a fulfillment case with its entities, evidence, scenarios, events, and recommendations

https://api-test.orderly-hub.com/api/v1/fulfillment-operations/cases/

Run the Fulfillment Commander agent on a case to produce a recommendation, scenario, and (if policy allows) a prepared action

POST/api/v1/fulfillment-operations/cases/{caseId}/commander/run

Parameters

NameInRequiredTypeDescription
caseIdpathyesstring

Responses

201 Fulfillment Commander run result

FulfillmentCommanderRunResult object:

FieldTypeDescription
runIdstring
recommendationIdstring
scenarioIdstring
actionIdstring
recommendationFulfillmentCommanderRecommendation
policyFulfillmentCommanderPolicyEvaluation
{
"data": {
"runId": "550e8400-e29b-41d4-a716-446655440000",
"recommendationId": "550e8400-e29b-41d4-a716-446655440000",
"scenarioId": "550e8400-e29b-41d4-a716-446655440000",
"actionId": "550e8400-e29b-41d4-a716-446655440000",
"recommendation": {
"decision": "recommend_action",
"action": "string",
"title": "string",
"rationale": "string",
"confidence": 0,
"targetShipmentIds": [
"string"
],
"evidenceClaims": [
{
"statement": null,
"evidenceIds": null
}
],
"assumptions": [
"string"
],
"nextReviewAt": "2026-07-23T12:00:00Z"
},
"policy": {
"disposition": "blocked",
"approvalTier": "standard",
"reasons": [
"string"
]
}
}
}

400 Invalid fulfillment case id

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

401 Missing or invalid authentication

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

403 Missing required scope

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

404 Fulfillment Operations is not available, or an active fulfillment case was not found

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

409 A Fulfillment Commander run is already active for this case

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

502 Fulfillment Commander could not complete this case

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

503 Fulfillment Commander is not available (AI service not configured)

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}
POST/api/v1/fulfillment-operations/cases/{caseId}/commander/run

Run the Fulfillment Commander agent on a case to produce a recommendation, scenario, and (if policy allows) a prepared action

https://api-test.orderly-hub.com/api/v1/fulfillment-operations/cases//commander/run

List carrier cutoff calendars configured for the organization

GET/api/v1/fulfillment-operations/cutoffs

Responses

200 Fulfillment cutoff calendars

FulfillmentCutoff[] object:

FieldTypeDescription
idstring
namestring
bridgeIdstring
carrierCodestring
serviceCodestring
timezonestring
cutoffLocalTimestring
activeDaysarray
decisionBufferMinutesinteger
lookaheadMinutesinteger
pastDueGraceMinutesinteger
isActiveboolean
createdAtstring
updatedAtstring
{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Jane Doe",
"bridgeId": "550e8400-e29b-41d4-a716-446655440000",
"carrierCode": "string",
"serviceCode": "string",
"timezone": "string",
"cutoffLocalTime": "17:00",
"activeDays": [
0
],
"decisionBufferMinutes": 0,
"lookaheadMinutes": 0,
"pastDueGraceMinutes": 0,
"isActive": true,
"createdAt": "2026-07-23T12:00:00Z",
"updatedAt": "2026-07-23T12:00:00Z"
}
]
}

401 Missing or invalid authentication

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

403 Missing required scope

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

404 Fulfillment Operations is not available for this organization

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

500 Unable to load fulfillment cutoffs

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}
GET/api/v1/fulfillment-operations/cutoffs

List carrier cutoff calendars configured for the organization

https://api-test.orderly-hub.com/api/v1/fulfillment-operations/cutoffs

Create a carrier cutoff calendar

POST/api/v1/fulfillment-operations/cutoffs

Request body

FieldTypeDescription
namestring
bridgeIdstring
carrierCodestring
serviceCodestring
timezonestring
cutoffLocalTimestring
activeDaysarray
decisionBufferMinutesinteger
lookaheadMinutesinteger
pastDueGraceMinutesinteger
isActiveboolean
{
"name": "Jane Doe",
"bridgeId": "550e8400-e29b-41d4-a716-446655440000",
"carrierCode": "string",
"serviceCode": "string",
"timezone": "America/Chicago",
"cutoffLocalTime": "17:00",
"activeDays": [
0
],
"decisionBufferMinutes": 0,
"lookaheadMinutes": 0,
"pastDueGraceMinutes": 0,
"isActive": true
}

Responses

201 Created fulfillment cutoff

FulfillmentCutoff object:

FieldTypeDescription
idstring
namestring
bridgeIdstring
carrierCodestring
serviceCodestring
timezonestring
cutoffLocalTimestring
activeDaysarray
decisionBufferMinutesinteger
lookaheadMinutesinteger
pastDueGraceMinutesinteger
isActiveboolean
createdAtstring
updatedAtstring
{
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Jane Doe",
"bridgeId": "550e8400-e29b-41d4-a716-446655440000",
"carrierCode": "string",
"serviceCode": "string",
"timezone": "string",
"cutoffLocalTime": "17:00",
"activeDays": [
0
],
"decisionBufferMinutes": 0,
"lookaheadMinutes": 0,
"pastDueGraceMinutes": 0,
"isActive": true,
"createdAt": "2026-07-23T12:00:00Z",
"updatedAt": "2026-07-23T12:00:00Z"
}
}

400 Invalid fulfillment cutoff payload

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

401 Missing or invalid authentication

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

403 Missing required scope

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

404 Fulfillment Operations is not available, or the referenced bridge was not found

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

500 Unable to create fulfillment cutoff

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}
POST/api/v1/fulfillment-operations/cutoffs

Create a carrier cutoff calendar

https://api-test.orderly-hub.com/api/v1/fulfillment-operations/cutoffs

Update a carrier cutoff calendar

PATCH/api/v1/fulfillment-operations/cutoffs/{cutoffId}

Parameters

NameInRequiredTypeDescription
cutoffIdpathyesstring

Request body

FieldTypeDescription
namestring
bridgeIdstring
carrierCodestring
serviceCodestring
timezonestring
cutoffLocalTimestring
activeDaysarray
decisionBufferMinutesinteger
lookaheadMinutesinteger
pastDueGraceMinutesinteger
isActiveboolean
{
"name": "Jane Doe",
"bridgeId": "550e8400-e29b-41d4-a716-446655440000",
"carrierCode": "string",
"serviceCode": "string",
"timezone": "America/Chicago",
"cutoffLocalTime": "17:00",
"activeDays": [
0
],
"decisionBufferMinutes": 0,
"lookaheadMinutes": 0,
"pastDueGraceMinutes": 0,
"isActive": true
}

Responses

200 Updated fulfillment cutoff

FulfillmentCutoff object:

FieldTypeDescription
idstring
namestring
bridgeIdstring
carrierCodestring
serviceCodestring
timezonestring
cutoffLocalTimestring
activeDaysarray
decisionBufferMinutesinteger
lookaheadMinutesinteger
pastDueGraceMinutesinteger
isActiveboolean
createdAtstring
updatedAtstring
{
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Jane Doe",
"bridgeId": "550e8400-e29b-41d4-a716-446655440000",
"carrierCode": "string",
"serviceCode": "string",
"timezone": "string",
"cutoffLocalTime": "17:00",
"activeDays": [
0
],
"decisionBufferMinutes": 0,
"lookaheadMinutes": 0,
"pastDueGraceMinutes": 0,
"isActive": true,
"createdAt": "2026-07-23T12:00:00Z",
"updatedAt": "2026-07-23T12:00:00Z"
}
}

400 Invalid fulfillment cutoff id or update payload

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

401 Missing or invalid authentication

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

403 Missing required scope

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

404 Fulfillment Operations is not available, the referenced bridge was not found, or the cutoff was not found

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

500 Unable to update fulfillment cutoff

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}
PATCH/api/v1/fulfillment-operations/cutoffs/{cutoffId}

Update a carrier cutoff calendar

https://api-test.orderly-hub.com/api/v1/fulfillment-operations/cutoffs/

Delete a carrier cutoff calendar

DELETE/api/v1/fulfillment-operations/cutoffs/{cutoffId}

Parameters

NameInRequiredTypeDescription
cutoffIdpathyesstring

Responses

200 Deletion confirmation

Response fields:

FieldTypeDescription
deletedTrue
{
"data": {
"deleted": true
}
}

400 Invalid fulfillment cutoff id

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

401 Missing or invalid authentication

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

403 Missing required scope

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

404 Fulfillment Operations is not available, or the cutoff was not found

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

500 Unable to delete fulfillment cutoff

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}
DELETE/api/v1/fulfillment-operations/cutoffs/{cutoffId}

Delete a carrier cutoff calendar

https://api-test.orderly-hub.com/api/v1/fulfillment-operations/cutoffs/

Get the Fulfillment Operations Team overview, active cases, policy, and watchtower state

GET/api/v1/fulfillment-operations/overview

Responses

200 Fulfillment Operations Team overview

FulfillmentOverview object:

FieldTypeDescription
missionstring
autonomyLevel1 | 2 | 3 | None
policyobject
summaryobject
activeCasesFulfillmentCase[]
watchtowerobject
generatedAtstring
{
"data": {
"mission": "string",
"autonomyLevel": 1,
"policy": {
"configured": true,
"enabled": true,
"maximumShipmentsPerApproval": 0,
"maximumIncrementalCostMinor": 0,
"currency": "USD",
"minimumRecommendationConfidence": 0,
"allowedActions": [
"fulfillment.hold"
]
},
"summary": {
"activeCaseCount": 0,
"affectedShipmentCount": 0,
"deadlinesWithinHour": 0,
"preparedActionCount": 0
},
"activeCases": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"mission": "string",
"caseKey": "string",
"title": "string",
"summary": "string",
"status": "open",
"priority": "critical",
"riskScore": 0,
"confidence": 0,
"affectedShipmentCount": 0,
"decisionDeadline": "string",
"firstDetectedAt": "2026-07-23T12:00:00Z",
"lastEvaluatedAt": "2026-07-23T12:00:00Z",
"recommendation": "string",
"action": "string"
}
],
"watchtower": {
"state": "unconfigured",
"configuredCutoffCount": 0,
"lastRunAt": "2026-07-23T12:00:00Z",
"lastRunStatus": "running",
"shipmentsScanned": 0,
"eligibleShipments": 0
},
"generatedAt": "2026-07-23T12:00:00Z"
}
}

401 Missing or invalid authentication

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

403 Missing required scope

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

404 Fulfillment Operations is not available for this organization

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

500 Unable to load the Fulfillment Operations Team overview

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}
GET/api/v1/fulfillment-operations/overview

Get the Fulfillment Operations Team overview, active cases, policy, and watchtower state

https://api-test.orderly-hub.com/api/v1/fulfillment-operations/overview

Get the organization's fulfillment autonomy and approval policy

GET/api/v1/fulfillment-operations/policy

Responses

200 Current fulfillment policy

FulfillmentPolicy object:

FieldTypeDescription
configuredboolean
idstring
autonomyLevelinteger
maximumShipmentsPerApprovalinteger
maximumIncrementalCostMinorinteger
currencystring
minimumRecommendationConfidencenumber
allowedActionsNormalizedOperationalAction[]
enabledboolean
updatedAtstring
{
"data": {
"configured": true,
"id": "550e8400-e29b-41d4-a716-446655440000",
"autonomyLevel": 0,
"maximumShipmentsPerApproval": 0,
"maximumIncrementalCostMinor": 0,
"currency": "USD",
"minimumRecommendationConfidence": 0,
"allowedActions": [
"fulfillment.hold"
],
"enabled": true,
"updatedAt": "2026-07-23T12:00:00Z"
}
}

401 Missing or invalid authentication

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

403 Missing required scope

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

404 Fulfillment Operations is not available for this organization

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

500 Unable to load fulfillment policy

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}
GET/api/v1/fulfillment-operations/policy

Get the organization's fulfillment autonomy and approval policy

https://api-test.orderly-hub.com/api/v1/fulfillment-operations/policy

Create or update the organization's default fulfillment autonomy and approval policy

PUT/api/v1/fulfillment-operations/policy

Request body

FieldTypeDescription
autonomyLevel1 | 2 | 3
maximumShipmentsPerApprovalinteger
maximumIncrementalCostMinorinteger
currencystring
minimumRecommendationConfidencenumber
allowedActionsNormalizedOperationalAction[]
enabledboolean
{
"autonomyLevel": 1,
"maximumShipmentsPerApproval": 0,
"maximumIncrementalCostMinor": 0,
"currency": "USD",
"minimumRecommendationConfidence": 0,
"allowedActions": [
"fulfillment.hold"
],
"enabled": true
}

Responses

200 Saved fulfillment policy

FulfillmentPolicy object:

FieldTypeDescription
configuredboolean
idstring
autonomyLevelinteger
maximumShipmentsPerApprovalinteger
maximumIncrementalCostMinorinteger
currencystring
minimumRecommendationConfidencenumber
allowedActionsNormalizedOperationalAction[]
enabledboolean
updatedAtstring
{
"data": {
"configured": true,
"id": "550e8400-e29b-41d4-a716-446655440000",
"autonomyLevel": 0,
"maximumShipmentsPerApproval": 0,
"maximumIncrementalCostMinor": 0,
"currency": "USD",
"minimumRecommendationConfidence": 0,
"allowedActions": [
"fulfillment.hold"
],
"enabled": true,
"updatedAt": "2026-07-23T12:00:00Z"
}
}

400 Invalid fulfillment policy payload

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

401 Missing or invalid authentication

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

403 A user identity is required to manage policy, or scope is missing

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

404 Fulfillment Operations is not available for this organization

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

500 Unable to save fulfillment policy

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}
PUT/api/v1/fulfillment-operations/policy

Create or update the organization's default fulfillment autonomy and approval policy

https://api-test.orderly-hub.com/api/v1/fulfillment-operations/policy

Get the current Fulfillment Operations setup state and readiness checklist

GET/api/v1/fulfillment-operations/setup

Responses

200 Current setup state

FulfillmentSetupState object:

FieldTypeDescription
configFulfillmentSetupConfig
requirementsFulfillmentSetupRequirements
requiredReadyboolean
setupCompletedboolean
operationalReadyboolean
connectionsFulfillmentSetupConnection[]
observationsFulfillmentSetupObservations
policyFulfillmentSetupPolicySummary
activeCutoffCountinteger
{
"data": {
"config": {
"costSource": "shipstation_rates",
"currency": "USD",
"notificationChannels": [
"portal"
],
"dailyBriefingLocalTime": "08:00",
"timezone": "America/Chicago",
"setupCompletedAt": "2026-07-23T12:00:00Z",
"validationStartedAt": "2026-07-23T12:00:00Z",
"updatedAt": "2026-07-23T12:00:00Z"
},
"requirements": {
"connection": true,
"cutoff": true,
"costSource": true,
"policy": true
},
"requiredReady": true,
"setupCompleted": true,
"operationalReady": true,
"connections": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Jane Doe",
"type": "string",
"status": "pending",
"lastSyncAt": "2026-07-23T12:00:00Z",
"errorMessage": "string"
}
],
"observations": {
"signalObserved": true,
"latestSignal": {
"signal": "string",
"bridgeType": "string",
"receivedAt": "2026-07-23T12:00:00Z"
},
"costObserved": true,
"costEventCount": 0,
"estimateCount": 0
},
"policy": {
"configured": true,
"enabled": true,
"autonomyLevel": 0
},
"activeCutoffCount": 0
}
}

401 Missing or invalid authentication

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

403 Missing required scope

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

404 Fulfillment Operations is not available for this organization

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

500 Unable to load Fulfillment Operations setup

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}
GET/api/v1/fulfillment-operations/setup

Get the current Fulfillment Operations setup state and readiness checklist

https://api-test.orderly-hub.com/api/v1/fulfillment-operations/setup

Save Fulfillment Operations setup configuration (cost source, currency, notifications, briefing schedule)

PUT/api/v1/fulfillment-operations/setup

Request body

FieldTypeDescription
costSourceshipstation_rates | shipment_cost_events | orderly_assisted
currencystring
notificationChannelsarray
dailyBriefingLocalTimestring
timezonestring
{
"costSource": "shipstation_rates",
"currency": "USD",
"notificationChannels": [
"portal"
],
"dailyBriefingLocalTime": "08:00",
"timezone": "America/Chicago"
}

Responses

200 Updated setup state

FulfillmentSetupState object:

FieldTypeDescription
configFulfillmentSetupConfig
requirementsFulfillmentSetupRequirements
requiredReadyboolean
setupCompletedboolean
operationalReadyboolean
connectionsFulfillmentSetupConnection[]
observationsFulfillmentSetupObservations
policyFulfillmentSetupPolicySummary
activeCutoffCountinteger
{
"data": {
"config": {
"costSource": "shipstation_rates",
"currency": "USD",
"notificationChannels": [
"portal"
],
"dailyBriefingLocalTime": "08:00",
"timezone": "America/Chicago",
"setupCompletedAt": "2026-07-23T12:00:00Z",
"validationStartedAt": "2026-07-23T12:00:00Z",
"updatedAt": "2026-07-23T12:00:00Z"
},
"requirements": {
"connection": true,
"cutoff": true,
"costSource": true,
"policy": true
},
"requiredReady": true,
"setupCompleted": true,
"operationalReady": true,
"connections": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Jane Doe",
"type": "string",
"status": "pending",
"lastSyncAt": "2026-07-23T12:00:00Z",
"errorMessage": "string"
}
],
"observations": {
"signalObserved": true,
"latestSignal": {
"signal": "string",
"bridgeType": "string",
"receivedAt": "2026-07-23T12:00:00Z"
},
"costObserved": true,
"costEventCount": 0,
"estimateCount": 0
},
"policy": {
"configured": true,
"enabled": true,
"autonomyLevel": 0
},
"activeCutoffCount": 0
}
}

400 Invalid Fulfillment Operations setup payload

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

401 Missing or invalid authentication

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

403 A user identity is required to configure setup, or scope is missing

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

404 Fulfillment Operations is not available for this organization

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

500 Unable to save Fulfillment Operations setup

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}
PUT/api/v1/fulfillment-operations/setup

Save Fulfillment Operations setup configuration (cost source, currency, notifications, briefing schedule)

https://api-test.orderly-hub.com/api/v1/fulfillment-operations/setup

Activate Fulfillment Operations once all required setup steps are ready

POST/api/v1/fulfillment-operations/setup/complete

Responses

200 Setup state after activation

FulfillmentSetupState object:

FieldTypeDescription
configFulfillmentSetupConfig
requirementsFulfillmentSetupRequirements
requiredReadyboolean
setupCompletedboolean
operationalReadyboolean
connectionsFulfillmentSetupConnection[]
observationsFulfillmentSetupObservations
policyFulfillmentSetupPolicySummary
activeCutoffCountinteger
{
"data": {
"config": {
"costSource": "shipstation_rates",
"currency": "USD",
"notificationChannels": [
"portal"
],
"dailyBriefingLocalTime": "08:00",
"timezone": "America/Chicago",
"setupCompletedAt": "2026-07-23T12:00:00Z",
"validationStartedAt": "2026-07-23T12:00:00Z",
"updatedAt": "2026-07-23T12:00:00Z"
},
"requirements": {
"connection": true,
"cutoff": true,
"costSource": true,
"policy": true
},
"requiredReady": true,
"setupCompleted": true,
"operationalReady": true,
"connections": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Jane Doe",
"type": "string",
"status": "pending",
"lastSyncAt": "2026-07-23T12:00:00Z",
"errorMessage": "string"
}
],
"observations": {
"signalObserved": true,
"latestSignal": {
"signal": "string",
"bridgeType": "string",
"receivedAt": "2026-07-23T12:00:00Z"
},
"costObserved": true,
"costEventCount": 0,
"estimateCount": 0
},
"policy": {
"configured": true,
"enabled": true,
"autonomyLevel": 0
},
"activeCutoffCount": 0
}
}

401 Missing or invalid authentication

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

403 A user identity is required to complete setup, or scope is missing

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

404 Fulfillment Operations is not available for this organization

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

409 Required setup steps are not yet complete

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

500 Unable to activate Fulfillment Operations

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}
POST/api/v1/fulfillment-operations/setup/complete

Activate Fulfillment Operations once all required setup steps are ready

https://api-test.orderly-hub.com/api/v1/fulfillment-operations/setup/complete

Manually trigger a Watchtower sweep for un-tendered shipments approaching carrier cutoff

POST/api/v1/fulfillment-operations/watchtower/run

Responses

200 Watchtower run summary, or null if no organization was eligible for a run

{
"data": "string"
}

401 Missing or invalid authentication

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

403 Missing required scope

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

404 Fulfillment Operations is not available for this organization

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}

500 Unable to run the Watchtower sweep

Response fields:

FieldTypeDescription
errorobject
{
"error": {
"code": "string",
"message": "string"
}
}
POST/api/v1/fulfillment-operations/watchtower/run

Manually trigger a Watchtower sweep for un-tendered shipments approaching carrier cutoff

https://api-test.orderly-hub.com/api/v1/fulfillment-operations/watchtower/run