Orders
Orders for your products, from every channel.
This page covers the order object and the import issue object.
The order object
An order for your products, from any channel: what was ordered, where it ships, its status, what was charged and what you earn.
Attributes
- idstring
Unique identifier of the order, prefixed with
ord_. Treat it as an opaque string: store it and compare it, never parse it. - objectstring
Names the type of this object. Always
order. - numberstring
Human-readable order number, the one your customers and 3DAPI support use.
- channelOrderChannel
Where the order came from:
storefront: a buyer checked out on your 3DAPI store and paid by card.shopify: imported from your Shopify store.shipstation: imported from ShipStation.api: created through the API.manual: placed by you from the dashboard, charged at cost.replacement: a reprint after a quality issue;charges.paid_bysays who paid for it.
Possible valuesstorefrontshopifyshipstationapimanualreplacement - statusOrderStatus
Where the order is:
awaiting_payment: you still have to pay for it.paid: paid, waiting to be assigned to a production partner.assigned: a production partner has it; production has not started.in_production: being made.shipped: on its way to the customer.shippinghas the tracking details.completed: delivered and settled.on_hold: there is not enough stock to fulfil it.rejected: the production partner refused it.returned: sent back after shipping.cancelled: cancelled, usually after a full refund.
Possible valuesawaiting_paymentpaidassignedin_productionshippedcompletedon_holdrejectedreturnedcancelled - customerOrderCustomer or null
Who ordered. Personal data: null unless the API key has the
orders:read_customerscope. - shipping_addressOrderShippingAddress
Where the order ships. The country is always shown because it decides shipping and VAT; the rest is personal data.
- chargesOrderCharges
What the payer was charged for the order.
- earningsOrderEarnings or null
What you earn from a buyer-paid order and what was taken off it. Null when you paid for the order yourself.
- shippingOrderShipping
Shipping details.
- externalobject or null
The original order in the sales channel, for Shopify and ShipStation orders. Null otherwise.
- customer_notesstring or null
Notes the customer left at checkout. Null without the
orders:read_customerscope, since buyers often write personal details here. - qcobject
Quality control on this order. List QC tickets with
orderfor the details. - created_attimestamp
Point in time, ISO 8601 in UTC.
- updated_attimestamp
Point in time, ISO 8601 in UTC.
- item_countinteger
Units ordered across all lines.
- itemsarray of OrderItem
The order lines.
- refundsarray of OrderRefund
Completed refunds, oldest first. Empty when none.
{
"id": "ord_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "order",
"number": "PV-SCN-1701A372",
"channel": "storefront",
"status": "in_production",
"customer": {
"name": "Ana Popescu",
"email": "ana@example.com",
"phone": null,
"company": null
},
"shipping_address": {
"formatted": "Str. Test 1, Cluj, RO",
"city": "Cluj",
"country": "Romania",
"country_code": "RO"
},
"charges": {
"paid_by": "buyer",
"items": {
"amount": 1800,
"currency": "usd"
},
"shipping": {
"amount": 600,
"currency": "usd"
},
"vat": {
"amount": {
"amount": 0,
"currency": "usd"
},
"rate": 0,
"included": false,
"country": null
},
"sample_credit": null,
"total": {
"amount": 2400,
"currency": "usd"
}
},
"earnings": {
"manufacturing": {
"amount": 900,
"currency": "usd"
},
"platform_fee": {
"amount": 300,
"currency": "usd"
},
"payment_processing": {
"amount": 102,
"currency": "usd"
},
"refunded": {
"amount": 0,
"currency": "usd"
},
"net": {
"amount": 498,
"currency": "usd"
}
},
"shipping": {
"tier": "small",
"carrier": null,
"tracking_number": null,
"shipped_at": null
},
"external": null,
"customer_notes": null,
"qc": {
"open_tickets": 1,
"blocks_shipping": true
},
"created_at": "2026-10-09T08:39:29Z",
"updated_at": "2026-10-09T08:40:02Z",
"item_count": 1,
"items": [
{
"id": "itm_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "order_item",
"product": {
"id": "prd_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "product",
"name": "Clicker"
},
"variant": {
"id": "var_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "variant",
"name": "Clicker Blue"
},
"sku": "CLICK-BLUE",
"quantity": 1,
"unit_price": {
"amount": 1800,
"currency": "usd"
},
"total": {
"amount": 1800,
"currency": "usd"
},
"stock_used": [],
"fulfilled_from_stock": false
}
],
"refunds": []
}List orders
GET/
- Credentials
- An API key with the
orders:readscope (full access includes every scope). A signed-in dashboard session works too. - For
- Designers
- Operation id
list_orders
Lists orders for your products from every channel, newest first. Items and refunds are left out to stay small; get the order for them, or pass expand[]=items. Customer details need the orders:read_customer scope. Designers only.
Query parameters
- statusarray of OrderStatus
Only orders in these states. Repeat for several, for example
status=paid&status=assigned.Possible valuesawaiting_paymentpaidassignedin_productionshippedcompletedon_holdrejectedreturnedcancelled - channelarray of OrderChannel
Only orders from these channels.
Possible valuesstorefrontshopifyshipstationapimanualreplacement - searchstring
Matches the order number, or the customer name or email when the key has
orders:read_customer. - created_aftertimestamp
Only orders placed after this time.
- created_beforetimestamp
Only orders placed before this time.
- updated_aftertimestamp
Only orders changed after this time. Use it to sync status changes since your last poll.
- sortstring
Order of results. A leading
-means descending.Possible values-created_atcreated_at-updated_at - limitinteger
How many results per page, from 1 to 100.
- cursorstring
Where to continue from: the
next_cursorof the previous page. Omit for the first page. - expand[]array of string
Replace references with full objects. Repeat the parameter for several paths, for example
expand[]=items. Unknown paths are rejected withinvalid_expand.
Returns200 OK
A page of orders.
Responses
- 200
A page of orders.
- 400
The request is invalid.
details.errorslists each problem (validation_failed), or anexpand[]path is unknown (invalid_expand). - 401
Credentials are missing (
missing_credentials), the API key is unknown or inactive (invalid_api_key), the session expired (invalid_session), or both a key and a session were sent (ambiguous_credentials). - 403
The credentials are valid but not allowed to do this: a scope is missing (
missing_scope), the endpoint is for another kind of account (actor_not_allowed) or another kind of credential (credential_not_allowed), the account may no longer use the API (account_blacklisted), or the account must change something first, in which casedetails.fix_urllinks to the dashboard page that fixes it. - 429
Too many requests (
rate_limited): the limit is 500 per minute per API key (or signed-in user). Wait for the number of seconds in theRetry-Afterheader, then retry;detailshaslimit,window_seconds,reset_atandretry_after_seconds.
Errors use the error object.
curl "https://public-api.dapi.digital/v2/orders" \
-H "x-api-key: $DAPI_API_KEY"{
"object": "list",
"data": [
{
"id": "ord_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "order",
"number": "PV-SCN-1701A372",
"channel": "storefront",
"status": "in_production",
"customer": {
"name": "Ana Popescu",
"email": "ana@example.com",
"phone": null,
"company": null
},
"shipping_address": {
"formatted": "Str. Test 1, Cluj, RO",
"city": "Cluj",
"country": "Romania",
"country_code": "RO"
},
"charges": {
"paid_by": "buyer",
"items": {
"amount": 1800,
"currency": "usd"
},
"shipping": {
"amount": 600,
"currency": "usd"
},
"vat": {
"amount": {
"amount": 0,
"currency": "usd"
},
"rate": 0,
"included": false,
"country": null
},
"sample_credit": null,
"total": {
"amount": 2400,
"currency": "usd"
}
},
"earnings": {
"manufacturing": {
"amount": 900,
"currency": "usd"
},
"platform_fee": {
"amount": 300,
"currency": "usd"
},
"payment_processing": {
"amount": 102,
"currency": "usd"
},
"refunded": {
"amount": 0,
"currency": "usd"
},
"net": {
"amount": 498,
"currency": "usd"
}
},
"shipping": {
"tier": "small",
"carrier": null,
"tracking_number": null,
"shipped_at": null
},
"external": null,
"customer_notes": null,
"qc": {
"open_tickets": 1,
"blocks_shipping": true
},
"created_at": "2026-10-09T08:39:29Z",
"updated_at": "2026-10-09T08:40:02Z",
"item_count": 1
}
],
"has_more": false,
"next_cursor": null
}Create an order
POST/
- Credentials
- An API key with the
orders:writescope (full access includes every scope). A signed-in dashboard session works too. - For
- Designers
- Operation id
create_order
Orders your own variants for a customer, for example a sale on your own website. You pay at cost (production price, shipping and VAT) from your wallet; if the balance is short, the difference is charged to your saved card. The order comes back paid, numbered 2AP..., with channel: api, and goes to production. If payment fails, no order is created. Designers only.
Headers
- Idempotency-Keystring
Any unique string, for example a UUID. Sending the same request again with the same key within 24 hours returns the first response without doing anything twice. Reusing a key with a different body is refused with
idempotency_key_reused. A refused request (4xx) frees the key so you can correct and resend it; a server error (5xx) is kept and returned again, because the write may already have happened: check the resource before retrying with a new key.
Request body
- itemsarray of objectRequired
What to produce and ship: 1 to 100 lines of 1 to 1000 units each.
- customerobjectRequired
Who receives the order.
- shipping_addressobjectRequired
Where to ship. Stored as one formatted line plus the country, which the order returns as
shipping_address.formatted. - referencestring or null
Your own order id, for matching. Letters, digits,
-and_. Returned asexternal.channel_order_idand searchable. - customer_notesstring or null
Free-text notes for the order, up to 2000 characters. Returned as
customer_notes, which is only shown to keys with theorders:read_customerscope. - discount_codestring or null
A discount code from 3DAPI.
- use_sample_creditboolean
Spend your sample credit on this order first. How much applies is decided by 3DAPI and shown in
charges.sample_credit.
Returns201 Created
The order, paid. Returns the order object.
Responses
- 201
The order, paid.
- 400
The request is invalid (
validation_failed), or a discount code is unknown (invalid_discount_code). - 401
Credentials are missing (
missing_credentials), the API key is unknown or inactive (invalid_api_key), the session expired (invalid_session), or both a key and a session were sent (ambiguous_credentials). - 402
Payment failed: no saved card to cover the shortfall, or the card was declined (
payment_failed). No order was created. - 403
The credentials are valid but not allowed to do this: a scope is missing (
missing_scope), the endpoint is for another kind of account (actor_not_allowed) or another kind of credential (credential_not_allowed), the account may no longer use the API (account_blacklisted), or the account must change something first, in which casedetails.fix_urllinks to the dashboard page that fixes it. - 422
A variant is not orderable: unknown, inactive, or its product is not approved (
variant_not_orderable). - 429
Too many requests (
rate_limited): the limit is 500 per minute per API key (or signed-in user), plus 60 per minute per API key (or signed-in user) for quote, upload, order and payment operations. Wait for the number of seconds in theRetry-Afterheader, then retry;detailshaslimit,window_seconds,reset_atandretry_after_seconds.
Errors use the error object.
curl -X POST "https://public-api.dapi.digital/v2/orders" \
-H "x-api-key: $DAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"items": [
{
"variant": "var_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"quantity": 2
}
],
"customer": {
"name": "Ana Popescu",
"email": "ana@example.com",
"phone": "+40712345678"
},
"shipping_address": {
"line1": "Str. Test 1",
"city": "Cluj-Napoca",
"postal_code": "400001",
"country_code": "RO"
},
"reference": "SHOP-10023"
}'{
"id": "ord_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "order",
"number": "2AP7KD2XQ",
"channel": "api",
"status": "paid",
"customer": {
"name": "Ana Popescu",
"email": "ana@example.com",
"phone": null,
"company": null
},
"shipping_address": {
"formatted": "Str. Test 1, Cluj, RO",
"city": "Cluj",
"country": "Romania",
"country_code": "RO"
},
"charges": {
"paid_by": "you",
"items": {
"amount": 1800,
"currency": "usd"
},
"shipping": {
"amount": 600,
"currency": "usd"
},
"vat": {
"amount": {
"amount": 0,
"currency": "usd"
},
"rate": 0,
"included": false,
"country": null
},
"sample_credit": null,
"total": {
"amount": 2400,
"currency": "usd"
}
},
"earnings": null,
"shipping": {
"tier": "small",
"carrier": null,
"tracking_number": null,
"shipped_at": null
},
"external": {
"channel_order_id": "SHOP-10023",
"channel_total": null
},
"customer_notes": null,
"qc": {
"open_tickets": 1,
"blocks_shipping": true
},
"created_at": "2026-10-09T08:39:29Z",
"updated_at": "2026-10-09T08:40:02Z",
"item_count": 1,
"items": [
{
"id": "itm_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "order_item",
"product": {
"id": "prd_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "product",
"name": "Clicker"
},
"variant": {
"id": "var_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "variant",
"name": "Clicker Blue"
},
"sku": "CLICK-BLUE",
"quantity": 1,
"unit_price": {
"amount": 1800,
"currency": "usd"
},
"total": {
"amount": 1800,
"currency": "usd"
},
"stock_used": [],
"fulfilled_from_stock": false
}
],
"refunds": []
}Cancel an order
POST/
- Credentials
- An API key with the
orders:writescope (full access includes every scope). A signed-in dashboard session works too. - For
- Designers
- Operation id
cancel_order
Cancels one of your orders while it is still paid (no production partner has started) and refunds it in full to where it was paid from. Wallet-paid orders come back cancelled at once; card-paid orders stay paid until the card refund completes, then become cancelled and order.cancelled is sent. Designers only.
Path parameters
- idstringRequired
Unique identifier of the order, prefixed with
ord_. Treat it as an opaque string: store it and compare it, never parse it.
Headers
- Idempotency-Keystring
Any unique string, for example a UUID. Sending the same request again with the same key within 24 hours returns the first response without doing anything twice. Reusing a key with a different body is refused with
idempotency_key_reused. A refused request (4xx) frees the key so you can correct and resend it; a server error (5xx) is kept and returned again, because the write may already have happened: check the resource before retrying with a new key.
Returns200 OK
The order, cancelled or with its refund on the way. Returns the order object.
Responses
- 200
The order, cancelled or with its refund on the way.
- 401
Credentials are missing (
missing_credentials), the API key is unknown or inactive (invalid_api_key), the session expired (invalid_session), or both a key and a session were sent (ambiguous_credentials). - 403
The credentials are valid but not allowed to do this: a scope is missing (
missing_scope), the endpoint is for another kind of account (actor_not_allowed) or another kind of credential (credential_not_allowed), the account may no longer use the API (account_blacklisted), or the account must change something first, in which casedetails.fix_urllinks to the dashboard page that fixes it. - 404
You have no order with this id (
order_not_found). - 409
The order cannot be cancelled here (
order_not_cancellable): it is pastpaid(contact support), a refund on it is already on the way, it is not an order you paid for yourself (API and manual orders only), it was created through API v1 (cancel those from the dashboard or contact support), it was paid by card and card refunds are unavailable, or the card refund was refused. The message says which; the order and your money are unchanged. - 429
Too many requests (
rate_limited): the limit is 500 per minute per API key (or signed-in user), plus 60 per minute per API key (or signed-in user) for quote, upload, order and payment operations. Wait for the number of seconds in theRetry-Afterheader, then retry;detailshaslimit,window_seconds,reset_atandretry_after_seconds.
Errors use the error object.
curl -X POST "https://public-api.dapi.digital/v2/orders/ord_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu/cancel" \
-H "x-api-key: $DAPI_API_KEY"{
"id": "ord_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "order",
"number": "PV-SCN-1701A372",
"channel": "storefront",
"status": "cancelled",
"customer": {
"name": "Ana Popescu",
"email": "ana@example.com",
"phone": null,
"company": null
},
"shipping_address": {
"formatted": "Str. Test 1, Cluj, RO",
"city": "Cluj",
"country": "Romania",
"country_code": "RO"
},
"charges": {
"paid_by": "buyer",
"items": {
"amount": 1800,
"currency": "usd"
},
"shipping": {
"amount": 600,
"currency": "usd"
},
"vat": {
"amount": {
"amount": 0,
"currency": "usd"
},
"rate": 0,
"included": false,
"country": null
},
"sample_credit": null,
"total": {
"amount": 2400,
"currency": "usd"
}
},
"earnings": {
"manufacturing": {
"amount": 900,
"currency": "usd"
},
"platform_fee": {
"amount": 300,
"currency": "usd"
},
"payment_processing": {
"amount": 102,
"currency": "usd"
},
"refunded": {
"amount": 0,
"currency": "usd"
},
"net": {
"amount": 498,
"currency": "usd"
}
},
"shipping": {
"tier": "small",
"carrier": null,
"tracking_number": null,
"shipped_at": null
},
"external": null,
"customer_notes": null,
"qc": {
"open_tickets": 1,
"blocks_shipping": true
},
"created_at": "2026-10-09T08:39:29Z",
"updated_at": "2026-10-09T08:40:02Z",
"item_count": 1,
"items": [
{
"id": "itm_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "order_item",
"product": {
"id": "prd_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "product",
"name": "Clicker"
},
"variant": {
"id": "var_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "variant",
"name": "Clicker Blue"
},
"sku": "CLICK-BLUE",
"quantity": 1,
"unit_price": {
"amount": 1800,
"currency": "usd"
},
"total": {
"amount": 1800,
"currency": "usd"
},
"stock_used": [],
"fulfilled_from_stock": false
}
],
"refunds": []
}Get an order
GET/
- Credentials
- An API key with the
orders:readscope (full access includes every scope). A signed-in dashboard session works too. - For
- Designers
- Operation id
get_order
Returns one order with its items, charges, earnings, shipping and refunds. Customer details need the orders:read_customer scope. Designers only.
Path parameters
- idstringRequired
Unique identifier of the order, prefixed with
ord_. Treat it as an opaque string: store it and compare it, never parse it.
Returns200 OK
The order. Returns the order object.
Responses
- 200
The order.
- 401
Credentials are missing (
missing_credentials), the API key is unknown or inactive (invalid_api_key), the session expired (invalid_session), or both a key and a session were sent (ambiguous_credentials). - 403
The credentials are valid but not allowed to do this: a scope is missing (
missing_scope), the endpoint is for another kind of account (actor_not_allowed) or another kind of credential (credential_not_allowed), the account may no longer use the API (account_blacklisted), or the account must change something first, in which casedetails.fix_urllinks to the dashboard page that fixes it. - 404
You have no order with this id (
order_not_found). - 429
Too many requests (
rate_limited): the limit is 500 per minute per API key (or signed-in user). Wait for the number of seconds in theRetry-Afterheader, then retry;detailshaslimit,window_seconds,reset_atandretry_after_seconds.
Errors use the error object.
curl "https://public-api.dapi.digital/v2/orders/ord_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu" \
-H "x-api-key: $DAPI_API_KEY"{
"id": "ord_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "order",
"number": "PV-SCN-1701A372",
"channel": "storefront",
"status": "in_production",
"customer": {
"name": "Ana Popescu",
"email": "ana@example.com",
"phone": null,
"company": null
},
"shipping_address": {
"formatted": "Str. Test 1, Cluj, RO",
"city": "Cluj",
"country": "Romania",
"country_code": "RO"
},
"charges": {
"paid_by": "buyer",
"items": {
"amount": 1800,
"currency": "usd"
},
"shipping": {
"amount": 600,
"currency": "usd"
},
"vat": {
"amount": {
"amount": 0,
"currency": "usd"
},
"rate": 0,
"included": false,
"country": null
},
"sample_credit": null,
"total": {
"amount": 2400,
"currency": "usd"
}
},
"earnings": {
"manufacturing": {
"amount": 900,
"currency": "usd"
},
"platform_fee": {
"amount": 300,
"currency": "usd"
},
"payment_processing": {
"amount": 102,
"currency": "usd"
},
"refunded": {
"amount": 0,
"currency": "usd"
},
"net": {
"amount": 498,
"currency": "usd"
}
},
"shipping": {
"tier": "small",
"carrier": null,
"tracking_number": null,
"shipped_at": null
},
"external": null,
"customer_notes": null,
"qc": {
"open_tickets": 1,
"blocks_shipping": true
},
"created_at": "2026-10-09T08:39:29Z",
"updated_at": "2026-10-09T08:40:02Z",
"item_count": 1,
"items": [
{
"id": "itm_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "order_item",
"product": {
"id": "prd_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "product",
"name": "Clicker"
},
"variant": {
"id": "var_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "variant",
"name": "Clicker Blue"
},
"sku": "CLICK-BLUE",
"quantity": 1,
"unit_price": {
"amount": 1800,
"currency": "usd"
},
"total": {
"amount": 1800,
"currency": "usd"
},
"stock_used": [],
"fulfilled_from_stock": false
}
],
"refunds": []
}The import issue object
An order from a connected sales channel that could not be imported, and why. Retry or dismiss it from the dashboard; once the order imports, the issue disappears from this list.
Attributes
- idstring
Unique identifier of the import issue, prefixed with
imp_. Treat it as an opaque string: store it and compare it, never parse it. - objectstring
Names the type of this object. Always
import_issue. - channelImportChannel
The sales channel the order came from. Only
shipstationtoday;shopifyjoins when the Shopify integration ships. - channel_order_idstring
The order id in the sales channel.
- channel_order_numberstring or null
The order number your customer sees in the sales channel.
- ordered_attimestamp or null
When the customer placed the order in the sales channel.
- reasonImportIssueReason
Why the order could not be imported:
unknown_sku: at least one item has a SKU that matches none of your variants. Give a variant that SKU, then import the order again.no_items: the order arrived with no items to make, or only lines such as shipping or discounts. Add the products in the sales channel, then import it again.variant_not_found: an item's SKU is linked to a variant that no longer exists. Link the SKU to a current variant, then import the order again.multiple_sellers: the order's SKUs are linked to products of more than one seller, and an order is made for one seller only. Link every SKU to your own variants or split the order, then import it again.
Possible valuesunknown_skuno_itemsvariant_not_foundmultiple_sellers - messagestring
What went wrong and how to fix it, ready to show to a person.
- unmatched_itemsarray of object
The items that matched none of your variants. Filled for
unknown_skuonly; empty for the other reasons. - created_attimestamp
When the import failed.
{
"id": "imp_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "import_issue",
"channel": "shipstation",
"channel_order_id": "193554871",
"channel_order_number": "3002",
"ordered_at": "2026-10-07T14:20:54Z",
"reason": "unknown_sku",
"message": "1 item has a SKU that matches none of your variants. Give the variant this SKU, then import the order again.",
"unmatched_items": [
{
"sku": "PR-TRACKERV2-465KG",
"name": "PR Tracker V2 - 465 Kilograms (kg) Plates",
"quantity": 1
}
],
"created_at": "2026-10-07T14:21:10Z"
}List import issues
GET/
- Credentials
- An API key with the
orders:readscope (full access includes every scope). A signed-in dashboard session works too. - For
- Designers
- Operation id
list_import_issues
Lists orders from your connected sales channels that could not be imported, newest first, with what to fix. Filter on sku to find every order one missing SKU mapping blocks. Designers only.
Query parameters
- channelstring
Only this channel.
- reasonstring
Only this reason.
Possible valuesunknown_skuno_itemsvariant_not_foundmultiple_sellers - skustring
Only issues with an unmatched item of exactly this SKU. Use it to find every order one missing mapping is blocking.
- ordered_aftertimestamp
Only orders placed after this time.
- ordered_beforetimestamp
Only orders placed before this time.
- sortstring
Order of results. A leading
-means newest first.Possible values-ordered_atordered_at-created_at - limitinteger
How many results per page, from 1 to 100.
- cursorstring
Where to continue from: the
next_cursorof the previous page. Omit for the first page.
Returns200 OK
A page of import issues.
Responses
- 200
A page of import issues.
- 400
The request is invalid.
details.errorslists each problem (validation_failed), or anexpand[]path is unknown (invalid_expand). - 401
Credentials are missing (
missing_credentials), the API key is unknown or inactive (invalid_api_key), the session expired (invalid_session), or both a key and a session were sent (ambiguous_credentials). - 403
The credentials are valid but not allowed to do this: a scope is missing (
missing_scope), the endpoint is for another kind of account (actor_not_allowed) or another kind of credential (credential_not_allowed), the account may no longer use the API (account_blacklisted), or the account must change something first, in which casedetails.fix_urllinks to the dashboard page that fixes it. - 429
Too many requests (
rate_limited): the limit is 500 per minute per API key (or signed-in user). Wait for the number of seconds in theRetry-Afterheader, then retry;detailshaslimit,window_seconds,reset_atandretry_after_seconds.
Errors use the error object.
curl "https://public-api.dapi.digital/v2/import-issues" \
-H "x-api-key: $DAPI_API_KEY"{
"object": "list",
"data": [
{
"id": "imp_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "import_issue",
"channel": "shipstation",
"channel_order_id": "193554871",
"channel_order_number": "3002",
"ordered_at": "2026-10-07T14:20:54Z",
"reason": "unknown_sku",
"message": "1 item has a SKU that matches none of your variants. Give the variant this SKU, then import the order again.",
"unmatched_items": [
{
"sku": "PR-TRACKERV2-465KG",
"name": "PR Tracker V2 - 465 Kilograms (kg) Plates",
"quantity": 1
}
],
"created_at": "2026-10-07T14:21:10Z"
}
],
"has_more": false,
"next_cursor": null
}Get an import issue
GET/
- Credentials
- An API key with the
orders:readscope (full access includes every scope). A signed-in dashboard session works too. - For
- Designers
- Operation id
get_import_issue
Returns one order that could not be imported. Designers only.
Path parameters
- idstringRequired
Unique identifier of the import issue, prefixed with
imp_. Treat it as an opaque string: store it and compare it, never parse it.
Returns200 OK
The import issue. Returns the import issue object.
Responses
- 200
The import issue.
- 401
Credentials are missing (
missing_credentials), the API key is unknown or inactive (invalid_api_key), the session expired (invalid_session), or both a key and a session were sent (ambiguous_credentials). - 403
The credentials are valid but not allowed to do this: a scope is missing (
missing_scope), the endpoint is for another kind of account (actor_not_allowed) or another kind of credential (credential_not_allowed), the account may no longer use the API (account_blacklisted), or the account must change something first, in which casedetails.fix_urllinks to the dashboard page that fixes it. - 404
You have no import issue with this id (
import_issue_not_found). - 429
Too many requests (
rate_limited): the limit is 500 per minute per API key (or signed-in user). Wait for the number of seconds in theRetry-Afterheader, then retry;detailshaslimit,window_seconds,reset_atandretry_after_seconds.
Errors use the error object.
curl "https://public-api.dapi.digital/v2/import-issues/imp_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu" \
-H "x-api-key: $DAPI_API_KEY"{
"id": "imp_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "import_issue",
"channel": "shipstation",
"channel_order_id": "193554871",
"channel_order_number": "3002",
"ordered_at": "2026-10-07T14:20:54Z",
"reason": "unknown_sku",
"message": "1 item has a SKU that matches none of your variants. Give the variant this SKU, then import the order again.",
"unmatched_items": [
{
"sku": "PR-TRACKERV2-465KG",
"name": "PR Tracker V2 - 465 Kilograms (kg) Plates",
"quantity": 1
}
],
"created_at": "2026-10-07T14:21:10Z"
}