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

> ## Agent Instructions
> Tribridge is a crypto payment gateway for Solana and Sui (TON is coming soon). API base URL is https://api.tribridge.xyz. The API Reference documents ONLY the public endpoint surface: checkout sessions (create/get/generate-wallet/customer/simulate/verify/cancel), the two public payment-link endpoints, health probes, and the changelog. Server-side calls that create payments authenticate with the x-api-key header using a tri_test_... key (fully simulated test mode, no real funds) or tri_live_... key (real mainnet payments) - never expose keys client-side; all other documented endpoints are public with no auth. Dashboard, admin, OTP/auth, payouts, wallets, and webhook-management endpoints are intentionally NOT part of the public docs - they are dashboard-only and must not be presented as public API. Merchant test mode is simulated, not testnet. Refunds are automatic only (underpaid/overpaid), there is no manual refund endpoint. Always verify webhook HMAC-SHA256 signatures from the X-Tribridge-Signature header before trusting payloads. If you are an AI agent: fetch https://docs.tribridge.xyz/llms-full.txt for all documentation in one file, https://docs.tribridge.xyz/openapi/openapi.json for the machine-readable OpenAPI spec, or connect to the read-only MCP server at https://docs.tribridge.xyz/mcp. Any page is available as Markdown by appending .md to its URL. Use only the documented endpoints and fields; do not invent SDK packages or endpoints.

# Verify payment

> Manually re-check the deposit wallet on-chain and complete the payment if the funds arrived.

The "I have paid" re-check: reads the one-time deposit wallet's actual on-chain balance and, when the expected amount has arrived, completes the payment (fees accounted, sweep queued, webhook fired, receipt sent).

**No API key required.** Useful when webhook or poller detection is delayed and your customer is staring at a spinner.

## Reading the response

> [!NOTE]
>
> **Both outcomes return `200`** — the endpoint reports the truth, it doesn't fail on "not yet":
>
> * `status: "completed"` → deposit detected; `tx_hash` + `received` (base units) are set.
> * `status: "pending"` → nothing matching yet; `received` vs `expected` tell you how far off the payment is (base units, 6 decimals for USDC/USDT).

| Status code | Meaning |
| - | - |
| `400` | No deposit address generated yet — run [Generate deposit wallet](https://docs.tribridge.xyz/generate-deposit-wallet.md) first. |
| `404` | Unknown payment id. |
| `409` | Payment is not pending (already `completed`, `expired`, or `cancelled`). |

> [!WARNING]
>
> Verification reads chain state, so it can be a few seconds behind. Use it as a fallback, not the primary flow — [Webhooks](https://docs.tribridge.xyz/webhooks.md) remain your source of truth for fulfillment.


## OpenAPI

````yaml POST /payments/checkout/{id}/verify
openapi: 3.1.0
info:
  title: Tribridge API
  version: 1.0.0
  description: >-
    Public Tribridge API for accepting Solana and Sui payments. Base URL:
    `https://api.tribridge.xyz`.


    This reference covers **only the public surface**: endpoints callable
    without a dashboard session — either fully public or authenticated with a
    merchant `x-api-key`. Dashboard, admin, and account-management endpoints are
    intentionally excluded; manage those from your Tribridge dashboard.


    **Test vs live:** the mode is derived from the key you send (`tri_test_...`
    creates simulated test payments, `tri_live_...` real mainnet payments) —
    never from the request body. Minimum payment amount is $0.50. Rate limit:
    100 requests/minute per IP.
servers:
  - url: https://api.tribridge.xyz
security: []
tags:
  - name: Checkout Sessions
    description: >-
      Create payments, drive the hosted checkout, and follow the customer flow:
      deposit wallet, receipt contact, simulation, verification, cancellation.
  - name: Payment Links
    description: >-
      Read a public payment link and materialize a checkout from it — no API key
      required.
  - name: Status
    description: Service and blockchain RPC health, plus the public changelog.
paths:
  /payments/checkout/{id}/verify:
    post:
      tags:
        - Checkout Sessions
      summary: Verify payment
      description: >-
        Manual "I have paid" re-check: reads the deposit wallet's on-chain
        balance and completes the payment when the expected amount arrived.
        Useful when webhook/poller detection is delayed. Returns `200` with the
        current truth whether the outcome is `completed` or still `pending`.
      operationId: verifyCheckoutPayment
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          example: b3f1c2a0-1d4e-4f2a-9c8b-2e7a6f5d4c3b
      responses:
        '200':
          description: Verification result — completed or still pending
          content:
            application/json:
              examples:
                completed:
                  summary: Deposit detected — completed
                  value:
                    status: completed
                    tx_hash: 6p2mKq9vXt3Lw8Nb1cR5yZ7dF0aH4jE2sQ6uO8iT1gV
                    received: '99000000'
                pending:
                  summary: No matching deposit yet
                  value:
                    status: pending
                    message: >-
                      No matching deposit detected yet — check the chain and try
                      again.
                    received: '0'
                    expected: '99000000'
        '400':
          description: No deposit address generated yet
          content:
            application/json:
              example:
                error: No deposit address generated yet
        '404':
          description: Unknown payment id
          content:
            application/json:
              example:
                error: Payment not found
        '409':
          description: Payment is not pending (already completed, expired, cancelled…)
          content:
            application/json:
              example:
                error: Payment is already completed

````

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