{
"success": false,
"error": {
"code": "TRANSFER_FAILED",
"message": "Transfer outcome is awaiting reconciliation. Retry only with the same idempotencyKey."
}
}
{
"success": false,
"error": {
"code": "DUPLICATE_TRANSFER",
"message": "A transfer with this idempotencyKey already exists with different parameters",
"details": {
"conflictType": "idempotency"
}
}
}
Create transfer
Move funds between accounts. Three directions are supported:
Direction
fromAccountId
toAccountId
Company → User
(omit)
User account
User → Company
User account
(omit)
User → User
Source account
Destination account
Funding behavior: Transfers use the source SideShift wallet first. If a source user is short in SideShift wallet but has enough withdrawal-ready balance, SideShift automatically moves the needed funds through the supported child-to-platform path first, then completes the transfer.
Settlement behavior: Company→User and User→User transfers settle into the destination’s withdrawable balance at the payment provider. User→Company transfers settle into your company SideShift wallet, and are funded from the user’s withdrawable balance when their SideShift wallet is short, which is how a payout is pulled back. destinationBalance: wallet (parking the money in the destination’s internal wallet) is deprecated.
Idempotency: An idempotencyKey is required. A replay returns the original successful transfer result.
Commercial evidence: New live integrations require string metadata for obligationType, obligationReference, description, and approvalReference. Campaign transfers also require programId or contractId. Allowed obligation types are campaign, creator_agreement, subscription, refund, wallet_reconciliation, platform_correction, and other_approved. Existing authorizations created before this requirement remain backward-compatible during migration; new authorizations enforce it automatically. This metadata is optional in sandbox.
Sandbox: All transfer directions remain isolated SideShift-ledger simulations.
No provider payout is attempted because the payment provider does not support payouts in sandbox.
{
"success": false,
"error": {
"code": "TRANSFER_FAILED",
"message": "Transfer outcome is awaiting reconciliation. Retry only with the same idempotencyKey."
}
}
{
"success": false,
"error": {
"code": "DUPLICATE_TRANSFER",
"message": "A transfer with this idempotencyKey already exists with different parameters",
"details": {
"conflictType": "idempotency"
}
}
}
Where a company→user or user→user transfer settles. withdrawal (the default) pays the destination's withdrawable balance at the payment provider: the balance the payout widget shows, and the balance a later user_to_company transfer can pull back from. wallet is deprecated. It parks the money in the destination's internal SideShift wallet, from which it cannot be withdrawn until moved with POST /accounts/withdrawal-balance.
Required for newly created live integrations. Include obligationType, obligationReference, description, and approvalReference; campaign transfers also need programId or contractId. Existing integrations remain compatible during migration.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"SideShift","description":"API documentation for SideShift — campaign operations, embedded payments, and social data.","colors":{"primary":"#2E6FE0","light":"#3C83F9","dark":"#2E6FE0"},"logo":{"light":"https://mintcdn.com/sideshift/oTyWBbQpawmh0yna/logo/light.svg?fit=max\u0026auto=format\u0026n=oTyWBbQpawmh0yna\u0026q=85\u0026s=067b5f4d28c1d362dd1035d42fd4cf61","dark":"https://mintcdn.com/sideshift/oTyWBbQpawmh0yna/logo/light.svg?fit=max\u0026auto=format\u0026n=oTyWBbQpawmh0yna\u0026q=85\u0026s=067b5f4d28c1d362dd1035d42fd4cf61","href":"https://sideshift.app"},"favicon":"https://mintcdn.com/sideshift/oTyWBbQpawmh0yna/favicon.svg?fit=max\u0026auto=format\u0026n=oTyWBbQpawmh0yna\u0026q=85\u0026s=9a8515441d19975691d5531716a644ba","appearance":{"default":"light","strict":true},"background":{"color":{"light":"#FFFFFF"}},"navbar":{"links":[{"href":"https://app.sideshift.app","label":"Dashboard"}],"primary":{"type":"button","label":"Choose OAuth flow","href":"/authentication"}},"fonts":{"family":"Geist"},"icons":{"library":"lucide"},"styling":{"eyebrows":"breadcrumbs","codeblocks":"system","latex":true},"contextual":{"options":["copy","view","chatgpt","claude","cursor","vscode"],"display":"header"},"interaction":{"drilldown":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"sideshift","hasAudioNarration":false,"actualSubdomain":"sideshift","customDomains":["docs.sideshift.app"],"gitSource":{"type":"github","owner":"sideshiftapp","repo":"sideshift-monorepo","deployBranch":"main","contentDirectory":"docs-site","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aefd72dd5518ba96e474103","clientVersion":"0.0.4087","searchFilterCounts":[{"language":"default","tag":"Platform API","count":395},{"language":"default","tag":"OAuth 2.1 \u0026 MCP","count":351},{"language":"default","tag":"Content \u0026 Analytics","count":112},{"language":"default","tag":"Reference","count":109},{"language":"default","tag":"Scraper","count":77},{"language":"default","tag":"Payments \u0026 Finance","count":68},{"language":"default","tag":"Ads","count":58},{"language":"default","tag":"Company \u0026 Team","count":56},{"language":"default","tag":"Creators \u0026 Recruiting","count":52},{"language":"default","tag":"Connect","count":50}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":":root{--ds-blue: #3c83f9;--ds-blue-light: #ebf2fe;--ds-blue-mid: #7eb4ff;--ds-text-primary: #202020;--ds-text-secondary: #707070;--ds-text-tertiary: #979a9b;--ds-surface: #ffffff;--ds-surface-secondary: #fafafa;--ds-surface-page: #f6f6f6;--ds-surface-muted: #7b818c0d;--ds-surface-inverse: #202020;--ds-border: #20202014;--ds-border-strong: #20202029;--ds-radius-sm: 8px;--ds-radius-md: 12px;--ds-radius-lg: 16px;--ds-shadow-xs: 0px 1px 2px 0px #6865650f;--ds-shadow-sm: 0px 2px 4px -1px #01416314;--ds-shadow-md: 0px 4px 8px -2px #0141631a, 0px 2px 4px -1px #0141630f;--ds-shadow-lg: 0px 12px 24px -4px #0141631a, 0px 4px 8px -2px #0141630a;--ds-shadow-card: 0px 2px 4px -1px #01416314, 0px 0px 0px 1px #20202014;--ds-tracking-tight: -0.02em;--ds-heading-weight: 550;--ds-body-weight: 350;--ds-button-weight: 600}#navbar>div:first-child{background-color:var(--ds-surface)!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;transition:none!important;border-bottom-color:var(--ds-border)!important}.sidebar-group-header{border-top:1px solid var(--ds-border);padding-top:1rem;margin-right:0.9rem}ul.sidebar-group:first-child{border-top:1px solid var(--ds-border);padding-top:1rem;margin-right:0.9rem}ul.sidebar-group:has(>li>ul>li>button)>li>button{font-weight:600;color:var(--ds-text-primary)}ul.sidebar-group>li:has(>ul>li>button)+li:has(>ul>li>button){margin-top:1.1rem;padding-top:1.1rem;border-top:1px solid var(--ds-border);margin-right:0.9rem}ul.sidebar-group>li:has(>ul>li>button)>ul{position:relative}ul.sidebar-group>li:has(>ul>li>button)>ul::before{content:\"\";position:absolute;left:8px;top:0.15rem;bottom:0.15rem;width:1px;border-radius:1px;background:var(--ds-border-strong);transition:background-color 0.18s ease}ul.sidebar-group>li:has(>ul>li>button)>ul:has([data-active-nav-item=\"true\"])::before{background:var(--ds-blue)}ul.sidebar-group:has(>li>button):not(:has(>li>ul>li>button)){position:relative}ul.sidebar-group:has(>li>button):not(:has(>li>ul>li>button))::before{content:\"\";position:absolute;left:0;top:0.15rem;bottom:0.15rem;width:1px;border-radius:1px;background:var(--ds-border-strong);transition:background-color 0.18s ease}ul.sidebar-group:has(>li>button):not(:has(>li>ul>li>button)):has([data-active-nav-item=\"true\"])::before{background:var(--ds-blue)}.sidebar-group-header+ul.sidebar-group:not(:has(button)){position:relative}.sidebar-group-header+ul.sidebar-group:not(:has(button))::before{content:\"\";position:absolute;left:0;top:0.15rem;bottom:0.15rem;width:1px;border-radius:1px;background:var(--ds-border-strong);transition:background-color 0.18s ease}.sidebar-group-header+ul.sidebar-group:not(:has(button)):has([data-active-nav-item=\"true\"])::before{background:var(--ds-blue)}#navigation-items>ul.sidebar-group:not(:has(li+li)){position:relative;padding-top:0;margin-top:16px}#navigation-items>ul.sidebar-group:not(:has(li+li))::before{content:\"\";position:absolute;left:0;top:0.15rem;bottom:0.15rem;width:1px;border-radius:1px;background:var(--ds-border-strong);transition:background-color 0.18s ease}#navigation-items>ul.sidebar-group:not(:has(li+li)):has([data-active-nav-item=\"true\"])::before{background:var(--ds-blue)}#navigation-items>ul.sidebar-group:not(:has(li+li)) li:has(>a:hover)::after{content:\"\";position:absolute;top:1px;bottom:1px;left:-1px;width:3px;border-radius:3px;background:var(--ds-blue);pointer-events:none}ul.sidebar-group li{position:relative}ul.sidebar-group>li:has(>ul>li>button)>ul li:has(>button:hover)::after,ul.sidebar-group>li:has(>ul>li>button)>ul li:has(>a:hover)::after,ul.sidebar-group:has(>li>button):not(:has(>li>ul>li>button)) li:has(>button:hover)::after,ul.sidebar-group:has(>li>button):not(:has(>li>ul>li>button)) li:has(>a:hover)::after,.sidebar-group-header+ul.sidebar-group:not(:has(button)) li:has(>a:hover)::after{content:\"\";position:absolute;top:1px;bottom:1px;width:3px;border-radius:3px;background:var(--ds-blue);pointer-events:none}ul.sidebar-group>li:has(>ul>li>button)>ul li:has(>button:hover)::after,ul.sidebar-group>li:has(>ul>li>button)>ul li:has(>a:hover)::after{left:7px}ul.sidebar-group:has(>li>button):not(:has(>li>ul>li>button)) li:has(>button:hover)::after,ul.sidebar-group:has(>li>button):not(:has(>li>ul>li>button)) li:has(>a:hover)::after,.sidebar-group-header+ul.sidebar-group:not(:has(button)) li:has(>a:hover)::after{left:-1px}ul.sidebar-group>li:has(>ul>li>button):has(>button:hover)>ul::before{background:var(--ds-blue);width:3px;left:6.5px}ul.sidebar-group li:has(>a[aria-current=\"page\"])>a{background-color:transparent!important;position:relative}ul.sidebar-group li:has(>a[aria-current=\"page\"])::before{content:\"\";position:absolute;top:0;bottom:0;left:0;right:0;border-radius:12px;background:rgb(60 131 249 / 0.1);pointer-events:none}ul.sidebar-group>li:has(>ul>li>button)>ul li:has(>a[aria-current=\"page\"])::before{left:12px}ul.sidebar-group:has(>li>button):not(:has(>li>ul>li>button)) li:has(>a[aria-current=\"page\"])::before{left:4px}ul.sidebar-group>li:has(>ul>li>button)>button:hover,ul.sidebar-group>li:has(>ul>li>button)>ul li>button:hover,ul.sidebar-group>li:has(>ul>li>button)>ul li>a:not([aria-current=\"page\"]):hover,ul.sidebar-group:has(>li>button):not(:has(>li>ul>li>button)) li>button:hover,ul.sidebar-group:has(>li>button):not(:has(>li>ul>li>button)) li>a:not([aria-current=\"page\"]):hover{background-color:transparent!important}li[id$=\"/depositpending\"] .method-nav-pill>span[class*=\"bg-blue-400\"],li[id$=\"/depositconfirmed\"] .method-nav-pill>span[class*=\"bg-blue-400\"],li[id$=\"/depositfailed\"] .method-nav-pill>span[class*=\"bg-blue-400\"],li[id$=\"/transfercompleted\"] .method-nav-pill>span[class*=\"bg-blue-400\"],li[id$=\"/withdrawalcreated\"] .method-nav-pill>span[class*=\"bg-blue-400\"],li[id$=\"/withdrawalupdated\"] .method-nav-pill>span[class*=\"bg-blue-400\"],li[id$=\"/withdrawalcompleted\"] .method-nav-pill>span[class*=\"bg-blue-400\"],li[id$=\"/accountrisk_flagged\"] .method-nav-pill>span[class*=\"bg-blue-400\"]{background-color:rgb(167 139 250 / 0.22)!important;color:#6d28d9!important}li[id$=\"/depositpending\"] .method-nav-pill>span[class*=\"3064E3\"],li[id$=\"/depositconfirmed\"] .method-nav-pill>span[class*=\"3064E3\"],li[id$=\"/depositfailed\"] .method-nav-pill>span[class*=\"3064E3\"],li[id$=\"/transfercompleted\"] .method-nav-pill>span[class*=\"3064E3\"],li[id$=\"/withdrawalcreated\"] .method-nav-pill>span[class*=\"3064E3\"],li[id$=\"/withdrawalupdated\"] .method-nav-pill>span[class*=\"3064E3\"],li[id$=\"/withdrawalcompleted\"] .method-nav-pill>span[class*=\"3064E3\"],li[id$=\"/accountrisk_flagged\"] .method-nav-pill>span[class*=\"3064E3\"]{background-color:#6d28d9!important;color:#ffffff!important}html:has(li[id$=\"/depositpending\"][data-active-nav-item=\"true\"]) .method-pill[class*=\"bg-blue-400\"],html:has(li[id$=\"/depositconfirmed\"][data-active-nav-item=\"true\"]) .method-pill[class*=\"bg-blue-400\"],html:has(li[id$=\"/depositfailed\"][data-active-nav-item=\"true\"]) .method-pill[class*=\"bg-blue-400\"],html:has(li[id$=\"/transfercompleted\"][data-active-nav-item=\"true\"]) .method-pill[class*=\"bg-blue-400\"],html:has(li[id$=\"/withdrawalcreated\"][data-active-nav-item=\"true\"]) .method-pill[class*=\"bg-blue-400\"],html:has(li[id$=\"/withdrawalupdated\"][data-active-nav-item=\"true\"]) .method-pill[class*=\"bg-blue-400\"],html:has(li[id$=\"/withdrawalcompleted\"][data-active-nav-item=\"true\"]) .method-pill[class*=\"bg-blue-400\"],html:has(li[id$=\"/accountrisk_flagged\"][data-active-nav-item=\"true\"]) .method-pill[class*=\"bg-blue-400\"]{background-color:rgb(167 139 250 / 0.22)!important;color:#6d28d9!important}.prose table,main table{display:block;width:100%;overflow-x:auto}.ss-page{max-width:72rem;margin:0 auto;padding:4.5rem 2rem 6rem}@media (max-width: 640px){.ss-page{padding:2.5rem 1.15rem 3.5rem}}.ss-hero{padding:0 0 3.5rem}.ss-hero__eyebrow{display:inline-flex;align-items:center;gap:0.45rem;font-size:12px;font-weight:var(--ds-button-weight);letter-spacing:0.055em;text-transform:uppercase;color:var(--ds-blue);background:var(--ds-blue-light);border-radius:9999px;padding:0.32rem 0.75rem;margin-bottom:1.35rem}.ss-hero__eyebrow::before{content:\"\";width:6px;height:6px;border-radius:50%;background:var(--ds-blue)}.ss-hero h1{font-size:clamp(2.5rem, 5vw, 3.6rem);line-height:1.05;letter-spacing:-0.03em;font-weight:700;margin:0 0 1.1rem;color:var(--ds-text-primary)}.ss-hero h1 .ss-accent{color:var(--ds-blue)}.ss-hero p{font-size:1.1875rem;font-weight:var(--ds-body-weight);line-height:1.6;color:var(--ds-text-secondary);max-width:44rem;margin:0}.ss-hero p+.ss-hero__sub{font-size:1.0625rem;margin-top:1rem;color:var(--ds-text-tertiary)}.ss-rows{display:grid;grid-template-columns:repeat(3, minmax(0, 1fr));gap:1rem;margin:0 0 4rem;align-items:stretch}@media (max-width: 1080px){.ss-rows{grid-template-columns:repeat(2, minmax(0, 1fr))}}@media (max-width: 700px){.ss-rows{grid-template-columns:minmax(0, 1fr)}}.ss-row{display:flex;flex-direction:column;padding:1.6rem;border-radius:var(--ds-radius-lg);background:var(--ds-surface);box-shadow:var(--ds-shadow-card);text-decoration:none!important;transition:transform 0.16s ease, box-shadow 0.16s ease}.ss-row:hover{transform:translateY(-2px);box-shadow:var(--ds-shadow-lg), 0px 0px 0px 1px var(--ds-border-strong)}.ss-row__icon{display:block;width:4rem;height:4rem;flex:none;margin:0 0 1rem}.ss-row__title{font-size:1.25rem;font-weight:var(--ds-heading-weight);letter-spacing:var(--ds-tracking-tight);color:var(--ds-text-primary);margin:0 0 0.45rem}.ss-row__desc{font-size:0.9375rem;font-weight:var(--ds-body-weight);line-height:1.55;color:var(--ds-text-secondary);margin:0 0 1.1rem}.ss-row__aside{margin-top:auto;border-top:1px solid var(--ds-border);padding-top:0.95rem;display:flex;flex-direction:column;gap:0.85rem}.ss-row__pick{font-size:13px;line-height:1.5;font-weight:var(--ds-body-weight);color:var(--ds-text-secondary);margin:0}.ss-row__pick strong{color:var(--ds-text-primary);font-weight:600}.ss-tile__icon{display:inline-flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;border-radius:var(--ds-radius-md);background:var(--ds-blue-light);color:var(--ds-blue)}.ss-tile__badge{display:inline-block;font-size:12px;font-weight:var(--ds-button-weight);letter-spacing:0.04em;text-transform:uppercase;padding:0.25rem 0.6rem;border-radius:9999px;white-space:nowrap;color:var(--ds-blue);background:var(--ds-blue-light)}.ss-tile__badge--muted{color:var(--ds-text-secondary);background:var(--ds-surface-muted);box-shadow:inset 0 0 0 1px var(--ds-border)}.ss-tile__title{font-size:1.28rem;font-weight:var(--ds-heading-weight);letter-spacing:var(--ds-tracking-tight);color:var(--ds-text-primary);margin:0 0 0.5rem}.ss-tile__desc{font-size:0.9375rem;font-weight:var(--ds-body-weight);line-height:1.58;color:var(--ds-text-secondary);margin:0 0 1.15rem}.ss-tile__list{list-style:none!important;padding:0!important;margin:0 0 1.35rem!important;display:flex;flex-wrap:wrap;gap:0.375rem}.ss-tile__list li{list-style:none!important;font-size:13px;font-weight:500;color:var(--ds-text-secondary);background:var(--ds-surface-muted);box-shadow:inset 0 0 0 1px var(--ds-border);border-radius:var(--ds-radius-sm);padding:0.2rem 0.5rem!important;margin:0!important}.ss-tile__list li::marker,.ss-tile__list li::before{content:none!important;display:none!important}.ss-tile__foot{display:flex;align-items:center;gap:0.4rem;font-size:14px;font-weight:var(--ds-button-weight);color:var(--ds-blue);white-space:nowrap}.ss-tile__foot svg{transition:transform 0.16s ease}.ss-row:hover .ss-tile__foot svg{transform:translateX(3px)}.ss-jump{display:grid;grid-template-columns:repeat(3, minmax(0, 1fr));gap:0.875rem}@media (max-width: 860px){.ss-jump{grid-template-columns:minmax(0, 1fr)}}.ss-jump__card{display:flex;align-items:center;gap:0.85rem;padding:1rem 1.1rem;border-radius:var(--ds-radius-md);background:var(--ds-surface);box-shadow:var(--ds-shadow-card);text-decoration:none!important;transition:background-color 0.16s ease, box-shadow 0.16s ease}.ss-jump__card:hover{background:var(--ds-surface-secondary);box-shadow:var(--ds-shadow-card), inset 0px 0px 0px 1px var(--ds-border-strong)}.ss-jump__icon{width:2.5rem;height:2.5rem;flex:none;margin:0}.ss-jump__text{display:flex;flex-direction:column;gap:0.15rem;min-width:0}.ss-jump__title{font-size:0.9375rem;font-weight:600;letter-spacing:var(--ds-tracking-tight);color:var(--ds-text-primary)}.ss-jump__desc{font-size:13px;font-weight:var(--ds-body-weight);line-height:1.45;color:var(--ds-text-secondary)}.ss-section-label{font-size:12px;font-weight:var(--ds-button-weight);letter-spacing:0.075em;text-transform:uppercase;color:var(--ds-text-tertiary);margin:0 0 1rem}.ss-fork{display:grid;grid-template-columns:repeat(2, minmax(0, 1fr));gap:0.875rem;margin:0 0 2rem}@media (max-width: 720px){.ss-fork{grid-template-columns:minmax(0, 1fr)}}.ss-fork__card{display:flex;flex-direction:column;padding:1.25rem;border-radius:var(--ds-radius-md);background:var(--ds-surface);box-shadow:var(--ds-shadow-card);text-decoration:none!important;transition:transform 0.16s ease, box-shadow 0.16s ease}.ss-fork__card:hover{transform:translateY(-2px);box-shadow:var(--ds-shadow-md), 0px 0px 0px 1px var(--ds-border-strong)}.ss-fork__card--recommended{background:var(--ds-blue-light);box-shadow:0px 0px 0px 1px #3c83f92e}.ss-fork__card--recommended:hover{box-shadow:var(--ds-shadow-md), 0px 0px 0px 1px #3c83f94d}.ss-fork__card--recommended .ss-tile__badge{background:var(--ds-surface);color:var(--ds-blue);box-shadow:inset 0 0 0 1px #3c83f92e}.ss-fork__head{display:flex;align-items:center;gap:0.6rem;flex-wrap:wrap;margin-bottom:0.55rem}.ss-fork__name{font-size:1.05rem;font-weight:var(--ds-heading-weight);letter-spacing:var(--ds-tracking-tight);color:var(--ds-text-primary);margin:0}.ss-fork__desc{font-size:0.9rem;font-weight:var(--ds-body-weight);line-height:1.55;color:var(--ds-text-secondary);margin:0 0 0.9rem}.ss-fork__meta{margin-top:auto;font-size:12px;color:var(--ds-text-tertiary);font-family:ui-monospace, SFMono-Regular, Menlo, monospace;border-top:1px solid var(--ds-border);padding-top:0.7rem}:not(pre)>code{padding-left:4px;padding-right:4px;margin-left:-2px;margin-right:-2px}.shiki,.shiki span{white-space:pre}.ss-credit{display:flex;width:fit-content;align-items:center;gap:0.45rem;margin-top:4px;padding:0.45rem 0.8rem;border:1px solid var(--ds-blue-mid);border-radius:var(--ds-radius-sm);background:var(--ds-blue-light);font-size:14px;font-weight:var(--ds-body-weight);line-height:1;color:var(--ds-blue);white-space:nowrap}.ss-credit+*{margin-top:12px!important}.ss-credit::before{content:\"\";flex:none;width:15px;height:15px;background:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%233c83f9' stroke-width='1.4' stroke-linecap='round'%3E%3Ccircle cx='8' cy='8' r='6.1'/%3E%3Cpath d='M8 4.7v6.6M6.3 6.5h3.4M6.3 9.5h3.4'/%3E%3C/svg%3E\") center / contain no-repeat}.ss-credit strong{color:var(--ds-text-primary);font-weight:var(--ds-button-weight)}#sidebar{width:var(--ss-sidebar-w, 18rem)!important}#sidebar{border-right:1px solid var(--ds-border)}#sidebar>div{right:10px!important}#sidebar [class*=\"scroll-area-fade-size\"]{padding-right:22px}.ss-sidebar-handle{position:relative;flex:none;align-self:stretch;width:9px;margin-left:-4px;margin-right:-5px;z-index:30;cursor:col-resize;background:transparent;touch-action:none}.ss-sidebar-handle::after{content:\"\";position:absolute;top:0;bottom:0;left:4px;width:1px;background:transparent;transition:background-color 0.12s ease, width 0.12s ease, left 0.12s ease}.ss-sidebar-handle:hover::after{left:3px;width:3px;background:var(--ds-blue-mid)}.ss-sidebar-handle:focus-visible{outline:none}.ss-sidebar-handle:focus-visible::after,html.ss-resizing .ss-sidebar-handle::after{left:3px;width:3px;background:var(--ds-blue)}html.ss-resizing,html.ss-resizing *{cursor:col-resize!important;user-select:none!important}html[data-ss-sidebar-collapsed=\"true\"] #sidebar{overflow:hidden}html[data-ss-sidebar-collapsed=\"true\"] #sidebar>*{visibility:hidden}@media (max-width: 1023px){.ss-sidebar-handle{display:none}#sidebar{width:auto!important;border-right:0}}#sidebar ul.sidebar-group :is(a,button)>div>div{flex-wrap:nowrap}#sidebar ul.sidebar-group :is(a,button) span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;word-break:normal;hyphens:none}#sidebar ul.sidebar-group :is(a,button){align-items:center}.ss-launch{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin:1.5rem 0;padding:1.1rem 1.25rem;border-radius:var(--ds-radius-md);background:var(--ds-surface);box-shadow:var(--ds-shadow-card);text-decoration:none!important;transition:background-color 0.16s ease, box-shadow 0.16s ease}.ss-launch:hover{background:var(--ds-surface-secondary);box-shadow:var(--ds-shadow-card), inset 0px 0px 0px 1px var(--ds-border-strong)}.ss-launch__body{display:flex;flex-direction:column;gap:0.15rem;min-width:0}.ss-launch__title{font-size:0.95rem;font-weight:var(--ds-button-weight);letter-spacing:var(--ds-tracking-tight);color:var(--ds-text-primary)}.ss-launch__sub{font-size:0.825rem;color:var(--ds-text-secondary)}.ss-launch__arrow{flex:none;font-size:1.05rem;line-height:1;color:var(--ds-blue);transition:transform 0.16s ease}.ss-launch:hover .ss-launch__arrow{transform:translate(2px, -2px)}.ss-modal{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;padding:clamp(0.75rem, 3vw, 2.5rem);background:#20202066;animation:ss-modal-in 0.16s ease}.ss-modal[hidden]{display:none}.ss-modal[data-instant=\"true\"]{animation:none}@keyframes ss-modal-in{from{opacity:0}to{opacity:1}}.ss-modal__panel{display:flex;flex-direction:column;width:min(1240px, 100%);height:min(920px, 100%);overflow:hidden;border-radius:var(--ds-radius-lg);background:var(--ds-surface);box-shadow:var(--ds-shadow-lg), 0px 0px 0px 1px var(--ds-border-strong)}.ss-modal__bar{display:flex;flex:none;align-items:center;justify-content:space-between;gap:1rem;padding:0.7rem 0.9rem 0.7rem 1.1rem;border-bottom:1px solid var(--ds-border);background:var(--ds-surface)}.ss-modal__title{font-size:0.9rem;font-weight:var(--ds-button-weight);letter-spacing:var(--ds-tracking-tight);color:var(--ds-text-primary)}.ss-modal__actions{display:flex;align-items:center;gap:0.6rem}.ss-modal__link{font-size:0.8rem;color:var(--ds-text-secondary);text-decoration:none!important}.ss-modal__link:hover{color:var(--ds-text-primary)}.ss-modal__close{display:flex;align-items:center;justify-content:center;width:1.9rem;height:1.9rem;border:0;border-radius:var(--ds-radius-sm);background:transparent;font-size:1.3rem;line-height:1;color:var(--ds-text-secondary);cursor:pointer;transition:background-color 0.14s ease, color 0.14s ease}.ss-modal__close:hover{background:var(--ds-surface-secondary);color:var(--ds-text-primary)}.ss-modal__frame{flex:1 1 auto;width:100%;min-height:0;border:0;display:block}html.ss-modal-open,html.ss-modal-open body{overflow:hidden}html.ss-modal-open body{padding-right:var(--ss-modal-gap, 0px)}@media (prefers-reduced-motion: reduce){.ss-modal{animation:none}}.ss-modal__fallback{display:flex;flex:1 1 auto;flex-direction:column;align-items:center;justify-content:center;gap:0.9rem;padding:2rem;text-align:center}.ss-modal__fallback[hidden]{display:none}.ss-modal__fallback__text{margin:0;max-width:34ch;font-size:0.9rem;color:var(--ds-text-secondary)}.ss-modal__fallback__cta{padding:0.55rem 1.1rem;border-radius:var(--ds-radius-sm);background:var(--ds-blue);color:#fff!important;font-size:0.875rem;font-weight:var(--ds-button-weight);text-decoration:none!important}"}],"page":{"pagePath":"connect/reference/transfers/create-transfer","slug":"/connect/reference/transfers/create-transfer","pageMetadata":{"title":"Create transfer","description":"Move funds between accounts. Three directions are supported:\n\n| Direction | `fromAccountId` | `toAccountId` |\n|-----------|-----------------|---------------|\n| Company → User | _(omit)_ | User account |\n| User → Company | User account | _(omit)_ |\n| User → User | Source account | Destination account |\n\n**Funding behavior:** Transfers use the source SideShift wallet first. If a source user is short in SideShift wallet but has enough withdrawal-ready balance, SideShift automatically moves the needed funds through the supported child-to-platform path first, then completes the transfer.\n\n**Settlement behavior:** Company→User and User→User transfers settle into the destination's withdrawable balance at the payment provider. User→Company transfers settle into your company SideShift wallet, and are funded from the user's withdrawable balance when their SideShift wallet is short, which is how a payout is pulled back. `destinationBalance: wallet` (parking the money in the destination's internal wallet) is deprecated.\n\n**Idempotency:** An `idempotencyKey` is required. A replay returns the original successful transfer result.\n\n**Commercial evidence:** New live integrations require string metadata for `obligationType`, `obligationReference`, `description`, and `approvalReference`. Campaign transfers also require `programId` or `contractId`. Allowed obligation types are `campaign`, `creator_agreement`, `subscription`, `refund`, `wallet_reconciliation`, `platform_correction`, and `other_approved`. Existing authorizations created before this requirement remain backward-compatible during migration; new authorizations enforce it automatically. This metadata is optional in sandbox.\n\n**Sandbox:** All transfer directions remain isolated SideShift-ledger simulations.\nNo provider payout is attempted because the payment provider does not support payouts in sandbox.\n","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml post /accounts/transfer","href":"/connect/reference/transfers/create-transfer","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n em: \"em\",\n p: \"p\",\n strong: \"strong\",\n table: \"table\",\n tbody: \"tbody\",\n td: \"td\",\n th: \"th\",\n thead: \"thead\",\n tr: \"tr\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Move funds between accounts. Three directions are supported:\"\n }), \"\\n\", _jsxs(_components.table, {\n children: [_jsx(_components.thead, {\n children: _jsxs(_components.tr, {\n children: [_jsx(_components.th, {\n children: \"Direction\"\n }), _jsx(_components.th, {\n children: _jsx(_components.code, {\n children: \"fromAccountId\"\n })\n }), _jsx(_components.th, {\n children: _jsx(_components.code, {\n children: \"toAccountId\"\n })\n })]\n })\n }), _jsxs(_components.tbody, {\n children: [_jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"Company → User\"\n }), _jsx(_components.td, {\n children: _jsx(_components.em, {\n children: \"(omit)\"\n })\n }), _jsx(_components.td, {\n children: \"User account\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"User → Company\"\n }), _jsx(_components.td, {\n children: \"User account\"\n }), _jsx(_components.td, {\n children: _jsx(_components.em, {\n children: \"(omit)\"\n })\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"User → User\"\n }), _jsx(_components.td, {\n children: \"Source account\"\n }), _jsx(_components.td, {\n children: \"Destination account\"\n })]\n })]\n })]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Funding behavior:\"\n }), \" Transfers use the source SideShift wallet first. If a source user is short in SideShift wallet but has enough withdrawal-ready balance, SideShift automatically moves the needed funds through the supported child-to-platform path first, then completes the transfer.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Settlement behavior:\"\n }), \" Company→User and User→User transfers settle into the destination’s withdrawable balance at the payment provider. User→Company transfers settle into your company SideShift wallet, and are funded from the user’s withdrawable balance when their SideShift wallet is short, which is how a payout is pulled back. \", _jsx(_components.code, {\n children: \"destinationBalance: wallet\"\n }), \" (parking the money in the destination’s internal wallet) is deprecated.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Idempotency:\"\n }), \" An \", _jsx(_components.code, {\n children: \"idempotencyKey\"\n }), \" is required. A replay returns the original successful transfer result.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Commercial evidence:\"\n }), \" New live integrations require string metadata for \", _jsx(_components.code, {\n children: \"obligationType\"\n }), \", \", _jsx(_components.code, {\n children: \"obligationReference\"\n }), \", \", _jsx(_components.code, {\n children: \"description\"\n }), \", and \", _jsx(_components.code, {\n children: \"approvalReference\"\n }), \". Campaign transfers also require \", _jsx(_components.code, {\n children: \"programId\"\n }), \" or \", _jsx(_components.code, {\n children: \"contractId\"\n }), \". Allowed obligation types are \", _jsx(_components.code, {\n children: \"campaign\"\n }), \", \", _jsx(_components.code, {\n children: \"creator_agreement\"\n }), \", \", _jsx(_components.code, {\n children: \"subscription\"\n }), \", \", _jsx(_components.code, {\n children: \"refund\"\n }), \", \", _jsx(_components.code, {\n children: \"wallet_reconciliation\"\n }), \", \", _jsx(_components.code, {\n children: \"platform_correction\"\n }), \", and \", _jsx(_components.code, {\n children: \"other_approved\"\n }), \". Existing authorizations created before this requirement remain backward-compatible during migration; new authorizations enforce it automatically. This metadata is optional in sandbox.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Sandbox:\"\n }), \" All transfer directions remain isolated SideShift-ledger simulations.\\nNo provider payout is attempted because the payment provider does not support payouts in sandbox.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"codeStyling":"system","config":{},"pageMetadata":{"title":"Create transfer","description":"Move funds between accounts. Three directions are supported:\n\n| Direction | `fromAccountId` | `toAccountId` |\n|-----------|-----------------|---------------|\n| Company → User | _(omit)_ | User account |\n| User → Company | User account | _(omit)_ |\n| User → User | Source account | Destination account |\n\n**Funding behavior:** Transfers use the source SideShift wallet first. If a source user is short in SideShift wallet but has enough withdrawal-ready balance, SideShift automatically moves the needed funds through the supported child-to-platform path first, then completes the transfer.\n\n**Settlement behavior:** Company→User and User→User transfers settle into the destination's withdrawable balance at the payment provider. User→Company transfers settle into your company SideShift wallet, and are funded from the user's withdrawable balance when their SideShift wallet is short, which is how a payout is pulled back. `destinationBalance: wallet` (parking the money in the destination's internal wallet) is deprecated.\n\n**Idempotency:** An `idempotencyKey` is required. A replay returns the original successful transfer result.\n\n**Commercial evidence:** New live integrations require string metadata for `obligationType`, `obligationReference`, `description`, and `approvalReference`. Campaign transfers also require `programId` or `contractId`. Allowed obligation types are `campaign`, `creator_agreement`, `subscription`, `refund`, `wallet_reconciliation`, `platform_correction`, and `other_approved`. Existing authorizations created before this requirement remain backward-compatible during migration; new authorizations enforce it automatically. This metadata is optional in sandbox.\n\n**Sandbox:** All transfer directions remain isolated SideShift-ledger simulations.\nNo provider payout is attempted because the payment provider does not support payouts in sandbox.\n","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml post /accounts/transfer","href":"/connect/reference/transfers/create-transfer","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/sideshift/87b877b70d161d1e/sidebar-state.js","/_mintlify/custom/sideshift/2e2d77d11acb5577/sidebar-resize.js","/_mintlify/custom/sideshift/ab0e397cf2c387df/playground-modal.js"],"openApiReferenceData":{"operation":{"tags":["Transfers"],"summary":"Create transfer","operationId":"createTransfer","description":"Move funds between accounts. Three directions are supported:\n\n| Direction | `fromAccountId` | `toAccountId` |\n|-----------|-----------------|---------------|\n| Company → User | _(omit)_ | User account |\n| User → Company | User account | _(omit)_ |\n| User → User | Source account | Destination account |\n\n**Funding behavior:** Transfers use the source SideShift wallet first. If a source user is short in SideShift wallet but has enough withdrawal-ready balance, SideShift automatically moves the needed funds through the supported child-to-platform path first, then completes the transfer.\n\n**Settlement behavior:** Company→User and User→User transfers settle into the destination's withdrawable balance at the payment provider. User→Company transfers settle into your company SideShift wallet, and are funded from the user's withdrawable balance when their SideShift wallet is short, which is how a payout is pulled back. `destinationBalance: wallet` (parking the money in the destination's internal wallet) is deprecated.\n\n**Idempotency:** An `idempotencyKey` is required. A replay returns the original successful transfer result.\n\n**Commercial evidence:** New live integrations require string metadata for `obligationType`, `obligationReference`, `description`, and `approvalReference`. Campaign transfers also require `programId` or `contractId`. Allowed obligation types are `campaign`, `creator_agreement`, `subscription`, `refund`, `wallet_reconciliation`, `platform_correction`, and `other_approved`. Existing authorizations created before this requirement remain backward-compatible during migration; new authorizations enforce it automatically. This metadata is optional in sandbox.\n\n**Sandbox:** All transfer directions remain isolated SideShift-ledger simulations.\nNo provider payout is attempted because the payment provider does not support payouts in sandbox.\n","requestBody":"5e83cb01-0ba3-492a-b20a-f88eeaf0b675","responses":{"200":"1c502efc-4b1e-462b-8e9e-903eedd7c0b9","202":"ea5e1266-f014-437e-9c6c-0796377af152","400":"7ca8d203-5d4d-41c1-9998-5087c9256511","404":"2fc5e20d-9730-4501-b6a3-4555919af13c","409":"0901282c-367c-4f81-82fa-ef2426cdcbcd","429":"662ad0b7-551e-4209-b087-d4933fdc54f5"},"method":"post","type":"path","servers":["5f705a65-a17e-4362-8eca-1f2d43e1caa1"],"security":["3522e4bc-d90f-4dda-9017-ccbd326e93de"],"path":"/accounts/transfer","baseUrlOptions":["https://app.sideshift.app/api/embed"],"title":"Create transfer","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["amountCents","idempotencyKey"],"properties":{"amountCents":{"type":"integer","minimum":1,"description":"Amount in cents","example":5000,"isRequired":true,"uniqueKey":"amountCents","typeLabel":"integer"},"idempotencyKey":{"type":"string","description":"Unique key for safe retries","example":"payout-order-12345","isRequired":true,"uniqueKey":"idempotencyKey","typeLabel":"string"},"fromAccountId":{"type":"string","description":"Source account (omit for company→user)","uniqueKey":"fromAccountId","typeLabel":"string"},"toAccountId":{"type":"string","description":"Destination account (omit for user→company)","uniqueKey":"toAccountId","typeLabel":"string"},"destinationBalance":{"type":"string","enum":["withdrawal","wallet"],"default":"withdrawal","description":"Where a company→user or user→user transfer settles. `withdrawal` (the default) pays the destination's withdrawable balance at the payment provider: the balance the payout widget shows, and the balance a later `user_to_company` transfer can pull back from. `wallet` is deprecated. It parks the money in the destination's internal SideShift wallet, from which it cannot be withdrawn until moved with `POST /accounts/withdrawal-balance`.","uniqueKey":"destinationBalance","typeLabel":"enum\u003cstring>"},"metadata":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"metadata.additionalProperties","typeLabel":"string"},"description":"Required for newly created live integrations. Include obligationType, obligationReference, description, and approvalReference; campaign transfers also need programId or contractId. Existing integrations remain compatible during migration.","uniqueKey":"metadata","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"companyToUser":{"title":"companyToUser","value":{"toAccountId":"acct_a1b2c3d4e5f6","amountCents":5000,"idempotencyKey":"payout-order-12345","metadata":{"obligationType":"campaign","obligationReference":"contract-123","description":"Approved payout for completed launch video","approvalReference":"approval-456","programId":"campaign-789"}}},"userToCompany":{"title":"userToCompany","value":{"fromAccountId":"acct_a1b2c3d4e5f6","amountCents":1500,"idempotencyKey":"refund-order-67890","metadata":{"obligationType":"refund","obligationReference":"refund-67890","description":"Approved refund of duplicate creator payment","approvalReference":"approval-789"}}},"userToUser":{"title":"userToUser","value":{"fromAccountId":"acct_sender123","toAccountId":"acct_recipient456","amountCents":1000,"idempotencyKey":"tip-001","metadata":{"obligationType":"other_approved","obligationReference":"settlement-001","description":"Approved settlement for completed commercial work","approvalReference":"approval-001"}}},"companyToUserWallet":{"title":"companyToUserWallet","value":{"toAccountId":"acct_a1b2c3d4e5f6","amountCents":5000,"destinationBalance":"wallet","idempotencyKey":"wallet-credit-12345","metadata":{"obligationType":"creator_agreement","obligationReference":"agreement-12345","description":"Approved payment for completed creator deliverable","approvalReference":"approval-12345"}}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"1c502efc-4b1e-462b-8e9e-903eedd7c0b9":{"description":"Transfer completed","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","uniqueKey":"success","typeLabel":"boolean"},"data":{"type":"object","properties":{"transferId":{"type":"string","example":"txfr_abc123def456","uniqueKey":"data.transferId","typeLabel":"string"},"fromAccountId":{"type":"string","description":"Source account (your company ID for company→user transfers)","uniqueKey":"data.fromAccountId","typeLabel":"string"},"toAccountId":{"type":"string","description":"Destination account","uniqueKey":"data.toAccountId","typeLabel":"string"},"amountCents":{"type":"integer","description":"Amount in cents","example":5000,"uniqueKey":"data.amountCents","typeLabel":"integer"},"amountUsd":{"type":"number","format":"double","description":"Amount in USD","example":50,"uniqueKey":"data.amountUsd","typeLabel":"number\u003cdouble>"},"status":{"type":"string","enum":["completed","pending","failed"],"uniqueKey":"data.status","typeLabel":"enum\u003cstring>"},"direction":{"type":"string","enum":["company_to_user","user_to_company","user_to_user"],"uniqueKey":"data.direction","typeLabel":"enum\u003cstring>"},"destinationBalance":{"type":"string","enum":["wallet","withdrawal"],"description":"Where the transfer settled","uniqueKey":"data.destinationBalance","typeLabel":"enum\u003cstring>"},"paymentTransferId":{"oneOf":[{"type":"string","description":"Underlying payment provider transfer ID","uniqueKey":"data.paymentTransferId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Underlying payment provider transfer ID","uniqueKey":"data.paymentTransferId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.paymentTransferId","typeLabel":"string | null"},"idempotencyKey":{"oneOf":[{"type":"string","uniqueKey":"data.idempotencyKey.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.idempotencyKey.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.idempotencyKey","typeLabel":"string | null"},"metadata":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"data.metadata.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"data.metadata.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"data.metadata.oneOf.1.additionalProperties","typeLabel":"string"},"uniqueKey":"data.metadata.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.metadata","typeLabel":"object | null"},"createdAt":{"type":"string","format":"date-time","uniqueKey":"data.createdAt","typeLabel":"string\u003cdate-time>"},"completedAt":{"oneOf":[{"type":"string","format":"date-time","uniqueKey":"data.completedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","uniqueKey":"data.completedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.completedAt","typeLabel":"string\u003cdate-time> | null"},"failureReason":{"oneOf":[{"type":"string","description":"Reason for failure (only when status is `failed`)","uniqueKey":"data.failureReason.oneOf.0","typeLabel":"string"},{"type":"null","description":"Reason for failure (only when status is `failed`)","uniqueKey":"data.failureReason.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.failureReason","typeLabel":"string | null"}},"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"success":true,"data":{"transferId":"txfr_abc123def456","fromAccountId":"company","toAccountId":"acct_a1b2c3d4e5f6","amountCents":5000,"amountUsd":50,"status":"completed","direction":"company_to_user","destinationBalance":"withdrawal","idempotencyKey":"payout-order-12345","createdAt":"2026-03-13T12:00:00.000Z","completedAt":"2026-03-13T12:00:01.000Z"}},"examples":{"Example":{"title":"Example","value":{"success":true,"data":{"transferId":"txfr_abc123def456","fromAccountId":"company","toAccountId":"acct_a1b2c3d4e5f6","amountCents":5000,"amountUsd":50,"status":"completed","direction":"company_to_user","destinationBalance":"withdrawal","idempotencyKey":"payout-order-12345","createdAt":"2026-03-13T12:00:00.000Z","completedAt":"2026-03-13T12:00:01.000Z"}}}},"exampleType":"examples"}},"exampleType":"examples"},"ea5e1266-f014-437e-9c6c-0796377af152":{"description":"Accepted, outcome pending. The provider accepted the payout but SideShift could not confirm it before responding, or the transfer is being recovered. The source debit is held and the reconciliation job settles the transfer within minutes. Retry only with the same `idempotencyKey`; a new key would start a second transfer. Poll `GET /transfers/{transferId}` or wait for `transfer.completed`.","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","enum":[false],"isRequired":true,"uniqueKey":"success","typeLabel":"enum\u003cboolean>"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","additionalProperties":true,"description":"Machine-readable error context. Amount-limit failures include cent-denominated requested and effective limits.","uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"success":false,"error":{"code":"TRANSFER_FAILED","message":"Transfer outcome is awaiting reconciliation. Retry only with the same idempotencyKey."}},"examples":{"Example":{"title":"Example","value":{"success":false,"error":{"code":"TRANSFER_FAILED","message":"Transfer outcome is awaiting reconciliation. Retry only with the same idempotencyKey."}}}},"exampleType":"examples"}},"exampleType":"examples"},"7ca8d203-5d4d-41c1-9998-5087c9256511":{"description":"Invalid request or insufficient balance","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","enum":[false],"isRequired":true,"uniqueKey":"success","typeLabel":"enum\u003cboolean>"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","additionalProperties":true,"description":"Machine-readable error context. Amount-limit failures include cent-denominated requested and effective limits.","uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"success":false,"error":{"code":"INSUFFICIENT_BALANCE","message":"Insufficient balance to complete transfer"}},"examples":{"Example":{"title":"Example","value":{"success":false,"error":{"code":"INSUFFICIENT_BALANCE","message":"Insufficient balance to complete transfer"}}}},"exampleType":"examples"}},"exampleType":"examples"},"2fc5e20d-9730-4501-b6a3-4555919af13c":{"description":"Account not found","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"0901282c-367c-4f81-82fa-ef2426cdcbcd":{"description":"Conflict. `error.details.conflictType` says which: `idempotency` (this key was already used with different parameters), `source_serialization` (another transfer from the same source is in flight; `retryable: true`, retry with the same key), or `reconciliation` (a previous attempt with this key is being recovered; `retryable: true`, `blockingTransferId` names it).","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","enum":[false],"isRequired":true,"uniqueKey":"success","typeLabel":"enum\u003cboolean>"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","additionalProperties":true,"description":"Machine-readable error context. Amount-limit failures include cent-denominated requested and effective limits.","uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"success":false,"error":{"code":"DUPLICATE_TRANSFER","message":"A transfer with this idempotencyKey already exists with different parameters","details":{"conflictType":"idempotency"}}},"examples":{"Example":{"title":"Example","value":{"success":false,"error":{"code":"DUPLICATE_TRANSFER","message":"A transfer with this idempotencyKey already exists with different parameters","details":{"conflictType":"idempotency"}}}}},"exampleType":"examples"}},"exampleType":"examples"},"662ad0b7-551e-4209-b087-d4933fdc54f5":{"description":"Rate limited. Either the per-minute request limit (error code `RATE_LIMITED`, `Retry-After` header set) or the daily transfer-count limit (`RATE_LIMITED`, resets at 00:00 UTC).","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}}},"security":{"3522e4bc-d90f-4dda-9017-ccbd326e93de":{"apiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your SideShift Connect API key (`sk_live_*` or `sk_test_*`). Generate from Settings → Connect.","scopes":[],"schemeName":"apiKeyAuth"}}},"servers":{"5f705a65-a17e-4362-8eca-1f2d43e1caa1":{"url":"https://app.sideshift.app/api/embed","description":"Production / Sandbox (determined by API key prefix)"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your SideShift Connect API key (`sk_live_*` or `sk_test_*`). Generate from Settings → Connect.","scopes":[],"schemeName":"apiKeyAuth"},"schema":{"title":"x-api-key","type":"string","description":"Your SideShift Connect API key (`sk_live_*` or `sk_test_*`). Generate from Settings → Connect.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKeyAuth","name":"x-api-key"}],"title":"apiKeyAuth"}]},"originalFileLocation":"openapi/connect.yaml"},"subdomain":"sideshift","siteName":"SideShift","title":"Create transfer - SideShift","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-22T20:08:01.828Z","originalFileLocation":"connect/reference/transfers/create-transfer.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Move funds between accounts. Three directions are supported: | Direction | fromAccountId | toAccountId | |-----------|-----------------|---------------| | Company → User | (omit) | User account | | User → Company | User account | (omit) | | User → User | Source account | Destination account | Funding behavior: Transfers use the source SideShift wallet first. If a source user is short in SideShift wallet but has enough withdrawal-ready balance, SideShift automatically moves the needed funds through the supported child-to-platform path first, then completes the transfer. Settlement behavior: Company→User and User→User transfers settle into the destination\u0026#x27;s withdrawable balance at the payment provider. User→Company transfers settle into your company SideShift wallet, and are funded from the user\u0026#x27;s withdrawable balance when their SideShift wallet is short, which is how a payout is pulled back. destinationBalance: wallet (parking the money in the destination\u0026#x27;s internal wallet) is deprecated. Idempotency: An idempotencyKey is required. A replay returns the original successful transfer result. Commercial evidence: New live integrations require string metadata for obligationType, obligationReference, description, and approvalReference. Campaign transfers also require programId or contractId. Allowed obligation types are campaign, creator_agreement, subscription, refund, wallet_reconciliation, platform_correction, and other_approved. Existing authorizations created before this requirement remain backward-compatible during migration; new authorizations enforce it automatically. This metadata is optional in sandbox. Sandbox: All transfer directions remain isolated SideShift-ledger simulations. No provider payout is attempted because the payment provider does not support payouts in sandbox.\">\u003cmeta data-mint-head name=\"application-name\" content=\"SideShift\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/sideshift/HER0K4eGvuEqC4Kt/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/sideshift/HER0K4eGvuEqC4Kt/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/sideshift/HER0K4eGvuEqC4Kt/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/sideshift/HER0K4eGvuEqC4Kt/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/sideshift/HER0K4eGvuEqC4Kt/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/sideshift/HER0K4eGvuEqC4Kt/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/sideshift/HER0K4eGvuEqC4Kt/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/sideshift/HER0K4eGvuEqC4Kt/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/sideshift/HER0K4eGvuEqC4Kt/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create transfer - SideShift\">\u003cmeta data-mint-head property=\"og:description\" content=\"Move funds between accounts. Three directions are supported: | Direction | fromAccountId | toAccountId | |-----------|-----------------|---------------| | Company → User | (omit) | User account | | User → Company | User account | (omit) | | User → User | Source account | Destination account | Funding behavior: Transfers use the source SideShift wallet first. If a source user is short in SideShift wallet but has enough withdrawal-ready balance, SideShift automatically moves the needed funds through the supported child-to-platform path first, then completes the transfer. Settlement behavior: Company→User and User→User transfers settle into the destination\u0026#x27;s withdrawable balance at the payment provider. User→Company transfers settle into your company SideShift wallet, and are funded from the user\u0026#x27;s withdrawable balance when their SideShift wallet is short, which is how a payout is pulled back. destinationBalance: wallet (parking the money in the destination\u0026#x27;s internal wallet) is deprecated. Idempotency: An idempotencyKey is required. A replay returns the original successful transfer result. Commercial evidence: New live integrations require string metadata for obligationType, obligationReference, description, and approvalReference. Campaign transfers also require programId or contractId. Allowed obligation types are campaign, creator_agreement, subscription, refund, wallet_reconciliation, platform_correction, and other_approved. Existing authorizations created before this requirement remain backward-compatible during migration; new authorizations enforce it automatically. This metadata is optional in sandbox. Sandbox: All transfer directions remain isolated SideShift-ledger simulations. No provider payout is attempted because the payment provider does not support payouts in sandbox.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"SideShift\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.sideshift.app/connect/reference/transfers/create-transfer\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://sideshift.mintlify.site/_mintlify/api/og/v2?division=Transfers\u0026amp;title=Create+transfer\u0026amp;description=Move+funds+between+accounts.+Three+directions+are+supported%3A%0A%0A%7C+Direction+%7C+%60fromAccountId%60+%7C+%60toAccountId%60+%7C%0A%7C-----------%7C-----------------%7C---------------%7C%0A%7C+\u0026amp;theme=401dd8d7e2b95a95e9b00b05\u0026amp;signature=09929a4f02c4cb15e2a5cdbb3e3d9ef4f80c79dfec4b0de0cfc270b05818311f\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create transfer - SideShift\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Move funds between accounts. Three directions are supported: | Direction | fromAccountId | toAccountId | |-----------|-----------------|---------------| | Company → User | (omit) | User account | | User → Company | User account | (omit) | | User → User | Source account | Destination account | Funding behavior: Transfers use the source SideShift wallet first. If a source user is short in SideShift wallet but has enough withdrawal-ready balance, SideShift automatically moves the needed funds through the supported child-to-platform path first, then completes the transfer. Settlement behavior: Company→User and User→User transfers settle into the destination\u0026#x27;s withdrawable balance at the payment provider. User→Company transfers settle into your company SideShift wallet, and are funded from the user\u0026#x27;s withdrawable balance when their SideShift wallet is short, which is how a payout is pulled back. destinationBalance: wallet (parking the money in the destination\u0026#x27;s internal wallet) is deprecated. Idempotency: An idempotencyKey is required. A replay returns the original successful transfer result. Commercial evidence: New live integrations require string metadata for obligationType, obligationReference, description, and approvalReference. Campaign transfers also require programId or contractId. Allowed obligation types are campaign, creator_agreement, subscription, refund, wallet_reconciliation, platform_correction, and other_approved. Existing authorizations created before this requirement remain backward-compatible during migration; new authorizations enforce it automatically. This metadata is optional in sandbox. Sandbox: All transfer directions remain isolated SideShift-ledger simulations. No provider payout is attempted because the payment provider does not support payouts in sandbox.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://sideshift.mintlify.site/_mintlify/api/og/v2?division=Transfers\u0026amp;title=Create+transfer\u0026amp;description=Move+funds+between+accounts.+Three+directions+are+supported%3A%0A%0A%7C+Direction+%7C+%60fromAccountId%60+%7C+%60toAccountId%60+%7C%0A%7C-----------%7C-----------------%7C---------------%7C%0A%7C+\u0026amp;theme=401dd8d7e2b95a95e9b00b05\u0026amp;signature=09929a4f02c4cb15e2a5cdbb3e3d9ef4f80c79dfec4b0de0cfc270b05818311f\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/sideshift/HER0K4eGvuEqC4Kt/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"SideShift\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2E6FE0\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.sideshift.app/connect/reference/transfers/create-transfer\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/connect/reference/transfers/create-transfer.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.sideshift.app/#organization\",\"name\":\"SideShift\",\"url\":\"https://docs.sideshift.app\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/sideshift/oTyWBbQpawmh0yna/logo/light.svg?fit=max\u0026auto=format\u0026n=oTyWBbQpawmh0yna\u0026q=85\u0026s=067b5f4d28c1d362dd1035d42fd4cf61\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.sideshift.app#website\",\"name\":\"SideShift\",\"url\":\"https://docs.sideshift.app\",\"publisher\":{\"@id\":\"https://docs.sideshift.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.sideshift.app/connect/reference/transfers/create-transfer#webpage\",\"url\":\"https://docs.sideshift.app/connect/reference/transfers/create-transfer\",\"name\":\"Create transfer\",\"description\":\"Move funds between accounts. Three directions are supported: | Direction | fromAccountId | toAccountId | |-----------|-----------------|---------------| | Company → User | (omit) | User account | | User → Company | User account | (omit) | | User → User | Source account | Destination account | Funding behavior: Transfers use the source SideShift wallet first. If a source user is short in SideShift wallet but has enough withdrawal-ready balance, SideShift automatically moves the needed funds through the supported child-to-platform path first, then completes the transfer. Settlement behavior: Company→User and User→User transfers settle into the destination's withdrawable balance at the payment provider. User→Company transfers settle into your company SideShift wallet, and are funded from the user's withdrawable balance when their SideShift wallet is short, which is how a payout is pulled back. destinationBalance: wallet (parking the money in the destination's internal wallet) is deprecated. Idempotency: An idempotencyKey is required. A replay returns the original successful transfer result. Commercial evidence: New live integrations require string metadata for obligationType, obligationReference, description, and approvalReference. Campaign transfers also require programId or contractId. Allowed obligation types are campaign, creator_agreement, subscription, refund, wallet_reconciliation, platform_correction, and other_approved. Existing authorizations created before this requirement remain backward-compatible during migration; new authorizations enforce it automatically. This metadata is optional in sandbox. Sandbox: All transfer directions remain isolated SideShift-ledger simulations. No provider payout is attempted because the payment provider does not support payouts in sandbox.\",\"dateModified\":\"2026-10-22T20:08:01.828Z\",\"isPartOf\":{\"@id\":\"https://docs.sideshift.app#website\"},\"breadcrumb\":{\"@id\":\"https://docs.sideshift.app/connect/reference/transfers/create-transfer#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.sideshift.app/connect/reference/transfers/create-transfer#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Reference\",\"item\":\"https://docs.sideshift.app/connect/reference/configuration/read-the-brands-multi-currency-preference\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Transfers\",\"item\":\"https://docs.sideshift.app/connect/reference/transfers/list-transfers\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Create transfer\",\"item\":\"https://docs.sideshift.app/connect/reference/transfers/create-transfer\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.sideshift.app/connect/reference/transfers/create-transfer#apireference\",\"headline\":\"Create transfer\",\"name\":\"Create transfer\",\"description\":\"Move funds between accounts. Three directions are supported: | Direction | fromAccountId | toAccountId | |-----------|-----------------|---------------| | Company → User | (omit) | User account | | User → Company | User account | (omit) | | User → User | Source account | Destination account | Funding behavior: Transfers use the source SideShift wallet first. If a source user is short in SideShift wallet but has enough withdrawal-ready balance, SideShift automatically moves the needed funds through the supported child-to-platform path first, then completes the transfer. Settlement behavior: Company→User and User→User transfers settle into the destination's withdrawable balance at the payment provider. User→Company transfers settle into your company SideShift wallet, and are funded from the user's withdrawable balance when their SideShift wallet is short, which is how a payout is pulled back. destinationBalance: wallet (parking the money in the destination's internal wallet) is deprecated. Idempotency: An idempotencyKey is required. A replay returns the original successful transfer result. Commercial evidence: New live integrations require string metadata for obligationType, obligationReference, description, and approvalReference. Campaign transfers also require programId or contractId. Allowed obligation types are campaign, creator_agreement, subscription, refund, wallet_reconciliation, platform_correction, and other_approved. Existing authorizations created before this requirement remain backward-compatible during migration; new authorizations enforce it automatically. This metadata is optional in sandbox. Sandbox: All transfer directions remain isolated SideShift-ledger simulations. No provider payout is attempted because the payment provider does not support payouts in sandbox.\",\"url\":\"https://docs.sideshift.app/connect/reference/transfers/create-transfer\",\"mainEntityOfPage\":{\"@id\":\"https://docs.sideshift.app/connect/reference/transfers/create-transfer#webpage\"},\"dateModified\":\"2026-10-22T20:08:01.828Z\",\"publisher\":{\"@id\":\"https://docs.sideshift.app/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.sideshift.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"SideShift\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"SideShift","nav":{"global":null,"tabs":[{"tab":"Home","icon":"house","pages":[{"title":"Home","href":""}]},{"tab":"Platform API","icon":"briefcase-business","pages":[{"title":"Platform API","href":"/platform"}]},{"tab":"Connect","icon":"wallet","pages":[{"group":"Overview","pages":[{"title":"Connect","href":"/connect"},{"title":"Getting started","href":"/connect/getting-started"},{"title":"Testing","href":"/connect/testing"},{"title":"Embedding and customization","href":"/connect/widgets"},{"title":"Playground","href":"/connect/playground"},{"title":"Webhooks","href":"/connect/webhooks"},{"title":"Configuration","href":"/connect/configuration"},{"title":"Multi-currency wallets","href":"/connect/multi-currency"},{"title":"Guides","href":"/connect/guides"},{"title":"Errors","href":"/connect/errors"},{"title":"Status","href":"/connect/status"}]},{"group":"Reference","pages":[{"group":"Currency settings","pages":[{"title":"Read the brand's multi-currency preference","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml get /settings/currencies","href":"/connect/reference/configuration/read-the-brands-multi-currency-preference"},{"title":"Opt the brand into or out of multi-currency","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml patch /settings/currencies","href":"/connect/reference/configuration/opt-the-brand-into-or-out-of-multi-currency"}]},{"group":"Accounts","pages":[{"title":"List connected accounts","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml get /accounts","href":"/connect/reference/accounts/list-connected-accounts"},{"title":"Get balance \u0026 transactions","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml get /accounts/balance","href":"/connect/reference/accounts/get-balance-\u0026-transactions"},{"title":"Read currency balances (pilot)","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml get /accounts/currencies","href":"/connect/reference/accounts/read-currency-balances-pilot"},{"title":"Estimate USD funding or convert a sub-account balance (pilot)","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml post /accounts/currencies","href":"/connect/reference/transfers/estimate-usd-funding-or-convert-a-sub-account-balance-pilot"},{"title":"Get invoice transactions","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml get /accounts/invoices","href":"/connect/reference/accounts/get-invoice-transactions"},{"title":"Create account","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml post /accounts/create","href":"/connect/reference/accounts/create-account"},{"title":"Check an existing account and duplicate verified identity","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml post /accounts/check","href":"/connect/reference/accounts/check-an-existing-account-and-duplicate-verified-identity"},{"title":"Create account invoice","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml post /accounts/invoices/create","href":"/connect/reference/accounts/create-account-invoice"},{"title":"Send account invoice","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml post /accounts/invoices/{invoiceId}/send","href":"/connect/reference/accounts/send-account-invoice"},{"title":"Move wallet funds into withdrawal balance","deprecated":true,"version":null,"openapi":"/openapi/connect.yaml post /accounts/withdrawal-balance","href":"/connect/reference/accounts/move-wallet-funds-into-withdrawal-balance"},{"title":"Update account","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml patch /accounts/{id}","href":"/connect/reference/accounts/update-account"},{"title":"Bulk delete connected accounts","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml delete /accounts","href":"/connect/reference/accounts/bulk-delete-connected-accounts"},{"title":"Get withdrawal","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml get /withdrawals/{withdrawalId}","href":"/connect/reference/withdrawals/get-withdrawal"},{"title":"Withdrawalcreated","version":null,"deprecated":null,"sidebarTitle":"Withdrawal created","openapi":"/openapi/connect.yaml webhook withdrawal.created","href":"/connect/reference/accounts/withdrawalcreated"},{"title":"Withdrawalupdated","version":null,"deprecated":null,"sidebarTitle":"Withdrawal updated","openapi":"/openapi/connect.yaml webhook withdrawal.updated","href":"/connect/reference/accounts/withdrawalupdated"},{"title":"Withdrawalcompleted","version":null,"deprecated":null,"sidebarTitle":"Withdrawal completed","openapi":"/openapi/connect.yaml webhook withdrawal.completed","href":"/connect/reference/accounts/withdrawalcompleted"},{"title":"Withdrawalfailed","version":null,"deprecated":null,"sidebarTitle":"Withdrawal failed","openapi":"/openapi/connect.yaml webhook withdrawal.failed","href":"/connect/reference/accounts/withdrawalfailed"},{"title":"Accountrisk flagged","version":null,"deprecated":null,"sidebarTitle":"Account risk flagged","openapi":"/openapi/connect.yaml webhook account.risk_flagged","href":"/connect/reference/accounts/accountrisk_flagged"}]},{"group":"Verifications","pages":[{"title":"Read the account's guardian declaration","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml get /accounts/{id}/guardian","href":"/connect/reference/verifications/read-the-accounts-guardian-declaration"},{"title":"List verifications","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml get /accounts/{id}/verifications","href":"/connect/reference/verifications/list-verifications"},{"title":"Get verification","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml get /accounts/{id}/verifications/{verificationId}","href":"/connect/reference/verifications/get-verification"}]},{"group":"Transfers","pages":[{"title":"List transfers","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml get /transfers","href":"/connect/reference/transfers/list-transfers"},{"title":"Get transfer","description":"Retrieve details for a specific transfer.","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml get /transfers/{transferId}","href":"/connect/reference/transfers/get-transfer"},{"title":"Create transfer","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml post /accounts/transfer","href":"/connect/reference/transfers/create-transfer"},{"title":"Batch transfer","description":"Process multiple transfers in a single request. Transfers are executed **sequentially** — use this instead of sending many parallel single-transfer requests.\n\nEach transfer in the array supports the same parameters as the single transfer endpoint.\n\n**Best-effort (default):** omit `atomic` or set `atomic: false`. Results are returned per-transfer; a failure in one item does not stop the others.\n\n**Atomic:** set `atomic: true` when every transfer must commit, or none should. SideShift validates the whole batch (accounts, amounts, commercial evidence, and combined source balances) before moving money. If any item would fail, the API returns an error and executes nothing. If an item fails after money has started moving, remaining items are not attempted and already-settled items are reversed. A successful atomic batch returns the same per-item result envelope with `failureCount: 0` and `atomic: true`.\n\nRetry an aborted atomic batch with **new** per-item `idempotencyKey` values (and a new batch `idempotencyKey` if you sent one). Replaying the same keys returns the stored abort and does not pay again.\n\n**Why batch?** Sending 50+ parallel requests to `/accounts/transfer` causes Firestore transaction contention on the source wallet, resulting in `INTERNAL_ERROR` failures. The batch endpoint eliminates this by processing transfers one at a time within a single HTTP call.\n\n**Limits:** Maximum 200 transfers per batch.\n\n**Idempotency and evidence:** Every transfer requires its own `idempotencyKey`. Live batch items also require the same commercial-evidence metadata as the single-transfer endpoint. Atomic batches also reject duplicate per-item keys.\n","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml post /accounts/transfer/batch","href":"/connect/reference/transfers/batch-transfer"},{"title":"Cancel an unsettled transfer","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml delete /transfers/{transferId}","href":"/connect/reference/transfers/cancel-an-unsettled-transfer"},{"title":"Transfercompleted","version":null,"deprecated":null,"sidebarTitle":"Transfer completed","openapi":"/openapi/connect.yaml webhook transfer.completed","href":"/connect/reference/transfers/transfercompleted"}]},{"group":"Tokens","pages":[{"title":"Generate widget token","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml post /auth/token","href":"/connect/reference/tokens/generate-widget-token"}]},{"group":"Domains","pages":[{"title":"Read the embed domain allowlist","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml get /domains","href":"/connect/reference/domains/read-the-embed-domain-allowlist"},{"title":"Update the embed domain allowlist","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml patch /domains","href":"/connect/reference/domains/update-the-embed-domain-allowlist"}]},{"group":"Checkout","pages":[{"title":"Create hosted checkout session","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml post /checkout/sessions","href":"/connect/reference/checkout/create-hosted-checkout-session"},{"title":"Depositpending","version":null,"deprecated":null,"sidebarTitle":"Deposit pending","openapi":"/openapi/connect.yaml webhook deposit.pending","href":"/connect/reference/checkout/depositpending"},{"title":"Depositconfirmed","version":null,"deprecated":null,"sidebarTitle":"Deposit confirmed","openapi":"/openapi/connect.yaml webhook deposit.confirmed","href":"/connect/reference/checkout/depositconfirmed"},{"title":"Depositfailed","version":null,"deprecated":null,"sidebarTitle":"Deposit failed","openapi":"/openapi/connect.yaml webhook deposit.failed","href":"/connect/reference/checkout/depositfailed"}]},{"group":"Webhooks","pages":[{"title":"List webhook delivery logs","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml get /webhook-logs","href":"/connect/reference/webhooks/list-webhook-delivery-logs"},{"title":"Send a test webhook","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml post /webhooks/test","href":"/connect/reference/webhooks/send-a-test-webhook"},{"title":"Replay a webhook event","deprecated":null,"version":null,"openapi":"/openapi/connect.yaml post /webhooks/{eventId}/replay","href":"/connect/reference/webhooks/replay-a-webhook-event"}]}]}]},{"tab":"Scraper","icon":"search","pages":[{"title":"Scraper","href":"/scraper"}]},{"tab":"Sidekick","icon":"blocks","pages":[{"title":"Sidekick","href":"/sidekick/connectors"}]},{"tab":"MCP","icon":"plug","pages":[{"title":"MCP","href":"/mcp-server"}]}]},"basePath":"","title":"Create transfer - SideShift","buildId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","deploymentId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CBsVopKK.js","utils-DZAk68jJ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-D32AYZrP.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D_A5_cny.js","snippetPresets-xNRfS9th.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BIB25-tq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CydJ4w4j.js","shallow-CYPBeQSG.js","getApiPlaygroundDisplay-A5xJVBOu.js","CodeSnippet-BVRTgi3m.js","CodeSnippets-DjD6BSlt.js","Page-Dr40SSJq.js","getPastedJson-D4V4JyrR.js","icon-uhcnG22T.js","MethodPill-CM-ZQdGH.js","DuplicateIcon-B_WnOiNf.js","createIcon-CJsb8utt.js","DynamicMarkdown-D-2HDKEp.js","SectionHeading-KP5xmMgQ.js","axios-vUo_bRtp.js","Markdown-D_k0dg6k.js","clsx-DK3K4Z1S.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DE3EVdvd.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-fN9H9n9g.js"]}