# Report Orders

> Placed orders for attribution → outbox order.reported (attributed_orders.source = api_push); order

Source: https://shopassist.coec.dk/docs/api/reference/catalog/report-orders · Updated 2026-11-03

`POST /v1/stores/{store_id}/orders:report`

- Scope: `orders:report`
- Rate limit: 600 requests/min per API key (test keys: 60/min); 60/min per store

Placed orders for attribution → outbox `order.reported` (`attributed_orders.source = api_push`); order
status is never accepted (D-017).

## Parameters [#parameters]

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `store_id` | path | `string` | yes |  |
| `Idempotency-Key` | header | `string` | yes | Replays return the original |

## Request body (OrderReport) [#request-body]

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `orders` | `OrderReportInput[]` | yes | OrderReportInput items (validated individually; invalid items are reported in rejected[]) · ≥ 1 items · ≤ 100 items |
| `orders[].cart_token` | `string` | no | 1–255 characters |
| `orders[].conversation_id` | `string` | no | pattern `^conv_[0-9a-hjkmnp-tv-z]{26}$` |
| `orders[].items` | `OrderReportItemInput[]` | yes | ≤ 500 items |
| `orders[].items[].amount` | `Money` | yes | An amount with its currency (`03` §2.4 `Money`). |
| `orders[].items[].amount.amount` | `string` | yes | pattern `^-?\d+(\.\d{1,6})?$` |
| `orders[].items[].amount.currency` | `string` | yes | pattern `^[A-Z]{3}$` |
| `orders[].items[].external_variant_id` | `string` | yes | 1–255 characters |
| `orders[].items[].is_assisted` | `boolean` | no | default false |
| `orders[].items[].quantity` | `integer` | yes | > 0 |
| `orders[].order_number` | `string` | no | 1–64 characters |
| `orders[].ordered_at` | `string` | yes | format date-time |
| `orders[].platform_order_id` | `string` | yes | 1–128 characters |
| `orders[].total` | `Money` | yes | An amount with its currency (`03` §2.4 `Money`). |
| `orders[].total.amount` | `string` | yes | pattern `^-?\d+(\.\d{1,6})?$` |
| `orders[].total.currency` | `string` | yes | pattern `^[A-Z]{3}$` |

## Example request [#example-request]

```bash
curl -X POST "https://api.shopassist.coec.dk/v1/stores/sto_01j8000000e008000000000000/orders:report" \
  -H "Authorization: Bearer $SHOPASSIST_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"orders":[{"cart_token":"string","conversation_id":"conv_01j8000000e008000000000000","items":[{"amount":{"amount":"499.95","currency":"DKK"},"external_variant_id":"string","is_assisted":false,"quantity":1}],"order_number":"string","ordered_at":"2026-09-28T10:15:30.123Z","platform_order_id":"string","total":{"amount":"499.95","currency":"DKK"}}]}'
```

## Response 202 (OrderReportAccepted) [#response]

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `accepted` | `integer` | yes | ≥ 0 |
| `rejected` | `ItemRejection[]` | yes |  |
| `rejected[].error` | `ItemError` | yes | `{ code; message }` of a rejected item. |
| `rejected[].error.code` | `"validation_error" \| "currency_mismatch" \| "duplicate_external_id" \| "too_many_variants" \| "url_not_allowed"` | yes |  |
| `rejected[].error.message` | `string` | yes |  |
| `rejected[].index` | `integer` | yes | ≥ 0 |

```json
{
  "accepted": 0,
  "rejected": [
    {
      "error": {
        "code": "validation_error",
        "message": "string"
      },
      "index": 0
    }
  ]
}
```

## Errors [#errors]

| Status | Meaning |
| --- | --- |
| 400 | Bad Request ([error codes](/docs/api/errors)) |
| 401 | Unauthorized ([error codes](/docs/api/errors)) |
| 403 | Forbidden ([error codes](/docs/api/errors)) |
| 404 | Not Found ([error codes](/docs/api/errors)) |
| 409 | Conflict ([error codes](/docs/api/errors)) |
| 413 | Content Too Large ([error codes](/docs/api/errors)) |
| 422 | Unprocessable Content ([error codes](/docs/api/errors)) |
| 429 | Too Many Requests ([error codes](/docs/api/errors)) |
