CanopyAPI docs

customer_not_bound

This intent's deposit customer is not bound yet. Transient -- safe to retry shortly.

HTTP 503

When this happens

Returned only from POST /api/v1/intents/{id}/source-inbox. Issuing a source deposit inbox requires the intent to already have a bound deposit customer. If the intent's customerId is still null after Canopy attempts to re-bind it, this error fires instead of a 500 -- the condition is expected to resolve on its own shortly, not a permanent failure of the request.

A bind that failed for a reason Canopy can name is reported under that name instead, so this code always means "retry" and never hides a condition that waiting cannot fix. In particular, a merchant whose deposit routing is not provisioned yet gets source_inbox_not_active, and a refused inbox issuance gets source_inbox_refused -- neither of which is retryable.

The error envelope

The response carries a Retry-After header naming the number of seconds to wait:

json
{
  "error": {
    "code": "customer_not_bound",
    "message": "This intent's deposit customer is not bound yet. Safe to retry shortly.",
    "request_id": "req_1a2b3c4d5e6f7a8b9c0d1e2f",
    "docs": "https://canopypay.io/errors/customer_not_bound"
  }
}

What to do about it

Wait at least Retry-After seconds, then retry the same call against the same intent. No other action is required on your side -- the binding happens on Canopy's side, not in response to anything the caller supplies.