Integrator orders
Orders integrators place for their own customers, paid from the wallet or through a hosted checkout. Integrators only.
The integrator order object
An order for prints of your quotes: what was ordered, where it ships, its status, what was charged and, in checkout mode, 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.
- channelstring
Which money flow the order follows.
Possible valuesintegrator_checkoutintegrator_wallet - 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.
- customer_notesstring or null
Notes the customer left at checkout. Null without the
orders:read_customerscope, since buyers often write personal details here. - created_attimestamp
Point in time, ISO 8601 in UTC.
- updated_attimestamp
Point in time, ISO 8601 in UTC.
- modestring
wallet: you pay the production price plus shipping from your wallet (a shortfall is charged to your saved card).checkout: your customer pays the sales price you set through a hosted 3DAPI checkout and you earn the difference.Possible valuescheckoutwallet - checkoutobject or null
The hosted checkout link in
checkoutmode, null inwalletmode. - item_countinteger
Units ordered across all lines.
- itemsarray of IntegratorOrderItemOptional
The order lines. In lists only present with
expand[]=items. - refundsarray of object
Completed refunds, oldest first, in lists too. Empty when none.
- referencestring or null
Your own order id, as you sent it.
{
"id": "ord_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "order",
"number": "2AP7K2M9X",
"channel": "integrator_wallet",
"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": 5000,
"currency": "usd"
},
"shipping": {
"amount": 800,
"currency": "usd"
},
"vat": {
"amount": {
"amount": 0,
"currency": "usd"
},
"rate": 0,
"included": false,
"country": null
},
"sample_credit": null,
"total": {
"amount": 5800,
"currency": "usd"
}
},
"earnings": null,
"shipping": {
"tier": "small",
"carrier": null,
"tracking_number": null,
"shipped_at": null
},
"customer_notes": null,
"created_at": "2026-10-09T08:39:29Z",
"updated_at": "2026-10-09T08:40:02Z",
"item_count": 10,
"mode": "wallet",
"checkout": null,
"items": [
{
"id": "itm_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "order_item",
"quote": {
"id": "qte_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "quote",
"name": "phone-stand.stl"
},
"materials": [
{
"id": "mat_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "material",
"name": "PLA Black"
}
],
"material_slots": [
{
"slot": 1,
"material": {
"id": "mat_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "material",
"name": "PLA Black"
}
}
],
"quantity": 10,
"unit_price": {
"amount": 500,
"currency": "usd"
},
"production_unit_price": {
"amount": 500,
"currency": "usd"
},
"extras": [],
"total": {
"amount": 5000,
"currency": "usd"
}
}
],
"refunds": [],
"reference": "SHOP-1042"
}List your orders
GET/
- Credentials
- An API key with the
orders:readscope (full access includes every scope). A signed-in dashboard session works too. - For
- Integrators
- Operation id
list_integrator_orders
Your orders, newest first, without their lines unless expand[]=items. Integrators only.
Query parameters
- statusarray of OrderStatus
Only orders in these statuses (repeatable).
Possible valuesawaiting_paymentpaidassignedin_productionshippedcompletedon_holdrejectedreturnedcancelled - modestring
wallet: you pay the production price plus shipping from your wallet (a shortfall is charged to your saved card).checkout: your customer pays the sales price you set through a hosted 3DAPI checkout and you earn the difference.Possible valuescheckoutwallet - created_aftertimestamp
Only orders placed after this time.
- created_beforetimestamp
Only orders placed before this time.
- referencestring
Exact match on your own order id.
- quotestring
Only orders with a line from this quote.
- searchstring
Part of the order
numberor of yourreference, case-insensitive. For example7K2Mfinds2AP7K2M9X, and1042findsSHOP-1042. - expand[]array of string
itemsadds the order lines. - 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 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/integrator/orders" \
-H "x-api-key: $DAPI_API_KEY"{
"object": "list",
"data": [
[
{
"id": "ord_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "order",
"number": "2AP7K2M9X",
"channel": "integrator_wallet",
"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": 5000,
"currency": "usd"
},
"shipping": {
"amount": 800,
"currency": "usd"
},
"vat": {
"amount": {
"amount": 0,
"currency": "usd"
},
"rate": 0,
"included": false,
"country": null
},
"sample_credit": null,
"total": {
"amount": 5800,
"currency": "usd"
}
},
"earnings": null,
"shipping": {
"tier": "small",
"carrier": null,
"tracking_number": null,
"shipped_at": null
},
"customer_notes": null,
"created_at": "2026-10-09T08:39:29Z",
"updated_at": "2026-10-09T08:40:02Z",
"item_count": 10,
"mode": "wallet",
"checkout": null,
"refunds": [],
"reference": "SHOP-1042"
}
]
],
"has_more": false,
"next_cursor": null
}Order prints of your quotes
POST/
- Credentials
- An API key with the
orders:writescope (full access includes every scope). A signed-in dashboard session works too. - For
- Integrators
- Operation id
create_integrator_order
Orders prints of your own ready quotes once your account is approved. In wallet mode you pay the production price plus shipping from your wallet; a shortfall is charged to your saved card with VAT on the top-up, as for every wallet top-up. The order comes back paid, numbered 2AP..., and goes to production. If payment fails, no order is created. In checkout mode your customer pays your unit_sales_price plus shipping, and VAT when they ship to the EU or UK, on a hosted 3DAPI checkout: the order comes back awaiting_payment, numbered 2AC..., with checkout.url to send them to, and order.created is sent. The link stays open 24 hours; unpaid, the order is then cancelled and checkout.expired is sent. Cancelling it yourself before it is paid sends order.cancelled instead. Once the order is completed you earn the sales price less the production price and the card fee, credited to your wallet. A line may carry approved extras (items[].extras): their price per unit is added to the line's production price in both modes. Integrators 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
- modestringRequired
wallet: you pay the production price plus shipping from your wallet (a shortfall is charged to your saved card).checkout: your customer pays the sales price you set through a hosted 3DAPI checkout and you earn the difference.Possible valuescheckoutwallet - itemsarray of objectRequired
What to print and ship, 1 to 100 lines.
- shipping_addressobjectRequired
Where to ship, in both modes. In
checkoutmode it also decides the buyer's VAT (EU and UK consumers pay their country's rate on top) and the payment account. - customerobjectRequired
Who receives the order. In
checkoutmode this is your customer, who gets the order confirmation and shipping emails from 3DAPI naming you as the seller. - checkoutobject or null
Required in
checkoutmode, forbidden inwalletmode. - referencestring or null
Your own order id, for matching.
- 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. - use_sample_creditboolean
walletmode only (forbidden incheckoutmode): spend your sample credit on this order before the wallet balance. It applies only when the order ships to your own country (your billing or sign-up country); otherwise the order is placed at full price. What applied is shown incharges.sample_credit. Default false.
Returns201 Created
The order: paid in `wallet` mode, `awaiting_payment` with its checkout link in `checkout` mode. Returns the integrator order object.
Responses
- 201
The order: paid in
walletmode,awaiting_paymentwith its checkout link incheckoutmode. - 400
The request is invalid (
validation_failed). - 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: the card was declined (
payment_failed), or the wallet is short and there is no saved card (insufficient_balance). No order was created. - 403
Your account cannot order yet: add your business billing details, or, to sell to EU or UK customers from outside the EU and UK, an active EU responsible person (
compliance_blocked,details.requirements;details.fix_urllinks to the dashboard page that fixes it). - 404
A quote is not one of yours (
quote_not_found). - 409
Production is paused (
production_unavailable). - 422
A quote is not ready (
quote_not_ready) or was rejected in review (quote_rejected), an extra is not one of yours (extra_not_found) or not approved (extra_not_approved), your account is not approved yet (quote_not_approved), a material is unknown or there are more materials than the quote prints with (material_not_allowed), the slots sent are not the slots the quote's file uses (material_slots_mismatch,details.expected_slots), the suggested materials were asked for on a quote that has none (suggestions_unavailable), a sales price is not in usd (currency_not_supported) or is below the minimum (sales_price_below_production,details.minimum), we do not deliver to the country (shipping_destination_not_served: 3DAPI does not deliver to Russia, Belarus, Iran or Syria), or VIES did not confirm the business buyer's EU VAT number (vat_number_invalid,details.tax_idanddetails.country_code; nothing is created). The request is checked in full before the account compliance gate (403), so these come first. - 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. - 503
Card payments are not available right now (
card_payments_unavailable); no order was created.
Errors use the error object.
curl -X POST "https://public-api.dapi.digital/v2/integrator/orders" \
-H "x-api-key: $DAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"mode": "wallet",
"items": [
{
"quote": "qte_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"quantity": 10,
"materials": [
"mat_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu"
]
}
],
"shipping_address": {
"line1": "Hauptstrasse 12",
"city": "Berlin",
"postal_code": "10115",
"country_code": "DE"
},
"customer": {
"name": "Jane Buyer",
"email": "jane@example.com"
},
"reference": "SHOP-1042"
}'{
"id": "ord_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "order",
"number": "2AP7K2M9X",
"channel": "integrator_wallet",
"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": 5000,
"currency": "usd"
},
"shipping": {
"amount": 800,
"currency": "usd"
},
"vat": {
"amount": {
"amount": 0,
"currency": "usd"
},
"rate": 0,
"included": false,
"country": null
},
"sample_credit": null,
"total": {
"amount": 5800,
"currency": "usd"
}
},
"earnings": null,
"shipping": {
"tier": "small",
"carrier": null,
"tracking_number": null,
"shipped_at": null
},
"customer_notes": null,
"created_at": "2026-10-09T08:39:29Z",
"updated_at": "2026-10-09T08:40:02Z",
"item_count": 10,
"mode": "wallet",
"checkout": null,
"items": [
{
"id": "itm_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "order_item",
"quote": {
"id": "qte_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "quote",
"name": "phone-stand.stl"
},
"materials": [
{
"id": "mat_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "material",
"name": "PLA Black"
}
],
"material_slots": [
{
"slot": 1,
"material": {
"id": "mat_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "material",
"name": "PLA Black"
}
}
],
"quantity": 10,
"unit_price": {
"amount": 500,
"currency": "usd"
},
"production_unit_price": {
"amount": 500,
"currency": "usd"
},
"extras": [],
"total": {
"amount": 5000,
"currency": "usd"
}
}
],
"refunds": [],
"reference": "SHOP-1042"
}Estimate the shipping of an order
POST/
- Credentials
- An API key with the
orders:readscope (full access includes every scope). A signed-in dashboard session works too. - For
- Integrators
- Operation id
estimate_integrator_order_shipping
What create_integrator_order would charge for shipping these lines to this country, computed by the same code the order is charged with: the parcel takes the tier of its heaviest item, every other item (extra-small ones excluded) adds the zone's per-item price, and extras count toward the weight. Nothing is created, and your account does not need to be approved yet.
The total is without VAT: in checkout mode, buyers in the EU or UK pay VAT on top. It can change if the rate card changes before you order; the order charges the rate card at the time it is placed.
Send the same items (quote, quantity, extras) and the destination you would order with. Integrators 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
- countrystringRequired
Destination country, ISO 3166-1 alpha-2, uppercase: the
shipping_address.country_codeyou would order with. A code that is not a real country is refused withvalidation_failed. - itemsarray of objectRequired
The lines of the order you would place, as
create_integrator_ordertakes them. Materials and prices do not change shipping, so they are not sent.
Returns200 OK
The shipping the order would be charged.
Responses
- 200
The shipping the order would be charged.
- 400
The request is invalid (
validation_failed). - 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
A quote is not one of yours (
quote_not_found). - 422
A quote is not ready (
quote_not_ready) or was rejected in review (quote_rejected), an extra is not one of yours (extra_not_found) or not approved (extra_not_approved), or we do not deliver to the country (shipping_destination_not_served: 3DAPI does not deliver to Russia, Belarus, Iran or Syria). - 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 -X POST "https://public-api.dapi.digital/v2/integrator/orders/shipping-estimate" \
-H "x-api-key: $DAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"country": "DE",
"items": [
{
"quote": "qte_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"quantity": 2
},
{
"quote": "qte_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"quantity": 2,
"extras": [
{
"extra": "xtr_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"quantity_per_unit": 1
}
]
}
]
}'{
"object": "shipping_estimate",
"country_code": "DE",
"zone": {
"code": "eu-core",
"name": "EU Core"
},
"tier": "medium",
"additional_items": 3,
"total": {
"amount": 1099,
"currency": "usd"
}
}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
- Integrators
- Operation id
get_integrator_order
One of your orders, with its lines and refunds. Integrators 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 integrator 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/integrator/orders/ord_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu" \
-H "x-api-key: $DAPI_API_KEY"{
"id": "ord_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "order",
"number": "2AP7K2M9X",
"channel": "integrator_wallet",
"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": 5000,
"currency": "usd"
},
"shipping": {
"amount": 800,
"currency": "usd"
},
"vat": {
"amount": {
"amount": 0,
"currency": "usd"
},
"rate": 0,
"included": false,
"country": null
},
"sample_credit": null,
"total": {
"amount": 5800,
"currency": "usd"
}
},
"earnings": null,
"shipping": {
"tier": "small",
"carrier": null,
"tracking_number": null,
"shipped_at": null
},
"customer_notes": null,
"created_at": "2026-10-09T08:39:29Z",
"updated_at": "2026-10-09T08:40:02Z",
"item_count": 10,
"mode": "wallet",
"checkout": null,
"items": [
{
"id": "itm_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "order_item",
"quote": {
"id": "qte_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "quote",
"name": "phone-stand.stl"
},
"materials": [
{
"id": "mat_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "material",
"name": "PLA Black"
}
],
"material_slots": [
{
"slot": 1,
"material": {
"id": "mat_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "material",
"name": "PLA Black"
}
}
],
"quantity": 10,
"unit_price": {
"amount": 500,
"currency": "usd"
},
"production_unit_price": {
"amount": 500,
"currency": "usd"
},
"extras": [],
"total": {
"amount": 5000,
"currency": "usd"
}
}
],
"refunds": [],
"reference": "SHOP-1042"
}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
- Integrators
- Operation id
cancel_integrator_order
Cancels an order. An unpaid checkout order (awaiting_payment) has its link closed and is cancelled. A paid order a production partner has not started is refunded in full: to your wallet for wallet orders, to your customer's card for checkout orders. Integrators 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. Returns the integrator order object.
Responses
- 200
The order, cancelled.
- 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 (
order_not_cancellable): it is already cancelled, or pastpaid(a production partner started it; contact support). Unpaid checkout orders (awaiting_payment) andpaidorders can be cancelled; the message says which case applies. - 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/integrator/orders/ord_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu/cancel" \
-H "x-api-key: $DAPI_API_KEY"{
"id": "ord_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "order",
"number": "2AP7K2M9X",
"channel": "integrator_wallet",
"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": "you",
"items": {
"amount": 5000,
"currency": "usd"
},
"shipping": {
"amount": 800,
"currency": "usd"
},
"vat": {
"amount": {
"amount": 0,
"currency": "usd"
},
"rate": 0,
"included": false,
"country": null
},
"sample_credit": null,
"total": {
"amount": 5800,
"currency": "usd"
}
},
"earnings": null,
"shipping": {
"tier": "small",
"carrier": null,
"tracking_number": null,
"shipped_at": null
},
"customer_notes": null,
"created_at": "2026-10-09T08:39:29Z",
"updated_at": "2026-10-09T08:40:02Z",
"item_count": 10,
"mode": "wallet",
"checkout": null,
"items": [
{
"id": "itm_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "order_item",
"quote": {
"id": "qte_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "quote",
"name": "phone-stand.stl"
},
"materials": [
{
"id": "mat_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "material",
"name": "PLA Black"
}
],
"material_slots": [
{
"slot": 1,
"material": {
"id": "mat_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "material",
"name": "PLA Black"
}
}
],
"quantity": 10,
"unit_price": {
"amount": 500,
"currency": "usd"
},
"production_unit_price": {
"amount": 500,
"currency": "usd"
},
"extras": [],
"total": {
"amount": 5000,
"currency": "usd"
}
}
],
"refunds": [],
"reference": "SHOP-1042"
}