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

# Create Deposit

> Creates a deposit: the user pays in fiat and the funds are credited, converted to the corresponding digital asset, to one of the user's custody wallets.

#### Request

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| Authorization | Header | Yes | `Bearer <access_token>` obtained from **POST /api/v1/client/token**. |
| user_id | Path | Yes | User who makes the deposit. |

#### Request Body

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| amount | number | Yes | Amount to deposit. |
| accountId | uuid | No | Destination custody wallet of the user. |
| symbolOrigin | string | No | Fiat paid (e.g. `COP`, `USD`). |
| symbolDestination | string | No | Asset credited (e.g. `COPM`, `USDC`). |
| paymentMethod | string | No | `PSE` (default), `BREB`, `NEQUI`, `DAVIPLATA`, `ACH`, `WIRE` or `SWIFT`. |
| bankCode | string | No | Bank `code` from **GET /admin/banks**. Required for `PSE`. |
| redirectUrl | string | No | Where the user returns after paying (`PSE`). |
| phone | string | No | Phone number, for `NEQUI` / `DAVIPLATA`. |
| quoteId | uuid | No | Quote to lock the rate. |
| executionMode | string | No | `NORMAL` (default) or `INVERSE`. |

#### Response

The response is an envelope with three keys:

| Field | Description |
| --- | --- |
| operation | The created operation: `id`, `userId`, `numberCode`, `originId`, `destinationId`, `symbolOrigin`, `symbolDestination`, `amountOrigin`, `amountDestination`, `rate`, `paymentMethod`, `status`, `direction`, `registerDate`, `depositInstructions`, `treasuryItems` (cost breakdown) and `events`. |
| tierEscalation | `null` when the operation fits the user's current compliance tier. Otherwise it describes the action the user must complete to raise their limits (`actionType`: `FORM_URL`, `QR_APP`, `VIDEO_KYC`, `DOC_UPLOAD`, `NOTIFY_ONLY` or `BLOCK`, plus `actionPayload`, `message` and `expiresAt`). |
| depositInfo | Present when the user has to send funds: `paymentMethod`, the applied `quote` and the `depositInstructions`. `null` otherwise. |

#### Errors

| Status | When |
| --- | --- |
| 400 | Insufficient funds in the origin. |
| 403 | The user does not exist or is not `APPROVED`. |
| 422 | Invalid body, amount ≤ 0, asset pair not enabled for your account, destination not registered/approved/owned by the user, or the operation exceeds the user's compliance tier limits. |



## OpenAPI

````yaml /stack/openapi.json post /api/v1/admin/operation/{user_id}/deposit
openapi: 3.1.0
info:
  title: Kravata Stack API
  version: '2.0'
  description: >-
    Kravata Stack API: users, accounts, custody wallets, liquidity ramps and
    fiat payments.
servers:
  - url: https://test-api-kore.kravata.co
    description: Test
  - url: https://partners-api.kravata.co
    description: Production (mTLS + IP allowlist)
security:
  - bearerAuth: []
tags:
  - name: Authentication
  - name: Users
  - name: Accounts
  - name: Earn
  - name: Custody
  - name: Liquidity Ramps
  - name: Payments
  - name: Webhooks
paths:
  /api/v1/admin/operation/{user_id}/deposit:
    post:
      tags:
        - Liquidity Ramps
      summary: Create Deposit
      description: >-
        Creates a deposit: the user pays in fiat and the funds are credited,
        converted to the corresponding digital asset, to one of the user's
        custody wallets.


        #### Request


        | Field | Type | Required | Description |

        | --- | --- | --- | --- |

        | Authorization | Header | Yes | `Bearer <access_token>` obtained from
        **POST /api/v1/client/token**. |

        | user_id | Path | Yes | User who makes the deposit. |


        #### Request Body


        | Field | Type | Required | Description |

        | --- | --- | --- | --- |

        | amount | number | Yes | Amount to deposit. |

        | accountId | uuid | No | Destination custody wallet of the user. |

        | symbolOrigin | string | No | Fiat paid (e.g. `COP`, `USD`). |

        | symbolDestination | string | No | Asset credited (e.g. `COPM`,
        `USDC`). |

        | paymentMethod | string | No | `PSE` (default), `BREB`, `NEQUI`,
        `DAVIPLATA`, `ACH`, `WIRE` or `SWIFT`. |

        | bankCode | string | No | Bank `code` from **GET /admin/banks**.
        Required for `PSE`. |

        | redirectUrl | string | No | Where the user returns after paying
        (`PSE`). |

        | phone | string | No | Phone number, for `NEQUI` / `DAVIPLATA`. |

        | quoteId | uuid | No | Quote to lock the rate. |

        | executionMode | string | No | `NORMAL` (default) or `INVERSE`. |


        #### Response


        The response is an envelope with three keys:


        | Field | Description |

        | --- | --- |

        | operation | The created operation: `id`, `userId`, `numberCode`,
        `originId`, `destinationId`, `symbolOrigin`, `symbolDestination`,
        `amountOrigin`, `amountDestination`, `rate`, `paymentMethod`, `status`,
        `direction`, `registerDate`, `depositInstructions`, `treasuryItems`
        (cost breakdown) and `events`. |

        | tierEscalation | `null` when the operation fits the user's current
        compliance tier. Otherwise it describes the action the user must
        complete to raise their limits (`actionType`: `FORM_URL`, `QR_APP`,
        `VIDEO_KYC`, `DOC_UPLOAD`, `NOTIFY_ONLY` or `BLOCK`, plus
        `actionPayload`, `message` and `expiresAt`). |

        | depositInfo | Present when the user has to send funds:
        `paymentMethod`, the applied `quote` and the `depositInstructions`.
        `null` otherwise. |


        #### Errors


        | Status | When |

        | --- | --- |

        | 400 | Insufficient funds in the origin. |

        | 403 | The user does not exist or is not `APPROVED`. |

        | 422 | Invalid body, amount ≤ 0, asset pair not enabled for your
        account, destination not registered/approved/owned by the user, or the
        operation exceeds the user's compliance tier limits. |
      operationId: create-deposit
      parameters:
        - name: user_id
          in: path
          required: true
          description: ''
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                amount:
                  type: integer
                symbolOrigin:
                  type: string
                accountId:
                  type: string
                paymentMethod:
                  type: string
                redirectUrl:
                  type: string
                bankCode:
                  type: string
            example:
              amount: 500000
              symbolOrigin: USD
              accountId: '{{wallet_id}}'
              paymentMethod: BREB
              redirectUrl: https://app.kravata.co/
              bankCode: '1022'
      responses:
        '200':
          description: Successful response
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Access token from POST /api/v1/client/token.

````