Create counter transaction
Book the missing other half of a transfer. When money left one account and the matching arrival was never imported, for example on a cash or wallet account…
Authentication
Authorization<token>A SaaSFlow API key (format sf_…) or an OAuth bearer token. Paste only the key — the proxy adds the Bearer prefix. Create an API key in Settings → Company settings → API keys — see API keys.
companyId*string1 <= lengthapplication/json- body
sourceTransactionId*string1 <= lengthsourceCategorizationId*string1 <= lengthtargetAccountId*string1 <= lengthCounter transaction created
application/json- response
id*stringuuidcompanyId*stringuuidaccountId*stringThe ID of the account associated with this transaction.
uuiddate*stringThe date of the transaction (YYYY-MM-DD).
fromTo*|A description of the sender or recipient of the transaction.
description*|A user- or bank-provided description or memo for the transaction.
amountValue*stringThe numerical value of the transaction amount.
amountCurrency*stringThe currency of the transaction amount.
"EUR""AUD""BRL""CAD""CHF""CNY""CZK""DKK""GBP""HKD""HUF""IDR""ILS""INR""ISK""JPY""KRW""MXN""MYR""NOK""NZD""PHP""PLN""RON""SEK""SGD""THB""TRY""USD""ZAR"categorizationsAutoAssigned*|Flag indicating if the categorizations were automatically assigned.
excludeFromAutoCategorization*booleanFlag to exclude this transaction from automatic categorization.
notes*|Additional notes or comments for the transaction.
source*|The source of the transaction data (e.g., bank import, manual entry).
assignedUserId*|The ID of the user to whom this transaction is assigned for review.
finApiTransactionId*|The transaction ID from FinAPI, if applicable.
plaidTransactionId*|The transaction ID from Plaid, if applicable.
counterpartIban*|The IBAN of the other side of a bank transaction as reported by the bank (uppercase, no spaces), if the bank provides it. Written by the bank connection and read-only. When it equals the IBAN of another account of the company, the transaction is an internal transfer.
endToEndReference*|The SEPA end-to-end reference of a bank transaction, if the bank provides one. Identical on both legs of one credit transfer. Written by the bank connection and read-only.
stripeBalanceTransactionId*|The balance transaction ID from Stripe, if applicable.
stripeInvoiceId*|The invoice ID from Stripe, if applicable.
stripeCreditNoteId*|The credit note ID from Stripe, if applicable.
stripePaymentIntentId*|The Stripe PaymentIntent ID from the charge source.
stripeBillingEmail*|The customer billing email from the Stripe charge source.
hubspotPortalId*|The HubSpot portal ID from Stripe balance transaction metadata.
hubspotInvoiceId*|The HubSpot invoice ID from Stripe balance transaction metadata.
hubspotCategorizationResolved*|Whether HubSpot categorization resolution has been attempted.
finwayExpenseNumber*|The Finway request number (Antragsnummer) of the request paid by this transaction, if imported from Finway. Can hold several space-separated numbers when one wallet payment covers multiple requests.
finwayInvoiceNumber*|The supplier-issued invoice number (Rechnungsnummer) from Finway, if applicable.
pleoExpenseId*|The Pleo expense ID (a UUID, stable across re-exports of the same expense), if imported from Pleo.
paypalTransactionId*|The PayPal Transaction Search transaction ID, if imported from PayPal. Not unique on its own: PayPal can report the same ID under several event codes, so it identifies a row only together with paypalEventCode.
paypalEventCode*|The PayPal transaction event code (T-code) describing what the transaction was, e.g. T0006 for an express checkout payment, T0300 for a bank deposit into the PayPal account, T0400 for a withdrawal to a bank account.
paypalReferenceId*string|nullpaypalFeeAmount*string|nulldigistore24TransactionId*string|nulldigistore24PayoutId*string|nullcreatedVendorId*|uuidintegrationId*|uuidpending*booleanFlag indicating if the transaction is pending and not yet cleared.
createdTime*|date-timecreatedUserId*string|nulllastUpdatedTime*|date-timelastUpdatedUserId*string|nullcategorizations*A record mapping categorization IDs to categorization details.
curl -X POST "https://example.com/companies/string/transactions/create_counter_transaction" \ -H "Content-Type: application/json" \ -d '{ "sourceTransactionId": "string", "sourceCategorizationId": "string", "targetAccountId": "string" }'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "companyId": "8bb73d03-06b4-47c7-80c7-59301f770eda", "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9", "date": "string", "fromTo": "string", "description": "string", "amountValue": "string", "amountCurrency": "EUR", "categorizationsAutoAssigned": true, "excludeFromAutoCategorization": true, "notes": "string", "source": "string", "assignedUserId": "string", "finApiTransactionId": "string", "plaidTransactionId": "string", "counterpartIban": "string", "endToEndReference": "string", "stripeBalanceTransactionId": "string", "stripeInvoiceId": "string", "stripeCreditNoteId": "string", "stripePaymentIntentId": "string", "stripeBillingEmail": "string", "hubspotPortalId": "string", "hubspotInvoiceId": "string", "hubspotCategorizationResolved": true, "finwayExpenseNumber": "string", "finwayInvoiceNumber": "string", "pleoExpenseId": "string", "paypalTransactionId": "string", "paypalEventCode": "string", "paypalReferenceId": "string", "paypalFeeAmount": "string", "digistore24TransactionId": "string", "digistore24PayoutId": "string", "createdVendorId": "91002d41-22cb-48a3-bc93-148a8439ef7f", "integrationId": "497a18ca-284e-40c0-985d-f72be35d468e", "pending": true, "createdTime": "2019-08-24T14:15:22Z", "createdUserId": "string", "lastUpdatedTime": "2019-08-24T14:15:22Z", "lastUpdatedUserId": "string", "categorizations": { "property1": { "counterparty": { "type": "customer", "id": "string" }, "categoryId": "string", "usingDateRule": { "type": "transactionDate" }, "computedStartDate": "2019-08-24", "computedEndDate": "2019-08-24", "plSplit": { "revenue": 0, "cogs": 0, "cac": 0, "pd": 0, "ga": 0, "no": 0, "neutral": 0 }, "passThroughTax": 0, "transferCounterPosition": { "transactionId": "string", "categorizationId": "string" }, "internalTransitLink": { "transactionId": "string", "categorizationId": "string" }, "sourceNote": "string", "externalInvoiceUrn": "string" }, "property2": { "counterparty": { "type": "customer", "id": "string" }, "categoryId": "string", "usingDateRule": { "type": "transactionDate" }, "computedStartDate": "2019-08-24", "computedEndDate": "2019-08-24", "plSplit": { "revenue": 0, "cogs": 0, "cac": 0, "pd": 0, "ga": 0, "no": 0, "neutral": 0 }, "passThroughTax": 0, "transferCounterPosition": { "transactionId": "string", "categorizationId": "string" }, "internalTransitLink": { "transactionId": "string", "categorizationId": "string" }, "sourceNote": "string", "externalInvoiceUrn": "string" } }}Unlink transfer
Break a transfer link. How much comes apart depends on link: path dissolves the whole transfer and removes the transit bookings SaaSFlow created, counter…
Link transfer
Link two existing transactions as the two legs of one transfer, so the movement stops counting as income on one side and spend on the other.