Platform’s leveraging the Account Funding endpoints can subscribe to webhooks to receive real-time updates. There are the following scenarios:
| Webhook Scenario | Description | Exact reason text |
|---|---|---|
| Complete | The Fund Event has completed successfully. The deposited crypto has been automatically and successfully converted to fiat | n.a |
| Not complete - Asset not supported by the Account Funding product | The Fund Event was not completed successfully. The crypto asset deposited is no longer supported by the product | asset deposited is not supported by the fund workflow. The deposit has not been converted to fiat and the crypto has been credited to the customer's account |
| Not complete - Asset not supported by the Platform | The Fund Event was not completed successfully. The crypto asset deposited is no longer supported by the product. | asset deposited is not supported by your Platform. The deposit has not been converted to fiat and the crypto has been credited to the customer's account. |
| Not complete - Platform not enabled | The Fund Event was not completed successfully. The Platform is no longer configured to use the product. | deposit to an account associated with a platform not enabled on the fund workflow. The deposit has not been converted to fiat and the crypto has been credited to the customer's account |
| Not complete - Customer not in an approved status | The Fund Event was not completed successfully. The participant_code associated with the Fund Event is not in an approved status. | the customer was not in an approved state at the time of deposit. The deposit has not been converted to fiat and the crypto has been credited to the customer's account |
| Not complete - Deposit above maximum | The Fund Event was not completed successfully. zerohash offers the ability for platforms to define a maximum deposit amount. If that's exceeded upon a deposit, the Platform will receive a webhook. | deposit above maximum threshold. The deposit has not been converted to fiat and the crypto has been credited to the customer's account |
| Not complete - Deposit below minimum | The Fund Event was not completed successfully. zerohash offers the ability for platforms to define a minimum deposit amount. If the deposit is below that figure, the Platform will receive a webhook. | deposit below minimum threshold. The deposit has not been converted to fiat and the crypto has been credited to the customer's account |
| Not complete - Deposit not converted due to depeg | Stablecoins are only auto-converted to fiat when the stablecoin is properly pegged to it's reference asset. If a stablecoin is received and it is deemed depegged, the auto-conversion will not take place and the Platform will receive a webhook. | conversions are currently halted. The deposit has not been converted to fiat and the crypto has been credited to the customer's account |
| Not complete - Deposit not converted due to compliance reasons | There are certain compliance-related scenarios that will lead to a failed fund event. If they are triggered, funds will not sit in the Customer's account, but will instead be converted to a zerohash-controlled holding account | For Zero Hash Compliance reasons, the deposit has not been converted to fiat and the crypto has been credited to a Zero Hash holding account |
| Not complete - Currency mismatch | The Fund Event was not completed successfully. Currency deposited is different from the one requested. | deposit currency does not match the fund's underlying currency. The deposit has not been converted to fiat and the crypto has been credited to the customer's account |
| Not complete - Fund event expired - No deposit received | There was not a successful fund event within 30 minutes of JWT generation | deposit session has expired. |
| Pending - Waiting for Name Match | Applicable to the Travel Rule-Based Account Matching "Processing" feature only.Deposit received, but the PII name match process has not been conducted yet. | deposit received, however the Travel Rule-based account match has not completed yet |
| Not complete - Name Match Failed | Applicable to the Travel Rule-Based Account Matching "Processing" feature only. Deposit received, but the Travel Rule-based account match failed, preventing conversion to fiat. | Travel Rule-based account match failed |
| Not complete - Name Match Time Out | Applicable to the Travel Rule-Based Account Matching "Processing" feature Deposit received, but the Travel Rule-based account match timed out. | Travel Rule-based account match timed out |
Field Definitions:
| Field | Description | Always Present? | Type |
|---|---|---|---|
participant_code | End customer's participant code | Yes | string |
fund_asset | The crypto asset that was sent by the end customer in order to fund an account | Yes | string |
rate | The rate at which the fund_asset was liquidated at | No - only present if the Fund Event was successful and the asset was converted | string |
quoted_currency | The asset that the provided rate was denominated in, and will ultimately be converted into automatically upon a deposit | No - only present if the Fund Event was successful and the asset was converted | string |
source_address | The address that the end customer deposited the crypto asset from | Yes | string |
deposit_address | The address that the end customer deposited the crypto asset to | Yes | string |
quantity | The amount, denominated in the fund_asset, that was funded | No - only when a deposit is received | string |
notional | The conversion amount denominated in the quoted_currency, less | No - only present if the Fund Event was successful and the asset was converted | string |
fund_id | The zerohash-generated unique identifier associated with a fund event | Yes | string |
fund_timestamp | The UNIX timestamp of when the fund event was completed | No - only present if the Fund Event was successful and the asset was converted | number |
deposit_timestamp | The UNIX timestamp of when the deposit is confirmed | Yes | number |
transaction_id | The on-chain transaction id associated with the deposit | Yes | string |
account_label | The account_label where the deposit was credited to | Yes | string |
success | A boolean field to indicate the success of the transaction | Yes | string |
reason | Reason that the fund event failed | No - empty if success = true. Populated only if success = false with failure reason. | string |
reference_id | platform provided id for the transaction | No - only present if: or 2 - a | string |
raw_fee_bps | Initial fee rate expressed in basis points | No - only present if the Fund Event was successful and the asset was converted | string |
raw_fee_notional | Actual fee amount calculated directly from the RawFeeBPS | No - only present if the Fund Event was successful and the asset was converted | string |
deposit_fee_bps | Effective fee rate in basis points that was actually applied after minimum floors were considered | No - only present if the Fund Event was successful and the asset was converted | string |
deposit_fee_notional | Final fee amount that will actually be charged to the participant | No - only present if the Fund Event was successful and the asset was converted | string |
deposit_fee_type | The fee model applied to this transaction. Values: flat and tiered. | No - only present upon a successful Fund Event and asset conversion, provided a fee type is configured | string |
deposit_intent_id | The identifier for the deposit session/intent | No - only present upon a successful Fund Event and asset conversion, provided a the deposit intent feature is configured | string |
fee_tier_breakdown | Breakdown of how the fee was calculated across tiers | No - only present upon a successful Fund Event and asset conversion, provided the deposit_fee_type is tiered | array |
fee_tier_breakdown\[].tier | The tier number (1-based) | No - only present upon a successful Fund Event and asset conversion, provided a the Platform is configured for Tiered Fees | number |
fee_tier_breakdown\[].amount_in_tier | The deposit amount (in quoted_currency) that fell into this tier | No - only present upon a successful Fund Event and asset conversion, provided a the Platform is configured for Tiered Fees | string |
fee_tier_breakdown\[].fee_bps | The fee rate in basis points applied for this tier | No - only present upon a successful Fund Event and asset conversion, provided a the Platform is configured for Tiered Fees | number |
fee_tier_breakdown\[].fee_amount | The fee amount calculated for this tier | No - only present upon a successful Fund Event and asset conversion, provided a the Platform is configured for Tiered Fees | string |
Payloads
Complete Example
{
"participant_code": "CUST01",
"fund_asset": "USDC.ETH",
"rate": "1",
"quoted_currency": "USD",
"source_address": "0x3A45a60c62EE6cD616B1C4510404Eba88116044I",
"deposit_address": "0x34f53Aea3ba8b60B0ed19106baF43A4f3F73f248",
"quantity": "10000",
"notional": "9940.35",
"fund_id": "5155f7c9-95cb-4556-ab89-c178943a7111",
"fund_timestamp": 1750404905186631445,
"deposit_timestamp": 1750404905037719568,
"transaction_id": "a07407e8f98c21b037b4aa0cbc852b8489c5e122fcc3d4b33b7827d0605ad8ff",
"account_label": "general",
"success": true,
"reference_id": "d098e59b-8023-4477-8b63-68fda3c53a30",
"raw_fee_bps": "35",
"raw_fee_notional": "34.65",
"deposit_fee_bps": "35",
"deposit_fee_notional": "34.65",
"deposit_intent_id": "a6a39fb8-4089-4d85-ab19-52eacd096d23",
"deposit_fee_type": "tiered",
"fee_tier_breakdown":[
{
"tier": 1,
"amount_in_tier": "5000",
"fee_bps": 40,
"fee_amount": "19.80"
},
{
"tier": 2,
"amount_in_tier": "5000",
"fee_bps": 30,
"fee_amount": "14.85"
}
]
}Not complete - Asset not supported by the Account Funding product
{
"participant_code": "5OPRCP",
"fund_asset": "USDC.ARBITRUM",
"source_address": "external",
"deposit_address": "0xa298a16a78654F4D8567169833987a54caCf144e",
"quantity": "1.000000",
"fund_id": "a393631e-7b7f-4a76-a99a-bb467df9960f",
"deposit_timestamp": 1777998929579466581,
"transaction_id": "0xbe890f510797d12da67fc6f71bc786cba27c54239511c80e9865f0a7012b81ba",
"account_label": "general",
"success": false,
"reason": "asset deposited is not supported by the fund workflow. The deposit has not been converted to fiat and the crypto has been credited to the customer's account",
"reference_id": "a293f8a8-495f-45f4-880e-d4d30aef5659",
"raw_fee_bps": "0",
"deposit_fee_bps": "0",
"raw_fee_notional": "0.00",
"deposit_fee_notional": "0.00",
"source": {},
"deposit_intent_id": "c635e835-84a3-48aa-99f1-7ede9d9a0f0e"
}Not complete - Asset not supported by the Platform
{
"participant_code": "CUST01",
"fund_asset": "SOL",
"quoted_currency": "USD",
"source_address": "0x3A45a60c62EE6cD616B1C4510404Eba88116044I",
"deposit_address": "0x34f53Aea3ba8b60B0ed19106baF43A4f3F73f248",
"quantity": "100",
"fund_id": "5155f7c9-95cb-4556-ab89-c178943a7111",
"deposit_timestamp": 1750412525409770895,
"transaction_id": "a07407e8f98c21b037b4aa0cbc852b8489c5e122fcc3d4b33b7827d0605ad8ff",
"account_label": "general",
"success": false,
"reason" : "asset deposited is not supported by the fund workflow. The deposit has not been converted to fiat and the crypto has been credited to the customer's account",
"raw_fee_bps": "0",
"deposit_fee_bps": "0",
"raw_fee_notional": "0.00",
"deposit_fee_notional": "0.00"
}Not Complete - Platform not enabled
{
"participant_code": "CUST01",
"fund_asset": "USDC.ETH",
"quoted_currency": "USD",
"source_address": "0x3A45a60c62EE6cD616B1C4510404Eba88116044I",
"deposit_address": "0x3A45a60c635E6cD616B1C4510404Eba88116050C",
"quantity": "100",
"fund_id": "5155f7c9-95cb-4556-ab89-c178943a7111",
"deposit_timestamp": 1750412525409770895,
"transaction_id": "a07407e8f98c21b037b4aa0cbc852b8489c5e122fcc3d4b33b7827d0605ad8ff",
"account_label": "general",
"success": false,
"reason" : "deposit to an account associated with a platform not enabled on the fund workflow. The deposit has not been converted to fiat and the crypto has been credited to the customer's account",
"raw_fee_bps": "0",
"deposit_fee_bps": "0",
"raw_fee_notional": "0.00",
"deposit_fee_notional": "0.00"
}Not complete - Customer not in an approved status
{
"participant_code": "CUST01",
"fund_asset": "SOL",
"quoted_currency": "USD",
"source_address": "0x3A45a60c62EE6cD616B1C4510404Eba88116044I",
"deposit_address": "0x34f53Aea3ba8b60B0ed19106baF43A4f3F73f248",
"quantity": "100",
"fund_id": "5155f7c9-95cb-4556-ab89-c178943a7111",
"deposit_timestamp": 1750412525409770895,
"transaction_id": "a07407e8f98c21b037b4aa0cbc852b8489c5e122fcc3d4b33b7827d0605ad8ff",
"account_label": "general",
"success": false,
"reason" : "the customer was not in an approved state at the time of deposit. The deposit has not been converted to fiat and the crypto has been credited to the customer's account",
"raw_fee_bps": "0",
"deposit_fee_bps": "0",
"raw_fee_notional": "0.00",
"deposit_fee_notional": "0.00"
}Not Complete - Deposit above maximum
{
"participant_code": "VJ98BP",
"fund_asset": "USDC.ETH",
"source_address": "external",
"deposit_address": "0x907063d3E932d4B8dE71e8a608f02232DC994062",
"quantity": "6000.000000",
"fund_id": "3a025abf-e6ef-4969-b52d-fef114159ac3",
"deposit_timestamp": 1777998962686403916,
"transaction_id": "0x8294eb714c302c7051e625133156448f8379d67cbb8dd499de2b8732e4979390",
"account_label": "general",
"success": false,
"reason": "deposit above maximum threshold. The deposit has not been converted to fiat and the crypto has been credited to the customer's account",
"status_reason_code": "AMOUNT_ABOVE_MAXIMUM",
"reference_id": "cf9a16d1-3f34-4a57-9c29-cbfd7aab6786",
"raw_fee_bps": "0",
"deposit_fee_bps": "0",
"raw_fee_notional": "0.00",
"deposit_fee_notional": "0.00",
"source": {},
"deposit_intent_id": "d83f0a87-bded-48fc-a5b7-f6b18507289c"
}Not Complete - Deposit below minimum
{
"participant_code": "2A0BGG",
"fund_asset": "USDC.SOL",
"source_address": "QVtWcAX3R7Cr51VhAxFSYntoCAmTQzK8Hf4R1TrKNQ4",
"deposit_address": "6ff9BsmQQbQt3B8nZM7GgYZqjrJs5VCwuTG5dm4W1iFf",
"quantity": "0.000010000",
"fund_id": "b7e449a1-3535-4255-ae02-30b1fee99087",
"deposit_timestamp": 1777998906294736142,
"transaction_id": "23WxFBBxg2ByhrCCvfd8NXUh3Gxs8Bh7dMYfcP7PppssUt4CkwYM7HeYJQ7wXdiKPue1DrKA5NyrQqkZUEfGCTPv",
"account_label": "general",
"success": false,
"reason": "deposit below minimum threshold. The deposit has not been converted to fiat and the crypto has been credited to the customer's account",
"raw_fee_bps": "0",
"deposit_fee_bps": "0",
"raw_fee_notional": "0.00",
"deposit_fee_notional": "0.00",
"source": {},
"deposit_intent_id": "74f49473-5675-4df8-80a3-6cd15395acfa"
}Not Complete - Deposit not converted due to depeg
{
"participant_code": "2A0BGG",
"fund_asset": "USDC.SOL",
"source_address": "QVtWcAX3R7Cr51VhAxFSYntoCAmTQzK8Hf4R1TrKNQ4",
"deposit_address": "6ff9BsmQQbQt3B8nZM7GgYZqjrJs5VCwuTG5dm4W1iFf",
"quantity": "0.000010000",
"fund_id": "b7e449a1-3535-4255-ae02-30b1fee99087",
"deposit_timestamp": 1777998906294736142,
"transaction_id": "23WxFBBxg2ByhrCCvfd8NXUh3Gxs8Bh7dMYfcP7PppssUt4CkwYM7HeYJQ7wXdiKPue1DrKA5NyrQqkZUEfGCTPv",
"account_label": "general",
"success": false,
"reason": "USDC conversions are currently halted. The deposit has not been converted to fiat and the crypto has been credited to the customer's account",
"raw_fee_bps": "0",
"deposit_fee_bps": "0",
"raw_fee_notional": "0.00",
"deposit_fee_notional": "0.00",
"source": {},
"deposit_intent_id": "74f49473-5675-4df8-80a3-6cd15395acfa"
}Not Complete - Deposit not converted due to compliance reasons
{
"participant_code": "2A0BGG",
"fund_asset": "SOL.SOL",
"source_address": "QVtWcAX3R7Cr51VhAxFSYntoCAmTQzK8Hf4R1TrKNQ4",
"deposit_address": "6ff9BsmQQbQt3B8nZM7GgYZqjrJs5VCwuTG5dm4W1iFf",
"quantity": "0.000010000",
"fund_id": "b7e449a1-3535-4255-ae02-30b1fee99087",
"deposit_timestamp": 1777998906294736142,
"transaction_id": "23WxFBBxg2ByhrCCvfd8NXUh3Gxs8Bh7dMYfcP7PppssUt4CkwYM7HeYJQ7wXdiKPue1DrKA5NyrQqkZUEfGCTPv",
"account_label": "general",
"success": false,
"reason": "For Zero Hash Compliance reasons, the deposit has not been converted to fiat and the crypto has been credited to a Zero Hash holding account",
"raw_fee_bps": "0",
"deposit_fee_bps": "0",
"raw_fee_notional": "0.00",
"deposit_fee_notional": "0.00",
"source": {},
"deposit_intent_id": "74f49473-5675-4df8-80a3-6cd15395acfa"
}
-- Note: "USDC" from the `reason` above is variable depending on the fund_assetNot Complete - Currency mismatch
{
"participant_code": "2A0BGG",
"fund_asset": "USDC.SOL",
"source_address": "QVtWcAX3R7Cr51VhAxFSYntoCAmTQzK8Hf4R1TrKNQ4",
"deposit_address": "6ff9BsmQQbQt3B8nZM7GgYZqjrJs5VCwuTG5dm4W1iFf",
"quantity": "0.000010000",
"fund_id": "b7e449a1-3535-4255-ae02-30b1fee99087",
"deposit_timestamp": 1777998906294736142,
"transaction_id": "23WxFBBxg2ByhrCCvfd8NXUh3Gxs8Bh7dMYfcP7PppssUt4CkwYM7HeYJQ7wXdiKPue1DrKA5NyrQqkZUEfGCTPv",
"account_label": "general",
"success": false,
"reason": "deposit currency does not match the fund's underlying currency. The deposit has not been converted to fiat and the crypto has been credited to the customer's account",
"raw_fee_bps": "0",
"deposit_fee_bps": "0",
"raw_fee_notional": "0.00",
"deposit_fee_notional": "0.00",
"source": {},
"deposit_intent_id": "74f49473-5675-4df8-80a3-6cd15395acfa"
}Fund event expired - No deposit received
{
"participant_code": "2A0BGG",
"fund_asset": "USDC.SOL",
"source_address": "-",
"deposit_address": "-",
"fund_id": "b7e449a1-3535-4255-ae02-30b1fee99087",
"deposit_timestamp": 1777998906294736142,
"transaction_id": "",
"account_label": "general",
"success": false,
"reason": "deposit session has expired.",
"raw_fee_bps": "0",
"deposit_fee_bps": "0",
"raw_fee_notional": "0.00",
"deposit_fee_notional": "0.00",
"source": {},
"deposit_intent_id": "74f49473-5675-4df8-80a3-6cd15395acfa"
}Pending - Waiting for Name Match
{
"participant_code": "2A0BGG",
"fund_asset": "USDC.SOL",
"source_address": "QVtWcAX3R7Cr51VhAxFSYntoCAmTQzK8Hf4R1TrKNQ4",
"deposit_address": "6ff9BsmQQbQt3B8nZM7GgYZqjrJs5VCwuTG5dm4W1iFf",
"quantity": "3500.00",
"fund_id": "b7e449a1-3535-4255-ae02-30b1fee99087",
"deposit_timestamp": 1777998906294736142,
"transaction_id": "23WxFBBxg2ByhrCCvfd8NXUh3Gxs8Bh7dMYfcP7PppssUt4CkwYM7HeYJQ7wXdiKPue1DrKA5NyrQqkZUEfGCTPv",
"account_label": "general",
"success": false,
"reason": "deposit received, however the Travel Rule-based account match has not completed yet",
"raw_fee_bps": "0",
"deposit_fee_bps": "0",
"raw_fee_notional": "0.00",
"deposit_fee_notional": "0.00",
"source": {},
"deposit_intent_id": "74f49473-5675-4df8-80a3-6cd15395acfa"
}Not complete - Name Match Failed
{
"participant_code": "2A0BGG",
"fund_asset": "USDC.SOL",
"source_address": "QVtWcAX3R7Cr51VhAxFSYntoCAmTQzK8Hf4R1TrKNQ4",
"deposit_address": "6ff9BsmQQbQt3B8nZM7GgYZqjrJs5VCwuTG5dm4W1iFf",
"quantity": "10.00",
"fund_id": "b7e449a1-3535-4255-ae02-30b1fee99087",
"deposit_timestamp": 1777998906294736142,
"transaction_id": "23WxFBBxg2ByhrCCvfd8NXUh3Gxs8Bh7dMYfcP7PppssUt4CkwYM7HeYJQ7wXdiKPue1DrKA5NyrQqkZUEfGCTPv",
"account_label": "general",
"success": false,
"reason": "Travel Rule-based account match failed",
"raw_fee_bps": "0",
"deposit_fee_bps": "0",
"raw_fee_notional": "0.00",
"deposit_fee_notional": "0.00",
"source": {},
"deposit_intent_id": "74f49473-5675-4df8-80a3-6cd15395acfa"
}Not complete - Name Match Time Out
{
"participant_code": "2A0BGG",
"fund_asset": "USDC.SOL",
"source_address": "QVtWcAX3R7Cr51VhAxFSYntoCAmTQzK8Hf4R1TrKNQ4",
"deposit_address": "6ff9BsmQQbQt3B8nZM7GgYZqjrJs5VCwuTG5dm4W1iFf",
"quantity": "10.00",
"fund_id": "b7e449a1-3535-4255-ae02-30b1fee99087",
"deposit_timestamp": 1777998906294736142,
"transaction_id": "23WxFBBxg2ByhrCCvfd8NXUh3Gxs8Bh7dMYfcP7PppssUt4CkwYM7HeYJQ7wXdiKPue1DrKA5NyrQqkZUEfGCTPv",
"account_label": "general",
"success": false,
"reason": "Travel Rule-based account match failed",
"raw_fee_bps": "0",
"deposit_fee_bps": "0",
"raw_fee_notional": "0.00",
"deposit_fee_notional": "0.00",
"source": {},
"deposit_intent_id": "`Travel Rule-based account match timed out`"
}