Skip to content

Archive a promotion code

The promotion_codes.archive operation: POST /api/v1/promotion_codes/{id}/archive in the REST API and the promotion_codes_archive tool in the MCP server.

POST/api/v1/promotion_codes/{id}/archive

Archives a promotion code: customers can't use it any more. Discounts already applied with it keep running, and its code stays taken. Archiving an archived code changes nothing. Reactivate it with promotion_codes.update and active: true.

reason is recorded in the audit log.

At a glance

  • REST: POST /api/v1/promotion_codes/{id}/archive
  • MCP tool: promotion_codes_archive
  • Operation ID: promotion_codes.archive
  • Scope: Brand
  • Permission: catalog:write
  • Risk tier: write
  • Dry run: Supported (send Ownrecord-Dry-Run: true)
  • Idempotency: Idempotency-Key required
  • Modes: Test and live
  • Authentication: API key with the catalog:write scope
  • Since: M5

Request

Path parameters

FieldTypeDescription
idpromo_… ID

Body

A JSON object (Content-Type: application/json):

FieldTypeRequiredDescription
reasonstringNo

Response

200 OK with a JSON object:

FieldTypeDescription
idpromo_… ID
object"promotion_code"
brandIdbrd_… ID
livemodeboolean
couponIdcpn_… ID
codestringAs entered; customers may type it in any case.
restrictionsobject
restrictions.firstTimeOnlyboolean
restrictions.minimumAmountmoney or null
restrictions.customerIdstring or null
restrictions.expiresAtdate-time or null
restrictions.maxRedemptionsinteger or null
timesRedeemedinteger
activeboolean
metadataobject
createdAtdate-time
updatedAtdate-time

Examples

Stop a leaked code

HTTP
POST /api/v1/promotion_codes/promo_01m4tx5nj8emwbyf7y9vcf47z2/archive
Authorization: Bearer or_test_…
Idempotency-Key: 3f1c9a52-7d0e-4b8f-9a61-0c2d5e8b7f14
Content-Type: application/json

{
  "reason": "Shared on a coupon site"
}

Response (200):

JSON
{
  "id": "promo_01m4tx5nj8emwbyf7y9vcf47z2",
  "object": "promotion_code",
  "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
  "livemode": false,
  "couponId": "cpn_01m4tx5nj8emwbyf7y9vcf47z0",
  "code": "LAUNCH50",
  "restrictions": {
    "firstTimeOnly": true,
    "minimumAmount": null,
    "customerId": null,
    "expiresAt": null,
    "maxRedemptions": 200
  },
  "timesRedeemed": 0,
  "active": false,
  "metadata": {},
  "createdAt": "2026-10-13T12:00:00.000Z",
  "updatedAt": "2026-10-14T09:30:00.000Z"
}

Errors

CodeHTTP statusWhenWhat to do
resource_not_found404No promotion code with this ID is visible to the request.Check the ID and that your credentials are scoped to the right organization, entity, brand and mode.
version_conflict409The code changed at the same time; retry.Fetch the object again and retry the change.
permission_denied403You can't change this brand's catalog.Ask an organization owner or admin for a role or scope that allows this action.

It can also return these common errors: validation_failed, api_version_unsupported, invalid_json, unsupported_media_type, authentication_required, api_key_invalid, scope_required, idempotency_key_required, idempotency_key_reused, idempotency_in_progress, approval_required, approval_rejected, approval_expired, stale_approval, approval_policy_denied, rate_limited, internal_error.