{"openapi":"3.0.3","info":{"title":"Finmo Partner API sandbox for Zenith Payments","version":"2026-10-sandbox","description":"Mirrors api.finmo.net. Items marked x-status: proposed do not exist in Finmo today and are working names for discussion."},"servers":[{"url":"https://sandbox.finmotreasury.net"}],"security":[{"basic":[]}],"components":{"securitySchemes":{"basic":{"type":"http","scheme":"basic","description":"base64(access_key:secret_key)"}}},"paths":{"/v1/partner/invite-organization":{"post":{"tags":["Onboarding"],"summary":"Create sub account","description":"Opens a sub account for one Zenith merchant. With an ABN (or ACN) and city, Finmo pulls the company record from its KYB data provider, screens it and approves it by reliance on Zenith's onboarding. The response already carries the sub account's balances and AUD account details.\n\n- Without abn/acn the call behaves exactly like api.finmo.net today: kyb.status NOT_STARTED, no balances, no account details. Use PATCH /v1/partner/kyb/save to send full KYB.\n- kyb.status keeps the live enum (NOT_STARTED, STARTED, SUBMITTED, APPROVED, REJECTED). kyb.stage and kyb.action_required are proposed.\n- The AUD account details are returned straight away and become active on approval (ORGANIZATION_KYB_APPROVED, then VA_CREATED).","x-status":"live","parameters":[{"name":"X-Idempotency-Key","in":"header","required":false,"schema":{"type":"string","format":"uuid"},"description":"UUID v4. Retries with the same key replay the original response (x-cached-request-id)."}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"first_name":{"type":"string","description":"Merchant contact first name"},"last_name":{"type":"string","description":"Merchant contact last name"},"org_name":{"type":"string","description":"Business name as Zenith holds it"},"org_country":{"type":"string","description":"ISO 3166-1 alpha-2, e.g. AU"},"email":{"type":"string","description":"Merchant contact email (Finmo never contacts the merchant)"},"abn":{"type":"string","description":"11-digit ABN. Triggers the registry pull. Spaces allowed (proposed)"},"acn":{"type":"string","description":"9-digit ACN, alternative to abn (proposed)"},"address_city":{"type":"string","description":"Required with abn/acn. The KYB data provider matches on registration number + city (proposed)"},"address_state":{"type":"string","description":"NSW, VIC, QLD, WA, SA, TAS, ACT, NT (proposed)"},"address_zip_code":{"type":"string","description":"Postcode (proposed)"},"organization_reference_id":{"type":"string","description":"Zenith's own merchant id, echoed on webhooks (proposed)"},"webhook_url":{"type":"string","description":"Set the webhook URL in the same call (proposed)"},"webhook_security_token":{"type":"string","description":"Sent back in the x-security-token header (proposed)"},"gca_plan_id":{"type":"string","description":"Pricing plan (Zenith markup). Defaults to the partner's default plan (proposed)"}},"required":["first_name","last_name","org_name","org_country","email"]},"example":{"first_name":"Priya","last_name":"Nair","org_name":"Coral Coast Getaways Pty Ltd","org_country":"AU","email":"priya@coralcoastgetaways.example","abn":"{{TEST_ABN_APPROVE}}","address_city":"Cairns","address_state":"QLD","address_zip_code":"4870","organization_reference_id":"TPB2B-000417"}}}}}},"/v1/partner/organization":{"get":{"tags":["Onboarding"],"summary":"List sub accounts","description":"Every sub account under the master account with its KYB status. Poll this if you don't use webhooks.","x-status":"live","parameters":[{"name":"kyb_status","in":"query","required":false,"schema":{"type":"string"},"description":"NOT_STARTED, STARTED, SUBMITTED, APPROVED, REJECTED"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}},"/v1/partner/organization/{org_id}":{"get":{"tags":["Onboarding"],"summary":"Get sub account","description":"Full profile: the company record Finmo pulled, business owners and their screening status, the KYB timeline, balances and account details.\n\n- kyb.checks, wallets and virtual_accounts blocks are proposed additions.","x-status":"live","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}},"/v1/partner/kyb/save/{org_id}":{"patch":{"tags":["Onboarding"],"summary":"Send KYB details (fallback)","description":"Fallback path. Use it to answer kyb.action_required (a possible screening match or an incomplete registry record) with details Zenith already holds, or to submit full KYB for a non-AU merchant.","x-status":"live","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Idempotency-Key","in":"header","required":false,"schema":{"type":"string","format":"uuid"},"description":"UUID v4. Retries with the same key replay the original response (x-cached-request-id)."}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"submit":{"type":"boolean","description":"true submits the application for review"},"legal_name":{"type":"string","description":""},"company_registration_number":{"type":"string","description":""},"incorporation_date":{"type":"string","description":""},"address_line1":{"type":"string","description":""},"business_owner[]":{"type":"array","description":"Include business_owner_id to update an owner Finmo already holds (e.g. add dob + identification_document_id to clear a screening match)"}},"required":[]},"example":{"business_owner":[{"business_owner_id":"{{business_owner_id}}","dob":"1979-02-21","identification_type":"PASSPORT","identification_value":"PA1234567","identification_document_id":"{{org_document_id}}"}]}}}}}},"/v1/partner/organization-document/{org_id}":{"post":{"tags":["Onboarding"],"summary":"Request a document upload URL","description":"Two-step upload: this returns org_document_id + upload_url (valid 30 seconds); PUT the file bytes to upload_url.","x-status":"live","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Idempotency-Key","in":"header","required":false,"schema":{"type":"string","format":"uuid"},"description":"UUID v4. Retries with the same key replay the original response (x-cached-request-id)."}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"file_type":{"type":"string","description":"image/png, image/jpeg, image/jpg, application/pdf"},"doc_type":{"type":"string","description":"KYB_DOCUMENT"}},"required":["file_type","doc_type"]},"example":{"file_type":"application/pdf","doc_type":"KYB_DOCUMENT"}}}}}},"/v1/partner/organization-setting/{org_id}":{"put":{"tags":["Webhooks"],"summary":"Set webhook URL / token","description":"One webhook URL per sub account. All sub accounts can point to the same Zenith listener; every event carries org_id.","x-status":"live","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Idempotency-Key","in":"header","required":false,"schema":{"type":"string","format":"uuid"},"description":"UUID v4. Retries with the same key replay the original response (x-cached-request-id)."}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"webhook_url (live) or webhook_security_token (proposed)"},"value":{"type":"string","description":""}},"required":["key","value"]},"example":{"key":"webhook_url","value":"https://listener.zenith.example/finmo"}}}}},"get":{"tags":["Webhooks"],"summary":"List sub account settings","description":"Read back webhook_url and a masked webhook_security_token.","x-status":"proposed","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}},"/v1/partner/kyb/simulate/{org_id}":{"patch":{"tags":["Sandbox tools"],"summary":"Force a KYB outcome","description":"Same style as Finmo's /simulate endpoints. Drive a sub account to APPROVED, REJECTED or ACTION_REQUIRED without waiting.","x-status":"sandbox-only","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Idempotency-Key","in":"header","required":false,"schema":{"type":"string","format":"uuid"},"description":"UUID v4. Retries with the same key replay the original response (x-cached-request-id)."}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"APPROVED | REJECTED | ACTION_REQUIRED"}},"required":["status"]},"example":{"status":"APPROVED"}}}}}},"/v1/wallet":{"get":{"tags":["Balances"],"summary":"List wallets","description":"Wallet ids for the sub account. One multi-currency wallet (category GCA) per sub account. Header x-on-behalf-of: <sub account org_id>.","x-status":"live","parameters":[{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}},"/v1/wallet/{wallet_id}":{"get":{"tags":["Balances"],"summary":"Get wallet balances","description":"wallet_account[] carries actual_balance and available_balance per currency. Available drops when a payout is created (funds reserved); actual drops when it completes.","x-status":"live","parameters":[{"name":"wallet_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}},"/v1/balance":{"get":{"tags":["Balances"],"summary":"Balances by currency","description":"Currency map of actual and available balance for the sub account.","x-status":"live","parameters":[{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}},"/v1/virtual-account":{"get":{"tags":["Funding"],"summary":"List AUD account details","description":"The sub account's AUD virtual account (BSB + account number). Zenith settles AUD here.","x-status":"live","parameters":[{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}},"/v1/virtual-account/{va_id}":{"get":{"tags":["Funding"],"summary":"Get account details","description":"One virtual account.","x-status":"live","parameters":[{"name":"va_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}},"/v1/virtual-account/simulate-payin":{"patch":{"tags":["Sandbox tools"],"summary":"Simulate funds arriving","description":"Same endpoint as Finmo's sandbox. Stands in for Zenith's AUD transfer into the sub account. Emits VA_PAYIN_COMPLETED.","x-status":"sandbox-only","parameters":[{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"},{"name":"X-Idempotency-Key","in":"header","required":false,"schema":{"type":"string","format":"uuid"},"description":"UUID v4. Retries with the same key replay the original response (x-cached-request-id)."}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"virtual_account_id":{"type":"string","description":""},"amount":{"type":"number","description":""},"currency":{"type":"string","description":""}},"required":["virtual_account_id","amount","currency"]},"example":{"virtual_account_id":"{{virtual_account_id}}","amount":25000,"currency":"AUD"}}}}}},"/v1/transaction":{"get":{"tags":["Balances"],"summary":"Transactions (reconciliation)","description":"One record per money movement with fees, net amount and settlement flags.","x-status":"live","parameters":[{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"},{"name":"event_type","in":"query","required":false,"schema":{"type":"string"},"description":"PAYOUT, VIRTUAL_ACCOUNT"},{"name":"currency","in":"query","required":false,"schema":{"type":"string"}},{"name":"start_time","in":"query","required":false,"schema":{"type":"string"}},{"name":"end_time","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}},"/v1/transaction/{txn_id}":{"get":{"tags":["Balances"],"summary":"Get transaction","description":"One transaction.","x-status":"live","parameters":[{"name":"txn_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}},"/v1/payout-method/all":{"get":{"tags":["FX & payouts"],"summary":"Payout methods for a corridor","description":"Rails available to a destination. beneficiary_country and beneficiary_currency are required.\n\n- sandbox_fee and estimated_delivery are proposed additions.","x-status":"live","parameters":[{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"},{"name":"beneficiary_country","in":"query","required":true,"schema":{"type":"string"}},{"name":"beneficiary_currency","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}},"/v1/payout-method/param/{name}":{"get":{"tags":["FX & payouts"],"summary":"Fields a method needs","description":"payout_beneficiary_param lists base_param (bank fields), company and individual fields with regex. Build the 'add supplier' form from this.","x-status":"live","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}},{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}},"/v1/payout-beneficiary":{"post":{"tags":["FX & payouts"],"summary":"Create beneficiary (supplier)","description":"Saves an overseas supplier on the sub account. Common suppliers are created once per sub account, ideally at onboarding.","x-status":"live","parameters":[{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"},{"name":"X-Idempotency-Key","in":"header","required":false,"schema":{"type":"string","format":"uuid"},"description":"UUID v4. Retries with the same key replay the original response (x-cached-request-id)."}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[]},"example":{"type":"company","beneficiary_name":"Ubud Jungle Retreat","currency":"IDR","bank_country":"ID","account_number":"1234567890","bic_swift":"CENAIDJA","company":{"name":"Ubud Jungle Retreat","registration_number":"REG123456","address_line1":"1 Jl Raya Ubud","address_city":"Gianyar","address_country":"ID"}}}}}},"get":{"tags":["FX & payouts"],"summary":"List beneficiaries","description":"Suppliers saved on the sub account.","x-status":"live","parameters":[{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}},"/v1/payout-beneficiary/{ben_id}":{"get":{"tags":["FX & payouts"],"summary":"Get beneficiary","description":"One supplier.","x-status":"live","parameters":[{"name":"ben_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}},"/v1/payout-beneficiary/validate":{"post":{"tags":["FX & payouts"],"summary":"Validate bank details","description":"Checks fields against the method's rules (IBAN mod-97, ABA checksum, SWIFT format) before money moves.\n\n- Try iban GB82WEST12345698765432 to see the 100001 error.","x-status":"live","parameters":[{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"},{"name":"X-Idempotency-Key","in":"header","required":false,"schema":{"type":"string","format":"uuid"},"description":"UUID v4. Retries with the same key replay the original response (x-cached-request-id)."}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[]},"example":{"payout_method_name":"gb_bank_swift_gbp","is_beneficiary_name_match_enabled":true,"payout_beneficiary":{"type":"company","beneficiary_name":"Thames Corporate Travel","iban":"GB29NWBK60161331926819","bic_swift":"NWBKGB2L","company":{"name":"Thames Corporate Travel","address_line1":"1 King St","address_city":"London","address_country":"GB"}}}}}}}},"/v1/fx-rate":{"post":{"tags":["FX & payouts"],"summary":"Live FX quote","description":"Returns fx_rate_id held for about 20 seconds. The rate already includes the sub account's pricing plan markup.\n\n- pricing (mid rate, Finmo spread, partner markup) is a proposed addition to show 'Finmo rate + Zenith markup'.\n- Sandbox mirrors live limits: IDR, THB, PHP, MYR and INR can be bought but not sold (406 104607).","x-status":"live","parameters":[{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"},{"name":"X-Idempotency-Key","in":"header","required":false,"schema":{"type":"string","format":"uuid"},"description":"UUID v4. Retries with the same key replay the original response (x-cached-request-id)."}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"source_currency":{"type":"string","description":""},"target_currency":{"type":"string","description":""},"source_amount":{"type":"number","description":"Send exactly one of source_amount / target_amount"},"target_amount":{"type":"number","description":""}},"required":["source_currency","target_currency"]},"example":{"source_currency":"AUD","target_currency":"IDR","source_amount":null,"target_amount":25000000}}}}}},"/v1/fx-rate/{fx_id}":{"get":{"tags":["FX & payouts"],"summary":"Get quote","description":"One quote.","x-status":"live","parameters":[{"name":"fx_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}},"/v1/payout":{"post":{"tags":["FX & payouts"],"summary":"Create payout","description":"Pays a supplier. Attach fx_rate_id for a cross-currency payout; the rate locks. Status goes CREATED, PENDING, then COMPLETED, FAILED or RETURNED, each with a webhook.\n\n- Send X-Idempotency-Key (UUID v4). A retry with the same key returns the original payout and an x-cached-request-id header.\n- Header x-sandbox-simulate: timeout creates the payout and returns 504, so you can practise 'check GET /payout before resending'.","x-status":"live","parameters":[{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"},{"name":"X-Idempotency-Key","in":"header","required":false,"schema":{"type":"string","format":"uuid"},"description":"UUID v4. Retries with the same key replay the original response (x-cached-request-id)."}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"payout_method_name":{"type":"string","description":""},"sender_currency":{"type":"string","description":""},"beneficiary_currency":{"type":"string","description":""},"beneficiary_country":{"type":"string","description":""},"sender_amount | beneficiary_amount":{"type":"number","description":""},"fx_rate_id":{"type":"string","description":""},"debit_wallet_id":{"type":"string","description":""},"payout_beneficiary_id | payout_beneficiary_param":{"type":"string","description":""},"purpose_code":{"type":"string","description":"e.g. SUPA (supplier), TRVL"},"organization_reference_id":{"type":"string","description":""}},"required":["payout_method_name","sender_currency","beneficiary_currency","debit_wallet_id","purpose_code"]},"example":{"payout_method_name":"id_bank_skn_idr","sender_currency":"AUD","beneficiary_currency":"IDR","beneficiary_country":"ID","beneficiary_amount":25000000,"fx_rate_id":"{{fx_rate_id}}","debit_wallet_id":"{{wallet_id}}","payout_beneficiary_id":"{{payout_beneficiary_id}}","purpose_code":"SUPA","organization_reference_id":"BKG-88213"}}}}},"get":{"tags":["FX & payouts"],"summary":"List payouts","description":"Filter by status, payout_method_name, organization_reference_id, start_time, end_time.","x-status":"live","parameters":[{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}},"/v1/payout/{payout_id}":{"get":{"tags":["FX & payouts"],"summary":"Get payout","description":"Status and details.","x-status":"live","parameters":[{"name":"payout_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}},"/v1/payout/{payout_id}/get-payout-pdf":{"get":{"tags":["FX & payouts"],"summary":"Payment confirmation","description":"download_url to a payment confirmation (sandbox serves an HTML memo).","x-status":"live","parameters":[{"name":"payout_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}},"/v1/payout/simulate":{"patch":{"tags":["Sandbox tools"],"summary":"Simulate payout outcome","description":"Same endpoint as Finmo's sandbox. COMPLETED/FAILED need status PENDING; RETURNED needs COMPLETED (406 100006 otherwise).","x-status":"sandbox-only","parameters":[{"name":"x-on-behalf-of","in":"header","required":true,"schema":{"type":"string"},"description":"Sub account org_id"},{"name":"X-Idempotency-Key","in":"header","required":false,"schema":{"type":"string","format":"uuid"},"description":"UUID v4. Retries with the same key replay the original response (x-cached-request-id)."}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"payout_id":{"type":"string","description":""},"status":{"type":"string","description":"COMPLETED | FAILED | RETURNED"}},"required":["payout_id","status"]},"example":{"payout_id":"{{payout_id}}","status":"FAILED"}}}}}},"/v1/webhook-notification":{"get":{"tags":["Webhooks"],"summary":"List webhook deliveries","description":"Every notification with status and attempt count. Without x-on-behalf-of it lists all sub accounts.\n\n- attempts[], next_attempt_at and delivered_at are sandbox extras (confirm field names with product).","x-status":"live","parameters":[{"name":"x-on-behalf-of","in":"header","required":false,"schema":{"type":"string"},"description":"Sub account org_id"},{"name":"event_type","in":"query","required":false,"schema":{"type":"string"}},{"name":"event_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"event_name","in":"query","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}},"/v1/webhook-notification/{webhook_id}":{"get":{"tags":["Webhooks"],"summary":"Get webhook delivery","description":"One notification with its attempts.","x-status":"live","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"x-on-behalf-of","in":"header","required":false,"schema":{"type":"string"},"description":"Sub account org_id"}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}},"/v1/webhook-notification/{webhook_id}/retrigger":{"patch":{"tags":["Webhooks"],"summary":"Re-send a webhook","description":"Queues an immediate delivery attempt. Picks up the current webhook_url.","x-status":"live","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"x-on-behalf-of","in":"header","required":false,"schema":{"type":"string"},"description":"Sub account org_id"},{"name":"X-Idempotency-Key","in":"header","required":false,"schema":{"type":"string","format":"uuid"},"description":"UUID v4. Retries with the same key replay the original response (x-cached-request-id)."}],"responses":{"200":{"description":"Finmo envelope { request_id, request_time, success, status_code, status_text, data }"},"400":{"description":"Validation error"},"401":{"description":"Unauthorized"}}}}}}