---
title: "Assign a specific licence key to an order"
description: "Swap the licence key on the order, as the order page's Reassign does: the current key goes back to the pool and key (an unassigned key of this shop) takes its place. Without key the row is left open for the automatic ass"
url: https://docs.filemonk.io/v2/api-reference/orders/assign-a-specific-licence-key-to-an-order/
api: "API v2 reference"
method: PUT
path: "/orders/{id}/licences/{licence_id}"
---

# Assign a specific licence key to an order

`PUT https://app.filemonk.io/api/v2/external/orders/{id}/licences/{licence_id}`

Swap the licence key on the order, as the order page's Reassign does: the current key goes back to the pool and key (an unassigned key of this shop) takes its place. Without key the row is left open for the automatic assigner.

## Path parameters

- `id` (string, required)
- `licence_id` (string, required)

## Request body

- `key` (string): e.g. `ABCD-EFGH-IJKL-0002`

## Returns

The [order object](https://docs.filemonk.io/v2/api-reference/orders/).

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

## Example request

```sh
curl -X PUT "https://app.filemonk.io/api/v2/external/orders/3e84eb8d-e1d9-4e92-a4b2-a419c7f1122f/licences/{licence_id}" \
  -H "X-Auth-Token: $FILEMONK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "key": "ABCD-EFGH-IJKL-0002"
  }'
```

## 200

Success: the write completed; the body is the updated 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)."
}
```

