---
title: "Troubleshoot an order"
description: "Why a buyer got no files, as the Orders page's troubleshooter shows: whether Shopify has the order, whether Filemonk stored it, and for every Shopify line item whether its product or variant has files in Filemonk (with c"
url: https://docs.filemonk.io/v2/api-reference/orders/troubleshoot-an-order/
api: "API v2 reference"
method: GET
path: "/orders/{id}/troubleshoot"
---

# Troubleshoot an order

`GET https://app.filemonk.io/api/v2/external/orders/{id}/troubleshoot`

Why a buyer got no files, as the Orders page's troubleshooter shows: whether Shopify has the order, whether Filemonk stored it, and for every Shopify line item whether its product or variant has files in Filemonk (with counts) or is a custom product. Ends with a diagnosis and the request that fixes each finding. :id is the order name (#1042), the Shopify order gid or id, or Filemonk's order id.

**Note:** Read-only; asks Shopify for the order. Start here for a 'no files' complaint, then send the next_steps request it names (each previews before it changes anything). 404 when neither Shopify nor Filemonk has the order; 502 when Shopify did not answer.

## Path parameters

- `id` (string, required)

## Returns

- `query` (string, nullable, required): e.g. `#1042`
- `shopify` (object, required)
  - `found` (boolean, nullable, required): e.g. `true`
  - `id` (string, nullable, required): e.g. `gid://shopify/Order/7555375595815`
  - `name` (string, nullable, required): e.g. `#1042`
  - `created_at` (string, nullable, required): e.g. `2026-10-28T14:02:11Z`
  - `email` (string, nullable, required): e.g. `buyer@example.com`
  - `financial_status` (string, nullable, required): e.g. `paid`
  - `fulfillment_status` (any, required)
  - `cancelled_at` (any, required)
  - `test` (boolean, nullable, required): e.g. `false`
- `filemonk` (object, required)
  - `stored` (boolean, nullable, required): e.g. `true`
  - `deleted` (boolean, nullable, required): e.g. `false`
  - `id` (string, nullable, required): e.g. `3f1c2b8e-5a7d-4e19-9c61-2b8d0f4a7c55`
  - `name` (string, nullable, required): e.g. `#1042`
  - `access` (object, required)
    - `state` (string, nullable, required): e.g. `active`
    - `revoked` (boolean, nullable, required): e.g. `false`
    - `expires_at` (any, required)
  - `delivery_conditions_met` (boolean, nullable, required): e.g. `true`
  - `email_sent_at` (any, required)
  - `files_count` (integer, nullable, required): e.g. `0`
- `line_items` (array of objects, required)
  - `title` (string, nullable, required): e.g. `Watercolour Course`
  - `variant_title` (any, required)
  - `sku` (any, required)
  - `quantity` (integer, nullable, required): e.g. `1`
  - `shopify_product_id` (string, nullable, required): e.g. `gid://shopify/Product/9642107044135`
  - `shopify_variant_id` (string, nullable, required): e.g. `gid://shopify/ProductVariant/49718237560103`
  - `product` (object, required)
    - `digital_product_ids` (array of strings, required)
    - `files_count` (integer, nullable, required): e.g. `2`
    - `custom` (boolean, nullable, required): e.g. `false`
  - `variant` (any, required)
  - `delivers_files` (boolean, nullable, required): e.g. `true`
- `diagnosis` (array of objects, required)
  - `code` (string, nullable, required): e.g. `stored_without_files`
  - `finding` (string, nullable, required): e.g. `Filemonk stored the order before its products had files, …`
  - `next_step` (string, nullable, required): e.g. `Re-sync it from Shopify to link the files now on its prod…`
  - `request` (string, nullable, required): e.g. `POST /orders/3f1c2b8e-5a7d-4e19-9c61-2b8d0f4a7c55/resync`

Rate limit: this call costs 1 point ([rate limits](https://docs.filemonk.io/v2/errors-and-rate-limits/)).

## Example request

```sh
curl "https://app.filemonk.io/api/v2/external/orders/3e84eb8d-e1d9-4e92-a4b2-a419c7f1122f/troubleshoot" \
  -H "X-Auth-Token: $FILEMONK_API_KEY"
```

## 200

Success: the requested resource.

```json
{
  "query": "#1042",
  "shopify": {
    "found": true,
    "id": "gid://shopify/Order/7555375595815",
    "name": "#1042",
    "created_at": "2026-10-28T14:02:11Z",
    "email": "buyer@example.com",
    "financial_status": "paid",
    "fulfillment_status": null,
    "cancelled_at": null,
    "test": false
  },
  "filemonk": {
    "stored": true,
    "deleted": false,
    "id": "3f1c2b8e-5a7d-4e19-9c61-2b8d0f4a7c55",
    "name": "#1042",
    "access": {
      "state": "active",
      "revoked": false,
      "expires_at": null
    },
    "delivery_conditions_met": true,
    "email_sent_at": null,
    "files_count": 0
  },
  "line_items": [
    {
      "title": "Watercolour Course",
      "variant_title": null,
      "sku": null,
      "quantity": 1,
      "shopify_product_id": "gid://shopify/Product/9642107044135",
      "shopify_variant_id": "gid://shopify/ProductVariant/49718237560103",
      "product": {
        "digital_product_ids": [
          "7ea3c05d-6f29-42b6-b24f-43260caeaa32"
        ],
        "files_count": 2,
        "custom": false
      },
      "variant": null,
      "delivers_files": true
    }
  ],
  "diagnosis": [
    {
      "code": "stored_without_files",
      "finding": "Filemonk stored the order before its products had files, so it holds none.",
      "next_step": "Re-sync it from Shopify to link the files now on its products. It previews first.",
      "request": "POST /orders/3f1c2b8e-5a7d-4e19-9c61-2b8d0f4a7c55/resync"
    }
  ]
}
```

## 401

Missing or invalid API key.

```json
{
  "errors": [
    "Invalid API key"
  ]
}
```

## 404

The resource does not exist for this shop, or the action path is not registered.

```json
{
  "errors": [
    "Order not found: c3d4e5f6-7a8b-4c9d-8e0f-1a2b3c4d5e6f"
  ]
}
```

## 422

The request failed validation, or sent a key the action does not take (`code: &quot;unknown_parameters&quot;` with `unknown` and `accepted`). Nothing was saved.

```json
{
  "errors": [
    "access.download_limit_count must be an integer of at least 0"
  ],
  "field_errors": {
    "access.download_limit_count": [
      "must be an integer of at least 0"
    ]
  }
}
```

## 429

Rate limited. Cost-weighted per API key, shared with API v1: a read costs 1 point, a write 2, 40 points per fixed 60-second window. Every response carries `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` (Unix time the window ends); a 429 adds `Retry-After` (seconds), `retry_after`, `retryable: true` and a `next_step` in the body. A 429 did nothing: wait `retry_after` seconds, then send the same request again. The budget is per key, so every tool or script using the key shares it; prefer one list call with `per_page` over many single reads.

```json
{
  "errors": [
    "You have exceeded the rate limit of 40 points per 60 seconds. Read requests cost 1 point(s) and write requests cost 2 point(s). Please retry after 12 second(s)."
  ],
  "code": "rate_limited",
  "retry_after": 12,
  "error": "Rate limit exceeded",
  "message": "You have exceeded the rate limit of 40 points per 60 seconds. Read requests cost 1 point(s) and write requests cost 2 point(s). Please retry after 12 second(s)."
}
```

## 502

Shopify (or the email service) did not complete the request. Nothing was changed; try again shortly.

```json
{
  "errors": [
    "Shopify did not complete the request. Nothing was changed; try again shortly."
  ],
  "code": "shopify_error"
}
```

