Simulate Transfer Status

These endpoints are used to simulate internal status transitions for a given Transfer object. They are intended for testing and sandbox purposes only.

Why Simulate?

In the Harbor Sandbox environment, certain external events (such as wire arrival or blockchain confirmation) do not happen automatically. To move a transfer through its lifecycle and test your integration, you must manually trigger these status transitions using the Simulation APIs.

Sandbox Status Flows

On-Ramp Flow (Fiat → Crypto)

graph TD
    subgraph "Wire / ACH Push (Manual Deposit)"
    A1[pending_customer_transfer_start] -- "POST /simulate-paid" --> B1[pending_harbor]
    end
    
    subgraph "ACH Pull / Debit Card (Auto Pull)"
    A2[Transfer Created] --> B1
    end
    
    B1 -- "POST /simulate-completed" --> C1[completed]

Off-Ramp Flow (Crypto → Fiat)

graph TD
    A[Transfer Created] --> B[pending_harbor]
    B -- "POST /simulate-completed" --> C[completed]

Step 1: Simulate Customer Payment (Incoming)

Endpoint POST /api/v1/transfers/{transfer:uuid}/simulate-paid

Description Simulates the scenario where the customer has paid into the designated receiving account. This updates the transfer status from pending_customer_transfer_start to pending_harbor.

Applicable Payment Methods:

  • Wire
  • ACH Push

Not Applicable For:

  • ACH Pull
  • Debit Card (These methods skip this stage and move directly to pending_harbor because Harbor initiates the pull.)
⚠️

If you attempt to call this API for an ACH Pull or Debit Card transfer, you will receive an error: Order status is not unpaid.

API Request: Simulate that the payment has been executed according to the payment

curl --location --request POST 'https://harbor-sandbox.owlpay.com/api/v1/transfers/{{TRANSFER_UUID}}/simulate-paid' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'X-API-KEY: {{API_KEY}}' \
--header 'Idempotency-Key: {{Idempotency-Key}}'

Step 2: Simulate Harbor Settlement (Outgoing)

Endpoint POST /api/v1/transfers/{transfer:uuid}/simulate-completed

Description Simulates the scenario where Harbor has executed the payment to the final destination (bank or blockchain address). This updates the transfer status from pending_harbor to completed.

Applicable For:

  • All transfer types once they reach the pending_harbor state.
curl --location --request POST 'https://harbor-sandbox.owlpay.com/api/v1/transfers/{{TRANSFER_UUID}}/simulate-completed' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'X-API-KEY: {{API_KEY}}' \
--header 'Idempotency-Key: {{Idempotency-Key}}'

Troubleshooting

Error MessageCauseResolution
Order status is not unpaidThe transfer status is already pending_harbor or higher.Skip Step 1 and proceed to Step 2 (/simulate-completed).
Transfer is not in pending_harbor stateThe transfer has not reached the processing stage yet.Ensure the status is exactly pending_harbor.
This endpoint is not available in productionYou are using the production API endpoint.Switch to the Sandbox environment (harbor-sandbox.owlpay.com).