Transmission
The Transmission entity tracks inbound and outbound message exchanges (EDI, API calls, webhooks, emails, etc.) associated with orders. It provides a complete audit trail of all communication events, including retry logic, error tracking, and payload references.
Transmissions can be linked to orders through the OrderTransmission join entity and addressed to a partner Contact. A contact-addressed outbound transmission can be delivered asynchronously through the organization's configured connection.
Fields
| Field Name | Type | Max Length | Required | Default | Description |
|---|---|---|---|---|---|
| TransmissionId | Int32 | — | Auto | Auto-increment | Primary key |
| OrganizationId | Int32 | — | Yes | — | Organization scope |
| ContactId | Int32? | — | No | — | Partner contact the transmission is addressed to or received from |
| CorrelationId | Guid | — | Yes | NewGuid() | Groups related transmissions together |
| ParentId | Int32? | — | No | — | Self-referential FK for parent/child chains |
| ContactId | Int32? | — | No | — | Partner contact the transmission is addressed to (outbound) or received from (inbound). A contact whose custom values carry a transmission block makes the row deliverable across an organization connection |
| Channel | String | 20 | Yes | — | Communication channel (e.g. EDI, API, EMAIL, WEBHOOK) |
| Direction | TransmissionDirection | — | Yes | — | Inbound (0) or Outbound (1) |
| MessageType | String? | 50 | No | — | Message type identifier (e.g. 204, 990, 214) |
| Sender | String? | 100 | No | — | Sender identifier |
| Receiver | String? | 100 | No | — | Receiver identifier |
| Status | TransmissionStatus? | — | No | — | Current transmission status |
| Endpoint | String? | 500 | No | — | Target URL or endpoint address |
| Protocol | String? | 20 | No | — | Protocol (e.g. HTTPS, SFTP, AS2) |
| HttpStatus | Int16? | — | No | — | HTTP response status code |
| ByteSize | Int32? | — | No | — | Payload size in bytes |
| RetryCount | Int16 | — | Yes | 0 | Current retry attempt |
| MaxRetries | Int16 | — | Yes | 3 | Maximum retry attempts |
| NextRetryAt | DateTime? | — | No | — | Scheduled next retry time |
| ErrorCode | String? | 50 | No | — | Error code for failures |
| ErrorMessage | String? | — | No | — | Error description |
| CustomValues | Dictionary? | — (JSONB) | No | — | Arbitrary key-value metadata |
| Headers | Dictionary? | — (JSONB) | No | — | Message headers |
| PayloadRef | String? | — | No | — | Private storage key for the payload; use GraphQL/workflow APIs rather than exposing it to partners |
| ScheduledAt | DateTime? | — | No | — | When the transmission was scheduled |
| StartedAt | DateTime? | — | No | — | When processing started |
| CompletedAt | DateTime? | — | No | — | When processing completed |
| DurationMs | Int32? | — | No | — | Processing duration in milliseconds |
| IsDeleted | Boolean | — | Yes | false | Soft-delete flag (filtered by default) |
| Created | DateTime | — | Auto | — | Created timestamp |
| CreatedBy | String | 36 | Auto | — | Created by user ID |
| LastModified | DateTime | — | Auto | — | Last modified timestamp |
| LastModifiedBy | String | 36 | Auto | — | Last modified by user ID |
Enums
TransmissionDirection
| Value | Name | Description |
|---|---|---|
| 0 | Inbound | Message received from external source |
| 1 | Outbound | Message sent to external destination |
TransmissionStatus
| Value | Name | Description |
|---|---|---|
| 0 | Pending | Queued, not yet processed |
| 1 | InProgress | Currently being processed |
| 2 | Sent | Successfully sent (outbound) |
| 3 | Received | Successfully received (inbound) |
| 4 | Delivered | Confirmed delivery at destination |
| 5 | Acknowledged | Functional acknowledgment received |
| 6 | Rejected | Rejected by receiver |
| 7 | Error | Processing error occurred |
| 8 | RetryScheduled | Failed, retry scheduled |
| 9 | Cancelled | Manually or automatically cancelled |
| 10 | Expired | Exceeded retry window |
Relationships
| Relationship | Target Entity | Type | Description |
|---|---|---|---|
| Organization | Organization | Many-to-One | Organization scope |
| Contact | Contact | Many-to-One | Partner address and transport configuration |
| Parent | Transmission | Many-to-One (self) | Parent transmission for chains |
| Contact | Contact | Many-to-One | Partner contact (optional) |
| Children | Transmission[] | One-to-Many (self) | Child transmissions |
| OrderTransmissions | OrderTransmission[] | One-to-Many | Join table linking to orders |
Contact-addressed delivery
A partner contact opts into delivery with a transmission block in CustomValues:
{
"transmission": {
"type": "connection",
"organizationConnectionId": 12,
"organizationId": "partner-organization-uuid"
}
}
When ContactId is supplied during creation, Channel defaults from the transport type (CONNECTION) and Direction defaults to Outbound. If the transport is available, creation sets an unspecified status to Pending and queues delivery through the outbox. Successful delivery becomes Sent; transport errors become Error, while unexpected failures become RetryScheduled and are retried by the outbox. The redeliverTransmission mutation can requeue a stuck or dead-lettered outbound transmission.
Payloads and attachments
Creation accepts either payload or payloadRef, never both. Inline JSON, text, or binary payloads are uploaded to private storage and represented by PayloadRef; their content type is recorded in headers and byte size is inferred when omitted.
Attachments may reference an existing attachment by ID/GUID, pass through a URL, or contain base64/raw data. Each attachment must use exactly one source. The manifest is stored in CustomValues.attachments, while GraphQL's computed attachments field replaces storage keys with short-lived download URLs.
Transmission entity workflow triggers hydrate entity.payload (subject to the configured preload size limit) and entity.attachments, so workflows can process received content without handling storage keys.
OrderTransmission (Join Entity)
| Field Name | Type | Description |
|---|---|---|
| OrderId | Int32 | FK to Order |
| TransmissionId | Int32 | FK to Transmission |
Database Indexes
| Index | Column(s) | Purpose |
|---|---|---|
| IX_Transmissions_CorrelationId | CorrelationId | Fast lookup of correlated messages |
| IX_Transmissions_OrganizationId | OrganizationId | Org-scoped queries |
| IX_Transmissions_Status | Status | Filter by status |
| IX_Transmissions_Channel | Channel | Filter by channel |
| IX_Transmissions_ParentId | ParentId | Parent/child traversal |
| IX_Transmissions_ContactId | ContactId | Partner contact lookup |
Views
OrderTransmissionSummaryView (vw_order_transmission_summary)
Pre-aggregated summary per order, available via GraphQL as transmissionsSummary on the Order type.
| Field | Type | Description |
|---|---|---|
| OrderId | Int32 | Order ID |
| OrganizationId | Int32 | Organization ID |
| TotalCount | Int32 | Total transmissions for this order |
| HasAny | Boolean | Whether the order has any transmissions |
| LatestCreated | DateTime? | Most recent transmission timestamp |
| LatestChannel | String? | Channel of latest transmission |
| LatestStatus | String? | Status of latest transmission |
Cross-Organization Delivery
An Outbound transmission whose ContactId points at a contact with a customValues.transmission block (type: "connection", organizationConnectionId) is delivered to the partner organization through the transactional outbox: the platform validates the OrganizationConnection and writes a mirrored Inbound / Received row in the partner organization with the same CorrelationId, MessageType and PayloadRef, plus CustomValues.organizationConnectionId and CustomValues.sourceTransmissionId. The outbound row tracks Pending, Sent, RetryScheduled or Error (with ErrorCode: ConnectionNotFound, ConnectionDisabled, SenderNotInConnection, OrganizationMismatch, UnknownTransportType).
Well-known custom values on transmission rows:
| Key | Row | Meaning |
|---|---|---|
organizationConnectionId | inbound | Connection the message arrived through |
sourceTransmissionId | inbound | Outbound row id in the sender (idempotency key for redelivery) |
attachments | both | Attachment manifest [{ fileName, contentType, byteSize, storageKey, url, metadata }]; exposed with presigned URLs |
Transmission fires entity workflow triggers (Added, Modified, Deleted) in every organization; a receiver subscribes with a trigger on Transmission / Added and a condition such as [entity.direction] = 'Inbound' && [entity.messageType] = 'order.created'. See the Organization Connections and Transmissions guide.
Related
- Organization Connections and Transmissions — publishing, delivery and receiving across organizations
- OrganizationConnection — the link that gates delivery
- Order — Orders linked via OrderTransmission
- Transmission Workflow Tasks — Create, Update, Delete via workflows
- GraphQL Overview — Query and mutation documentation