> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gnosispay.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Physical Card Order

> 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`




## OpenAPI

````yaml https://api.gnosispay.com/api-docs/spec.json post /api/v1/order/create
openapi: 3.0.0
info:
  title: GnosisPay API
  version: 1.0.0
  description: OpenAPI documentation for GnosisPay
servers:
  - url: https://api.gnosispay.com
security: []
tags:
  - name: Account Management
    description: Information about your Account
  - name: Authentication
    description: Authenticate to our API using SIWE
  - name: Card Management
    description: Manage all your Cards
  - name: IBAN
    description: Integrate with Monerium to issue IBANs
  - name: KYC
    description: KYC using Sumsub SDK
  - name: Physical Card Order
    description: Order a Physical Card and manage the process
  - name: Rewards
    description: Cashback Rewards
  - name: Safe Management
    description: Manage your Safe
  - name: Transactions
    description: Manage Card Transactions
  - name: User
    description: Manage User Information
  - name: Webhooks
    description: Manage Webhooks
paths:
  /api/v1/order/create:
    post:
      tags:
        - Physical Card Order
      summary: Create Physical Card Order
      description: >
        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`
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - type: object
                  properties:
                    personalizationSource:
                      type: string
                      enum:
                        - ENS
                    ENSName:
                      type: string
                      maxLength: 24
                    shippingAddress:
                      type: object
                      nullable: true
                      properties:
                        address1:
                          type: string
                          maxLength: 50
                        address2:
                          type: string
                          nullable: true
                          maxLength: 50
                        city:
                          type: string
                        postalCode:
                          type: string
                        country:
                          type: string
                          description: >-
                            Two-letter country code per ISO 3166-1 alpha-2
                            (e.g., "BR", "DE").
                          example: BR
                      required:
                        - address1
                        - city
                        - postalCode
                        - country
                    virtual:
                      type: boolean
                      default: false
                  required:
                    - personalizationSource
                    - ENSName
                - type: object
                  properties:
                    personalizationSource:
                      type: string
                      enum:
                        - KYC
                    shippingAddress:
                      type: object
                      nullable: true
                      properties:
                        address1:
                          type: string
                          maxLength: 50
                        address2:
                          type: string
                          nullable: true
                          maxLength: 50
                        city:
                          type: string
                        postalCode:
                          type: string
                        country:
                          type: string
                          description: >-
                            Two-letter country code per ISO 3166-1 alpha-2
                            (e.g., "BR", "DE").
                          example: BR
                      required:
                        - address1
                        - city
                        - postalCode
                        - country
                    virtual:
                      type: boolean
                      default: false
                  required:
                    - personalizationSource
      responses:
        '200':
          description: Card order created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CardOrder'
        '400':
          description: Bad Request - One of several possible client errors
          content:
            application/json:
              schema:
                type: string
                enum:
                  - 'Error: There is already a pending card order'
                  - 'Error: User is not approved through KYC'
                  - 'Error: Unknown personalization source'
                  - 'Error: Shipping needs to be done to the user''s country'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
        - bearerAuth: []
components:
  schemas:
    CardOrder:
      type: object
      required:
        - id
        - createdAt
        - status
        - personalizationSource
        - totalDiscountEUR
      properties:
        id:
          type: string
        transactionHash:
          type: string
        createdAt:
          type: string
          format: date-time
        status:
          type: string
          description: >-
            Current order status in the state machine. See the state transition
            diagram in the documentation for valid transitions.
          enum:
            - PENDINGTRANSACTION
            - TRANSACTIONCOMPLETE
            - CONFIRMATIONREQUIRED
            - READY
            - CARDCREATED
            - FAILEDTRANSACTION
            - CANCELLED
          example: PENDINGTRANSACTION
        personalizationSource:
          type: string
          enum:
            - KYC
            - ENS
        embossedName:
          type: string
        address1:
          type: string
        address2:
          type: string
        city:
          type: string
        country:
          type: string
        postalCode:
          type: string
        state:
          type: string
        couponCode:
          type: string
        totalAmountEUR:
          type: number
          format: double
        totalDiscountEUR:
          type: number
          format: double
        virtual:
          type: boolean
    Error:
      type: object
      properties:
        error:
          type: string
          description: Error message
          example: Internal server error
  responses:
    UnauthorizedError:
      description: Unauthorized Error
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
    InternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````