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.


Field

Description

Allowed values

Required

residential_country_code

ISO 3166-1 alpha-2 code of the beneficiary’s residential country

Yes

residential_state

State/Province/Region of the beneficiary’s residence

Yes

residential_city

City of the beneficiary’s residence

Yes

_residential_address_1

Primary street address of the beneficiary_

Yes

residential_address_2

Secondary address details (e.g., apartment, suite, unit)

No

residential_postal_code

Postal/ZIP code of the beneficiary’s residence

Yes

beneficiary_type

Type of beneficiary

individual, company

Yes

beneficiary_dob

Date of birth of the beneficiary (YYYY-MM-DD)

No

beneficiary_id_doc_type

Type 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_code

Country code where the identification document was issued

No

beneficiary_id_doc_number

Identification document number

No

beneficiary_receiving_wallet_type

Receiving wallet type

personalWallet, thirdPartyCustodian, other

Yes

beneficiary_institution_name

Name 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"
    }
}'