---
title: "Create an order"
description: "Import one order from Shopify by its order id or gid, as the Orders page's Find order does: Filemonk fetches it, links the digital products it contains and, unless send_email is false, sends the download email. Returns t"
url: https://docs.filemonk.io/v2/api-reference/orders/create-an-order/
api: "API v2 reference"
method: POST
path: "/orders"
---

# Create an order

`POST https://app.filemonk.io/api/v2/external/orders`

Import one order from Shopify by its order id or gid, as the Orders page's Find order does: Filemonk fetches it, links the digital products it contains and, unless send_email is false, sends the download email. Returns the order in full. Send it first without `confirm`. Nothing changes and the 409 `confirmation_required` says what would. Tell the merchant, ask, and resend with `confirm: true` only after they agree.

**Note:** Previews first: without confirm: true nothing is imported and 409 confirmation_required says what would be linked and who would be emailed. Calls Shopify synchronously. Orders without any linked digital product are rejected (422). An order already in Filemonk is refreshed, not duplicated, and answers 200; a deleted one is restored. 404 when Shopify has no such order; 502 when Shopify did not answer.

## Request body

- `shopify_order_id` (string, required): e.g. `gid://shopify/Order/7555375595815`
- `send_email` (boolean): e.g. `false`
- `confirm` (any)

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

## Example request

```sh
curl -X POST "https://app.filemonk.io/api/v2/external/orders" \
  -H "X-Auth-Token: $FILEMONK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "shopify_order_id": "gid://shopify/Order/7555375595815",
    "send_email": false
  }'
```

## 200

Success: the resource already existed; here it is.

## 201

Created: the new resource.

```json
{
  "id": "3e84eb8d-e1d9-4e92-a4b2-a419c7f1122f",
  "shopify_order_id": "gid://shopify/Order/7555375595815",
  "name": "#1077",
  "confirmation_number": "H5CZG3GZX",
  "ordered_at": "2026-10-26T14:19:15Z",
  "customer": {
    "id": "b797db3a-cbc3-4643-804f-adf34c7f08d7",
    "shopify_customer_id": "gid://shopify/Customer/9026290417959",
    "email": "shopper@example.com",
    "phone": null,
    "first_name": "Jane",
    "last_name": "Doe",
    "country_code": null,
    "locale": null,
    "unsubscribed": false
  },
  "total": {
    "amount": "1142.89",
    "currency": "INR"
  },
  "status": {
    "financial": "paid",
    "fulfillment": "unfulfilled",
    "cancelled_at": null,
    "paid_at": "2026-10-30T21:48:16Z",
    "flagged_as_fraud": false,
    "fraud_check_completed": false,
    "marked_fulfilled_at": null,
    "delivery_conditions_met": false
  },
  "access": {
    "state": "active",
    "revoked_at": null,
    "available_until": null,
    "download_reset_at": "2026-10-30T22:19:10Z",
    "downloads_count": 0
  },
  "delivery": {
    "email_sent_at": "2026-10-30T22:34:30Z",
    "delivery_failed_at": null,
    "download_page_url": "https://example-store.myshopify.com/apps/filemonk/orders/3e84eb8d-e1d9-4e92-a4b2-a419c7f1122f",
    "source": "webhook"
  },
  "line_items": [
    {
      "id": "5956bb41-dc65-45d5-b7d7-25f570598468",
      "digital_product_id": "7ea3c05d-6f29-42b6-b24f-43260caeaa32",
      "title": "Watercolour Course",
      "sku": "b0f5fbd0-f231-470f-b3d1-a392e3136a50",
      "quantity": 2,
      "shopify_line_item_id": "gid://shopify/LineItem/18329329434919",
      "shopify_product_id": "gid://shopify/Product/9642107044135",
      "shopify_variant_id": "gid://shopify/ProductVariant/49417714893095",
      "attached_to_this_order_only": false,
      "access": {
        "revoked": false,
        "revoked_at": null
      },
      "preorder": {
        "enabled": false,
        "launch_at": null,
        "released": true,
        "message": null
      },
      "files": [
        {
          "id": null,
          "asset": {
            "id": "7ea42f2a-6dbe-459c-b8a4-27b0eb823e52",
            "name": "price-list.csv",
            "type": "file"
          },
          "download_count": 0,
          "watermark": {
            "enabled": false,
            "status": "not_required"
          },
          "licence_keys": []
        },
        {
          "id": "66e2751c-9812-422c-864d-f8ce6a95c605",
          "asset": {
            "id": "96fbe30b-c819-4cb8-9666-814c0c8853f1",
            "name": "Beginner's Guide.pdf",
            "type": "file"
          },
          "download_count": 0,
          "watermark": {
            "enabled": true,
            "status": "ready"
          },
          "licence_keys": []
        }
      ]
    }
  ],
  "eu_withdrawal": {
    "consent_required": false,
    "consented_at": null,
    "consent_text": null
  },
  "shopify_tags": [],
  "imported_at": null,
  "deleted_at": null,
  "created_at": "2026-10-26T14:19:29Z",
  "updated_at": "2026-10-30T22:19:10Z"
}
```

## 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"
}
```

