> For the complete documentation index, see [llms.txt](https://docs.zebec.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.zebec.io/developer-docs/partner-api/topup-flow/zano.md).

# Zano example

Execute a Carbon card top-up from a Zano wallet through the Zebec Partner API.

Use this flow for a quote whose `payment.chain` is `ZANO`. Start with the shared [top-up flow](/developer-docs/partner-api/topup-flow.md) through preflight. The paying wallet's full Zano address is the `buyerAddress` for preflight and submission.

## Request and inspect the quote

```http
GET /partner/v1/topup/quote?amount=100&currencyCode=USD&sourceChain=ZANO&sourceTokenMint=<zano-asset-id>
Authorization: Bearer <accessToken>
```

The response includes the quote-bound Zano values:

* `payment.network`, `payment.contractAddress`, `payment.tokenAmount`, and `payment.tokenDecimals`.
* `receivingAddress` — the integrated destination address.
* `receivingPaymentId` — the payment ID bound to the quote.

Send the exact base-unit amount and asset to `receivingAddress` using the exact `receivingPaymentId`. Do not create, replace, normalize, or omit either destination value. The currently supported FUSD token uses four decimals, but the quote remains authoritative.

## Execute and confirm

The wallet/RPC interface is operator-specific; pass the quote fields directly to it and save the confirmed transaction ID.

```ts
const txHash = await zanoWallet.transfer({
  network: quote.payment.network,
  assetId: quote.payment.contractAddress,
  amountAtomic: quote.payment.tokenAmount,
  integratedAddress: quote.receivingAddress,
  paymentId: quote.receivingPaymentId,
});
await zanoWallet.waitForConfirmation(txHash);
```

## Sign and submit

Sign the exact quote message with the Zano wallet. `publicKey` is the Zano public spend key, while `buyerAddress` remains the full sending wallet address; they are deliberately different identifiers.

```ts
const signature = await zanoWallet.signMessage(quote.signingMessage);

await partnerApi.submitTopup({
  quoteId: quote.id,
  receipt: {
    deposit: { txHash, buyerAddress: zanoWallet.fullAddress },
  },
  userSignature: {
    signature,
    publicKey: zanoWallet.publicSpendKey,
    scheme: "zano",
  },
});
```

The API obtains the payment ID from the quote. Do not add a client-supplied `paymentId` to the submit receipt.
