> For the complete documentation index, see [llms.txt](https://sonic-ai-works.gitbook.io/sonic-networks-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sonic-ai-works.gitbook.io/sonic-networks-docs/api-reference/web3-payment-adapter-api.md).

# Web3 Payment Adapter API

Solana Pay QR, CCTP v2, x402 v2, ZK proof and transaction-intent endpoints.

## Capability and deployment discovery

```
GET /api/v1/web3/capabilities
GET /api/v1/web3/deployment
```

Feature enablement is separate from deployment status.

## Solana Pay

```
POST /api/v1/transactions/:id/solana-pay
GET  /api/v1/solana-pay/:id
```

The server derives recipient, mint, amount, decimals and expiry from an existing authenticated `TransactionIntent`. It returns a Solana Pay URL plus SVG/data-URL QR. QR is transport, not settlement truth.

## CCTP v2

```
POST /api/v1/cctp/transfers
POST /api/v1/cctp/transfers/:id/source-submitted
POST /api/v1/cctp/transfers/:id/attestation
POST /api/v1/cctp/transfers/:id/destination-submitted
POST /api/v1/cctp/transfers/:id/reconcile
```

CCTP transfer creation is idempotent. Attestation is fetched server-side. Completion is a protected reconciliation operation.

The adapter manages transfer state, official Solana-domain/program metadata, source/destination submission evidence and attestation/reconciliation. It does not claim that an external wallet has signed a Circle burn/mint transaction until the corresponding transaction evidence is supplied and verified.

## x402 v2

```
GET  /api/v1/x402/resources
GET  /api/v1/x402/requirements/:resourceId
POST /api/v1/x402/verify
POST /api/v1/x402/settle
```

Requirement responses use `PAYMENT-REQUIRED`. Clients submit the payment payload through the canonical `PAYMENT-SIGNATURE` header; the JSON-body `paymentPayload` field remains a compatibility fallback for server SDK callers. Settlement responses use `PAYMENT-RESPONSE`.

Solana networks are represented with CAIP-2 identifiers. Verification is server-mediated through the configured facilitator. Settlement requires a tenant-scoped `Idempotency-Key`: duplicate settlement requests replay the existing outcome rather than performing another economic operation. x402 access does not replace subscription entitlements.

## ZK verifier

```
POST /api/v1/transactions/:id/zk-verify
```

A proof is bound to tenant/user/TransactionIntent and persisted by proof hash. ZK remains unavailable until a factual verifier endpoint is configured and the feature is enabled. A successful proof verifies only the configured proof statement; it does not itself settle a chain/payment transaction.

## Transaction truth

Wallet ownership proves address control. A signature submits a transaction. Product settlement is completed only after required chain/provider reconciliation (`processed`, `confirmed`, or `finalized` according to the operation threshold).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://sonic-ai-works.gitbook.io/sonic-networks-docs/api-reference/web3-payment-adapter-api.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
