Updates for Travel Rule

Guide for merchants using Confirmo's Invoice or Payout APIs.

Travel Rule Context

The Travel Rule is an international regulation designed to prevent money laundering and the financing of terrorism. It requires crypto payment providers like Confirmo to share basic information about the sender and recipient of each transaction.

The specific information required may vary depending on the jurisdiction, transaction value, and other circumstances. It will usually include the name, address, crypto wallet or account identifier, place of birth, and date of birth. For companies, it may also include a Legal Entity Identifier (LEI) or registration number. In some cases — especially for transactions over €1,000 — we may also require KYC verification or wallet ownership proof.


Updating Your API Implementation

Refer to our API documentation for Invoices and Payouts.

❗️

The following changes must implemented by 31 December 2025


Impacted API requests:


Both endpoints now include inputs:

customerProfile (required).

customerEmail (optional – strongly recommended)

A new transaction state has also been added: pending_verification.


customerProfile

This object identifies the customer and can cary some or all of their required information.

"profileId" is the only required property of the customerProfile object. It is defined by you and must be a unique string for each customer, such as an email address or account number. This ID is used to recognize the customer across future transactions, so they don’t need to resubmit their details. Currently, this ID cannot be changed.

Providing additional information on behalf of your customers is optional, but it enhances their checkout or payout experience by removing the need for them to enter details manually. If you choose to include more information, you should first set the "type" property to either "individual" or "company". Once defined, the "type" cannot be changed. If "type" is not set, a placeholder "reference" type is used.

All other properties are optional but improve the customer’s transaction flow.

{
  "customerProfile": {
    "profileId": "customer123",
    "type": "individual",
    "firstName": "John",
    "lastName": "Doe",
    "streetAddress": "12 Long Street",
    "city": "London",
    "country": "UK",
    "postalCode": "E12 3FG",
    "dateOfBirth": "YYYY-MM-DD",
    "placeOfBirth": "London, UK"
  }
}
{
  "customerProfile": {
    "profileId": "company456",
    "type": "company",
    "registeredName": "ACME s.r.o.",
    "streetAddress": "12 Long Street",
    "city": "London",
    "country": "UK",
    "postalCode": "E12 3FG",
    "dateOfBirth": "YYYY-MM-DD",
    "registrationNumber": "12345678"
  }
}

customerEmail

Providing your customer’s email is highly recommended, as it helps Confirmo securely process transactions, issue refunds, and resolve potential issues. It may also be used to notify them about payment statuses—particularly for payouts—or to request missing information.

We will never use the email for marketing or unrelated communication, nor share it with any third party.

{
  "customerEmail": "[email protected]",
  "customerProfile": {
    "profileId": "customer123"
  }
}

Editing optional properties

If a new invoice or payout API request is created for an existing profileId but with new customerEmail or optional properties of customerProfile, the existing information will be replaced with the newly provided values. However, it is not possible to change the customer type (individual or company) once it has been set by you or the customer themselves.


Creating a New Invoice

A minimal request body to create a new invoice for 200 USD, to be credited as USDC:

{
  "invoice": {
    "currencyFrom": "USD",
    "amount": 200
  },
  "settlement": {
    "currency": "USDC"
},
  "customerProfile": {
    "currency": "USDC"
  }
}

Including customer’s email (recommended) and other optional details:

{
  "invoice": {
    "currencyFrom": "USD",
    "amount": 200
  },
  "customerEmail": "[email protected]",
  "customerProfile": {
    "profileId": "customer123",
    "type": "individual",
    "firstName": "John",
    "lastName": "Doe",
    "country": "UK",
  }
}

Invoice 'pending_verification' State

The API response includes a url that links the customer to the invoice UI to complete their payment.

Once payment is made, Confirmo reviews the available information.

  • If all required details are already available, the invoice moves directly to the paid state.
  • If details are missing, it enters the pending_verification state. The invoice UI will then prompt the customer to provide the missing information or request a refund. Once verification is complete, the invoice will automatically transition to paid.
  • Webhook notifications will be triggered for any state changes, consistent with our current Invoice functionality.

Customers who have already transacted with you typically won’t be asked to resubmit information.


Creating a New Payout

Creating a payout follows the same pattern as creating an invoice. You’ll need to include customerProfile containing at least profileId and optionally customerEmail in your API request body.

{
  "currencyFrom": "EUR",
  "amountFrom": "10",
  "address": "0x...",
  "paymentMethodId": "ETHEREUM-BLOCKCHAIN-MAINNET-ETH-CURRENCY",
  "customerEmail": "[email protected]",
  "customerProfile": {
    "profileId": "customer123",
    "type": "individual",
    "firstName": "John",
    "lastName": "Doe",
    "country": "UK",
  }
}

Payout 'pending_verification' State

Payouts to known recipients or previously used wallet addresses are typically processed immediately, as they are now. However, if any required information is missing, the payout will first enter the pending_verification state.

The API response will include a **url** pointing to the payout UI, where the recipient can provide any missing details. If a **customerEmail** is provided, a message containing this link will be sent to that address. Otherwise, your integration should direct the recipient to the payout UI. They may be asked to verify ownership of the destination wallet or specify which exchange or platform controls it.

Once all required information is submitted, the payout will automatically progress through the following states: pending_verification → sending → done

The pending_verification state can last for up to 24 hours. If the required information isn’t provided within that timeframe, the payout will expire.


For further assistance, please contact [email protected].