API reference · Owned cards
Reveal an invoice
POST
/v1/wallets/{walletId}/invoices/{invoiceId}/cards/revealShows the codes of every card on an invoice — all of them or none, up to 100. Sends no body.
Permission
cards:revealAuthenticationSigned change
Staff-set limits it counts towardAll requests, Reveals
.NET SDK
anis.OwnedCards.RevealInvoiceAsync(walletId, invoiceId)Parameters
| Name | In | Type | Notes |
|---|---|---|---|
walletIdrequired | path | UUID | A UUID, lower-case with hyphens. |
invoiceIdrequired | path | UUID | A UUID, lower-case with hyphens. |
Request
Signed with your key, with a one-time nonce and a digest of the body.
Headers: Signature-Input, Signature, Content-Digest, Nonce, X-Anis-Date, Accept-Language (optional). The SDKs set all of them for you.
Body: No body at all — not even {}. Any byte is refused with validation_failed. The signature still covers the digest of the empty body.
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | Success. | RevealedCredentialCollection |
| 401 | Refused: not authenticated. | Problem |
| 403 | Refused: not allowed. | Problem |
| 404 | Refused: not found, or not yours. | Problem |
| 409 | Refused: conflicts with the current state. | Problem |
| 422 | Refused: the request breaks a rule. | Problem |
| 429 | Refused: a limit was reached. | Problem |
| 503 | No decision: a dependency was unavailable. | Problem |
Every answer is signed by Anis; the SDKs check it before you see it.
Refusals
Every refusal is a signed problem. Branch on its code; each links to what it means and what to do.
| Error | Code | Status |
|---|---|---|
| Invalid credentials | invalid_credentials | 401 |
| Insufficient scope | insufficient_scope | 403 |
| Source address not allowed | source_ip_not_allowed | 403 |
| Rate limited | rate_limited | 429 |
| Replay detected | replay_detected | 409 |
| Account not authorised | binding_not_authorized | 403 |
| Account inactive | account_inactive | 403 |
| Wallet not granted | wallet_not_granted | 404 |
| Not found | resource_not_found | 404 |
| Validation failed | validation_failed | 422 |
| Reveal not allowed | reveal_not_allowed | 409 |
| Invoice too large to reveal | invoice_reveal_limit_exceeded | 409 |
| Business subscription required | business_subscription_required | 409 |
| Wallet disabled | wallet_disabled | 409 |
| Wallet expired | wallet_expired | 409 |
| Service unavailable | dependency_unavailable | 503 |
| Request timeout | request_timeout | 504 |
| Internal error | internal_error | 500 |
Types
RevealedCredentialCollection
| Field | Type | Notes |
|---|---|---|
itemsalways present | list of RevealedCredential | Every card on the invoice with its codes — all of them or none, at most 100. |
RevealedCredential
| Field | Type | Notes |
|---|---|---|
soldCardIdalways present | UUID | The sold card these codes belong to. |
serialNumber | string | The card’s serial number. A secret: store it where you keep secrets and never log it. |
voucher | string | The card’s voucher code. A secret: store it where you keep secrets and never log it. |
revealedAt | string (date-time) | When it was revealed. |