Fulfillment records

Fulfillment tracks how an order is delivered after payment. A fulfillment covers a set of the order's line items and has a type: shipment, pickup, local_delivery, digital, or service. Create one with POST /v1/orders/{order_id}/fulfillments, then use its supported_actions to decide which command to offer next.

Every supported action maps directly to a command route on the fulfillment. Convert underscores to hyphens when building the route. For example, mark_ready maps to POST /v1/fulfillments/{fulfillment_id}/mark-ready. The full command set is accept, schedule, hold, start, mark_preparing, mark_picked, mark_packed, mark_ready, dispatch, fail, mark_no_show, complete, and cancel. schedule requires scheduled_start_at and scheduled_end_at. fail accepts release_quantity, which defaults to true, to decide whether the failed quantity becomes available for another fulfillment.

Command responses include the updated fulfillment and a status-change event. Buyer notifications are sent by default. Set buyer_notification_behavior to suppress when a command should not notify the buyer.

Physical shipping has three levels. A fulfillment holds one or more shipments, each shipment holds packages, and each package holds items that allocate order line-item quantities to that box. Create and manage item allocations under /v1/packages/{package_id}/items. A shipment can therefore split one fulfillment across multiple parcels without treating package items as unrelated top-level resources.

Carrier tracking belongs to packages. Create a shipment to group one carrier leg, then create one package per physical parcel. Put carrier, service_code, tracking_number, tracking_url, dimensions, weight, and label information on each package, including single-parcel shipments. A shipment can remain empty only as a created draft. Its read-only status and movement timestamps are derived from its package states. Package exceptions dominate the aggregate; otherwise the least advanced active package determines shipment progress.

A shipment also has a direction. Outbound is the default and carries goods to the buyer. A return shipment carries them back: set direction to return, then provide return_id and return_line_items, each allocating a whole-number quantity against a return_line_item_id on that Return. The two shapes do not mix. Direction is fixed at creation. List shipments by return_id to find the inbound leg for a return.

Use nested event ingestion for carrier and 3PL facts:

  • POST /v1/fulfillments/{fulfillment_id}/events
  • POST /v1/shipments/{shipment_id}/events
  • POST /v1/packages/{package_id}/events

Events accept observational types such as shipped, in_transit, out_for_delivery, delivered, delivery_attempted, tracking_updated, exception, returned, and custom. Use external_event_id for idempotent carrier ingestion, with external_system, external_status, occurred_at, and location details for provenance.

All observational events and command-driven status changes appear in one timeline at GET /v1/fulfillment-events. Filter it by order_id, fulfillment_id, shipment_id, package_id, or event_type. Status-change events include previous_status, current_status, quantity_effect, reason, and created_at, so no separate status-update resource is needed.

A package event such as delivered records carrier telemetry. It does not complete the fulfillment. Use the fulfillment's complete command when the merchant accepts that the obligation is discharged.

Order-level fulfillment_status distinguishes not_applicable for orders with nothing to fulfill and closed for obligations resolved through a mix of completed and canceled quantities.

Fulfillment also consumes inventory. Stock committed when an order is paid stays physically on hand until the handoff event for that fulfillment type. Canceling before handoff releases the claim without moving stock, and a refund alone never restocks anything. Returned units re-enter stock through Return operations.

Configure delivery methods and quote buyer choices in Delivery configuration.

Endpoints

List fulfillment events#

GET/v1/fulfillment-eventsRequires scope: commerce.orders.read or commerce.orders.write

Lists provider-neutral fulfillment events. Results default to newest received first.

Query parameters
fulfillment_idstring

Optional fulfillment ID filter.

shipment_idstring

Optional shipment ID filter.

package_idstring

Optional package ID filter.

order_idstring

Optional order ID filter.

page_sizeinteger

Page size, default 20, max 100.

page_tokenstring

Cursor returned by the previous list response.

event_typeenum

Filter by fulfillment event type.

acceptedpreparingpickedpackedreadyshippeddispatchedin_transitout_for_deliverydelivereddelivery_attemptedtracking_updatedexceptionreturnedcompletedcanceledfailedno_showcustom
external_systemstring

Filter by external system identifier.

external_event_idstring

Filter by external provider event ID.

occurred_afterstring

RFC3339 lower bound for occurred_at.

occurred_beforestring

RFC3339 upper bound for occurred_at.

sort_byenum

Sort field. Defaults to received_at.

received_atoccurred_at
Response · 200
dataarray of objectrequired
metaobject
next_page_tokenstring
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDED
Bash
curl https://api.withflintpay.com/v1/fulfillment-events \
  -H "Authorization: Bearer YOUR_API_KEY"
JSON
{
  "data": [
    {
      "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "event_type": "tracking_updated",
      "subject_type": "",
      "external_system": "shippo",
      "external_event_id": "evt_7f3df2",
      "external_status": "delivered",
      "message": "Carrier marked the package delivered.",
      "occurred_at": "2026-05-13T14:30:00Z",
      "received_at": "2026-05-13T14:30:01Z",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "buyer_notification_behavior": "request",
      "custom_details": {
        "provider_carrier": "ups"
      }
    }
  ],
  "next_page_token": "Zm9yd2FyZC1vbmx5LW9wYXF1ZS1jdXJzb3I",
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Get fulfillment event#

GET/v1/fulfillment-events/{fulfillment_event_id}Requires scope: commerce.orders.read or commerce.orders.write

Retrieves one provider-neutral fulfillment event by ID.

Path parameters
fulfillment_event_idstringrequired

Flint fulfillment event ID.

Query parameters
expandarray of enum

Supported expansions: order. Expansion requires commerce.orders.read. Limits: at most 10 unique expand paths per request; path depth at most 2. Send repeated expand parameters as the canonical form, for example expand=order&expand=order. Comma-separated values, expand[]=order, and numeric expand[0]=order are accepted for common client compatibility.

order
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDDANGLING_EXPANSION_REFERENCEEXPANSION_DEPENDENCY_UNAVAILABLEEXPANSION_RESOLUTION_FAILEDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINTERNAL_ERRORINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl https://api.withflintpay.com/v1/fulfillment-events/fev_01ABCDEFGHIJKLMNOPQRSTUVWX \
  -H "Authorization: Bearer YOUR_API_KEY"

List fulfillment notifications#

GET/v1/fulfillment-notificationsRequires scope: commerce.orders.read or commerce.orders.write

Returns persisted fulfillment notification audit records. Results default to newest created first.

Query parameters
fulfillment_idstring

Optional fulfillment ID filter.

order_idstring

Optional order ID filter.

fulfillment_event_idstring

Optional fulfillment event ID filter.

page_sizeinteger

Page size, default 20, max 100.

page_tokenstring

Cursor returned by the previous list response.

channelenum

Filter by notification channel.

email
statusenum

Filter by notification status.

pendingsentfailedsuppressed
notification_typeenum

Filter by notification type.

fulfillment_canceledfulfillment_completedfulfillment_deliveredfulfillment_delivery_attemptedfulfillment_dispatchedfulfillment_exceptionfulfillment_failedfulfillment_in_transitfulfillment_no_showfulfillment_out_for_deliveryfulfillment_readyfulfillment_returnedfulfillment_shippedshipment_deliveredshipment_delivery_attemptedshipment_exceptionshipment_in_transitshipment_out_for_deliveryshipment_returnedshipment_shippedtracking_updated
Response · 200
dataarray of objectrequired
metaobject
next_page_tokenstring
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDED
Bash
curl https://api.withflintpay.com/v1/fulfillment-notifications \
  -H "Authorization: Bearer YOUR_API_KEY"
JSON
{
  "data": [
    {
      "fulfillment_notification_id": "fnt_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "recipient_email": "buyer@example.com",
      "channel": "email",
      "notification_type": "fulfillment_completed",
      "trigger_type": "status_update",
      "status": "sent",
      "sent_at": "2026-05-13T14:30:02Z",
      "created_at": "2026-05-13T14:30:01Z",
      "updated_at": "2026-05-13T14:30:02Z"
    }
  ],
  "next_page_token": "Zm9yd2FyZC1vbmx5LW9wYXF1ZS1jdXJzb3I",
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Get fulfillment notification#

GET/v1/fulfillment-notifications/{fulfillment_notification_id}Requires scope: commerce.orders.read or commerce.orders.write

Retrieves one fulfillment notification audit record by ID.

Path parameters
fulfillment_notification_idstringrequired

Flint fulfillment notification ID.

Query parameters
expandarray of enum

Supported expansions: order. Expansion requires commerce.orders.read. Limits: at most 10 unique expand paths per request; path depth at most 2. Send repeated expand parameters as the canonical form, for example expand=order&expand=order. Comma-separated values, expand[]=order, and numeric expand[0]=order are accepted for common client compatibility.

order
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDDANGLING_EXPANSION_REFERENCEEXPANSION_DEPENDENCY_UNAVAILABLEEXPANSION_RESOLUTION_FAILEDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINTERNAL_ERRORINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl https://api.withflintpay.com/v1/fulfillment-notifications/fnt_01ABCDEFGHIJKLMNOPQRSTUVWX \
  -H "Authorization: Bearer YOUR_API_KEY"

List fulfillments#

GET/v1/fulfillmentsRequires scope: commerce.orders.read or commerce.orders.write

Returns fulfillments for operational queue and order-detail views. Results default to newest created first.

Query parameters
expandarray of enum

Supported expansions: order. Expansion requires commerce.orders.read. Limits: at most 10 unique expand paths per request; path depth at most 2. Send repeated expand parameters as the canonical form, for example expand=order&expand=order. Comma-separated values, expand[]=order, and numeric expand[0]=order are accepted for common client compatibility.

order
order_idstring

Filter by order ID.

page_sizeinteger

Page size, default 20, max 100.

page_tokenstring

Cursor returned by the previous list response.

external_reference_idstring

Exact-match filter on the caller-owned external reference ID.

querystring

Search across fulfillment_id and external_reference_id.

statusenum

Filter by current public fulfillment status.

pendingin_progressreadycompletedcanceledfailedscheduledpreparingpickedpackeddispatched
typeenum

Filter by fulfillment type.

shipmentpickuplocal_deliverydigitalservice
location_idstring

Filter by assigned Location ID.

created_afterstring

Lower bound for created_at.

created_beforestring

Upper bound for created_at.

updated_afterstring

Lower bound for updated_at.

updated_beforestring

Upper bound for updated_at.

sort_directionenum

Sort direction for created_at. Defaults to desc.

ascdesc
Response · 200
dataarray of objectrequired
metaobject
next_page_tokenstring
request_idstring

Error codes

AUTH_REQUIREDDANGLING_EXPANSION_REFERENCEEXPANSION_DEPENDENCY_UNAVAILABLEEXPANSION_RESOLUTION_FAILEDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINTERNAL_ERRORINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDSERVICE_UNAVAILABLE
Bash
curl https://api.withflintpay.com/v1/fulfillments \
  -H "Authorization: Bearer YOUR_API_KEY"

Get fulfillment#

GET/v1/fulfillments/{fulfillment_id}Requires scope: commerce.orders.read or commerce.orders.write

Retrieves a single fulfillment by ID.

Path parameters
fulfillment_idstringrequired

Flint fulfillment ID.

Query parameters
expandarray of enum

Supported expansions: order, packages, shipments. Expansion requires commerce.orders.read. Limits: at most 10 unique expand paths per request; path depth at most 2. To-many expansions are capped at 20 related objects per path. Send repeated expand parameters as the canonical form, for example expand=order&expand=packages. Comma-separated values, expand[]=order, and numeric expand[0]=order are accepted for common client compatibility.

orderpackagesshipments
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDDANGLING_EXPANSION_REFERENCEEXPANSION_DEPENDENCY_UNAVAILABLEEXPANSION_RESOLUTION_FAILEDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINTERNAL_ERRORINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl https://api.withflintpay.com/v1/fulfillments/ful_01ABCDEFGHIJKLMNOPQRSTUVWX \
  -H "Authorization: Bearer YOUR_API_KEY"

Update fulfillment#

PATCH/v1/fulfillments/{fulfillment_id}IdempotentRequires scope: commerce.orders.write

Updates mutable fulfillment fields and fulfillment-specific details. Fulfillment line item allocation is set when the fulfillment is created.

Path parameters
fulfillment_idstringrequired

Flint fulfillment ID.

Request body
option 1object
option 2object
option 3object
option 4object
option 5object
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X PATCH https://api.withflintpay.com/v1/fulfillments/ful_01ABCDEFGHIJKLMNOPQRSTUVWX \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "location_id": "loc_123",
    "metadata": {
      "stage": "ready"
    }
  }'
JSON
{
  "data": {
    "order_id": "ord_123",
    "line_items": [
      {
        "order_line_item_id": "li_123",
        "name": "General Admission",
        "quantity": 2,
        "unit_price_money": {
          "amount": 2500,
          "currency": "USD"
        },
        "base_subtotal_money": {
          "amount": 5000,
          "currency": "USD"
        },
        "modifier_total_money": {
          "amount": 0,
          "currency": "USD"
        },
        "subtotal_money": {
          "amount": 5000,
          "currency": "USD"
        },
        "discount_money": {
          "amount": 0,
          "currency": "USD"
        },
        "tax_money": {
          "amount": 0,
          "currency": "USD"
        },
        "refunded_money": {
          "amount": 0,
          "currency": "USD"
        },
        "refunded_quantity": 0,
        "total_money": {
          "amount": 5000,
          "currency": "USD"
        },
        "metadata": {
          "ticket_type": "ga"
        },
        "inventory_snapshot": null
      }
    ],
    "status": "open",
    "payment_status": "unpaid",
    "refund_status": "none",
    "metadata": {
      "event_id": "evt_123"
    },
    "merchant_id": "mer_123",
    "customer_id": "cus_123",
    "pricing_amounts": {
      "subtotal_money": {
        "amount": 5000,
        "currency": "USD"
      },
      "discount_money": {
        "amount": 0,
        "currency": "USD"
      },
      "charge_money": {
        "amount": 0,
        "currency": "USD"
      },
      "tax_money": {
        "amount": 0,
        "currency": "USD"
      },
      "requested_tip_money": {
        "amount": 0,
        "currency": "USD"
      },
      "total_money": {
        "amount": 5000,
        "currency": "USD"
      }
    },
    "tax": {
      "enabled": false,
      "status": "",
      "mode": "",
      "taxability_reason": ""
    },
    "settlement_amounts": {
      "paid_money": {
        "amount": 0,
        "currency": "USD"
      },
      "refunded_money": {
        "amount": 0,
        "currency": "USD"
      },
      "net_collected_money": {
        "amount": 0,
        "currency": "USD"
      },
      "settled_tip_money": {
        "amount": 0,
        "currency": "USD"
      },
      "balance_money": {
        "amount": 5000,
        "currency": "USD"
      },
      "outstanding_money": {
        "amount": 5000,
        "currency": "USD"
      },
      "credit_money": {
        "amount": 0,
        "currency": "USD"
      }
    },
    "order_number": "1001",
    "origin": "api",
    "created_at": "2026-03-17T14:30:00Z",
    "updated_at": "2026-03-17T14:30:00Z",
    "inventory_demand_revision": 0
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Accept fulfillment#

POST/v1/fulfillments/{fulfillment_id}/acceptIdempotentRequires scope: commerce.orders.write

Accepts a pending fulfillment.

Path parameters
fulfillment_idstringrequired

Flint fulfillment ID.

Request body
buyer_notification_behaviorenum

Controls buyer email handling. Omit or use send to send when recipient, template, and deduplication rules allow it. Use suppress when another system owns buyer messaging.

sendsuppress
occurred_atstring

Command occurrence timestamp.

reasonstring
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/fulfillments/ful_01ABCDEFGHIJKLMNOPQRSTUVWX/accept \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "buyer_notification_behavior": "send"
  }'
JSON
{
  "data": {
    "fulfillment": {
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "type": "shipment",
      "status": "completed",
      "request_status": "",
      "line_items": [
        {
          "order_line_item_id": "li_123",
          "quantity": 1
        }
      ],
      "completed_at": "2026-05-13T14:30:00Z",
      "metadata": {
        "source": "dispatch"
      },
      "created_at": "2026-05-13T09:45:00Z",
      "updated_at": "2026-05-13T14:30:00Z"
    },
    "event": {
      "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "event_type": "tracking_updated",
      "subject_type": "",
      "external_system": "shippo",
      "external_event_id": "evt_7f3df2",
      "external_status": "delivered",
      "message": "Carrier marked the package delivered.",
      "occurred_at": "2026-05-13T14:30:00Z",
      "received_at": "2026-05-13T14:30:01Z",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "buyer_notification_behavior": "request",
      "custom_details": {
        "provider_carrier": "ups"
      }
    }
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Cancel fulfillment#

POST/v1/fulfillments/{fulfillment_id}/cancelIdempotentRequires scope: commerce.orders.write

Cancels a fulfillment.

Path parameters
fulfillment_idstringrequired

Flint fulfillment ID.

Request body
buyer_notification_behaviorenum

Controls buyer email handling. Omit or use send to send when recipient, template, and deduplication rules allow it. Use suppress when another system owns buyer messaging.

sendsuppress
reasonstring
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/fulfillments/ful_01ABCDEFGHIJKLMNOPQRSTUVWX/cancel \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "reason": "Customer requested cancellation.",
    "buyer_notification_behavior": "send"
  }'
JSON
{
  "data": {
    "fulfillment": {
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "type": "shipment",
      "status": "canceled",
      "request_status": "",
      "line_items": [
        {
          "order_line_item_id": "li_123",
          "quantity": 1
        }
      ],
      "completed_at": "2026-05-13T14:30:00Z",
      "metadata": {
        "source": "dispatch"
      },
      "created_at": "2026-05-13T09:45:00Z",
      "updated_at": "2026-05-13T14:30:00Z"
    },
    "event": {
      "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "event_type": "tracking_updated",
      "subject_type": "",
      "external_system": "shippo",
      "external_event_id": "evt_7f3df2",
      "external_status": "delivered",
      "message": "Carrier marked the package delivered.",
      "occurred_at": "2026-05-13T14:30:00Z",
      "received_at": "2026-05-13T14:30:01Z",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "buyer_notification_behavior": "request",
      "custom_details": {
        "provider_carrier": "ups"
      }
    }
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Complete fulfillment#

POST/v1/fulfillments/{fulfillment_id}/completeIdempotentRequires scope: commerce.orders.write

Marks a fulfillment as completed.

Path parameters
fulfillment_idstringrequired

Flint fulfillment ID.

Request body
buyer_notification_behaviorenum

Controls buyer email handling. Omit or use send to send when recipient, template, and deduplication rules allow it. Use suppress when another system owns buyer messaging.

sendsuppress
completed_atstring

Completion evidence timestamp.

reasonstring
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/fulfillments/ful_01ABCDEFGHIJKLMNOPQRSTUVWX/complete \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "completed_at": "2026-05-13T14:30:00Z",
    "buyer_notification_behavior": "send"
  }'
JSON
{
  "data": {
    "fulfillment": {
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "type": "shipment",
      "status": "completed",
      "request_status": "",
      "line_items": [
        {
          "order_line_item_id": "li_123",
          "quantity": 1
        }
      ],
      "completed_at": "2026-05-13T14:30:00Z",
      "metadata": {
        "source": "dispatch"
      },
      "created_at": "2026-05-13T09:45:00Z",
      "updated_at": "2026-05-13T14:30:00Z"
    },
    "event": {
      "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "event_type": "tracking_updated",
      "subject_type": "",
      "external_system": "shippo",
      "external_event_id": "evt_7f3df2",
      "external_status": "delivered",
      "message": "Carrier marked the package delivered.",
      "occurred_at": "2026-05-13T14:30:00Z",
      "received_at": "2026-05-13T14:30:01Z",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "buyer_notification_behavior": "request",
      "custom_details": {
        "provider_carrier": "ups"
      }
    }
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Dispatch fulfillment#

POST/v1/fulfillments/{fulfillment_id}/dispatchIdempotentRequires scope: commerce.orders.write

Marks a fulfillment as dispatched.

Path parameters
fulfillment_idstringrequired

Flint fulfillment ID.

Request body
buyer_notification_behaviorenum

Controls buyer email handling. Omit or use send to send when recipient, template, and deduplication rules allow it. Use suppress when another system owns buyer messaging.

sendsuppress
occurred_atstring

Command occurrence timestamp.

reasonstring
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/fulfillments/ful_01ABCDEFGHIJKLMNOPQRSTUVWX/dispatch \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "buyer_notification_behavior": "send"
  }'
JSON
{
  "data": {
    "fulfillment": {
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "type": "shipment",
      "status": "completed",
      "request_status": "",
      "line_items": [
        {
          "order_line_item_id": "li_123",
          "quantity": 1
        }
      ],
      "completed_at": "2026-05-13T14:30:00Z",
      "metadata": {
        "source": "dispatch"
      },
      "created_at": "2026-05-13T09:45:00Z",
      "updated_at": "2026-05-13T14:30:00Z"
    },
    "event": {
      "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "event_type": "tracking_updated",
      "subject_type": "",
      "external_system": "shippo",
      "external_event_id": "evt_7f3df2",
      "external_status": "delivered",
      "message": "Carrier marked the package delivered.",
      "occurred_at": "2026-05-13T14:30:00Z",
      "received_at": "2026-05-13T14:30:01Z",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "buyer_notification_behavior": "request",
      "custom_details": {
        "provider_carrier": "ups"
      }
    }
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Create fulfillment event#

POST/v1/fulfillments/{fulfillment_id}/eventsIdempotentRequires scope: commerce.orders.write

Records an observational event for a fulfillment.

Path parameters
fulfillment_idstringrequired

Flint fulfillment ID.

Request body
buyer_notification_behaviorenum

Controls buyer email handling. Omit or use send to send when recipient, template, and deduplication rules allow it. Use suppress when another system owns buyer messaging.

sendsuppress
custom_detailsmap of string
event_typeenumrequired
shippedin_transitout_for_deliverydelivereddelivery_attemptedtracking_updatedexceptionreturnedcustom
external_event_idstring
external_statusstring
external_systemstring
location_descriptionstring
messagestring
occurred_atstring

Provider event timestamp.

statusenum
pendingon_holdin_progressreadycompletedcanceledfailedscheduledacceptedpreparingpickedpackeddispatchedno_show
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/fulfillments/ful_01ABCDEFGHIJKLMNOPQRSTUVWX/events \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "event_type": "custom",
    "external_system": "shippo",
    "external_event_id": "evt_7f3df2",
    "external_status": "work_started",
    "message": "The fulfillment partner started work.",
    "occurred_at": "2026-05-13T14:30:00Z",
    "status": "in_progress",
    "buyer_notification_behavior": "send",
    "custom_details": {
      "facility": "east"
    }
  }'
JSON
{
  "data": {
    "fulfillment_event": {
      "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "event_type": "tracking_updated",
      "subject_type": "",
      "external_system": "shippo",
      "external_event_id": "evt_7f3df2",
      "external_status": "delivered",
      "message": "Carrier marked the package delivered.",
      "occurred_at": "2026-05-13T14:30:00Z",
      "received_at": "2026-05-13T14:30:01Z",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "buyer_notification_behavior": "request",
      "custom_details": {
        "provider_carrier": "ups"
      }
    },
    "fulfillment": {
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "type": "shipment",
      "status": "completed",
      "request_status": "",
      "line_items": [
        {
          "order_line_item_id": "li_123",
          "quantity": 1
        }
      ],
      "completed_at": "2026-05-13T14:30:00Z",
      "metadata": {
        "source": "dispatch"
      },
      "created_at": "2026-05-13T09:45:00Z",
      "updated_at": "2026-05-13T14:30:00Z"
    },
    "replayed": true
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Fail fulfillment#

POST/v1/fulfillments/{fulfillment_id}/failIdempotentRequires scope: commerce.orders.write

Marks a fulfillment as failed and releases its quantity by default.

Path parameters
fulfillment_idstringrequired

Flint fulfillment ID.

Request body
buyer_notification_behaviorenum

Controls buyer email handling. Omit or use send to send when recipient, template, and deduplication rules allow it. Use suppress when another system owns buyer messaging.

sendsuppress
occurred_atstring

Command occurrence timestamp.

reasonstring
release_quantityboolean

Whether the failed quantity becomes available for another fulfillment.

Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/fulfillments/ful_01ABCDEFGHIJKLMNOPQRSTUVWX/fail \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "reason": "Unable to fulfill.",
    "release_quantity": true,
    "buyer_notification_behavior": "send"
  }'
JSON
{
  "data": {
    "fulfillment": {
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "type": "shipment",
      "status": "completed",
      "request_status": "",
      "line_items": [
        {
          "order_line_item_id": "li_123",
          "quantity": 1
        }
      ],
      "completed_at": "2026-05-13T14:30:00Z",
      "metadata": {
        "source": "dispatch"
      },
      "created_at": "2026-05-13T09:45:00Z",
      "updated_at": "2026-05-13T14:30:00Z"
    },
    "event": {
      "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "event_type": "tracking_updated",
      "subject_type": "",
      "external_system": "shippo",
      "external_event_id": "evt_7f3df2",
      "external_status": "delivered",
      "message": "Carrier marked the package delivered.",
      "occurred_at": "2026-05-13T14:30:00Z",
      "received_at": "2026-05-13T14:30:01Z",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "buyer_notification_behavior": "request",
      "custom_details": {
        "provider_carrier": "ups"
      }
    }
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Hold fulfillment#

POST/v1/fulfillments/{fulfillment_id}/holdIdempotentRequires scope: commerce.orders.write

Places a fulfillment on hold.

Path parameters
fulfillment_idstringrequired

Flint fulfillment ID.

Request body
buyer_notification_behaviorstring
occurred_atstring

RFC3339 timestamp.

reasonenumrequired
payment_reviewinventory_issueaddress_issuecustomer_requestprovider_issuescheduling_issuefraud_reviewother
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/fulfillments/ful_01ABCDEFGHIJKLMNOPQRSTUVWX/hold \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "reason": "customer_request",
    "buyer_notification_behavior": "send"
  }'
JSON
{
  "data": {
    "fulfillment": {
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "type": "shipment",
      "status": "completed",
      "request_status": "",
      "line_items": [
        {
          "order_line_item_id": "li_123",
          "quantity": 1
        }
      ],
      "completed_at": "2026-05-13T14:30:00Z",
      "metadata": {
        "source": "dispatch"
      },
      "created_at": "2026-05-13T09:45:00Z",
      "updated_at": "2026-05-13T14:30:00Z"
    },
    "event": {
      "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "event_type": "tracking_updated",
      "subject_type": "",
      "external_system": "shippo",
      "external_event_id": "evt_7f3df2",
      "external_status": "delivered",
      "message": "Carrier marked the package delivered.",
      "occurred_at": "2026-05-13T14:30:00Z",
      "received_at": "2026-05-13T14:30:01Z",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "buyer_notification_behavior": "request",
      "custom_details": {
        "provider_carrier": "ups"
      }
    }
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Mark fulfillment no-show#

POST/v1/fulfillments/{fulfillment_id}/mark-no-showIdempotentRequires scope: commerce.orders.write

Records a no-show outcome.

Path parameters
fulfillment_idstringrequired

Flint fulfillment ID.

Request body
buyer_notification_behaviorstring
occurred_atstring

RFC3339 timestamp.

reasonenumrequired
customer_no_showprovider_no_showlocation_unavailablescheduling_errorother
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/fulfillments/ful_01ABCDEFGHIJKLMNOPQRSTUVWX/mark-no-show \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "reason": "customer_no_show",
    "buyer_notification_behavior": "send"
  }'
JSON
{
  "data": {
    "fulfillment": {
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "type": "shipment",
      "status": "completed",
      "request_status": "",
      "line_items": [
        {
          "order_line_item_id": "li_123",
          "quantity": 1
        }
      ],
      "completed_at": "2026-05-13T14:30:00Z",
      "metadata": {
        "source": "dispatch"
      },
      "created_at": "2026-05-13T09:45:00Z",
      "updated_at": "2026-05-13T14:30:00Z"
    },
    "event": {
      "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "event_type": "tracking_updated",
      "subject_type": "",
      "external_system": "shippo",
      "external_event_id": "evt_7f3df2",
      "external_status": "delivered",
      "message": "Carrier marked the package delivered.",
      "occurred_at": "2026-05-13T14:30:00Z",
      "received_at": "2026-05-13T14:30:01Z",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "buyer_notification_behavior": "request",
      "custom_details": {
        "provider_carrier": "ups"
      }
    }
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Mark fulfillment packed#

POST/v1/fulfillments/{fulfillment_id}/mark-packedIdempotentRequires scope: commerce.orders.write

Marks a fulfillment as packed.

Path parameters
fulfillment_idstringrequired

Flint fulfillment ID.

Request body
buyer_notification_behaviorenum

Controls buyer email handling. Omit or use send to send when recipient, template, and deduplication rules allow it. Use suppress when another system owns buyer messaging.

sendsuppress
occurred_atstring

Command occurrence timestamp.

reasonstring
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/fulfillments/ful_01ABCDEFGHIJKLMNOPQRSTUVWX/mark-packed \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "buyer_notification_behavior": "send"
  }'
JSON
{
  "data": {
    "fulfillment": {
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "type": "shipment",
      "status": "completed",
      "request_status": "",
      "line_items": [
        {
          "order_line_item_id": "li_123",
          "quantity": 1
        }
      ],
      "completed_at": "2026-05-13T14:30:00Z",
      "metadata": {
        "source": "dispatch"
      },
      "created_at": "2026-05-13T09:45:00Z",
      "updated_at": "2026-05-13T14:30:00Z"
    },
    "event": {
      "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "event_type": "tracking_updated",
      "subject_type": "",
      "external_system": "shippo",
      "external_event_id": "evt_7f3df2",
      "external_status": "delivered",
      "message": "Carrier marked the package delivered.",
      "occurred_at": "2026-05-13T14:30:00Z",
      "received_at": "2026-05-13T14:30:01Z",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "buyer_notification_behavior": "request",
      "custom_details": {
        "provider_carrier": "ups"
      }
    }
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Mark fulfillment picked#

POST/v1/fulfillments/{fulfillment_id}/mark-pickedIdempotentRequires scope: commerce.orders.write

Marks a fulfillment as picked.

Path parameters
fulfillment_idstringrequired

Flint fulfillment ID.

Request body
buyer_notification_behaviorenum

Controls buyer email handling. Omit or use send to send when recipient, template, and deduplication rules allow it. Use suppress when another system owns buyer messaging.

sendsuppress
occurred_atstring

Command occurrence timestamp.

reasonstring
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/fulfillments/ful_01ABCDEFGHIJKLMNOPQRSTUVWX/mark-picked \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "buyer_notification_behavior": "send"
  }'
JSON
{
  "data": {
    "fulfillment": {
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "type": "shipment",
      "status": "completed",
      "request_status": "",
      "line_items": [
        {
          "order_line_item_id": "li_123",
          "quantity": 1
        }
      ],
      "completed_at": "2026-05-13T14:30:00Z",
      "metadata": {
        "source": "dispatch"
      },
      "created_at": "2026-05-13T09:45:00Z",
      "updated_at": "2026-05-13T14:30:00Z"
    },
    "event": {
      "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "event_type": "tracking_updated",
      "subject_type": "",
      "external_system": "shippo",
      "external_event_id": "evt_7f3df2",
      "external_status": "delivered",
      "message": "Carrier marked the package delivered.",
      "occurred_at": "2026-05-13T14:30:00Z",
      "received_at": "2026-05-13T14:30:01Z",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "buyer_notification_behavior": "request",
      "custom_details": {
        "provider_carrier": "ups"
      }
    }
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Mark fulfillment preparing#

POST/v1/fulfillments/{fulfillment_id}/mark-preparingIdempotentRequires scope: commerce.orders.write

Marks a fulfillment as preparing.

Path parameters
fulfillment_idstringrequired

Flint fulfillment ID.

Request body
buyer_notification_behaviorenum

Controls buyer email handling. Omit or use send to send when recipient, template, and deduplication rules allow it. Use suppress when another system owns buyer messaging.

sendsuppress
occurred_atstring

Command occurrence timestamp.

reasonstring
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/fulfillments/ful_01ABCDEFGHIJKLMNOPQRSTUVWX/mark-preparing \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "buyer_notification_behavior": "send"
  }'
JSON
{
  "data": {
    "fulfillment": {
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "type": "shipment",
      "status": "completed",
      "request_status": "",
      "line_items": [
        {
          "order_line_item_id": "li_123",
          "quantity": 1
        }
      ],
      "completed_at": "2026-05-13T14:30:00Z",
      "metadata": {
        "source": "dispatch"
      },
      "created_at": "2026-05-13T09:45:00Z",
      "updated_at": "2026-05-13T14:30:00Z"
    },
    "event": {
      "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "event_type": "tracking_updated",
      "subject_type": "",
      "external_system": "shippo",
      "external_event_id": "evt_7f3df2",
      "external_status": "delivered",
      "message": "Carrier marked the package delivered.",
      "occurred_at": "2026-05-13T14:30:00Z",
      "received_at": "2026-05-13T14:30:01Z",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "buyer_notification_behavior": "request",
      "custom_details": {
        "provider_carrier": "ups"
      }
    }
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Mark fulfillment ready#

POST/v1/fulfillments/{fulfillment_id}/mark-readyIdempotentRequires scope: commerce.orders.write

Marks a fulfillment as ready.

Path parameters
fulfillment_idstringrequired

Flint fulfillment ID.

Request body
buyer_notification_behaviorenum

Controls buyer email handling. Omit or use send to send when recipient, template, and deduplication rules allow it. Use suppress when another system owns buyer messaging.

sendsuppress
occurred_atstring

Command occurrence timestamp.

reasonstring
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/fulfillments/ful_01ABCDEFGHIJKLMNOPQRSTUVWX/mark-ready \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "buyer_notification_behavior": "send"
  }'
JSON
{
  "data": {
    "fulfillment": {
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "type": "shipment",
      "status": "completed",
      "request_status": "",
      "line_items": [
        {
          "order_line_item_id": "li_123",
          "quantity": 1
        }
      ],
      "completed_at": "2026-05-13T14:30:00Z",
      "metadata": {
        "source": "dispatch"
      },
      "created_at": "2026-05-13T09:45:00Z",
      "updated_at": "2026-05-13T14:30:00Z"
    },
    "event": {
      "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "event_type": "tracking_updated",
      "subject_type": "",
      "external_system": "shippo",
      "external_event_id": "evt_7f3df2",
      "external_status": "delivered",
      "message": "Carrier marked the package delivered.",
      "occurred_at": "2026-05-13T14:30:00Z",
      "received_at": "2026-05-13T14:30:01Z",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "buyer_notification_behavior": "request",
      "custom_details": {
        "provider_carrier": "ups"
      }
    }
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Schedule fulfillment#

POST/v1/fulfillments/{fulfillment_id}/scheduleIdempotentRequires scope: commerce.orders.write

Schedules a service fulfillment for a time window.

Path parameters
fulfillment_idstringrequired

Flint fulfillment ID.

Request body
buyer_notification_behaviorenum

Controls buyer email handling. Omit or use send to send when recipient, template, and deduplication rules allow it. Use suppress when another system owns buyer messaging.

sendsuppress
occurred_atstring

Command occurrence timestamp.

reasonstring
scheduled_end_atstringrequired

Scheduled service window end.

scheduled_start_atstringrequired

Scheduled service window start.

Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/fulfillments/ful_01ABCDEFGHIJKLMNOPQRSTUVWX/schedule \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "scheduled_start_at": "2026-05-13T14:30:00Z",
    "scheduled_end_at": "2026-05-13T15:30:00Z",
    "buyer_notification_behavior": "send"
  }'
JSON
{
  "data": {
    "fulfillment": {
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "type": "shipment",
      "status": "completed",
      "request_status": "",
      "line_items": [
        {
          "order_line_item_id": "li_123",
          "quantity": 1
        }
      ],
      "completed_at": "2026-05-13T14:30:00Z",
      "metadata": {
        "source": "dispatch"
      },
      "created_at": "2026-05-13T09:45:00Z",
      "updated_at": "2026-05-13T14:30:00Z"
    },
    "event": {
      "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "event_type": "tracking_updated",
      "subject_type": "",
      "external_system": "shippo",
      "external_event_id": "evt_7f3df2",
      "external_status": "delivered",
      "message": "Carrier marked the package delivered.",
      "occurred_at": "2026-05-13T14:30:00Z",
      "received_at": "2026-05-13T14:30:01Z",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "buyer_notification_behavior": "request",
      "custom_details": {
        "provider_carrier": "ups"
      }
    }
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Create shipment#

POST/v1/fulfillments/{fulfillment_id}/shipmentsIdempotentRequires scope: commerce.orders.write

Creates a shipment execution record under a shipment-type fulfillment. A shipment groups one carrier leg. Create one package under it for each physical parcel, including single-parcel shipments.

Path parameters
fulfillment_idstringrequired

Flint shipment fulfillment ID.

Request body
option 1object
option 2object
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/fulfillments/ful_01ABCDEFGHIJKLMNOPQRSTUVWX/shipments \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "external_system": "merchant_wms",
    "external_reference_id": "ship_789",
    "metadata": {
      "warehouse": "east"
    }
  }'
JSON
{
  "data": {
    "shipment": {
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "direction": "outbound",
      "status": "created",
      "package_count": 0,
      "shipped_at": "2026-05-13T16:00:00Z",
      "handed_off_at": "2026-05-13T16:00:00Z",
      "external_system": "merchant_wms",
      "external_reference_id": "ship_789",
      "metadata": {
        "warehouse": "east"
      },
      "created_at": "2026-05-13T15:59:00Z",
      "updated_at": "2026-05-13T16:00:00Z"
    },
    "replayed": true
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Start fulfillment#

POST/v1/fulfillments/{fulfillment_id}/startIdempotentRequires scope: commerce.orders.write

Starts work on a fulfillment.

Path parameters
fulfillment_idstringrequired

Flint fulfillment ID.

Request body
buyer_notification_behaviorenum

Controls buyer email handling. Omit or use send to send when recipient, template, and deduplication rules allow it. Use suppress when another system owns buyer messaging.

sendsuppress
occurred_atstring

Command occurrence timestamp.

reasonstring
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/fulfillments/ful_01ABCDEFGHIJKLMNOPQRSTUVWX/start \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "buyer_notification_behavior": "send"
  }'
JSON
{
  "data": {
    "fulfillment": {
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "type": "shipment",
      "status": "completed",
      "request_status": "",
      "line_items": [
        {
          "order_line_item_id": "li_123",
          "quantity": 1
        }
      ],
      "completed_at": "2026-05-13T14:30:00Z",
      "metadata": {
        "source": "dispatch"
      },
      "created_at": "2026-05-13T09:45:00Z",
      "updated_at": "2026-05-13T14:30:00Z"
    },
    "event": {
      "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "event_type": "tracking_updated",
      "subject_type": "",
      "external_system": "shippo",
      "external_event_id": "evt_7f3df2",
      "external_status": "delivered",
      "message": "Carrier marked the package delivered.",
      "occurred_at": "2026-05-13T14:30:00Z",
      "received_at": "2026-05-13T14:30:01Z",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "buyer_notification_behavior": "request",
      "custom_details": {
        "provider_carrier": "ups"
      }
    }
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Create fulfillment#

POST/v1/orders/{order_id}/fulfillmentsIdempotentRequires scope: commerce.orders.write

Creates an explicit fulfillment for an order.

Path parameters
order_idstringrequired

Flint order ID.

Request body
option 1object
option 2object
option 3object
option 4object
option 5object
Response · 201
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/orders/ord_123/fulfillments \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "type": "service",
    "line_items": [
      {
        "order_line_item_id": "li_123",
        "quantity": 1
      }
    ],
    "service_details": {
      "notes": "On-site setup"
    },
    "metadata": {
      "source": "dispatch"
    }
  }'
JSON
{
  "data": {
    "order_id": "ord_123",
    "line_items": [
      {
        "order_line_item_id": "li_123",
        "name": "General Admission",
        "quantity": 2,
        "unit_price_money": {
          "amount": 2500,
          "currency": "USD"
        },
        "base_subtotal_money": {
          "amount": 5000,
          "currency": "USD"
        },
        "modifier_total_money": {
          "amount": 0,
          "currency": "USD"
        },
        "subtotal_money": {
          "amount": 5000,
          "currency": "USD"
        },
        "discount_money": {
          "amount": 0,
          "currency": "USD"
        },
        "tax_money": {
          "amount": 0,
          "currency": "USD"
        },
        "refunded_money": {
          "amount": 0,
          "currency": "USD"
        },
        "refunded_quantity": 0,
        "total_money": {
          "amount": 5000,
          "currency": "USD"
        },
        "metadata": {
          "ticket_type": "ga"
        },
        "inventory_snapshot": null
      }
    ],
    "status": "open",
    "payment_status": "unpaid",
    "refund_status": "none",
    "metadata": {
      "event_id": "evt_123"
    },
    "merchant_id": "mer_123",
    "customer_id": "cus_123",
    "pricing_amounts": {
      "subtotal_money": {
        "amount": 5000,
        "currency": "USD"
      },
      "discount_money": {
        "amount": 0,
        "currency": "USD"
      },
      "charge_money": {
        "amount": 0,
        "currency": "USD"
      },
      "tax_money": {
        "amount": 0,
        "currency": "USD"
      },
      "requested_tip_money": {
        "amount": 0,
        "currency": "USD"
      },
      "total_money": {
        "amount": 5000,
        "currency": "USD"
      }
    },
    "tax": {
      "enabled": false,
      "status": "",
      "mode": "",
      "taxability_reason": ""
    },
    "settlement_amounts": {
      "paid_money": {
        "amount": 0,
        "currency": "USD"
      },
      "refunded_money": {
        "amount": 0,
        "currency": "USD"
      },
      "net_collected_money": {
        "amount": 0,
        "currency": "USD"
      },
      "settled_tip_money": {
        "amount": 0,
        "currency": "USD"
      },
      "balance_money": {
        "amount": 5000,
        "currency": "USD"
      },
      "outstanding_money": {
        "amount": 5000,
        "currency": "USD"
      },
      "credit_money": {
        "amount": 0,
        "currency": "USD"
      }
    },
    "order_number": "1001",
    "origin": "api",
    "created_at": "2026-03-17T14:30:00Z",
    "updated_at": "2026-03-17T14:30:00Z",
    "inventory_demand_revision": 0
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

List packages#

GET/v1/packagesRequires scope: commerce.orders.read or commerce.orders.write

Lists package records, newest created first.

Query parameters
shipment_idstring

Optional shipment ID filter.

fulfillment_idstring

Optional fulfillment ID filter.

order_idstring

Optional order ID filter.

page_sizeinteger

Page size, default 20, max 100.

page_tokenstring

Cursor returned by the previous list response.

external_systemstring

Filter by external system identifier.

external_reference_idstring

Filter by caller-owned external package reference.

Response · 200
dataarray of objectrequired
metaobject
next_page_tokenstring
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDED
Bash
curl https://api.withflintpay.com/v1/packages \
  -H "Authorization: Bearer YOUR_API_KEY"
JSON
{
  "data": [
    {
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "status": "created",
      "carrier": "ups",
      "service_code": "ground",
      "tracking_number": "1Z999AA10123456784",
      "tracking_url": "https://track.example.com/1Z999AA10123456784",
      "weight": {
        "value": 1.2,
        "unit": "lb"
      },
      "dimensions": {
        "length": 8,
        "width": 6,
        "height": 4,
        "unit": "in"
      },
      "external_system": "merchant_wms",
      "external_reference_id": "pkg_789",
      "metadata": {
        "box": "small"
      },
      "created_at": "2026-05-13T16:01:00Z",
      "updated_at": "2026-05-13T16:01:00Z"
    }
  ],
  "next_page_token": "Zm9yd2FyZC1vbmx5LW9wYXF1ZS1jdXJzb3I",
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Get package#

GET/v1/packages/{package_id}Requires scope: commerce.orders.read or commerce.orders.write

Retrieves one package by ID.

Path parameters
package_idstringrequired

Flint package ID.

Query parameters
expandarray of enum

Supported expansions: order. Expansion requires commerce.orders.read. Limits: at most 10 unique expand paths per request; path depth at most 2. Send repeated expand parameters as the canonical form, for example expand=order&expand=order. Comma-separated values, expand[]=order, and numeric expand[0]=order are accepted for common client compatibility.

order
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDDANGLING_EXPANSION_REFERENCEEXPANSION_DEPENDENCY_UNAVAILABLEEXPANSION_RESOLUTION_FAILEDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINTERNAL_ERRORINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl https://api.withflintpay.com/v1/packages/pkg_01ABCDEFGHIJKLMNOPQRSTUVWX \
  -H "Authorization: Bearer YOUR_API_KEY"

Update package#

PATCH/v1/packages/{package_id}IdempotentRequires scope: commerce.orders.write

Updates non-lifecycle package fields such as carrier, tracking, label access, measurements, metadata, and caller-owned external references. Package status cannot be patched directly.

Path parameters
package_idstringrequired

Flint package ID.

Request body
buyer_notification_behaviorenum

Controls buyer email handling. Omit or use send to send when recipient, template, and deduplication rules allow it. Use suppress when another system owns buyer messaging.

sendsuppress
carrierstring
dimensionsobject
external_reference_idstring

Caller-owned package identifier in external_system. Set with external_system to enable duplicate detection and replay for that provider reference.

external_systemstring

External carrier, aggregator, or fulfillment platform name for this package. Set with external_reference_id to enable duplicate detection and replay for that provider reference; without external_reference_id this is stored as provenance only.

label_urlstring

Merchant or integration supplied HTTPS shipping-label URL for authenticated merchant workflows. Non-Flint URLs must include external_system for provenance. Flint does not currently manage label file hosting or buyer-facing label downloads.

metadatamap of string
service_codestring
status_reasonstring
tracking_numberstring
tracking_urlstring

Absolute HTTPS carrier tracking URL. Embedded URL credentials are rejected.

weightobject
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X PATCH https://api.withflintpay.com/v1/packages/pkg_01ABCDEFGHIJKLMNOPQRSTUVWX \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "tracking_number": "1Z999AA10987654321",
    "tracking_url": "https://track.example.com/1Z999AA10987654321",
    "metadata": {
      "box": "small",
      "packed_by": "warehouse-a"
    },
    "buyer_notification_behavior": "request"
  }'
JSON
{
  "data": {
    "package": {
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "status": "created",
      "carrier": "ups",
      "service_code": "ground",
      "tracking_number": "1Z999AA10123456784",
      "tracking_url": "https://track.example.com/1Z999AA10123456784",
      "weight": {
        "value": 1.2,
        "unit": "lb"
      },
      "dimensions": {
        "length": 8,
        "width": 6,
        "height": 4,
        "unit": "in"
      },
      "external_system": "merchant_wms",
      "external_reference_id": "pkg_789",
      "metadata": {
        "box": "small"
      },
      "created_at": "2026-05-13T16:01:00Z",
      "updated_at": "2026-05-13T16:01:00Z"
    },
    "fulfillment_event": {
      "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "event_type": "tracking_updated",
      "subject_type": "",
      "message": "Package tracking updated",
      "occurred_at": "2026-05-13T16:01:00Z",
      "received_at": "2026-05-13T16:01:00Z",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "buyer_notification_behavior": "request",
      "custom_details": {
        "current_carrier": "ups",
        "current_service_code": "ground",
        "current_tracking_number": "1Z999AA10123456784",
        "current_tracking_url": "https://track.example.com/1Z999AA10123456784",
        "resource_type": "package"
      }
    },
    "fulfillment_notifications": [
      {
        "fulfillment_notification_id": "fnt_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "recipient_email": "buyer@example.com",
        "channel": "email",
        "notification_type": "tracking_updated",
        "trigger_type": "fulfillment_event_created",
        "status": "pending",
        "created_at": "2026-05-13T16:01:00Z",
        "updated_at": "2026-05-13T16:01:00Z"
      }
    ]
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Create package event#

POST/v1/packages/{package_id}/eventsIdempotentRequires scope: commerce.orders.write

Records an observational event for a package and can advance package status.

Path parameters
package_idstringrequired

Flint package ID.

Request body
buyer_notification_behaviorenum

Controls buyer email handling. Omit or use send to send when recipient, template, and deduplication rules allow it. Use suppress when another system owns buyer messaging.

sendsuppress
custom_detailsmap of string
event_typeenumrequired
shippedin_transitout_for_deliverydelivereddelivery_attemptedtracking_updatedexceptionreturnedcustom
external_event_idstring
external_statusstring
external_systemstring
location_descriptionstring
messagestring
occurred_atstring

Provider event timestamp.

statusenum
createdpackedshippedin_transitout_for_deliverydelivereddelivery_attemptedexceptionreturnedvoided
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/packages/pkg_01ABCDEFGHIJKLMNOPQRSTUVWX/events \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "event_type": "delivered",
    "external_system": "shippo",
    "external_event_id": "evt_7f3df2",
    "external_status": "delivered",
    "message": "Carrier marked the package delivered.",
    "occurred_at": "2026-05-13T14:30:00Z",
    "status": "delivered",
    "buyer_notification_behavior": "send",
    "custom_details": {
      "provider_carrier": "ups"
    }
  }'
JSON
{
  "data": {
    "fulfillment_event": {
      "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "event_type": "tracking_updated",
      "subject_type": "",
      "external_system": "shippo",
      "external_event_id": "evt_7f3df2",
      "external_status": "delivered",
      "message": "Carrier marked the package delivered.",
      "occurred_at": "2026-05-13T14:30:00Z",
      "received_at": "2026-05-13T14:30:01Z",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "buyer_notification_behavior": "request",
      "custom_details": {
        "provider_carrier": "ups"
      }
    },
    "fulfillment": {
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "type": "shipment",
      "status": "completed",
      "request_status": "",
      "line_items": [
        {
          "order_line_item_id": "li_123",
          "quantity": 1
        }
      ],
      "completed_at": "2026-05-13T14:30:00Z",
      "metadata": {
        "source": "dispatch"
      },
      "created_at": "2026-05-13T09:45:00Z",
      "updated_at": "2026-05-13T14:30:00Z"
    },
    "replayed": true
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

List package items#

GET/v1/packages/{package_id}/itemsRequires scope: commerce.orders.read or commerce.orders.write

Lists order line quantities contained in packages.

Path parameters
package_idstringrequired

Flint package ID.

Query parameters
page_sizeinteger

Page size, default 20, max 100.

page_tokenstring

Cursor returned by the previous list response.

Response · 200
dataarray of objectrequired
metaobject
next_page_tokenstring
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl https://api.withflintpay.com/v1/packages/pkg_01ABCDEFGHIJKLMNOPQRSTUVWX/items \
  -H "Authorization: Bearer YOUR_API_KEY"
JSON
{
  "data": [
    {
      "package_item_id": "pki_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_line_item_id": "li_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "quantity": 1,
      "metadata": {
        "slot": "A"
      },
      "created_at": "2026-05-13T16:02:00Z",
      "updated_at": "2026-05-13T16:02:00Z"
    }
  ],
  "next_page_token": "Zm9yd2FyZC1vbmx5LW9wYXF1ZS1jdXJzb3I",
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Create package item#

POST/v1/packages/{package_id}/itemsIdempotentRequires scope: commerce.orders.write

Adds an order line quantity to a package. Total active package item quantities cannot exceed the parent fulfillment line-item quantity.

Path parameters
package_idstringrequired

Flint package ID.

Request body
metadatamap of string
order_line_item_idstringrequired
quantityintegerrequired

Whole-number quantity; fractional quantities are not supported.

Response · 201
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/packages/pkg_01ABCDEFGHIJKLMNOPQRSTUVWX/items \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "order_line_item_id": "li_01ABCDEFGHIJKLMNOPQRSTUVWX",
    "quantity": 1,
    "metadata": {
      "slot": "A"
    }
  }'
JSON
{
  "data": {
    "package_item_id": "pki_01ABCDEFGHIJKLMNOPQRSTUVWX",
    "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
    "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
    "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
    "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
    "order_line_item_id": "li_01ABCDEFGHIJKLMNOPQRSTUVWX",
    "quantity": 1,
    "metadata": {
      "slot": "A"
    },
    "created_at": "2026-05-13T16:02:00Z",
    "updated_at": "2026-05-13T16:02:00Z"
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Get package item#

GET/v1/packages/{package_id}/items/{package_item_id}Requires scope: commerce.orders.read or commerce.orders.write

Retrieves one package item by ID.

Path parameters
package_idstringrequired

Flint package ID.

package_item_idstringrequired

Flint package item ID.

Query parameters
expandarray of enum

Supported expansions: order. Expansion requires commerce.orders.read. Limits: at most 10 unique expand paths per request; path depth at most 2. Send repeated expand parameters as the canonical form, for example expand=order&expand=order. Comma-separated values, expand[]=order, and numeric expand[0]=order are accepted for common client compatibility.

order
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDDANGLING_EXPANSION_REFERENCEEXPANSION_DEPENDENCY_UNAVAILABLEEXPANSION_RESOLUTION_FAILEDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINTERNAL_ERRORINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl https://api.withflintpay.com/v1/packages/pkg_01ABCDEFGHIJKLMNOPQRSTUVWX/items/pki_01ABCDEFGHIJKLMNOPQRSTUVWX \
  -H "Authorization: Bearer YOUR_API_KEY"

Update package item#

PATCH/v1/packages/{package_id}/items/{package_item_id}IdempotentRequires scope: commerce.orders.write

Updates a package item quantity or metadata while the package is still mutable.

Path parameters
package_idstringrequired

Flint package ID.

package_item_idstringrequired

Flint package item ID.

Request body
metadatamap of string
quantityinteger

Whole-number quantity; fractional quantities are not supported.

Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X PATCH https://api.withflintpay.com/v1/packages/pkg_01ABCDEFGHIJKLMNOPQRSTUVWX/items/pki_01ABCDEFGHIJKLMNOPQRSTUVWX \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "quantity": 1,
    "metadata": {
      "slot": "B"
    }
  }'
JSON
{
  "data": {
    "package_item_id": "pki_01ABCDEFGHIJKLMNOPQRSTUVWX",
    "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
    "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
    "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
    "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
    "order_line_item_id": "li_01ABCDEFGHIJKLMNOPQRSTUVWX",
    "quantity": 1,
    "metadata": {
      "slot": "A"
    },
    "created_at": "2026-05-13T16:02:00Z",
    "updated_at": "2026-05-13T16:02:00Z"
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Delete package item#

DELETE/v1/packages/{package_id}/items/{package_item_id}IdempotentRequires scope: commerce.orders.write

Removes an order line quantity from a package while the package is still mutable.

Path parameters
package_idstringrequired

Flint package ID.

package_item_idstringrequired

Flint package item ID.

Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X DELETE https://api.withflintpay.com/v1/packages/pkg_01ABCDEFGHIJKLMNOPQRSTUVWX/items/pki_01ABCDEFGHIJKLMNOPQRSTUVWX \
  -H "Authorization: Bearer YOUR_API_KEY"
JSON
{
  "data": {
    "package_item_id": "pki_01ABCDEFGHIJKLMNOPQRSTUVWX",
    "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
    "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
    "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
    "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
    "order_line_item_id": "li_01ABCDEFGHIJKLMNOPQRSTUVWX",
    "quantity": 1,
    "metadata": {
      "slot": "A"
    },
    "created_at": "2026-05-13T16:02:00Z",
    "updated_at": "2026-05-13T16:02:00Z"
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Void package#

POST/v1/packages/{package_id}/voidIdempotentRequires scope: commerce.orders.write

Voids a package before carrier handoff and appends a package timeline event. Voided package items no longer count against fulfillment package allocation capacity.

Path parameters
package_idstringrequired

Flint package ID.

Request body
buyer_notification_behaviorenum

Controls buyer email handling. Omit or use send to send when recipient, template, and deduplication rules allow it. Use suppress when another system owns buyer messaging.

sendsuppress
occurred_atstring

Void event timestamp.

reasonstring
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/packages/pkg_01ABCDEFGHIJKLMNOPQRSTUVWX/void \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "reason": "Package was repacked before pickup.",
    "occurred_at": "2026-05-13T16:09:00Z",
    "buyer_notification_behavior": "suppress"
  }'
JSON
{
  "data": {
    "package": {
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "status": "voided",
      "carrier": "ups",
      "service_code": "ground",
      "tracking_number": "1Z999AA10123456784",
      "tracking_url": "https://track.example.com/1Z999AA10123456784",
      "weight": {
        "value": 1.2,
        "unit": "lb"
      },
      "dimensions": {
        "length": 8,
        "width": 6,
        "height": 4,
        "unit": "in"
      },
      "external_system": "merchant_wms",
      "external_reference_id": "pkg_789",
      "metadata": {
        "box": "small"
      },
      "created_at": "2026-05-13T16:01:00Z",
      "updated_at": "2026-05-13T16:08:01Z"
    },
    "event": {
      "fulfillment_event_id": "fev_01ZYXWVUTSRQPONMLKJIHGFEC",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "event_type": "status_changed",
      "subject_type": "package",
      "occurred_at": "2026-05-13T16:09:00Z",
      "received_at": "2026-05-13T16:09:01Z",
      "created_at": "2026-05-13T16:09:01Z",
      "previous_status": "created",
      "current_status": "voided",
      "reason": "Package was repacked before pickup.",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "buyer_notification_behavior": ""
    }
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

List shipments#

GET/v1/shipmentsRequires scope: commerce.orders.read or commerce.orders.write

Lists shipment execution records, newest created first.

Query parameters
order_idstring

Optional order ID filter.

fulfillment_idstring

Optional fulfillment ID filter.

page_sizeinteger

Page size, default 20, max 100.

page_tokenstring

Cursor returned by the previous list response.

external_systemstring

Filter by external system identifier.

external_reference_idstring

Filter by caller-owned external shipment reference.

return_idstring

Filter by linked Return ID.

handed_off_afterstring

RFC3339 lower bound for handed_off_at.

handed_off_beforestring

RFC3339 upper bound for handed_off_at.

created_afterstring

RFC3339 lower bound for created_at.

created_beforestring

RFC3339 upper bound for created_at.

Response · 200
dataarray of objectrequired
metaobject
next_page_tokenstring
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDED
Bash
curl https://api.withflintpay.com/v1/shipments \
  -H "Authorization: Bearer YOUR_API_KEY"
JSON
{
  "data": [
    {
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "direction": "outbound",
      "status": "created",
      "package_count": 0,
      "shipped_at": "2026-05-13T16:00:00Z",
      "handed_off_at": "2026-05-13T16:00:00Z",
      "external_system": "merchant_wms",
      "external_reference_id": "ship_789",
      "metadata": {
        "warehouse": "east"
      },
      "created_at": "2026-05-13T15:59:00Z",
      "updated_at": "2026-05-13T16:00:00Z"
    }
  ],
  "next_page_token": "Zm9yd2FyZC1vbmx5LW9wYXF1ZS1jdXJzb3I",
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Get shipment#

GET/v1/shipments/{shipment_id}Requires scope: commerce.orders.read or commerce.orders.write

Retrieves one shipment execution record by ID.

Path parameters
shipment_idstringrequired

Flint shipment ID.

Query parameters
expandarray of enum

Supported expansions: order. Expansion requires commerce.orders.read. Limits: at most 10 unique expand paths per request; path depth at most 2. Send repeated expand parameters as the canonical form, for example expand=order&expand=order. Comma-separated values, expand[]=order, and numeric expand[0]=order are accepted for common client compatibility.

order
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDDANGLING_EXPANSION_REFERENCEEXPANSION_DEPENDENCY_UNAVAILABLEEXPANSION_RESOLUTION_FAILEDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINTERNAL_ERRORINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUNDSERVICE_UNAVAILABLE
Bash
curl https://api.withflintpay.com/v1/shipments/shp_01ABCDEFGHIJKLMNOPQRSTUVWX \
  -H "Authorization: Bearer YOUR_API_KEY"

Update shipment#

PATCH/v1/shipments/{shipment_id}IdempotentRequires scope: commerce.orders.write

Updates shipment metadata and caller-owned external references. Shipment status is derived from package statuses and cannot be patched directly.

Path parameters
shipment_idstringrequired

Flint shipment ID.

Request body
external_reference_idstring

Caller-owned shipment identifier in external_system. Set with external_system to enable duplicate detection and replay for that provider reference.

external_systemstring

External carrier, aggregator, or fulfillment platform name for this shipment. Set with external_reference_id to enable duplicate detection and replay for that provider reference; without external_reference_id this is stored as provenance only.

metadatamap of string
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X PATCH https://api.withflintpay.com/v1/shipments/shp_01ABCDEFGHIJKLMNOPQRSTUVWX \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "metadata": {
      "route": "A7",
      "warehouse": "east"
    }
  }'
JSON
{
  "data": {
    "shipment": {
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "direction": "outbound",
      "status": "created",
      "package_count": 0,
      "shipped_at": "2026-05-13T16:00:00Z",
      "handed_off_at": "2026-05-13T16:00:00Z",
      "external_system": "merchant_wms",
      "external_reference_id": "ship_789",
      "metadata": {
        "warehouse": "east"
      },
      "created_at": "2026-05-13T15:59:00Z",
      "updated_at": "2026-05-13T16:00:00Z"
    }
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Create shipment event#

POST/v1/shipments/{shipment_id}/eventsIdempotentRequires scope: commerce.orders.write

Records an observational event for a shipment. Shipment status is always derived from package status.

Path parameters
shipment_idstringrequired

Flint shipment ID.

Request body
buyer_notification_behaviorenum

Controls buyer email handling. Omit or use send to send when recipient, template, and deduplication rules allow it. Use suppress when another system owns buyer messaging.

sendsuppress
custom_detailsmap of string
event_typeenumrequired
shippedin_transitout_for_deliverydelivereddelivery_attemptedtracking_updatedexceptionreturnedcustom
external_event_idstring
external_statusstring
external_systemstring
location_descriptionstring
messagestring
occurred_atstring

Provider event timestamp.

Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/shipments/shp_01ABCDEFGHIJKLMNOPQRSTUVWX/events \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "event_type": "tracking_updated",
    "external_system": "shippo",
    "external_event_id": "evt_7f3df2",
    "external_status": "manifested",
    "message": "The carrier manifest was updated.",
    "occurred_at": "2026-05-13T14:30:00Z",
    "buyer_notification_behavior": "send",
    "custom_details": {
      "provider_carrier": "ups"
    }
  }'
JSON
{
  "data": {
    "fulfillment_event": {
      "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "event_type": "tracking_updated",
      "subject_type": "",
      "external_system": "shippo",
      "external_event_id": "evt_7f3df2",
      "external_status": "delivered",
      "message": "Carrier marked the package delivered.",
      "occurred_at": "2026-05-13T14:30:00Z",
      "received_at": "2026-05-13T14:30:01Z",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "buyer_notification_behavior": "request",
      "custom_details": {
        "provider_carrier": "ups"
      }
    },
    "fulfillment": {
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "type": "shipment",
      "status": "completed",
      "request_status": "",
      "line_items": [
        {
          "order_line_item_id": "li_123",
          "quantity": 1
        }
      ],
      "completed_at": "2026-05-13T14:30:00Z",
      "metadata": {
        "source": "dispatch"
      },
      "created_at": "2026-05-13T09:45:00Z",
      "updated_at": "2026-05-13T14:30:00Z"
    },
    "replayed": true
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Create package#

POST/v1/shipments/{shipment_id}/packagesIdempotentRequires scope: commerce.orders.write

Creates a package record under a shipment. Package status transitions use explicit future status APIs; this endpoint records package-level carrier, tracking, label, measurement, and external correlation fields.

Path parameters
shipment_idstringrequired

Flint shipment ID.

Request body
buyer_notification_behaviorenum

Controls buyer email handling. Omit or use send to send when recipient, template, and deduplication rules allow it. Use suppress when another system owns buyer messaging. On create, tracking fields also record an initial tracking_updated fulfillment event; tracking PATCH requests always record tracking_updated events.

sendsuppress
carrierstring
dimensionsobject
external_reference_idstring

Caller-owned package identifier in external_system. Set with external_system to enable duplicate detection and replay for that provider reference.

external_systemstring

External carrier, aggregator, or fulfillment platform name for this package. Set with external_reference_id to enable duplicate detection and replay for that provider reference; without external_reference_id this is stored as provenance only.

label_urlstring

Merchant or integration supplied HTTPS shipping-label URL for authenticated merchant workflows. Non-Flint URLs must include external_system for provenance. Flint does not currently manage label file hosting or buyer-facing label downloads.

metadatamap of string
service_codestring
status_reasonstring
tracking_numberstring
tracking_urlstring

Absolute HTTPS carrier tracking URL. Embedded URL credentials are rejected.

weightobject
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/shipments/shp_01ABCDEFGHIJKLMNOPQRSTUVWX/packages \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "carrier": "ups",
    "service_code": "ground",
    "tracking_number": "1Z999AA10123456784",
    "tracking_url": "https://track.example.com/1Z999AA10123456784",
    "weight": {
      "value": 1.2,
      "unit": "lb"
    },
    "dimensions": {
      "length": 8,
      "width": 6,
      "height": 4,
      "unit": "in"
    },
    "external_system": "merchant_wms",
    "external_reference_id": "pkg_789",
    "metadata": {
      "box": "small"
    },
    "buyer_notification_behavior": "request"
  }'
JSON
{
  "data": {
    "package": {
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "status": "created",
      "carrier": "ups",
      "service_code": "ground",
      "tracking_number": "1Z999AA10123456784",
      "tracking_url": "https://track.example.com/1Z999AA10123456784",
      "weight": {
        "value": 1.2,
        "unit": "lb"
      },
      "dimensions": {
        "length": 8,
        "width": 6,
        "height": 4,
        "unit": "in"
      },
      "external_system": "merchant_wms",
      "external_reference_id": "pkg_789",
      "metadata": {
        "box": "small"
      },
      "created_at": "2026-05-13T16:01:00Z",
      "updated_at": "2026-05-13T16:01:00Z"
    },
    "fulfillment_event": {
      "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "event_type": "tracking_updated",
      "subject_type": "",
      "message": "Package tracking updated",
      "occurred_at": "2026-05-13T16:01:00Z",
      "received_at": "2026-05-13T16:01:00Z",
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "buyer_notification_behavior": "request",
      "custom_details": {
        "current_carrier": "ups",
        "current_service_code": "ground",
        "current_tracking_number": "1Z999AA10123456784",
        "current_tracking_url": "https://track.example.com/1Z999AA10123456784",
        "resource_type": "package"
      }
    },
    "fulfillment_notifications": [
      {
        "fulfillment_notification_id": "fnt_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "fulfillment_event_id": "fev_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "recipient_email": "buyer@example.com",
        "channel": "email",
        "notification_type": "tracking_updated",
        "trigger_type": "fulfillment_event_created",
        "status": "pending",
        "created_at": "2026-05-13T16:01:00Z",
        "updated_at": "2026-05-13T16:01:00Z"
      }
    ],
    "replayed": true
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Void shipment#

POST/v1/shipments/{shipment_id}/voidIdempotentRequires scope: commerce.orders.write

Voids a shipment before carrier handoff and voids all child packages that have not shipped. The action appends timeline events for the shipment and affected packages.

Path parameters
shipment_idstringrequired

Flint shipment ID.

Request body
buyer_notification_behaviorenum

Controls buyer email handling. Omit or use send to send when recipient, template, and deduplication rules allow it. Use suppress when another system owns buyer messaging.

sendsuppress
occurred_atstring

Void event timestamp.

reasonstring
Response · 200
dataobjectrequired
metaobject
request_idstring

Error codes

AUTH_REQUIREDFULFILLMENT_APPROVAL_REQUIREDFULFILLMENT_COMPLETEDFULFILLMENT_COMPLETED_DETAILS_REPLACEMENTFULFILLMENT_COMPLETION_TIMESTAMP_CONFLICTFULFILLMENT_EVENT_SUBJECT_INVALIDFULFILLMENT_REASON_INVALIDFULFILLMENT_REQUIREMENT_REQUIREDFULFILLMENT_SCHEDULE_NOT_ALLOWEDFULFILLMENT_SCHEDULE_REQUIREDFULFILLMENT_TERMINALFULFILLMENT_TYPE_REQUIREDINSUFFICIENT_SCOPEINVALID_API_KEYINVALID_REQUESTRATE_LIMIT_EXCEEDEDRESOURCE_NOT_FOUND
Bash
curl -X POST https://api.withflintpay.com/v1/shipments/shp_01ABCDEFGHIJKLMNOPQRSTUVWX/void \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "reason": "Label canceled before carrier pickup.",
    "occurred_at": "2026-05-13T16:08:00Z",
    "buyer_notification_behavior": "suppress"
  }'
JSON
{
  "data": {
    "shipment": {
      "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
      "direction": "outbound",
      "status": "voided",
      "package_count": 0,
      "shipped_at": "2026-05-13T16:00:00Z",
      "handed_off_at": "2026-05-13T16:00:00Z",
      "external_system": "merchant_wms",
      "external_reference_id": "ship_789",
      "metadata": {
        "warehouse": "east"
      },
      "created_at": "2026-05-13T15:59:00Z",
      "updated_at": "2026-05-13T16:08:01Z"
    },
    "packages": [
      {
        "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "status": "voided",
        "carrier": "ups",
        "service_code": "ground",
        "tracking_number": "1Z999AA10123456784",
        "tracking_url": "https://track.example.com/1Z999AA10123456784",
        "weight": {
          "value": 1.2,
          "unit": "lb"
        },
        "dimensions": {
          "length": 8,
          "width": 6,
          "height": 4,
          "unit": "in"
        },
        "external_system": "merchant_wms",
        "external_reference_id": "pkg_789",
        "metadata": {
          "box": "small"
        },
        "created_at": "2026-05-13T16:01:00Z",
        "updated_at": "2026-05-13T16:08:01Z"
      }
    ],
    "events": [
      {
        "fulfillment_event_id": "fev_01ZYXWVUTSRQPONMLKJIHGFED",
        "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "event_type": "status_changed",
        "subject_type": "shipment",
        "occurred_at": "2026-05-13T16:08:00Z",
        "received_at": "2026-05-13T16:08:01Z",
        "created_at": "2026-05-13T16:08:01Z",
        "previous_status": "created",
        "current_status": "voided",
        "reason": "Label canceled before carrier pickup.",
        "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "buyer_notification_behavior": ""
      },
      {
        "fulfillment_event_id": "fev_01ZYXWVUTSRQPONMLKJIHGFEC",
        "order_id": "ord_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "fulfillment_id": "ful_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "event_type": "status_changed",
        "subject_type": "package",
        "occurred_at": "2026-05-13T16:09:00Z",
        "received_at": "2026-05-13T16:09:01Z",
        "created_at": "2026-05-13T16:09:01Z",
        "previous_status": "created",
        "current_status": "voided",
        "reason": "Package was repacked before pickup.",
        "shipment_id": "shp_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "package_id": "pkg_01ABCDEFGHIJKLMNOPQRSTUVWX",
        "buyer_notification_behavior": ""
      }
    ]
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}
Rate this doc