# N9t2 Commercial Bridge

> Integrate with the N9T2 Commercial Bridge for two-way cross-chain transfers between XRPL XRP and Base ETH or Base USDC (XRP→ETH, ETH→XRP, XRP→USDC, USDC→XRP). Obtain live quotes, validate quote-bound payment instructions (native XRP/ETH, or ERC-20 USDC on Base), verify customer payments, track execution, and retrieve transfer receipts. N9T2 service fee: 1.45 XRP equivalent per transfer, included in the quote. Use the exact request fields and live quote values; never guess payment details or report completion without settlement evidence.

- Skill: `boss/n9t2-commercial-bridge-2` (Agent Skill)
- Install (CLI): `npx skillmds@latest add boss/n9t2-commercial-bridge-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/boss/n9t2-commercial-bridge-2/raw
- Safety review: pending
- Works with: any agent that reads SKILL.md (Claude Code, Claude.ai, Cursor, Codex, Windsurf, 60+ more)
- Category: Docs & Writing
- License: MIT
- Author: N9T2 (https://skillmd.com/u/n9t2)
- Updated: 2026-10-13
- Page: https://skillmd.com/skills/boss/n9t2-commercial-bridge-2

---


# N9T2 Commercial Bridge — Agent Integration Skill

## 1. Purpose

The N9T2 Commercial Bridge is a quote-bound, two-way transfer service between XRP on the XRP Ledger (XRPL) and ETH or USDC on Base Mainnet. Liquidity is provided by THORChain.

An agent integrating this service must be able to:

1. Request a live transfer quote.
2. Validate the route, destination, exact customer input, payment instructions, service fee and quote expiry.
3. Present the quote to the customer and obtain explicit authorization before payment.
4. Make, or have the customer make, exactly the payment the quote specifies.
5. Submit the actual source-chain transaction hash for verification against the quote.
6. Track execution and settlement.
7. Retrieve the customer-safe receipt, and report completion only when the receipt establishes it.

This is a commercial cross-chain transfer workflow. It is separate from N9T2's pay-per-call XRPL data endpoint `/bridge/execute`.

A quote is not a transfer. A verified payment is not a completed transfer. Neither a quote nor the customer's principal is commercial revenue.

## 2. Production endpoints

Production base URL: `https://x402.n9t2.com`

| Operation | Method | Endpoint | Purpose |
|---|---|---|---|
| Create quote | POST | `/bridge/quote` | Live quote bound to the route, destination and payment instructions |
| Verify payment | POST | `/bridge/payment` | Verify and record the actual customer payment against a quote |
| Retrieve receipt | GET | `/bridge/receipt/{quote_id}` | Durable customer-safe receipt for a quote |

Machine-readable references:

- OpenAPI: `https://x402.n9t2.com/openapi.json`
- Agent discovery: `https://x402.n9t2.com/.well-known/agent.json` (see `interfaces.commercialBridge`)
- LLM summary: `https://x402.n9t2.com/llms.txt`

The live API is authoritative for availability, quote values and transaction status. If a live response conflicts with an example in this document, follow the live response; stop if the discrepancy affects the safety or meaning of the transaction.

## 3. Supported routes

| Direction | source_chain | source_asset | destination_chain | destination_asset | Customer pays with |
|---|---|---|---|---|---|
| XRP → ETH | `xrpl` | `XRP` | `base` | `ETH` | Native XRP Payment on XRPL |
| ETH → XRP | `base` | `ETH` | `xrpl` | `XRP` | Native ETH transfer on Base |
| XRP → USDC | `xrpl` | `XRP` | `base` | `USDC` | Native XRP Payment on XRPL |
| USDC → XRP | `base` | `USDC` | `xrpl` | `XRP` | ERC-20 USDC transfer on Base |

Base USDC is the canonical USDC contract on Base Mainnet: `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` (6 decimals). No other ERC-20 token is accepted.

Do not attempt BNB Chain, Solana, other ERC-20 tokens, or any route not listed above. The quote endpoint rejects unsupported routes with `unsupported_route`.

The destination address must match the destination chain: a `0x…` EVM address for Base, or an XRPL classic address (`r…`) for XRPL. Confirm the address and network with the customer before requesting a quote.

## 4. Request a quote

`POST https://x402.n9t2.com/bridge/quote` with `Content-Type: application/json`.

Exactly these five fields are required:

| Field | Type | Meaning |
|---|---|---|
| `source_chain` | string | `xrpl` or `base` |
| `source_asset` | string | `XRP`, `ETH` or `USDC` |
| `destination_chain` | string | `xrpl` or `base` |
| `destination_asset` | string | `XRP`, `ETH` or `USDC` |
| `destination_address` | string | Customer-controlled destination wallet |

The quote request does not accept a source amount. The service determines the live route minimum and calculates the exact customer input. Do not invent fields such as `source_amount`, `slippage` or `transaction_hash`.

### Examples

Replace the placeholders with the customer's real destination address.

XRP on XRPL to ETH on Base:

```json
{"source_chain": "xrpl", "source_asset": "XRP", "destination_chain": "base", "destination_asset": "ETH", "destination_address": "CUSTOMER_BASE_ADDRESS"}
```

ETH on Base to XRP on XRPL:

```json
{"source_chain": "base", "source_asset": "ETH", "destination_chain": "xrpl", "destination_asset": "XRP", "destination_address": "CUSTOMER_XRPL_ADDRESS"}
```

XRP on XRPL to USDC on Base:

```json
{"source_chain": "xrpl", "source_asset": "XRP", "destination_chain": "base", "destination_asset": "USDC", "destination_address": "CUSTOMER_BASE_ADDRESS"}
```

USDC on Base to XRP on XRPL:

```json
{"source_chain": "base", "source_asset": "USDC", "destination_chain": "xrpl", "destination_asset": "XRP", "destination_address": "CUSTOMER_XRPL_ADDRESS"}
```

curl:

```bash
curl -sS -X POST https://x402.n9t2.com/bridge/quote \
  -H 'Content-Type: application/json' \
  --data '{"source_chain":"xrpl","source_asset":"XRP","destination_chain":"base","destination_asset":"USDC","destination_address":"CUSTOMER_BASE_ADDRESS"}'
```

## 5. Validate the quote

A successful response:

```json
{"quoted": true, "executable": true, "quote": { "...": "..." }}
```

Require HTTP 200, `quoted: true` and `executable: true`. Otherwise stop and report the actual error.

The `quote` object includes `quote_id`, `status`, `source`, `destination`, `customer_input`, `payment`, `minimum_transaction_requirement`, `service_cost`, `destination_amount`, `customer_usd_reference`, `quote_expiry`, `created_at` and `execution_binding`.

The `payment` object contains:

| Field | Meaning |
|---|---|
| `type` | `native` for XRP and ETH; `erc20` for Base USDC |
| `network` | `xrpl:0` (XRPL Mainnet) or `eip155:8453` (Base Mainnet) |
| `asset` | `XRP`, `ETH` or `USDC` |
| `pay_to` | N9T2 treasury address that must receive the payment |
| `amount` | Exact amount to pay, in whole units of the asset |
| `expires_at` | Unix time after which the quote must not be paid |
| `token`, `decimals` | Base USDC only: the USDC contract and `6` |

Treat `quote_id`, amount, asset, network, recipient, destination and expiry as one bound contract. Never reconstruct payment instructions from memory or an older quote, and never modify them.

Before payment, show the customer the route, destination address, exact amount, asset, network, recipient, N9T2 fee, quote expiry and estimated destination amount, and obtain explicit authorization for those exact details.

## 6. Make the payment

Pay exactly `payment.amount` of `payment.asset` to `payment.pay_to` on `payment.network`, before `payment.expires_at`. Quotes are short-lived (typically about 15 minutes); if the quote expires, request a new one instead of paying.

- **XRP (XRPL):** one native XRP `Payment` to `pay_to` for exactly the quoted amount.
- **ETH (Base):** one native ETH transfer to `pay_to` for exactly the quoted amount.
- **USDC (Base):** one standard USDC `transfer` of exactly the quoted amount (`amount × 10^6` base units) to `pay_to`. Payments from smart-contract wallets are accepted; the payment is verified from the USDC `Transfer` log. The transaction must contain exactly one USDC transfer to `pay_to`.

Overpayment, underpayment, split payments, or payment in another asset will not verify.

Wallet signing happens only in the customer's own wallet or signing environment. Never send private keys, seed phrases, recovery phrases or wallet secrets to N9T2 or any HTTP endpoint.

## 7. Verify the payment

`POST https://x402.n9t2.com/bridge/payment` with `Content-Type: application/json`.

The only allowed fields:

| Field | Required | Meaning |
|---|---|---|
| `quote_id` | Yes | Exact ID from the active quote |
| `transaction_hash` | Yes | Hash of the actual source-chain payment |

```json
{"quote_id": "ACTUAL_QUOTE_ID", "transaction_hash": "ACTUAL_PAYMENT_TRANSACTION_HASH"}
```

Never submit a planned, fabricated or unrelated transaction hash.

The server verifies the transaction against the stored quote. A transaction already bound to a different quote is rejected with `transaction_already_bound` (HTTP 409). Resubmitting the same quote and transaction pair returns the existing record.

Base payments require a minimum number of block confirmations. If verification returns `base_payment_insufficient_confirmations` (HTTP 409), wait and submit the same `quote_id` and `transaction_hash` again; do not pay again.

Possible errors include `invalid_json`, `invalid_request`, `unexpected_fields`, `quote_id_missing`, `transaction_hash_missing`, `quote_expired`, `transaction_already_bound`, `unsupported_payment_source`, `payment_destination_mismatch`, `payment_amount_mismatch`, `base_payment_insufficient_confirmations` and `verified_transaction_hash_mismatch`. Read the actual HTTP status and response body.

## 8. Execution is not completion

After verification, execution runs through a durable, exactly-once workflow; it does not happen inside the payment HTTP request. The `execution` object can report `provider_execution_authorized`, `provider_execution_dispatched` and `next_stage`. Stages include `durable_dispatch_pending`, `provider_reconciliation`, `settlement_monitoring`, `receipt_available` and `manual_review`.

`payment_verified: true` does not mean the destination transfer completed. If verification succeeded but execution was not dispatched or the request errored, inspect the quote and receipt state. Never send principal again.

## 9. Retrieve the receipt

```bash
curl -sS 'https://x402.n9t2.com/bridge/receipt/URL_ENCODED_QUOTE_ID'
```

A found receipt returns HTTP 200 with the customer-safe receipt. A missing receipt returns HTTP 404:

```json
{"found": false, "error": "receipt_not_found"}
```

Report completion only when the receipt shows execution status `COMPLETED` with settlement. While execution is pending, query the same `quote_id` again after a reasonable delay. Do not create a new quote or resubmit payment because the receipt is not ready yet.

## 10. Pricing

The N9T2 service fee is **1.45 XRP equivalent per transfer**, charged in the source asset and already included in `customer_input`:

`customer_input = live route minimum + N9T2 service fee`

- XRP source: the fee is 1.45 XRP.
- ETH source: the fee is the ETH equivalent of 1.45 XRP at the live market price, rounded up.
- USDC source: the fee is the USD value of 1.45 XRP at the live market price (USDC valued at 1 USD), rounded up to 6 decimals.

The route minimum is transaction value set by live THORChain liquidity, not an N9T2 fee. Prices, minimums and destination estimates are dynamic; never hard-code them. The destination amount is an estimate, not a guarantee of the final settled amount.

A quote, customer principal, route minimum, destination estimate or payment verification is not revenue. Revenue exists only when a transfer completes and the fee is retained.

## 11. Errors and retries

Quote errors:

| Code | HTTP | Action |
|---|---|---|
| `missing_required_field` | 400 | Correct the request fields |
| `unsupported_route` | 400 | Use a route from section 3 |
| `invalid_destination` | 400 | Use an address valid for the destination chain |
| `quote_unavailable` | 503 | Live route quote unavailable; retry later |
| `market_unavailable` | 503 | Live market pricing unavailable; retry later |
| `minimum_unstable` | 503 | Route minimum changed while quoting; request a new quote |

Receipt errors: HTTP 404 `receipt_not_found` means the receipt is not available yet; check the same quote again if payment was verified.

For ambiguous payment outcomes, reconcile the original quote, transaction hash and receipt before any retry. Never blindly resend customer principal.

## 12. Agent safety checklist

1. Use only the four routes in section 3.
2. Never invent request fields, quote IDs, transaction hashes or payment details.
3. Verify the destination address and exact payment instructions against the active quote.
4. Obtain explicit customer approval before payment.
5. Never request or transmit wallet secrets.
6. Never pay an expired quote.
7. For Base USDC, send exactly one transfer of the exact amount to `pay_to`.
8. Distinguish payment verified, execution dispatched, settlement and completed receipt.
9. Do not claim completion without receipt and settlement evidence.
10. When the live API returns something unfamiliar, preserve the details and report uncertainty instead of guessing.

## 13. Capability catalogue

- Parent capability: `n9t2-bridge`
- Commercial capability: `n9t2-commercial-bridge`
- Category: `commercial-cross-chain`
- Routes: `xrpl:XRP→base:ETH`, `base:ETH→xrpl:XRP`, `xrpl:XRP→base:USDC`, `base:USDC→xrpl:XRP`

This skill documents the commercial transfer lifecycle. It does not add MCP tools or change the 19-tool MCP catalogue.

