SaaSFlow
DevelopersAPIReferencetransactions

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 nobody feeds, this creates the opposing transaction on `targetAccountId` and links the two. Use `link_transfer` instead when both sides already exist. Returns 409 if the source is already linked or was changed concurrently.

Authentication

You're not signed in. Either sign in at app.saasflow.com and reload (then pick sessionCookie), or paste a SaaSFlow sf_… API key in the bearerAuth field below.
POST
/companies/{companyId}/transactions/create_counter_transaction

Authorization

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.

In: header

Path Parameters

companyId*string
Length1 <= length

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

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",  "stripeBalanceTransactionId": "string",  "stripeInvoiceId": "string",  "stripeCreditNoteId": "string",  "stripePaymentIntentId": "string",  "stripeBillingEmail": "string",  "hubspotPortalId": "string",  "hubspotInvoiceId": "string",  "hubspotCategorizationResolved": true,  "finwayExpenseNumber": "string",  "finwayInvoiceNumber": "string",  "pleoExpenseId": "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"    }  }}