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

# Get a deposit

> Returns a single deposit by its ID.

Processing deposits are keyed by the observed onchain event while they wait for finality, and that ID remains stable after the deposit completes. They are informational only: balances and withdrawable value update only after the finalized deposit posts to the ledger. Ground only surfaces pre-finality processing deposits for workflow-idle wallets; wallets with active Ground-managed workflows may wait until final attribution.


## OpenAPI

````yaml swagger/swagger-combined.yaml GET /v2/wallets/{id}/deposits/{depositId}
openapi: 3.0.0
info:
  title: Ground API
  description: Core API for portfolio wallets, deposits, withdrawals, and webhooks.
  version: 2.0.0
servers:
  - url: https://sandbox.groundtech.co
  - url: https://production.groundtech.co
security:
  - bearerAuth: []
tags:
  - name: System
    description: System health and utility endpoints.
  - name: Sandbox Faucets
    description: Sandbox-only test token faucets.
  - name: Portfolio Wallets
    description: >-
      Portfolio wallets with strategy allocation, deposits, withdrawals, and
      yield positions.
  - name: Webhook Endpoints
    description: Webhook endpoint management for portfolio wallet notifications.
paths:
  /v2/wallets/{id}/deposits/{depositId}:
    get:
      tags:
        - Portfolio Wallets
      summary: Get a single deposit
      description: Returns a single deposit by its ID.
      operationId: getWalletDepositV2
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Wallet ID
        - name: depositId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Deposit ID
      responses:
        '200':
          description: Deposit details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Deposit'
              example:
                id: d1e2f3a4-0000-4000-8000-000000000001
                amount: '100.500000'
                token: usdc
                chain: ethereum
                fromAddress: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e'
                txHash: >-
                  0xb4ec6ad9f2f2d75fb8df30c6e49b1f319138f0172d7bff7c402e7dcb7f017e8a
                status: completed
                createdAt: '2025-09-02T12:00:00Z'
                completedAt: '2025-09-02T12:05:00Z'
        '400':
          description: Invalid path parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error: id must be a valid UUID v4
                code: validation_error
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Deposit not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                deposit_not_found:
                  value:
                    error: Deposit not found
                    code: deposit_not_found
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  schemas:
    Deposit:
      type: object
      properties:
        id:
          type: string
          format: uuid
        amount:
          type: string
          description: >-
            Deposit amount as a fixed six-decimal USD string (e.g.
            "100.500000").
          nullable: true
        token:
          type: string
          description: Deposited stablecoin.
          enum:
            - usdc
            - usdt
          nullable: true
        chain:
          type: string
          description: Chain where the deposit was detected.
          enum:
            - arbitrum
            - base
            - ethereum
            - ethereum_sepolia
            - polygon
            - solana
            - solana_devnet
        fromAddress:
          type: string
          nullable: true
        txHash:
          type: string
          nullable: true
          description: On-chain transaction hash.
        status:
          type: string
          nullable: true
          enum:
            - processing
            - completed
            - failed
          description: >-
            Deposit status. `processing` can mean the deposit was detected
            before finality for a workflow-idle wallet and is not yet credited
            to balances.
        createdAt:
          type: string
          format: date-time
        completedAt:
          type: string
          format: date-time
          nullable: true
          description: >-
            Populated after the deposit finalizes and posts; null while
            processing.
    ErrorResponse:
      type: object
      required:
        - error
        - code
      properties:
        error:
          type: string
          description: >-
            Human-readable error message. May change without notice; do not
            parse programmatically.
        code:
          type: string
          description: >-
            Machine-readable error code. Stable across API versions — safe to
            switch on in client code.
          enum:
            - validation_error
            - unknown_parameters
            - unsupported_chain
            - unsupported_token
            - invalid_destination_address
            - precision_overflow
            - invalid_cursor
            - unauthenticated
            - forbidden
            - wallet_not_found
            - wallet_limit_reached
            - withdrawal_not_found
            - deposit_not_found
            - yield_source_not_found
            - wallet_projection_unavailable
            - insufficient_funds
            - duplicate_request_id
            - request_id_conflict
            - invalid_position_weight
            - invalid_withdrawal_plan
            - payout_not_found
            - webhook_not_found
            - webhook_duplicate_url
            - withdrawal_not_cancellable
            - withdrawal_already_cancelled
            - withdrawal_payout_in_progress
            - withdrawal_policy_required
            - workflow_conflict
            - payout_already_terminal
            - payout_in_progress
            - payout_not_retryable
            - address_book_entry_not_found
            - address_book_duplicate_entry
            - address_book_whitelist_violation
            - rate_limited
            - rate_limit_exceeded
            - internal_error
            - wallet_creation_failed
            - service_temporarily_unavailable
    AuthErrorResponse:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          description: Authentication or authorization error message.
        message:
          type: string
          nullable: true
          description: Additional auth middleware detail, when present.
        code:
          type: string
          nullable: true
          enum:
            - unauthenticated
            - forbidden
          description: >-
            Some auth and scope failures include a stable code; middleware
            errors may omit it.
  responses:
    Unauthorized:
      description: >-
        The request is missing a valid bearer token, or the token is invalid or
        expired.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/AuthErrorResponse'
          example:
            error: Unauthenticated request
            message: Missing or invalid bearer token
    TooManyRequests:
      description: >-
        Rate limit exceeded. Limits are enforced by API key/customer identity
        and by endpoint class. Retry with backoff; rate-limit headers are not
        currently emitted.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error: Rate limit exceeded
            code: rate_limited
    InternalServerError:
      description: >-
        An unexpected error occurred while processing the request. The request
        can be safely retried with the same `requestId`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error: Internal server error
            code: internal_error
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````