> ## Documentation Index
> Fetch the complete documentation index at: https://rain-sandbox-trial.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# API

<Update label="September 2026">
  <Badge size="lg">2026-09-07</Badge>

  #### Account Verification Transactions Now Generally Available

  Account-verification transactions are out of beta and on by default for every tenant — no enablement request needed. Pass `type=verification` to [`GET /issuing/transactions`](/reference/transactions/get-all-transactions) to read them, or fetch one via [`GET /issuing/transactions/{transactionId}`](/reference/transactions/get-a-transaction-by-its-id).

  The payload matches beta. The API still excludes verifications unless you ask for them, so you do not need to change existing integrations.

  ***

  <Badge size="lg">2026-09-03</Badge>

  #### Transfer Source Attribution

  You can now read best-effort source attribution on transfer `source` objects: `originator` (the sending wallet address on offramps, or the fiat sender's name on onramps), `referenceId` (the on-chain deposit transaction hash on offramps, or the wire IMAD / ACH reference on onramps), and `memo` (the incoming fiat payment memo, onramps only). You receive these on the `transactionTransfer` webhook and on transfer rows from the [Transactions API](/reference/transactions/get-all-transactions). All three fields are additive and optional — omitted when they can't be resolved — so your existing integrations keep working unchanged.
</Update>

<Update label="August 2026">
  <Badge size="lg">2026-08-19</Badge>

  #### Currency and Card Configuration Fields

  Issuing responses now state the currency their amounts are denominated in, and card responses describe the card's product configuration:

  * Balance reads return an optional `currency` field alongside the existing amounts: [tenant](/reference/balances/get-a-tenants-credit-balances), [company](/reference/balances/get-a-companys-credit-balances), and [user](/reference/balances/get-a-userss-credit-balances) balances.
  * Custom fee charges ([company](/reference/companies/charge-a-company-a-custom-fee), [user](/reference/users/charge-a-user-a-custom-fee)) echo the `currency` stamped on the created transaction.
  * Card responses ([create](/reference/cards/create-a-card-for-a-user), [get](/reference/cards/get-a-card-by-its-id), [update](/reference/cards/update-a-card)) include an optional `configuration` object describing the card's `scheme` (for example `visa`), `rail` (`credit`, `debit`, or `prepaid`), and `currency`. Each field is omitted when it cannot be resolved.
  * [Dispute](/reference/disputes/get-all-disputes) responses include the `currency` inherited from the disputed transaction, and `fee` and `adjustment` [transactions](/reference/transactions/get-all-transactions) now carry `currency` like the other transaction types.

  Currency values are lowercase ISO 4217 codes (for example `usd`). All of these fields are additive and optional, so existing integrations keep working unchanged, and the response shapes are forward-compatible with future multi-currency programs.

  Endpoints that derive the tenant's currency — the three balance reads, both custom fee charges, [payment initiation](/reference/payments/initiate-a-payment-for-a-user), and [card creation](/reference/cards/create-a-card-for-a-user) — now return `400 UNSUPPORTED_CURRENCY` when the tenant's configured currency isn't supported.

  New **webhook payload versions** carry the same information: dispute created/updated (`v1.2.0`) and chargebackCreated (`v1.1.0`) inherit the disputed transaction's `currency`; card created (`v1.1.0`) and updated (`v1.4.0`) state the card's `currency`; spend created (`v1.4.0`) and completed (`v1.5.0`) add `currency` to `fundMovements[]` entries; transactionReward created (`v1.1.0`) states `rewardUnit: "points"`; onchainRefund created/completed (`v1.1.0`) state `amountUnit: "cents"`; and raindrop\_redemption created events add `amountUnit: "wei"` under `v1.1.0`. Versioned fields are opt-in — update your tenant's webhook configuration to receive them (raindrop payloads instead declare the new version directly in their `version` field).

  ***

  <Badge size="lg">2026-08-17</Badge>

  #### Account Verification Transactions (Beta)

  [`GET /issuing/transactions`](/reference/transactions/get-all-transactions) now returns \$0 account-verification authorizations when you pass `type=verification`. They are excluded from responses by default, so existing integrations are unchanged.

  Each row returns a `verification` object with the card and cardholder identity, the merchant fields (`merchantName`, `merchantCity`, `merchantCountry`, `merchantCategory`, `merchantCategoryCode`), and `authorizedAt`. There is no amount and no `postedAt` — verifications never settle. Individual rows are also retrievable via `GET /issuing/transactions/{transactionId}`.

  This is live in beta and ready for partner testing. Access is enabled per tenant — contact your account manager to turn it on. Until it is enabled, requests with `type=verification` return `404 Not Found`.

  ***

  <Badge size="lg">2026-08-12</Badge>

  #### Dispute Filing Thresholds and Fee Enforcement

  Rain no longer files or reimburses disputes of \$10 or under. On September 1, 2026, that threshold rises to \$30: disputes under \$30 will not be filed or charged, and the dispute fee already defined in your MSA applies to each dispute of \$30 or more escalated to the card network, regardless of the outcome. The threshold that applies is determined by the date you submit the dispute.

  Nothing changes in how or what you submit. Keep submitting every dispute regardless of size. Reporting costs you nothing and helps Rain track fraud patterns even when a formal dispute is not filed. See [Dispute Thresholds and Fees](/docs/transaction-issues-disputes#dispute-thresholds-and-fees).
</Update>

<Update label="July 2026">
  <Badge size="lg">2026-07-28</Badge>

  #### Signature Endpoints Now Return a Retry-After Header

  The payment and withdrawal signature endpoints now return a `Retry-After` response header on their `409` and `425` cooldown responses. The value is the number of whole seconds you must wait before you retry, matching the fixed 120-second (2-minute) signature cooldown. Read the header and delay your next request by that many seconds.

  * [Get payment signature for a company](/reference/signatures/get-payment-signature-for-a-company)
  * [Get withdrawal signature for a company](/reference/signatures/get-withdrawal-signature-for-a-company)
  * [Get payment signature for a user](/reference/signatures/get-payment-signature-for-a-user)
  * [Get withdrawal signature for a user](/reference/signatures/get-withdrawal-signature-for-a-user)
  * [Get payment signature for an authorized user tenant](/reference/signatures/get-payment-signature-for-an-authorized-user-tenant)
  * [Get withdrawal signature for an authorized user tenant](/reference/signatures/get-withdrawal-signature-for-an-authorized-user-tenant)

  <Badge size="lg">2026-07-10</Badge>

  #### Report Downloads Now Return a Signed URL

  The [daily](/reference/reports/get-a-tenants-report) and [monthly](/reference/reports/get-a-tenants-monthly-report) report endpoints now respond with a short-lived signed URL instead of the file body:

  * `GET /issuing/reports/{year}/{month}` - Monthly report
  * `GET /issuing/reports/{year}/{month}/{day}` - Daily report

  The response is a JSON object `{ url, expiresAt }`. Download the report by issuing a GET to `url`; the link expires 1 hour after issuance. This lets large reports download directly from storage instead of streaming through the API. `format` accepts `csv` (default) or `json`.

  <Warning>
    Breaking change: these endpoints previously returned the raw file body and now return `{ url, expiresAt }`. Update integrations to request the report, then GET the returned `url`.
  </Warning>

  <Badge size="lg">2026-07-09</Badge>

  #### Higher Dispute Attachment Limit

  You can now upload up to 20 evidence files per dispute, up from 10. The 20MB per-file size limit is unchanged. This applies when you [create a dispute](/reference/disputes/create-a-dispute-for-a-transaction) and when you upload additional attachments to an existing dispute.

  <Badge size="lg">2026-07-02</Badge>

  #### Monthly Statement Downloads

  You can now download a user's or company's monthly statement as a PDF:

  * `GET /issuing/statements/{year}/{month}` - Download a user's or company's monthly statement

  The `year` and `month` identify the month the statement covers. Pass either the `userId` or `companyId` query parameter to select whose statement to download. The user or company must belong to the authenticated tenant. See [Download a monthly statement](/reference/statements/download-a-user-or-companys-monthly-statement) for details.
</Update>

<Update label="June 2026">
  <Badge size="lg">2026-06-24</Badge>

  #### Updated Reporting Fields

  The [daily and monthly servicing reports](/docs/reporting-field-descriptions) now expose additional columns — `ledgerSettlementAmount`, `postedAt`, `tenantId`, and `billingTenantId` — and no longer include `isNetworkAccountVerification`. Reports also now include not-yet-settled transactions, which carry a `ledgerSettlementAmount` of `0` until they settle.

  #### Invoice Reconciliation Guide

  Added [step-by-step instructions](/docs/reporting-field-descriptions#reconciling-your-invoice) for reconciling your invoice from the report, covering both volume figures (`billingTenantId` + `transactionDate`) and transaction counts (`tenantId` + `postedAt`).

  #### Rollout & Backfill

  The new reporting fields apply to reports generated from June 24, 2026 onward. The May 2026 monthly report will also be backfilled to match the new format.
</Update>

<Update label="April 2026">
  <Badge size="lg">2026-04-17</Badge>

  #### Multi-Attachment Support for Disputes

  You can now upload multiple evidence files per dispute (up to 10 attachments, max 20MB each). New endpoints:

  * `GET /issuing/disputes/{disputeId}/attachments` - List all attachments
  * `POST /issuing/disputes/{disputeId}/attachments` - Upload an attachment
  * `GET /issuing/disputes/{disputeId}/attachments/{attachmentId}` - Download an attachment
  * `DELETE /issuing/disputes/{disputeId}/attachments/{attachmentId}` - Delete an attachment

  The dispute response now includes `hasFileEvidence` (boolean) and `attachmentCount` (integer) fields. Existing single-file evidence endpoints remain available for backward compatibility.

  ***

  <Badge size="lg">2026-04-10</Badge>

  #### Webhook Signing Key Protection

  You can no longer delete an API key that serves as your primary or secondary webhook signing key. Attempts return a `400 Bad Request` error. To delete the key, first assign a different signing key in the [webhooks dashboard](/docs/set-up-webhooks#webhook-security-and-signing).
</Update>

<Update label="March 2026">
  <Badge size="lg">2026-03-17</Badge>

  #### API Key IP Address Whitelisting

  Added optional `ipAddresses` field to API key creation. Restrict API keys to specific IPv4/IPv6 addresses or CIDR ranges. Requests from non-allowed IPs return `401 Unauthorized`. See [Authenticating with the API](/reference/authenticating-with-the-api) for details.
</Update>

<Update label="January 2026">
  <Badge size="lg">2026-01-27</Badge>

  #### JWT Authentication

  Introduced support for `bearerAuth` (JSON Web Tokens). High-sensitivity endpoints now support Bearer tokens for improved session security.

  <Badge size="lg">2026-01-19</Badge>

  #### Standardized Shipping Contact

  Added `recipientEmail` as a standard property for physical card shipments. It features a 60-character limit and defaults to `shipping@rain.xyz`.

  ***

  <Badge size="lg">2026-01-15</Badge>

  #### [Detailed Dispute Management](/docs/disputes)

  Added `disputeType` categories (fraud, creditNotProcessed, serviceNotReceived, merchandiseIssue, other).

  #### Automated Reimbursements

  When a dispute moves to `"accepted"`, Rain automatically generates a credit transaction. You will receive a `transaction.completed` webhook with a negative amount equal to the credit issued.

  #### Webhook Lifecycle

  The `dispute.updated` webhook now triggers for every status transition and whenever `textEvidence` is modified.
</Update>

<Update label="December 2025">
  <Badge size="lg">2025-12-17</Badge>

  #### Overhauled Error Handling

  All errors now return a machine-readable `ErrorResponse` schema with programmatic `errorCode` values (e.g., `VALIDATION`, `LOCKED`, `BLOCKCHAIN`).

  #### Signature State Machine

  Refactored `IssuingSignature` to handle asynchronous operations. Added `pending` status with `retryAfter` polling indicators and `expiresAt` timestamps.

  #### Custom Charges

  Added [`POST /companies/{companyId}/charges`](/reference/companies/charge-a-company-a-custom-fee) to apply custom fees to company accounts.

  ***

  <Badge size="lg">2025-12-16</Badge>

  #### Reporting Expansion

  Added [`includeSubtenants`](/reference/reports/get-a-tenants-report) parameter to the Reporting API to allow parent tenants to pull consolidated data.

  #### Versioning

  Updated `contractVersion` schema from an **integer** to a **number** for better precision.

  ***

  <Badge size="lg">2025-12-09</Badge>

  #### Monthly Reporting API

  Launched [`GET /reports/{year}/{month}`](/reference/reports/get-a-tenants-monthly-report). Enables tenants to retrieve settled transaction data in CSV, JSON, or ZIP formats.

  ***

  <Badge size="lg">2025-12-03</Badge>

  #### Address Intelligence

  Launched [`POST /shipping-groups/validate-address`](/reference/shipping/validate-an-address-for-shipping) using Google’s Address Validation API to provide "confidence scores" for delivery.
</Update>

<Update label="November 2025">
  <Badge size="lg">2025-11-28</Badge>

  #### Shipping Methods

  Added `apcTracked` as a supported method for [card issuance](/docs/issuing-cards).

  ***

  <Badge size="lg">2025-11-20</Badge>

  #### Business Owner Onboarding

  Launched [`POST /applications/company/{companyId}/ubo`](/reference/applications/add-a-new-ubo-to-a-company-application) to add Ultimate Beneficial Owners to existing applications.

  ***

  <Badge size="lg">2025-11-18</Badge>

  #### Webhook Key Rotation

  Introduced zero-downtime key management via [`POST /webhooks/apikey/secondary`](/reference/webhooks/create-a-secondary-signing-api-key-for-webhook-signatures) and [`/promote`](/reference/webhooks/promote-the-secondary-signing-api-key-to-primary). Supports dual-signing during transitions.
</Update>

<Update label="October 2025">
  <Badge size="lg">2025-10-28</Badge>

  #### `rainCollateralContractId`

  Added this parameter to signature endpoints to allow specific selection of collateral contracts per transaction.

  ***

  <Badge size="lg">2025-10-09</Badge>

  #### Contract Management

  Launched [`PUT /contracts/{contractId}`](/reference/contracts/update-a-smart-contract) to toggle settings like the `onramp` feature.
</Update>
