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
/api/v1/fulfillment-operations/accessResponses
200 Access and setup-completion status
Response fields:
| Field | Type | Description |
|---|---|---|
enabled | boolean | |
setupCompleted | boolean |
{
"data": {
"enabled": true,
"setupCompleted": true
}
}
401 Missing or invalid authentication
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
403 Missing required scope
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
500 Unable to load Fulfillment Operations access
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
/api/v1/fulfillment-operations/accessCheck whether Fulfillment Operations is enabled for the organization and whether setup is complete
https://api-test.orderly-hub.com/api/v1/fulfillment-operations/accessApprove a prepared fulfillment action
/api/v1/fulfillment-operations/actions/{actionId}/approveParameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
actionId | path | yes | string |
Request body
| Field | Type | Description |
|---|---|---|
note | string |
{
"note": "string"
}
Responses
200 Recorded approval decision
FulfillmentActionDecisionResult object:
| Field | Type | Description |
|---|---|---|
action_id | string | |
case_id | string | |
status | approved | 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:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
401 Missing or invalid authentication
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
403 A user identity is required, owner approval is required for elevated actions, or scope is missing
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
404 Fulfillment Operations is not available, or the fulfillment action was not found
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
409 Shipment state changed and the action must be reevaluated, or the action was already decided
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
410 Fulfillment action has expired
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
500 Unable to record action decision
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
/api/v1/fulfillment-operations/actions/{actionId}/approveApprove a prepared fulfillment action
https://api-test.orderly-hub.com/api/v1/fulfillment-operations/actions//approveReject a prepared fulfillment action
/api/v1/fulfillment-operations/actions/{actionId}/rejectParameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
actionId | path | yes | string |
Request body
| Field | Type | Description |
|---|---|---|
note | string |
{
"note": "string"
}
Responses
200 Recorded rejection decision
FulfillmentActionDecisionResult object:
| Field | Type | Description |
|---|---|---|
action_id | string | |
case_id | string | |
status | approved | 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:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
401 Missing or invalid authentication
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
403 A user identity is required, or scope is missing
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
404 Fulfillment Operations is not available, or the fulfillment action was not found
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
409 Shipment state changed and the action must be reevaluated, or the action was already decided
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
410 Fulfillment action has expired
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
500 Unable to record action decision
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
/api/v1/fulfillment-operations/actions/{actionId}/rejectReject a prepared fulfillment action
https://api-test.orderly-hub.com/api/v1/fulfillment-operations/actions//rejectList fulfillment cases for the organization
/api/v1/fulfillment-operations/casesParameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
status | query | no | ||
limit | query | no | integer |
Responses
200 Fulfillment cases
FulfillmentCase[] object:
| Field | Type | Description |
|---|---|---|
id | string | |
mission | string | |
caseKey | string | |
title | string | |
summary | string | |
status | open | investigating | recommendation_ready | awaiting_approval | approved | dismissed | resolved | expired | |
priority | critical | high | medium | low | |
riskScore | number | |
confidence | number | |
affectedShipmentCount | integer | |
decisionDeadline | string | |
firstDetectedAt | string | |
lastEvaluatedAt | string | |
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:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
401 Missing or invalid authentication
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
403 Missing required scope
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
404 Fulfillment Operations is not available for this organization
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
500 Unable to load fulfillment cases
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
/api/v1/fulfillment-operations/casesList fulfillment cases for the organization
https://api-test.orderly-hub.com/api/v1/fulfillment-operations/casesGet a fulfillment case with its entities, evidence, scenarios, events, and recommendations
/api/v1/fulfillment-operations/cases/{caseId}Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
caseId | path | yes | string |
Responses
200 Fulfillment case detail
{
"data": "string"
}
400 Invalid fulfillment case id
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
401 Missing or invalid authentication
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
403 Missing required scope
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
404 Fulfillment Operations is not available, or the fulfillment case was not found
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
500 Unable to load fulfillment case or its evidence
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
/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
/api/v1/fulfillment-operations/cases/{caseId}/commander/runParameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
caseId | path | yes | string |
Responses
201 Fulfillment Commander run result
FulfillmentCommanderRunResult object:
| Field | Type | Description |
|---|---|---|
runId | string | |
recommendationId | string | |
scenarioId | string | |
actionId | string | |
recommendation | FulfillmentCommanderRecommendation | |
policy | FulfillmentCommanderPolicyEvaluation |
{
"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:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
401 Missing or invalid authentication
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
403 Missing required scope
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
404 Fulfillment Operations is not available, or an active fulfillment case was not found
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
409 A Fulfillment Commander run is already active for this case
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
502 Fulfillment Commander could not complete this case
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
503 Fulfillment Commander is not available (AI service not configured)
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
/api/v1/fulfillment-operations/cases/{caseId}/commander/runRun 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/runList carrier cutoff calendars configured for the organization
/api/v1/fulfillment-operations/cutoffsResponses
200 Fulfillment cutoff calendars
FulfillmentCutoff[] object:
| Field | Type | Description |
|---|---|---|
id | string | |
name | string | |
bridgeId | string | |
carrierCode | string | |
serviceCode | string | |
timezone | string | |
cutoffLocalTime | string | |
activeDays | array | |
decisionBufferMinutes | integer | |
lookaheadMinutes | integer | |
pastDueGraceMinutes | integer | |
isActive | boolean | |
createdAt | string | |
updatedAt | string |
{
"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:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
403 Missing required scope
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
404 Fulfillment Operations is not available for this organization
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
500 Unable to load fulfillment cutoffs
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
/api/v1/fulfillment-operations/cutoffsList carrier cutoff calendars configured for the organization
https://api-test.orderly-hub.com/api/v1/fulfillment-operations/cutoffsCreate a carrier cutoff calendar
/api/v1/fulfillment-operations/cutoffsRequest body
| Field | Type | Description |
|---|---|---|
name | string | |
bridgeId | string | |
carrierCode | string | |
serviceCode | string | |
timezone | string | |
cutoffLocalTime | string | |
activeDays | array | |
decisionBufferMinutes | integer | |
lookaheadMinutes | integer | |
pastDueGraceMinutes | integer | |
isActive | boolean |
{
"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:
| Field | Type | Description |
|---|---|---|
id | string | |
name | string | |
bridgeId | string | |
carrierCode | string | |
serviceCode | string | |
timezone | string | |
cutoffLocalTime | string | |
activeDays | array | |
decisionBufferMinutes | integer | |
lookaheadMinutes | integer | |
pastDueGraceMinutes | integer | |
isActive | boolean | |
createdAt | string | |
updatedAt | string |
{
"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:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
401 Missing or invalid authentication
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
403 Missing required scope
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
404 Fulfillment Operations is not available, or the referenced bridge was not found
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
500 Unable to create fulfillment cutoff
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
/api/v1/fulfillment-operations/cutoffsCreate a carrier cutoff calendar
https://api-test.orderly-hub.com/api/v1/fulfillment-operations/cutoffsUpdate a carrier cutoff calendar
/api/v1/fulfillment-operations/cutoffs/{cutoffId}Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
cutoffId | path | yes | string |
Request body
| Field | Type | Description |
|---|---|---|
name | string | |
bridgeId | string | |
carrierCode | string | |
serviceCode | string | |
timezone | string | |
cutoffLocalTime | string | |
activeDays | array | |
decisionBufferMinutes | integer | |
lookaheadMinutes | integer | |
pastDueGraceMinutes | integer | |
isActive | boolean |
{
"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:
| Field | Type | Description |
|---|---|---|
id | string | |
name | string | |
bridgeId | string | |
carrierCode | string | |
serviceCode | string | |
timezone | string | |
cutoffLocalTime | string | |
activeDays | array | |
decisionBufferMinutes | integer | |
lookaheadMinutes | integer | |
pastDueGraceMinutes | integer | |
isActive | boolean | |
createdAt | string | |
updatedAt | string |
{
"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:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
401 Missing or invalid authentication
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
403 Missing required scope
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"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:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
500 Unable to update fulfillment cutoff
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
/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
/api/v1/fulfillment-operations/cutoffs/{cutoffId}Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
cutoffId | path | yes | string |
Responses
200 Deletion confirmation
Response fields:
| Field | Type | Description |
|---|---|---|
deleted | True |
{
"data": {
"deleted": true
}
}
400 Invalid fulfillment cutoff id
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
401 Missing or invalid authentication
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
403 Missing required scope
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
404 Fulfillment Operations is not available, or the cutoff was not found
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
500 Unable to delete fulfillment cutoff
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
/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
/api/v1/fulfillment-operations/overviewResponses
200 Fulfillment Operations Team overview
FulfillmentOverview object:
| Field | Type | Description |
|---|---|---|
mission | string | |
autonomyLevel | 1 | 2 | 3 | None | |
policy | object | |
summary | object | |
activeCases | FulfillmentCase[] | |
watchtower | object | |
generatedAt | string |
{
"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:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
403 Missing required scope
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
404 Fulfillment Operations is not available for this organization
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
500 Unable to load the Fulfillment Operations Team overview
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
/api/v1/fulfillment-operations/overviewGet the Fulfillment Operations Team overview, active cases, policy, and watchtower state
https://api-test.orderly-hub.com/api/v1/fulfillment-operations/overviewGet the organization's fulfillment autonomy and approval policy
/api/v1/fulfillment-operations/policyResponses
200 Current fulfillment policy
FulfillmentPolicy object:
| Field | Type | Description |
|---|---|---|
configured | boolean | |
id | string | |
autonomyLevel | integer | |
maximumShipmentsPerApproval | integer | |
maximumIncrementalCostMinor | integer | |
currency | string | |
minimumRecommendationConfidence | number | |
allowedActions | NormalizedOperationalAction[] | |
enabled | boolean | |
updatedAt | string |
{
"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:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
403 Missing required scope
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
404 Fulfillment Operations is not available for this organization
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
500 Unable to load fulfillment policy
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
/api/v1/fulfillment-operations/policyGet the organization's fulfillment autonomy and approval policy
https://api-test.orderly-hub.com/api/v1/fulfillment-operations/policyCreate or update the organization's default fulfillment autonomy and approval policy
/api/v1/fulfillment-operations/policyRequest body
| Field | Type | Description |
|---|---|---|
autonomyLevel | 1 | 2 | 3 | |
maximumShipmentsPerApproval | integer | |
maximumIncrementalCostMinor | integer | |
currency | string | |
minimumRecommendationConfidence | number | |
allowedActions | NormalizedOperationalAction[] | |
enabled | boolean |
{
"autonomyLevel": 1,
"maximumShipmentsPerApproval": 0,
"maximumIncrementalCostMinor": 0,
"currency": "USD",
"minimumRecommendationConfidence": 0,
"allowedActions": [
"fulfillment.hold"
],
"enabled": true
}
Responses
200 Saved fulfillment policy
FulfillmentPolicy object:
| Field | Type | Description |
|---|---|---|
configured | boolean | |
id | string | |
autonomyLevel | integer | |
maximumShipmentsPerApproval | integer | |
maximumIncrementalCostMinor | integer | |
currency | string | |
minimumRecommendationConfidence | number | |
allowedActions | NormalizedOperationalAction[] | |
enabled | boolean | |
updatedAt | string |
{
"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:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
401 Missing or invalid authentication
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
403 A user identity is required to manage policy, or scope is missing
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
404 Fulfillment Operations is not available for this organization
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
500 Unable to save fulfillment policy
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
/api/v1/fulfillment-operations/policyCreate or update the organization's default fulfillment autonomy and approval policy
https://api-test.orderly-hub.com/api/v1/fulfillment-operations/policyGet the current Fulfillment Operations setup state and readiness checklist
/api/v1/fulfillment-operations/setupResponses
200 Current setup state
FulfillmentSetupState object:
| Field | Type | Description |
|---|---|---|
config | FulfillmentSetupConfig | |
requirements | FulfillmentSetupRequirements | |
requiredReady | boolean | |
setupCompleted | boolean | |
operationalReady | boolean | |
connections | FulfillmentSetupConnection[] | |
observations | FulfillmentSetupObservations | |
policy | FulfillmentSetupPolicySummary | |
activeCutoffCount | integer |
{
"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:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
403 Missing required scope
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
404 Fulfillment Operations is not available for this organization
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
500 Unable to load Fulfillment Operations setup
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
/api/v1/fulfillment-operations/setupGet the current Fulfillment Operations setup state and readiness checklist
https://api-test.orderly-hub.com/api/v1/fulfillment-operations/setupSave Fulfillment Operations setup configuration (cost source, currency, notifications, briefing schedule)
/api/v1/fulfillment-operations/setupRequest body
| Field | Type | Description |
|---|---|---|
costSource | shipstation_rates | shipment_cost_events | orderly_assisted | |
currency | string | |
notificationChannels | array | |
dailyBriefingLocalTime | string | |
timezone | string |
{
"costSource": "shipstation_rates",
"currency": "USD",
"notificationChannels": [
"portal"
],
"dailyBriefingLocalTime": "08:00",
"timezone": "America/Chicago"
}
Responses
200 Updated setup state
FulfillmentSetupState object:
| Field | Type | Description |
|---|---|---|
config | FulfillmentSetupConfig | |
requirements | FulfillmentSetupRequirements | |
requiredReady | boolean | |
setupCompleted | boolean | |
operationalReady | boolean | |
connections | FulfillmentSetupConnection[] | |
observations | FulfillmentSetupObservations | |
policy | FulfillmentSetupPolicySummary | |
activeCutoffCount | integer |
{
"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:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
401 Missing or invalid authentication
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
403 A user identity is required to configure setup, or scope is missing
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
404 Fulfillment Operations is not available for this organization
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
500 Unable to save Fulfillment Operations setup
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
/api/v1/fulfillment-operations/setupSave Fulfillment Operations setup configuration (cost source, currency, notifications, briefing schedule)
https://api-test.orderly-hub.com/api/v1/fulfillment-operations/setupActivate Fulfillment Operations once all required setup steps are ready
/api/v1/fulfillment-operations/setup/completeResponses
200 Setup state after activation
FulfillmentSetupState object:
| Field | Type | Description |
|---|---|---|
config | FulfillmentSetupConfig | |
requirements | FulfillmentSetupRequirements | |
requiredReady | boolean | |
setupCompleted | boolean | |
operationalReady | boolean | |
connections | FulfillmentSetupConnection[] | |
observations | FulfillmentSetupObservations | |
policy | FulfillmentSetupPolicySummary | |
activeCutoffCount | integer |
{
"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:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
403 A user identity is required to complete setup, or scope is missing
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
404 Fulfillment Operations is not available for this organization
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
409 Required setup steps are not yet complete
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
500 Unable to activate Fulfillment Operations
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
/api/v1/fulfillment-operations/setup/completeActivate Fulfillment Operations once all required setup steps are ready
https://api-test.orderly-hub.com/api/v1/fulfillment-operations/setup/completeManually trigger a Watchtower sweep for un-tendered shipments approaching carrier cutoff
/api/v1/fulfillment-operations/watchtower/runResponses
200 Watchtower run summary, or null if no organization was eligible for a run
{
"data": "string"
}
401 Missing or invalid authentication
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
403 Missing required scope
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
404 Fulfillment Operations is not available for this organization
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
500 Unable to run the Watchtower sweep
Response fields:
| Field | Type | Description |
|---|---|---|
error | object |
{
"error": {
"code": "string",
"message": "string"
}
}
/api/v1/fulfillment-operations/watchtower/runManually trigger a Watchtower sweep for un-tendered shipments approaching carrier cutoff
https://api-test.orderly-hub.com/api/v1/fulfillment-operations/watchtower/run