Transactions

Create manual transactions in bulk

Creates up to 500 manual transactions in one request. If any transaction fails, none are created. Requires an Idempotency-Key.

post/transactions/bulk

Request

  • Base URL: https://next-api.saturation.io/v1
  • URL: https://next-api.saturation.io/v1/transactions/bulk
  • Auth: HTTP bearer

Headers

Idempotency-Keystring required

A unique 16-255 character key. Reusing the key with the same body returns the first result. Reusing it with a different body returns 409 idempotency_conflict.

Request body

Example request

{
  "transactions": [
    {
      "type": "Invoice",
      "amount": {
        "amount": 152900,
        "currency": "USD"
      },
      "status": "posted",
      "projectId": "txn_8f2a1c9e",
      "contactId": "txn_8f2a1c9e",
      "budgetLineId": "txn_8f2a1c9e",
      "fringeId": "txn_8f2a1c9e"
    }
  ]
}

Response

The created transactions.

nextCursorstring nullable

Cursor for the next page. Pass it as cursor with the same filters and sort. Null on the last page.

countinteger

Total number of matches. Included when withCount=true.

truncatedboolean

Whether the page contains fewer results than requested.

statusReachabilityStatusReachabilityMatrix

Transaction statuses available for each source.

Example response

{
  "data": [
    {
      "id": "txn_8f2a1c9e",
      "source": "manual",
      "type": "CreditCard",
      "status": "posted",
      "amount": {
        "amount": 152900,
        "currency": "USD"
      },
      "exchangeRateSource": "bank",
      "timestamp": "2026-05-20T14:03:00.000Z",
      "contactId": "txn_8f2a1c9e",
      "projectId": "txn_8f2a1c9e",
      "budgetLineId": "txn_8f2a1c9e",
      "fringeId": "txn_8f2a1c9e",
      "purchaseOrderId": "txn_8f2a1c9e",
      "contact": {
        "id": "txn_8f2a1c9e"
      },
      "documents": [
        {
          "id": "txn_8f2a1c9e"
        }
      ],
      "items": [
        {
          "id": "txn_8f2a1c9e",
          "lineNumber": "1",
          "budgetLineId": "txn_8f2a1c9e",
          "fringeId": "txn_8f2a1c9e",
          "contactId": "txn_8f2a1c9e",
          "qty": "3",
          "unit": "Day",
          "customUnitId": "txn_8f2a1c9e",
          "amount": {
            "amount": 152900,
            "currency": "USD"
          },
          "account": {
            "id": "txn_8f2a1c9e",
            "name": "Camera",
            "code": "1200"
          },
          "tagIds": [
            "txn_8f2a1c9e"
          ],
          "tags": [
            {
              "id": "txn_8f2a1c9e"
            }
          ]
        }
      ],
      "account": {
        "id": "txn_8f2a1c9e",
        "name": "Camera",
        "code": "1200"
      },
      "purchaseOrder": {
        "id": "txn_8f2a1c9e"
      }
    }
  ],
  "nextCursor": "eyJpZCI6InR4bl84ZjJhMWM5ZSJ9",
  "statusReachability": {
    "manual": [
      "posted",
      "void",
      "projected"
    ],
    "plaid": [
      "pending",
      "posted",
      "void",
      "needs_review"
    ],
    "saturation_pay": [
      "unpaid",
      "pending",
      "posted",
      "void",
      "rejected"
    ],
    "saturation_credit": [
      "pending",
      "posted",
      "void",
      "needs_review",
      "rejected"
    ]
  }
}

Changes

No recorded changes to this operation across all 4 revisions of this API.