---
title: "List the caller's EDI transactions with Control Layer filters and cursor pagination."
method: GET
path: "/v1/transactions"
tags: ["Transactions"]
---

# List the caller's EDI transactions with Control Layer filters and cursor pagination.

`GET /v1/transactions`

## Request

- Base URL: `https://signaledi.com/api`
- URL: `https://signaledi.com/api/v1/transactions`
- Auth: HTTP bearer

Tenant-scoped keyset pagination (newest first by default). An API key lists only its own lane; a dashboard session may pass `environment`. `documentId` restricts the list to the transactions linked to one canonical document (the receipt's `links.transactions`): `doc_out_…` resolves the transactions dispatched for that outbound document, `doc_in_…` the transactions parsed from that inbound file, `doc_lab_…` the Lab transaction itself; the document must be readable by the caller in its exact lane. Throttled at 120 calls per minute per API key.

## Query parameters

- `limit` integer
- `cursor` string
- `documentId` string
- `status` 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'REJECTED' | 'REPROCESSING' | 'ARCHIVED' | 'DELETED'
- `direction` 'INBOUND' | 'OUTBOUND'
- `documentType` string
- `partnerId` string
- `businessReference` string
- `search` string
- `dateFrom` string, date-time
- `dateTo` string, date-time
- `ackStatus` 'overdue' | 'pending' | 'unacknowledged' | 'accepted' | 'accepted_with_errors' | 'rejected'
- `errorClass` string
- `environment` 'LAB' | 'CERTIFICATION' | 'PRODUCTION': The exact isolated lane identifier. The API route and payload remain the same. Lab is customer-to-Signal only; Certification uses the real third-party test route; Production is approved live exchange. SANDBOX is a historical request-only alias for Certification. Promotion creates an approved immutable version and never relabels traffic.
- `sort` 'createdAt_desc' | 'createdAt_asc'

## Response `200`

Transaction summaries plus cursor page state.

- TransactionList
  - `ok` true, required
  - `transactions` TransactionSummary[], required
    - `id` string, required
    - `fileId` string, nullable
    - `direction` 'INBOUND' | 'OUTBOUND', required
    - `status` string, required
    - `transactionSet` string, required
    - `documentType` string: Alias of transactionSet.
    - `businessReference` string, nullable
    - `businessReferenceType` string, nullable
    - `tradingPartnerId` string, nullable
    - `tradingPartner` string, nullable
    - `amountMinor` string, nullable
    - `amountCurrency` string, nullable
    - `interchangeControl` string, nullable
    - `groupControl` string, nullable
    - `setControl` string, nullable
    - `senderQualifier` string, nullable
    - `senderId` string, nullable
    - `receiverQualifier` string, nullable
    - `receiverId` string, nullable
    - `ediVersion` string, nullable
    - `transport` string, nullable
    - `grain` string
    - `ackExpected` boolean
    - `ackDueAt` string, date-time, nullable
    - `ackReceivedAt` string, date-time, nullable
    - `ackOutcome` string, nullable
    - `isOverdue` boolean
    - `retryCount` integer
    - `supersedesId` string, nullable
    - `errorCount` integer
    - `errorMessage` string, nullable
    - `slaMet` boolean, nullable
    - `createdAt` string, date-time, required
    - `processedAt` string, date-time, nullable
    - `environment` 'LAB' | 'CERTIFICATION' | 'PRODUCTION' | 'null', nullable
  - `nextCursor` string, nullable, required: Pass as `cursor` to fetch the next page; null on the last page.
  - `hasMore` boolean, required

## Other responses

- `400`: `environment` is not LAB, CERTIFICATION, or PRODUCTION (`code` INVALID_ENVIRONMENT), `documentId` is malformed (VALIDATION_ERROR), or a dashboard session passed `documentId` without `environment` (ENVIRONMENT_REQUIRED).
- `401`: Missing or invalid API key (`code` AUTH_UNAUTHORIZED).
- `403`: Control Layer authority missing: the user has no tenant (`code` TENANT_REQUIRED), the API key lacks the `read`/`write` scope the operation needs (CONTROL_LAYER_SCOPE_REQUIRED), the session role lacks the permission (CONTROL_LAYER_PERMISSION_REQUIRED), or an API key asked for a lane other than its own (ENVIRONMENT_MISMATCH).
- `404`: The /v1 platform is disabled (`code` NOT_FOUND) or the `documentId` is not readable by the caller in its lane (DOCUMENT_NOT_FOUND).
- `429`: Rate limit exceeded (`code` RATE_LIMITED).
- `500`: Unexpected server error (`code` e.g. PARSE_FAILED, VALIDATE_FAILED, OUTBOUND_FAILED, INBOUND_FAILED, BATCH_FAILED, TRANSACTIONS_FAILED, DOCUMENT_RECEIPT_FAILED, DOCUMENT_PAYLOAD_FAILED). Sanitized bodies carry an opaque `correlationId` to quote to support; internal error text is never echoed.

---

[API](https://skmtc.dev/signaledi/apis/signaledi-developer-api.md) · [All operations](https://skmtc.dev/signaledi/apis/signaledi-developer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/signaledi/apis/signaledi-developer-api/revisions/9bc596644a10?raw)
