> ## 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.

# Request sandbox mock USDT

> Creates an asynchronous request to send mock USDT to an Ethereum Sepolia address. This endpoint is available only in the sandbox environment. Poll the returned request with the GET endpoint until its status is `confirmed` or `failed`.

Submit a faucet request for the wallet's `depositAddresses.ethereum_sepolia`
address, then poll the returned request ID until it is `confirmed` or `failed`.

Use a new UUID v4 `Idempotency-Key` for each intended transfer. Reusing the key
returns the original request without sending another transfer.


## OpenAPI

````yaml swagger/swagger-combined.yaml POST /v2/sandbox/faucets/usdt
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/sandbox/faucets/usdt:
    servers:
      - url: https://sandbox.groundtech.co
    post:
      tags:
        - Sandbox Faucets
      summary: Request mock USDT
      description: >-
        Creates an asynchronous request to send mock USDT to an Ethereum Sepolia
        address. This endpoint is available only in the sandbox environment.
        Poll the returned request with the GET endpoint until its status is
        `confirmed` or `failed`.
      operationId: createSandboxUsdtFaucetRequest
      parameters:
        - name: Idempotency-Key
          in: header
          required: true
          schema:
            type: string
            format: uuid
          description: >-
            Client-generated UUID v4. Reusing it with the same request returns
            the existing transfer; reusing it with different input returns
            `409`.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SandboxUsdtFaucetRequest'
      responses:
        '200':
          description: Existing faucet transfer returned for an idempotent replay.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SandboxUsdtFaucetTransfer'
        '202':
          description: Faucet transfer request accepted for asynchronous processing.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SandboxUsdtFaucetTransfer'
        '400':
          description: Invalid address, amount, or idempotency key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SandboxUsdtFaucetError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '409':
          description: The idempotency key was previously used with different input.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SandboxUsdtFaucetError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '503':
          description: >-
            The faucet is unavailable or this request was sent to a non-sandbox
            environment.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SandboxUsdtFaucetError'
components:
  schemas:
    SandboxUsdtFaucetRequest:
      type: object
      required:
        - address
        - amount
      additionalProperties: false
      properties:
        address:
          type: string
          description: Nonzero EVM address that will receive mock USDT on Ethereum Sepolia.
          example: '0x1111111111111111111111111111111111111111'
        amount:
          type: string
          pattern: ^(?:0|[1-9][0-9]*)(?:\.[0-9]{1,6})?$
          description: >-
            Mock USDT amount as a decimal string. Must be greater than zero and
            no more than 100, with up to six decimal places.
          example: '25.000000'
    SandboxUsdtFaucetTransfer:
      type: object
      required:
        - id
        - status
        - chain
        - token
        - address
        - amount
        - transactionHash
        - failureCode
        - createdAt
        - submittedAt
        - confirmedAt
      properties:
        id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - requested
            - processing
            - submitted
            - confirmed
            - failed
        chain:
          type: string
          enum:
            - ethereum_sepolia
        token:
          type: string
          enum:
            - usdt
        address:
          type: string
          description: EVM address receiving the mock USDT.
        amount:
          type: string
          pattern: ^[0-9]+\.[0-9]{6}$
          description: Requested mock USDT amount with six decimal places.
        transactionHash:
          type: string
          nullable: true
          description: Ethereum Sepolia transaction hash once submitted.
        failureCode:
          type: string
          nullable: true
          description: Machine-readable failure code when status is `failed`.
        createdAt:
          type: string
          format: date-time
          nullable: true
        submittedAt:
          type: string
          format: date-time
          nullable: true
        confirmedAt:
          type: string
          format: date-time
          nullable: true
    SandboxUsdtFaucetError:
      type: object
      required:
        - error
        - code
      properties:
        error:
          type: string
        code:
          type: string
          enum:
            - invalid_address
            - invalid_amount
            - amount_precision_exceeded
            - amount_above_request_limit
            - invalid_idempotency_key
            - idempotency_key_reused
            - faucet_request_not_found
            - faucet_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.
    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
  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
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````