Transactions

Create a manual transaction

Creates a manual transaction. Use projectId to assign it to a project. Requires an Idempotency-Key.

post/transactions

Request

  • Base URL: https://next-api.saturation.io/v1
  • URL: https://next-api.saturation.io/v1/transactions
  • 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

type'Invoice' | 'Projection' | 'Cash' | 'Check' | 'Wire' | 'ACH' | 'CreditCard' | 'TimeCard' | 'ETransfer' required

Transaction types available for manual transactions.

timestampstring date-time required

Transaction time. A date without a time is recorded at midnight UTC.

status'unpaid' | 'pending' | 'posted' | 'void' | 'needs_review' | 'projected' | 'rejected'

Current transaction status. Available statuses vary by source.

descriptionstring
projectIdstring

A stable resource ID, such as prj_…, txn_…, or doc_….

contactIdstring

A stable resource ID, such as prj_…, txn_…, or doc_….

budgetLineIdstring

A stable resource ID, such as prj_…, txn_…, or doc_….

fringeIdstring

A stable resource ID, such as prj_…, txn_…, or doc_….

numberstring
refstring
notesstring
actualizedboolean

Whether to include the transaction in budget actuals. Defaults to the workspace setting.

Example request

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

Response

The created transaction.

idstring required

A stable resource ID, such as prj_…, txn_…, or doc_….

source'manual' | 'plaid' | 'saturation_pay' | 'saturation_credit' required

How the transaction entered Saturation. Financial fields are editable only for manual transactions.

sourceIdstring nullable

Reference supplied by the transaction source.

type'SaturationPCard' | 'ACH' | 'Cash' | 'Check' | 'CreditCard' | 'Deposit' | 'ETransfer' | 'Invoice' | 'Projection' | 'TimeCard' | 'Wire' | 'Withdrawal' required

Transaction type. The API may return values not listed below.

status'unpaid' | 'pending' | 'posted' | 'void' | 'needs_review' | 'projected' | 'rejected' required

Current transaction status. Available statuses vary by source.

isReversalboolean required

Whether the transaction is a refund or another reversal.

exchangeRatenumber nullable

Exchange rate to the workspace currency.

exchangeRateSource'bank' | 'api' | 'user'

Source of the exchange rate. The API may return values not listed below.

timestampstring date-time required

Time the transaction occurred.

descriptionstring nullable
merchantstring nullable

Merchant name supplied by the transaction source.

logoUrlstring uri nullable

Merchant logo URL.

categorystring nullable

Category supplied by the transaction source.

sourceLast4string nullable

Last four characters of the source account or card.

sourceNamestring nullable

Name of the source account or card.

numberstring nullable

Document, check, or invoice number.

refstring nullable

External reference.

payIdstring nullable

Related Saturation Pay payment ID.

notesstring nullable

Notes about the transaction.

contactIdstring

A stable resource ID, such as prj_…, txn_…, or doc_….

projectIdstring required

A stable resource ID, such as prj_…, txn_…, or doc_….

budgetLineIdstring

A stable resource ID, such as prj_…, txn_…, or doc_….

fringeIdstring

A stable resource ID, such as prj_…, txn_…, or doc_….

isItemizedboolean required

Whether the transaction has items.

actualizedboolean required

Whether the transaction is included in budget actuals.

purchaseOrderIdstring

A stable resource ID, such as prj_…, txn_…, or doc_….

createdAtstring date-time required
updatedAtstring date-time required

Example response

{
  "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"
  }
}

Changes

Changes to this operation have not been checked yet.