---
title: "Create Physical Card Order"
method: POST
path: "/api/v1/order/create"
tags: ["Physical Card Order"]
---

# Create Physical Card Order

`POST /api/v1/order/create`

Orders a new physical card for the authenticated user.
This is the first step in the physical card order process, the card is not created yet.

Next are the steps to complete the order:
1. Optionally attach a coupon using `/api/v1/order/{orderId}/attach-coupon` (use the `GPDOCS` coupon code to get the card for free)
2. If not free, attach a transaction hash using `/api/v1/order/{orderId}/attach-transaction`
3. Confirm the payment using `/api/v1/order/{orderId}/confirm-payment`
4. Create the card using `/api/v1/order/{orderId}/create-card`

## Request body

- union
  - object
    - `personalizationSource` 'ENS', required
    - `ENSName` string, required
    - `shippingAddress` object, nullable
      - `address1` string, required
      - `address2` string, nullable
      - `city` string, required
      - `postalCode` string, required
      - `country` string, required — Two-letter country code per ISO 3166-1 alpha-2 (e.g., "BR", "DE").
    - `virtual` boolean
  - object
    - `personalizationSource` 'KYC', required
    - `shippingAddress` object, nullable
      - `address1` string, required
      - `address2` string, nullable
      - `city` string, required
      - `postalCode` string, required
      - `country` string, required — Two-letter country code per ISO 3166-1 alpha-2 (e.g., "BR", "DE").
    - `virtual` boolean

## Response `200`

Card order created successfully

- CardOrder
  - `id` string, required
  - `transactionHash` string
  - `createdAt` string, date-time, required
  - `status` 'PENDINGTRANSACTION' | 'TRANSACTIONCOMPLETE' | 'CONFIRMATIONREQUIRED' | 'READY' | 'CARDCREATED' | 'FAILEDTRANSACTION' | 'CANCELLED', required — Current order status in the state machine. See the state transition diagram in the documentation for valid transitions.
  - `personalizationSource` 'KYC' | 'ENS', required
  - `embossedName` string
  - `address1` string
  - `address2` string
  - `city` string
  - `country` string
  - `postalCode` string
  - `state` string
  - `couponCode` string
  - `totalAmountEUR` number, double
  - `totalDiscountEUR` number, double, required
  - `virtual` boolean

## Other responses

- `400` — Bad Request - One of several possible client errors
- `401` — Unauthorized Error
- `500` — Internal Server Error

---

[API](https://skmtc.net/gnosispay/apis/gnosispay-api.md) · [All operations](https://skmtc.net/gnosispay/apis/gnosispay-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/gnosispay/gnosispay-api/versions/e0a09962c187/schema)
