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

# Withdraw from a Card

> Withdraws part of the balance of an active card back to your `cards_visa` or `cards_mastercard` balance
(depending on the card brand). The withdrawal is synchronous.

- **Minimum:** 5 USD per withdrawal.
- **Balance left on the card:** at least 5 USD must remain on the card after the withdrawal. The maximum you can
  withdraw is therefore the card balance minus 5 USD (a card with 30 USD allows a withdrawal of up to 25 USD,
  and a card with less than 10 USD cannot be withdrawn from). To recover the whole balance, terminate the card
  (`POST /cards/{code}/terminate`).
- **Card balance:** read in real time from the card provider before the withdrawal.
- **Fees:** the card withdrawal fee of your plan (see [Plans](/getting-started/plans)) is deducted from the
  amount withdrawn; your balance is credited with `net_amount`.

Sends a `card.withdrawal.completed` webhook.




## OpenAPI

````yaml POST /cards/{code}/withdraw
openapi: 3.1.0
info:
  title: KemyCard API
  version: '1.0'
  description: >
    KemyCard API allows you to issue virtual and physical cards, manage KYC/POA
    verification,

    create crypto wallets, virtual bank accounts, purchase gift cards and send
    payouts to bank accounts (SEPA Instant

    in EUR, ACH in USD to the United States).


    Access depends on your plan (see [Plans and
    Pricing](/getting-started/plans)). The free Découverte plan gives

    access to virtual cards with the KYC and POA endpoints and to payouts (SEPA
    and ACH), within monthly limits (25 cards

    created and 5,000 USD loaded on cards per calendar month, 5,000 USD of
    payouts per calendar month), 30 requests

    per minute per API key, 2 allowed IP addresses and 1 active webhook
    endpoint. Starter, Business and Premium give access to every product with no
    monthly limit,

    100 requests per minute per API key, 10 allowed IP addresses and 10 active
    webhook endpoints.


    Plan errors: `402 PLAN_UPGRADE_REQUIRED` (product not included in your
    plan), `403 PLAN_LIMIT_REACHED`

    (limit of your plan reached). While one of your ops balances is negative,
    every request other than `GET`

    returns `403 ACCOUNT_SUSPENDED_NEGATIVE_BALANCE`.
  contact:
    name: KemyCard API Support
    email: hi@kemycard.com
servers:
  - url: https://api.kemycard.com/v1
    description: Development (tests internes)
  - url: https://api.kemycard.com/v1
    description: Production
security:
  - BearerAuth: []
tags:
  - name: Customers
    description: Manage your customers
  - name: Card Products
    description: Browse the card product catalog
  - name: Cards
    description: Issue and manage cards
  - name: KYC
    description: Identity verification
  - name: POA
    description: Proof of address verification
  - name: Wallets
    description: Crypto wallets
  - name: Virtual Accounts
    description: Virtual bank accounts
  - name: Gift Cards
    description: Gift card catalog and purchases
  - name: Payouts
    description: >
      Payouts to bank accounts: SEPA Instant in EUR (paid from your Payout SEPA
      balance) and ACH in USD to bank

      accounts in the United States (paid from your Ops Others balance)
  - name: Balance
    description: Operational balances and transaction history
  - name: Webhooks
    description: Webhook endpoints and delivery management
paths:
  /cards/{code}/withdraw:
    post:
      tags:
        - Cards
      summary: Withdraw from a card
      description: >
        Withdraws part of the balance of an active card back to your
        `cards_visa` or `cards_mastercard` balance

        (depending on the card brand). The withdrawal is synchronous.


        - **Minimum:** 5 USD per withdrawal.

        - **Balance left on the card:** at least 5 USD must remain on the card
        after the withdrawal. The maximum you can
          withdraw is therefore the card balance minus 5 USD (a card with 30 USD allows a withdrawal of up to 25 USD,
          and a card with less than 10 USD cannot be withdrawn from). To recover the whole balance, terminate the card
          (`POST /cards/{code}/terminate`).
        - **Card balance:** read in real time from the card provider before the
        withdrawal.

        - **Fees:** the card withdrawal fee of your plan (see
        [Plans](/getting-started/plans)) is deducted from the
          amount withdrawn; your balance is credited with `net_amount`.

        Sends a `card.withdrawal.completed` webhook.
      operationId: withdrawCard
      parameters:
        - name: code
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: >-
            Code of the card: the `code` returned when the card is created
            (`POST /cards`).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - amount
              properties:
                amount:
                  type: number
                  minimum: 5
                  example: 20
                  description: >-
                    Amount to withdraw from the card (USD, minimum 5; at least 5
                    USD must remain on the card)
      responses:
        '200':
          description: Withdrawal completed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WithdrawResponse'
        '400':
          $ref: '#/components/responses/InsufficientBalance'
        '403':
          $ref: '#/components/responses/AccountSuspended'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
components:
  schemas:
    WithdrawResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
        data:
          type: object
          properties:
            card_code:
              type: string
              format: uuid
            withdrawal_id:
              type: string
              description: >-
                Identifier of the withdrawal (same as the transaction `id` in
                `GET /cards/{code}/transactions`)
              example: ctx_9f2c1e0b7a6d5c4b3a291807
            status:
              type: string
              enum:
                - completed
              example: completed
            amount:
              type: number
              description: Amount withdrawn from the card
              example: 20
            fee:
              type: number
              description: Card withdrawal fee of your plan
              example: 1.2
            net_amount:
              type: number
              description: Amount credited to your ops balance (amount - fee)
              example: 18.8
            credited_balance:
              type: string
              enum:
                - cards_visa
                - cards_mastercard
              example: cards_visa
            card_balance:
              type: number
              description: Card balance after the withdrawal
              example: 30
            currency:
              type: string
              example: USD
    ErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: object
          properties:
            code:
              type: string
              description: >
                Error code, for example `AUTHENTICATION_REQUIRED`,
                `AUTHENTICATION_FAILED`, `ACCOUNT_RESTRICTED`,

                `IP_NOT_ALLOWED`, `PLAN_UPGRADE_REQUIRED`, `PLAN_LIMIT_REACHED`,
                `ACCOUNT_SUSPENDED_NEGATIVE_BALANCE`,

                `INSUFFICIENT_BALANCE`, `OPERATION_FAILED`, `FORBIDDEN`,
                `RESOURCE_NOT_FOUND`, `VALIDATION_ERROR`,

                `RATE_LIMIT_EXCEEDED`, `INTERNAL_ERROR`, `wrong_api_host`. See
                [Error Handling](/guides/error-handling).
              example: VALIDATION_ERROR
            message:
              type: string
              example: Missing required fields.
            details:
              type: object
              nullable: true
        meta:
          $ref: '#/components/schemas/Meta'
    Meta:
      type: object
      properties:
        request_id:
          type: string
          example: a4f8e2c1b3d97056
        mode:
          type: string
          enum:
            - test
            - live
          example: test
        timestamp:
          type: string
          format: date-time
  responses:
    InsufficientBalance:
      description: Insufficient ops balance
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error:
              code: INSUFFICIENT_BALANCE
              message: Insufficient ops balance.
              details:
                required: 50
                available: 10
                balance_type: cards_mastercard
    AccountSuspended:
      description: >-
        One of your ops balances is negative; every request other than `GET` is
        refused until it is topped up
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error:
              code: ACCOUNT_SUSPENDED_NEGATIVE_BALANCE
              message: >-
                Your account is suspended because one of your ops balances is
                negative. Top up the negative balance to restore access.
                Read-only requests (GET) remain available.
              details:
                negative_balance_since: '2026-10-15T08:00:00+00:00'
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error:
              code: RESOURCE_NOT_FOUND
              message: Resource not found.
              details: null
    ValidationError:
      description: Validation error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: API key (sk_test_... or sk_live_...)

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.