Transactions API
List, create, categorize, update, attach, and remove eligible transactions through public API v1.
Transaction operations use the transactions.read scope or the transactions.write scope. Eigenn limits every operation to the authenticated team.
Endpoints
| Method | Endpoint | Scope | Purpose |
|---|---|---|---|
| GET | /transactions | transactions.read | List and filter transactions |
| POST | /transactions | transactions.write | Create one transaction |
| GET | /transactions/{id} | transactions.read | Retrieve one transaction |
| PATCH | /transactions/{id} | transactions.write | Update the fields that you send |
| DELETE | /transactions/{id} | transactions.write | Delete a manually created transaction |
| POST | /transactions/bulk | transactions.write | Create up to 100 transactions |
| PATCH | /transactions/bulk | transactions.write | Update many transactions |
| DELETE | /transactions/bulk | transactions.write | Delete up to 100 manual transactions |
| POST | /transactions/{transactionId}/attachments/{attachmentId}/presigned-url | transactions.read | Create a time-limited attachment URL |
List Transactions
The GET /transactions operation accepts cursor pagination. It also accepts a pageSize from 1 to 10,000.
The filters include:
- Text search
- Date range
- Category slugs
- Tag IDs
- Bank account IDs
- Assignees
- Statuses
- Recurring frequencies
- Attachment or manual state
- Amount range or exact amounts
- Income or expense type
- needsReview
- Sort tuple
The needsReview filter selects transactions that have a pending receipt-match suggestion. It also selects unfulfilled records that are not completed, excluded, or archived.
curl --request GET \
--url "https://api.eigenn.io/v1/transactions?pageSize=100&needsReview=true" \
--header "Authorization: Bearer $EIGENN_API_TOKEN"Create a Transaction
The POST /transactions operation needs these fields:
- name
- amount
- currency
- date
- bankAccountId
curl --request POST \
--url https://api.eigenn.io/v1/transactions \
--header "Authorization: Bearer $EIGENN_API_TOKEN" \
--header "Content-Type: application/json" \
--header "Idempotency-Key: transaction-office-supplies-2026-07-11" \
--data '{
"name": "Office Supplies Purchase",
"amount": 150.75,
"currency": "USD",
"date": "2026-07-11T12:00:00.000Z",
"bankAccountId": "00000000-0000-0000-0000-000000000000",
"categorySlug": "office-supplies",
"internal": false
}'The optional fields include assignedId, categorySlug, note, internal, and attachment metadata. The attachment metadata applies to files that you uploaded before.
Update
The PATCH /transactions/{id} operation changes only the fields that you send. When no change is necessary, the operation can return the transaction unchanged.
Use updates to categorize, assign, annotate, or change the status of a transaction. Follow the documented request schema.
Delete and Exclude
You can delete only the transactions that you created manually.
Bank-synced transactions keep the history of the source system. You cannot delete them with the transaction delete operations. Change the synced record to an excluded state instead.
Bulk delete accepts a maximum of 100 transaction IDs. It applies the same manual-only rule.
Bulk Operations
Bulk create accepts a maximum of 100 transactions in one request. Bulk update applies the same fields to the team-owned transactions that you target.
Use one idempotency key for one complete bulk write. Do not reuse it for a different set of transaction IDs.
Attachments
Transaction responses can include attachment IDs, paths, filenames, sizes, and MIME types.
Use the presigned-URL operation for time-limited access to a specific attachment. Stored attachment paths are not public URLs. Do not treat them like public URLs.
Pagination
The list response contains:
- data
- meta.cursor
- meta.hasNextPage
- meta.hasPreviousPage
The response does not contain a total count. Keep the same filters and the same sort when you request the next cursor.
Common Errors
| Status | Cause |
|---|---|
| 400 | Invalid fields, or a request to delete a synced transaction |
| 401 | Missing or invalid bearer token |
| 403 | Missing transactions.read or transactions.write |
| 404 | Transaction or attachment not found in the team |
| 409 | Current state or idempotency conflict |
| 422 | Request structure is invalid |
| 429 | Resource limit exceeded |