{
"id": "evt_wth001",
"type": "withdrawal.created",
"data": {
"sideshiftAccountId": "user_a1b2c3d4",
"externalId": "ext_user_456",
"amountCents": 25000,
"feeCents": 0,
"netAmountCents": 25000,
"currency": "usd",
"paymentId": "wdrl_abc123",
"status": "requested",
"metadata": {
"withdrawalId": "wdrl_abc123",
"speed": "standard",
"destinationInfo": "Chase Bank •••1234",
"withdrawalCreatedAt": "2026-05-11T10:30:00.000Z"
}
},
"timestamp": "2026-05-11T10:30:00.000Z"
}Sent once when a user initiates a withdrawal from their SideShift account to an external payout method.
Mirrors the upstream withdrawal.created event from the underlying payment processor.
Routing
The event fans out to every integrator that has previously settled a completed transfer to this user
(embed_transfers.toAccountId == userId with status == 'completed'). The integrator set is resolved once
per withdrawal and cached, so all subsequent withdrawal.updated events for the same withdrawal go to the
same audience without re-resolving.
Status enum
requested | awaiting_payment | in_transit | completed | failed | canceled | denied — passed through verbatim from upstream. On withdrawal.created the status is typically requested.
Withdrawal markup revenue
A withdrawal’s fee is two layers per rail: SideShift’s platform fee, and your markup on top
of it if you set one — in Settings → Connect → Withdrawal fees, or via
integratorPayoutFeeMarkups on POST /api/embed/config. Your user is charged the total as
one fee; markupRevenueCents is your layer of it, never the total. It is provisional
here: the amount is accrued as a pending credit and moves no balance until the withdrawal
reaches completed. See withdrawal.updated for the full accrual lifecycle. The field is
sent only to the integrator that owns the account, and is absent when you charge no markup or
when SideShift could not determine which rail priced the withdrawal.
{
"id": "evt_wth001",
"type": "withdrawal.created",
"data": {
"sideshiftAccountId": "user_a1b2c3d4",
"externalId": "ext_user_456",
"amountCents": 25000,
"feeCents": 0,
"netAmountCents": 25000,
"currency": "usd",
"paymentId": "wdrl_abc123",
"status": "requested",
"metadata": {
"withdrawalId": "wdrl_abc123",
"speed": "standard",
"destinationInfo": "Chase Bank •••1234",
"withdrawalCreatedAt": "2026-05-11T10:30:00.000Z"
}
},
"timestamp": "2026-05-11T10:30:00.000Z"
}Authorizations
Your SideShift Connect API key (sk_live_* or sk_test_*). Generate from Settings → Connect.
Body
Response
Webhook acknowledged