API Reference
6. API Reference
Authentication
Secured API requests require a Bearer token. Generate a Lab, Certification, or Production API key from Connections → Business systems → API connections. Lab keys use sk_lab_, Certification keys use sk_cert_, and Production keys use sk_live_. Each key can address only its own lane; historical sk_test_ keys resolve to Certification. The document-type registry is public for capability discovery.
GET /api/v1/transactions
Authorization: Bearer sk_cert_YOUR_CERTIFICATION_KEY
Content-Type: application/jsonREST Endpoints
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/documents/outbound | Send typed JSON or exact raw X12/EDIFACT through an authorized account integration. |
| POST | /api/v1/documents/inbound | Submit raw partner-to-customer EDI; unmatched integrations are held for Connect setup. |
| POST | /api/v1/documents/batch | Submit up to 100 typed or raw outbound documents with per-item results. |
| GET | /api/v1/documents/:documentId | Read the canonical multi-stage document receipt. |
| GET | /api/v1/documents/:documentId/payload | Pull raw, structured, typed document, or approved mapped payload views. |
| GET | /api/v1/document-types | Discover recognized X12/EDIFACT types and honest raw/typed capabilities. |
| GET | /api/v1/transactions | List your recent transactions (newest first), scoped to your API key. |
| GET | /api/v1/transactions/:id | Get a single transaction you own, with full status. |
| POST | /api/v1/parse | Parse a raw X12 interchange into structured JSON plus diagnostics. |
| POST | /api/v1/validate | Validate a raw X12 interchange against envelope rules; returns diagnostics. |
Trading partners are created in the dashboard (Connections → Partners) or the developer console; pass the resulting partnerId to the API.
Example: list recent failed transactions:
curl -X GET "https://api.signaledi.com/v1/transactions?status=FAILED&limit=50" \
-H "Authorization: Bearer sk_cert_YOUR_CERTIFICATION_KEY" \
-H "Content-Type: application/json"Code Samples
Complete request examples in multiple languages. Click the tabs to switch between cURL, Node.js, Python, and PHP.
Rate Limits
| Endpoint Group | Limit | Window |
|---|---|---|
| /api/auth (login) | Class-based | five failures per account; separate per-IP credential and support-request abuse guards |
| /api/agents (autonomous) | Lower autonomous tier | per minute per actor |
| /api/v1/transactions | Up to ~120 req | per minute per API key |
| /api/v1/parse and /api/v1/validate | 120 req | per minute per API key |
| /api/v1/documents/outbound and /api/v1/documents/inbound | 120 req | per minute per API key |
| /api/v1/documents/batch | 60 req | per minute per API key (up to 100 documents per call) |
| /api/v1/documents/{documentId} and …/payload | 120 req | per minute per API key |
| /api/v1/document-types (public registry) | 300 req | per minute per client IP |
| /api/chat (AI assistant) | Up to ~30 req | per minute |
| /api/upload | 30 req per user, 90 req per network | per minute (in addition to the general /api/ budget) |
| All other /api/ routes | 300 req | per minute per actor |
Numbers above are typical ceilings; the actual cap that applies to your request is the lower of the per-endpoint ceiling and your plan-tier ceiling (see Acceptable Use). Rate-limit response headers (when present): X-RateLimit-Remaining and X-RateLimit-Reset (Unix timestamp). On a 429, retry after the time indicated in the response body or Retry-After header.
Webhook Setup
Configure a webhook URL in Settings → Webhooks to receive lane-matched document lifecycle updates without polling. Create separate Certification and Production endpoints. Lab uses a signed one-shot probe and never creates a persistent delivery.
SignalEDI sends a POST request to your URL with the following JSON payload:
{
"id": "evt_01HXYZ",
"type": "document.accepted.v1",
"version": "1",
"createdAt": "2026-09-24T14:00:00.000Z",
"documentId": "doc_out_01HXYZ",
"direction": "CUSTOMER_TO_PARTNER",
"environment": "CERTIFICATION",
"partnerId": "partner_demo",
"standard": "x12",
"documentTypeCodes": ["850"],
"status": "ACCEPTED",
"links": {
"self": "/v1/documents/doc_out_01HXYZ",
"payload": "/v1/documents/doc_out_01HXYZ/payload"
}
}Versioned events include document.accepted.v1, document.available.v1, document.transport_delivered.v1, document.delivery_failed.v1, document.acknowledgement_received.v1, and document.held.v1. Default events contain metadata and authorized pull links, not document contents. Deliveries include X-SignalEDI-Timestamp, X-SignalEDI-Event, and X-SignalEDI-Delivery-ID headers. document.acknowledgement_received.v1 fires for a partner 997, 999, or EDIFACT CONTRL linked to a document admitted through the v1 API; TA1 and 277 responses do not produce a webhook.
Legacy events are still emitted and subscribable; they are signed over the raw body only and carry no timestamp header: transaction.completed, transaction.failed, document.partner_ack, document.ack_overdue, file.processed, mapping.draft.ready, onboarding.certification.requested, onboarding.certified, onboarding.live, incident.opened, incident.resolved, pa.sla.escalation, pa.sla.breach, compliance.risk.detected, compliance.check.resolved.
Verify webhook authenticity by checking the X-SignalEDI-Signature header (HMAC-SHA256 over timestamp + "." + rawBody using your webhook signing secret; reject deliveries whose timestamp skew exceeds ~5 minutes). Deduplicate on X-SignalEDI-Delivery-ID and confirm the environment header matches the endpoint lane.
Still have questions?
Our support team typically responds within a few hours during business hours.
Contact support