Skip to content

Sign and submit order

POST/v1/orders/{orderId}/sign-and-submit

Requires orders:sign, Idempotency-Key, signatureAttestation, and expectedRevision from the reviewed order. Existing integrations may send expectedVersions instead; supply exactly one. A stale revision returns 409 and requires renewed clinician review. Select prescriber by npi, provider id, or externalId, or inherit the draft's prescriber. First-use registration requires team:write. Actor headers are optional with prescriber; legacy userId requires matching clinician actor headers. Signs the complete order, then attempts each submission. Signing remains committed if submission fails. Replay the same key after an uncertain response; retry reported submission failures through Submit order with a new key. Submitted means queued, not pharmacy acceptance.

Request example

Replace example values with your Test data. Check the field rules below before you send a request.

"<string>"
curl -X POST 'https://api.affinityrx.com/v1/orders/{orderId}/sign-and-submit' \
  -H "Authorization: Bearer $AFFINITY_API_KEY" \
  -H 'Affinity-Version: 2026-09-28' \
  -H 'Idempotency-Key: <Idempotency-Key>' \
  -H 'Content-Type: application/json' \
  --data @request.json

Response example

These examples show the body structure. Values can differ. Select a status code to see its response.

{
  "object": "order_sign_and_submission",
  "orderId": "ord_01j2y8m6jcc9tt24af5pw9x1bc",
  "signedAt": "<string>",
  "status": "submitted",
  "prescriptions": [
    {
      "prescriptionId": "rx_01j2y8m6jcc9tt24af5pw9x1bc",
      "status": "submitted",
      "fulfillmentOrderId": "ord_01j2y8m6jcc9tt24af5pw9x1bc",
      "error": {
        "code": "<string>",
        "detail": "<string>",
        "status": 0
      }
    }
  ]
}
{
  "code": "<string>",
  "data": "<string>",
  "detail": "<string>",
  "instance": "<string>",
  "requestId": "<string>",
  "status": 400,
  "title": "<string>",
  "traceId": "<string>",
  "type": "<string>"
}
{
  "code": "<string>",
  "data": "<string>",
  "detail": "<string>",
  "instance": "<string>",
  "requestId": "<string>",
  "status": 401,
  "title": "<string>",
  "traceId": "<string>",
  "type": "<string>"
}
{
  "code": "<string>",
  "data": "<string>",
  "detail": "<string>",
  "instance": "<string>",
  "requestId": "<string>",
  "status": 403,
  "title": "<string>",
  "traceId": "<string>",
  "type": "<string>"
}
{
  "code": "<string>",
  "data": "<string>",
  "detail": "<string>",
  "instance": "<string>",
  "requestId": "<string>",
  "status": 404,
  "title": "<string>",
  "traceId": "<string>",
  "type": "<string>"
}
{
  "code": "<string>",
  "data": "<string>",
  "detail": "<string>",
  "instance": "<string>",
  "requestId": "<string>",
  "status": 409,
  "title": "<string>",
  "traceId": "<string>",
  "type": "<string>"
}
{
  "code": "<string>",
  "data": "<string>",
  "detail": "<string>",
  "instance": "<string>",
  "requestId": "<string>",
  "status": 422,
  "title": "<string>",
  "traceId": "<string>",
  "type": "<string>"
}
{
  "code": "<string>",
  "data": "<string>",
  "detail": "<string>",
  "instance": "<string>",
  "requestId": "<string>",
  "status": 429,
  "title": "<string>",
  "traceId": "<string>",
  "type": "<string>"
}
{
  "code": "<string>",
  "data": "<string>",
  "detail": "<string>",
  "instance": "<string>",
  "requestId": "<string>",
  "status": 503,
  "title": "<string>",
  "traceId": "<string>",
  "type": "<string>"
}

Implementation specification

Use these field types and limits to build your integration. Download the OpenAPI document for the complete contract.

Path parameters

orderIdstringrequired

Pattern: ^ord_[0-7][0-9a-hjkmnp-tv-z]{25}$

Headers

Affinity-Versionstring

Selects the HTTP API contract for this request only. When omitted, API-key requests use their service account’s stored version. Does not change the stored default.

Pin requests to 2026-09-28.

Idempotency-Keystringrequired

Request body specification application/json

practiceIdstringrequired

Pattern: ^prac_[0-7][0-9a-hjkmnp-tv-z]{25}$

userIdstring | null
Show userId fields
Any of · 1: string

string

Pattern: ^user_[0-7][0-9a-hjkmnp-tv-z]{25}$

Any of · 2: null

null

prescriberobject | null
Show prescriber fields
Any of · 1: object
idstring | null
Show id fields
Any of · 1: string

string

Pattern: ^prov_[0-7][0-9a-hjkmnp-tv-z]{25}$

Any of · 2: null

null

npistring | null
Show npi fields
Any of · 1: string

string

Any of · 2: null

null

externalIdstring | null
Show externalId fields
Any of · 1: string

string

Any of · 2: null

null

profileobject | null
Show profile fields
Any of · 1: object
emailstring | null
Show email fields
Any of · 1: string

string

Pattern: ^[^\s@]+@[^\s@]+\.[^\s@]+$

Any of · 2: null

null

phonestring | null
Show phone fields
Any of · 1: string

string

Any of · 2: null

null

Any of · 2: null

null

Any of · 2: null

null

signatureAttestationbooleanrequired

Allowed: true

expectedRevisionstring | null
Show expectedRevision fields
Any of · 1: string

Opaque revision of the complete order prescription set. Send the revision you reviewed as expectedRevision; never replace it automatically after a conflict.

Pattern: ^rev_[a-f0-9]{64}$

Any of · 2: null

null

expectedVersionsobject[] | null
Show expectedVersions fields
Any of · 1: object[]

Array items · object

prescriptionIdstringrequired

Pattern: ^rx_[0-7][0-9a-hjkmnp-tv-z]{25}$

versionintegerrequired

Minimum: 1

Any of · 2: null

null

All of · 1: any
One of · 1: any

any

One of · 2: any

any

Response specifications

202Successful response

application/json

objectstringrequired

Allowed: "order_sign_and_submission"

orderIdstringrequired

Pattern: ^ord_[0-7][0-9a-hjkmnp-tv-z]{25}$

signedAtstringrequired
statusstringrequired

Allowed: "submitted", "partially_submitted", "not_submitted"

prescriptionsobject[]required
Show prescriptions fields

Array items · object

prescriptionIdstringrequired

Pattern: ^rx_[0-7][0-9a-hjkmnp-tv-z]{25}$

statusstringrequired

Allowed: "submitted", "failed"

fulfillmentOrderIdstring | nullrequired
Show fulfillmentOrderId fields
Any of · 1: string

string

Pattern: ^ord_[0-7][0-9a-hjkmnp-tv-z]{25}$

Any of · 2: null

null

errorobject | nullrequired
Show error fields
Any of · 1: object
codestringrequired
detailstringrequired
statusnumber | stringrequired
Show status fields
Any of · 1: number

number

Any of · 2: string

string

Allowed: "Infinity", "-Infinity", "NaN"

Any of · 2: null

null

400HTTP 400

application/json

codestringrequired
dataobject
detailstringrequired
instancestringrequired
requestIdstringrequired
statusintegerrequired

Minimum: 400

Maximum: 599

titlestringrequired
traceIdstring
typestringrequired

Format: uri

401Unauthorized

application/json

codestringrequired
dataobject
detailstringrequired
instancestringrequired
requestIdstringrequired
statusintegerrequired

Minimum: 400

Maximum: 599

titlestringrequired
traceIdstring
typestringrequired

Format: uri

403Forbidden

application/json

codestringrequired
dataobject
detailstringrequired
instancestringrequired
requestIdstringrequired
statusintegerrequired

Minimum: 400

Maximum: 599

titlestringrequired
traceIdstring
typestringrequired

Format: uri

404Not found

application/json

codestringrequired
dataobject
detailstringrequired
instancestringrequired
requestIdstringrequired
statusintegerrequired

Minimum: 400

Maximum: 599

titlestringrequired
traceIdstring
typestringrequired

Format: uri

409Conflict

application/json

codestringrequired
dataobject
detailstringrequired
instancestringrequired
requestIdstringrequired
statusintegerrequired

Minimum: 400

Maximum: 599

titlestringrequired
traceIdstring
typestringrequired

Format: uri

422Validation error

application/json

codestringrequired
dataobject
detailstringrequired
instancestringrequired
requestIdstringrequired
statusintegerrequired

Minimum: 400

Maximum: 599

titlestringrequired
traceIdstring
typestringrequired

Format: uri

429Too many requests

application/json

codestringrequired
dataobject
detailstringrequired
instancestringrequired
requestIdstringrequired
statusintegerrequired

Minimum: 400

Maximum: 599

titlestringrequired
traceIdstring
typestringrequired

Format: uri

503HTTP 503

application/json

codestringrequired
dataobject
detailstringrequired
instancestringrequired
requestIdstringrequired
statusintegerrequired

Minimum: 400

Maximum: 599

titlestringrequired
traceIdstring
typestringrequired

Format: uri

Type to search…

↑↓ navigate↵ selectEsc close