Skip to main content

What happened

A non-custodial payout reached the signing step and the user attempted to approve it, but the custody provider rejected the signature payload before the on-chain broadcast. No funds were moved. The payout is in a terminal failed state with failureCode: USER_SIGNATURE_REJECTED_BY_PROVIDER. This is distinct from a user-driven decline (USER_SIGNATURE_DECLINED): the user attempted to approve, but the provider’s validation of the signature failed.
{
  "type": "USER_SIGNATURE_REJECTED_BY_PROVIDER",
  "title": "Customer signature could not be accepted",
  "status": 422,
  "detail": "The customer's passkey approval could not be accepted. No funds were moved.",
  "resolution": "Submit a new payout. If the same customer or wallet hits this repeatedly, contact support.",
  "docs": "/errors#user-signature-rejected-by-provider",
  "instance": "/v2/payouts/txn_abc123",
  "correlationId": "corr_xyz789",
  "timestamp": "2026-01-15T09:30:00.000Z"
}

Common causes

  • Malformed signature — the passkey response from the user’s device was incomplete or could not be parsed
  • Policy violation on the provider’s side — the signing request did not match the provider’s registered key policy for this wallet
  • Provider connectivity issue — the provider could not validate the signature due to a transient internal error

Recovery

This is a terminal state for the current payout. A new payout must be submitted.
1. Confirm the terminal state
curl -X GET https://api.conduit.financial/v2/payouts/txn_abc123 \
  -H "x-api-key: YOUR_API_KEY"
2. Submit a new payout A single occurrence is usually a transient provider issue. Submit a new payout with a fresh idempotency key:
curl -X POST https://api.conduit.financial/v2/payouts \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Idempotency-Key: idem_NEW_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customerId": "cus_abc123",
    "assetAmount": {"code": "USDC", "amount": "50.000000", "chain": "ETHEREUM"},
    "destination": {
      "recipient": {
        "rail": "CRYPTO",
        "chain": "ETHEREUM",
        "address": "0xabc..."
      }
    }
  }'
3. Escalate if it recurs If the same customer or wallet consistently hits this error, the wallet’s key configuration may need to be investigated. Contact support with the affected wallet ID and the correlation IDs from the failed payouts.

Prevention

  • Handle transaction.failed with this code — branch on failureCode === 'USER_SIGNATURE_REJECTED_BY_PROVIDER' and surface a clear “your signature could not be processed” message with a retry option
  • Alert on repeated failures — if the same wallet fails more than once with this code, escalate rather than allowing silent retry loops
The transaction.failed event fires when the payout terminates:
{
  "type": "transaction.failed",
  "data": {
    "transactionId": "txn_abc123",
    "failureCode": "USER_SIGNATURE_REJECTED_BY_PROVIDER"
  }
}