Travel Rule


❗️

Transfer V1 API will no longer be maintained and will be shut down on April 1, 2026.

All integrators must migrate to Transfer V2 API to continue processing transactions on OwlPay Harbor.

After 2026-04-01, all requests sent to any v1 Transfer endpoint will no longer be processed.

When you initiate an On-Ramp transfer (Fiat → Stablecoin) with a value exceeding USD 3,000, you are required to provide additional Travel Rule information in the destination object.


FieldDescriptionAllowed valuesRequired
residential_country_codeISO 3166-1 alpha-2 code of the beneficiary’s residential countryYes
residential_stateState/Province/Region of the beneficiary’s residenceYes
residential_cityCity of the beneficiary’s residenceYes
_residential_address_1Primary street address of the beneficiary_Yes
residential_address_2Secondary address details (e.g., apartment, suite, unit)No
residential_postal_codePostal/ZIP code of the beneficiary’s residenceYes
beneficiary_typeType of beneficiaryindividual, companyYes
beneficiary_dobDate of birth of the beneficiary (YYYY-MM-DD)No
beneficiary_id_doc_typeType of identification document

when beneficiary_type: individual: ID_CARD, PASSPORT, DRIVERS, PAYMENT_SOURCE, BANK_CARD, OTHER

when beneficiary_type: company : COMPANY_DOC, TRANSPARENCY_REGISTRY_EXTRACT, POWER_OF_ATTORNEY

No
beneficiary_id_doc_country_codeCountry code where the identification document was issuedNo
beneficiary_id_doc_numberIdentification document numberNo
beneficiary_receiving_wallet_typeReceiving wallet typepersonalWallet, thirdPartyCustodian, otherYes
beneficiary_institution_nameName of the wallet provider or institution (e.g., MetaMask)Yes

Case 1: Transfer to third-party recipients

when is_self_transfer = false

curl --location --request POST 'https://harbor-sandbox.owlpay.com/api/v1/transfer' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'X-API-KEY: {{API_KEY}}' \
--header 'Idempotency-Key: {{Idempotency-Key}}' \
--data-raw '{
    ...,
    "destination": {
        ...,
        "is_self_transfer": false,
        "residential_country_code": "US",
        "residential_state": "DE",
        "residential_city": "Wilmington",
        "residential_address_1": "100 Market Street",
        "residential_address_2": "Suite 200",
        "residential_postal_code": "62704",
        "beneficiary_type": "individual",
        "beneficiary_dob": "1990-01-01",
        "beneficiary_id_doc_type": "PASSPORT",
        "beneficiary_id_doc_country_code": "US",
        "beneficiary_id_doc_number": "123456789",
        "beneficiary_receiving_wallet_type": "personalWallet",
        "beneficiary_institution_name": "MetaMask"
    }
}'

Case 2: Transfer to self

when is_self_transfer = true

curl --location --request POST 'https://harbor-sandbox.owlpay.com/api/v1/transfer' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'X-API-KEY: {{API_KEY}}' \
--header 'Idempotency-Key: {{Idempotency-Key}}' \
--data-raw '{
    ...,
    "destination": {
        ...,
        "is_self_transfer": true,
        "beneficiary_receiving_wallet_type": "personalWallet",
        "beneficiary_institution_name": "MetaMask"
    }
}'

Did this page help you?