---
title: "Create deposit"
method: POST
path: "/v1/treasury/deposits"
tags: ["Treasury"]
---

# Create deposit

`POST /v1/treasury/deposits`

## Request

- Base URL: `https://api.tesser.xyz`
- URL: `https://api.tesser.xyz/v1/treasury/deposits`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/tesser/apis/tesser-api/docs/v1/treasury/deposits/post.ts> (a function with typed inputs; its response is checked against the schema)

Create a deposit payment and get deposit instructions.

## Request body

- CreateDepositRequest
  - `organization_reference_id` string: Optional client-supplied identifier.
  - `desired` DesiredOverlayRequest, required: Caller's stated intent for the deposit.
    - `from` DesiredFromLeg, required: Source side of the deposit.
      - `account_id` string, required: Source bank account ID.
      - `amount` string, required: Source amount.
      - `currency` string, required: Source currency code.
    - `to` DesiredToLeg, required: Destination side of the deposit.
      - `account_id` string, required: Destination account ID.
      - `currency` string, required: Destination currency code.
      - `network` string: Destination blockchain network.

## Response `201`

Deposit created successfully

- CreateDepositResponse
  - `data` Deposit, required
    - `id` string, required: Unique identifier for the deposit.
    - `workspace_id` string, required: Workspace ID the deposit belongs to.
    - `organization_reference_id` string, nullable: Optional external reference ID.
    - `direction` 'inbound', required: Resource direction.
    - `desired` DepositDesiredOverlay, required: Caller's stated intent at creation. Frozen, never overwritten.
      - `from` DepositDesiredFromLeg, required: Source side.
        - `account_id` string, nullable, required: Account ID.
        - `amount` string, nullable, required: Amount.
        - `currency` string, nullable, required: Currency code.
        - `network` string, nullable, required: Blockchain network.
      - `to` DepositDesiredToLeg, required: Destination side.
        - `account_id` string, nullable, required: Account ID.
        - `amount` string, nullable, required: Always null for deposits — see `estimated.to.amount` for the indicative target.
        - `currency` string, nullable, required: Currency code.
        - `network` string, nullable, required: Blockchain network.
    - `estimated` DepositEstimatedOverlay, required: Tesser's projection for how the deposit will proceed.
      - `from` DepositEstimatedFromLeg, required: Source side.
        - `account_id` string, nullable, required: Account ID.
        - `amount` string, nullable, required: Amount.
        - `currency` string, nullable, required: Currency code.
        - `network` string, nullable, required: Blockchain network.
      - `to` DepositEstimatedToLeg, required: Destination side.
        - `account_id` string, nullable, required: Account ID.
        - `amount` string, nullable, required: Amount.
        - `currency` string, nullable, required: Currency code.
        - `network` string, nullable, required: Blockchain network.
    - `actual` DepositActualOverlay, required: What actually settled. Populated when the deposit reaches a terminal state.
      - `from` DepositActualFromLeg, required: Source side.
        - `account_id` string, nullable, required: Account ID.
        - `amount` string, nullable, required: Amount.
        - `currency` string, nullable, required: Currency code.
        - `network` string, nullable, required: Blockchain network.
      - `to` DepositActualToLeg, required: Destination side.
        - `account_id` string, nullable, required: Account ID.
        - `amount` string, nullable, required: Amount.
        - `currency` string, nullable, required: Currency code.
        - `network` string, nullable, required: Blockchain network.
    - `steps` DepositStep[]: Optional list of system-generated steps that make up this deposit route.
      - `id` string, required: Unique identifier for the step.
      - `deposit_id` string, required: ID of the parent deposit.
      - `step_sequence` integer, required: Step sequence number (1-based).
      - `step_type` 'transfer' | 'swap', required: Step type: 'transfer', 'swap'.
      - `estimated` StepEstimatedOverlay, required: Planned values for this step.
        - `from` StepEstimatedFromLeg, required: Source side.
          - `account_id` string, nullable, required: Account ID.
          - `amount` string, nullable, required: Amount.
          - `currency` string, nullable, required: Currency code.
          - `network` string, nullable, required: Blockchain network.
        - `to` StepEstimatedToLeg, required: Destination side.
          - `account_id` string, nullable, required: Account ID.
          - `amount` string, nullable, required: Amount.
          - `currency` string, nullable, required: Currency code.
          - `network` string, nullable, required: Blockchain network.
      - `actual` StepActualOverlay, required: Settled values once the step reaches a terminal state. All-null until then.
        - `from` StepActualFromLeg, required: Source side.
          - `account_id` string, nullable, required: Account ID.
          - `amount` string, nullable, required: Amount.
          - `currency` string, nullable, required: Currency code.
          - `network` string, nullable, required: Blockchain network.
        - `to` StepActualToLeg, required: Destination side.
          - `account_id` string, nullable, required: Account ID.
          - `amount` string, nullable, required: Amount.
          - `currency` string, nullable, required: Currency code.
          - `network` string, nullable, required: Blockchain network.
      - `transaction_hash` string, nullable: Blockchain transaction hash (for crypto steps).
      - `fees` StepFee[], required: List of fees associated with this step.
        - `fee_amount` string, required: Fee amount.
        - `fee_currency` string, required: Fee currency code.
        - `fee_type` string, required: Fee type (e.g., 'gas', 'provider', 'tesser_fee').
        - `fee_metadata` object: Additional metadata for the fee (JSON object).
      - `provider_key` 'circle_mint' | 'kraken' | 'openfx' | 'turnkey' | 'zuba', nullable: Provider key used for this step (if applicable).
      - `status` 'created' | 'signature_requested' | 'signed' | 'submitted' | 'confirmed' | 'completed' | 'failed', required: Step status: 'created', 'signature_requested', 'signed', 'submitted', 'confirmed', 'completed', 'failed'.
      - `status_reasons` StatusReason[], nullable: Array of reasons explaining the current status (if any).
        - `error_code` string, required
        - `error_message` string, required
      - `created_at` string, required: ISO 8601 timestamp of creation.
      - `updated_at` string, required: ISO 8601 timestamp of last update.
      - `signature_requested_at` string, date-time, nullable: Timestamp when a signature was requested for the step
      - `signed_at` string, date-time, nullable: Timestamp when the step was cryptographically signed
      - `submitted_at` string, nullable: Submitted timestamp.
      - `confirmed_at` string, nullable: Confirmed timestamp.
      - `completed_at` string, nullable: Completed timestamp.
      - `failed_at` string, nullable: Failed timestamp.
    - `created_at` string, required: ISO 8601 timestamp of creation.
    - `updated_at` string, required: ISO 8601 timestamp of last update.
    - `expires_at` string, nullable: ISO 8601 timestamp when the deposit expires, or null for auto-created deposits.

## Other responses

- `400`: Invalid request data
- `401`: Authentication required or invalid credentials
- `500`: Internal server error

---

[API](https://skmtc.dev/tesser/apis/tesser-api.md) - [All operations](https://skmtc.dev/tesser/apis/tesser-api/llms.txt) - [OpenAPI document](https://skmtc.dev/tesser/apis/tesser-api/revisions/14f951e986b1?raw)
