Reference for reading portal data with an Access Key. All endpoints are mounted under /api, so a full URL looks like:
https://portal.e2cc.com/api/orders
Authentication
Send your key on every request using either header form. Bearer is the recommended form to build against.
Authorization: Bearer <your-access-key> api-key: <your-access-key>
Validation behavior
- A key is accepted as long as its
statusisactive. Only revoked keys are rejected. - Expiration is not enforced.
expiresAtis stored for reference only - keys keep working past that date. Revoke them explicitly to cut off access. - A validated key is cached for ~5 minutes, so a newly revoked key can stay active for up to 5 minutes.
Permissions
A key's permissions array only matters for endpoints that declare a required permission. None of the current data endpoints do - so a key with an empty permissions array can read everything: orders, shipments, invoices, warehouses, inventory, credits, and RMAs.
Error codes
| Status | Meaning |
|---|---|
401 Unauthorized | Key missing, not found, revoked, or invalid |
403 Forbidden | Key valid but missing a required permission (not triggered today) |
404 Not Found | Unknown route |
500 Internal Server Error | Unhandled server error |
Error responses use the shape: { "error": "Failed to fetch orders" }
Rate Limits
All API calls are queued and processed sequentially through a shared pool. There is no hard rate limit - no errors, no rejections. Simultaneous requests queue and are handled in order. Response time scales with queue depth.
Query Parameters
List endpoints (/orders, /shipments, /shipments/:shipmentNbr, /inventories, /invoices) accept the parameters below. Customer scope is always applied on top.
| Parameter | Type | Default | Effect |
|---|---|---|---|
pageSize | integer | 1000 | Max rows returned per call |
page | integer | 1 | Page number (offset = (page - 1) × pageSize) |
fields | string | - | Comma-separated list of fields to return |
conditions | string | - | Raw filter expression for ranges / date comparisons |
custom | string | - | Pass-through for custom fields |
Field=value | string | - | Adds an equality match: Field eq 'value' |
Filter field names are PascalCase. Response fields are camelCase, but filter parameters use the capitalized source name. Example: status in responses → filter as Status. So open invoices filter as ?Status=Open, not ?status=Open.
Field matching is equality only. For ranges or date comparisons, use conditions - e.g. ?conditions=CreatedDateTime gt datetime'2025-12-01'. Sorting is not available; order records on your side. Detail and non-list endpoints (/warehouses, /credits, /rmas, /user) ignore these parameters.
Endpoints
GET /api/orders - List all sales orders
List all your sales orders. Accepts standard query parameters.
Request
curl -H "Authorization: Bearer $KEY" \ "https://portal.e2cc.com/api/orders?pageSize=50&page=1"
Sample response
[
{
"orderNbr": "057142",
"date": "2026-06-24T00:00:00",
"status": "Credit Hold",
"schedShipment": "2026-06-26T00:00:00",
"customerOrder": "Sample School District (NY)",
"description": "(1) Sample Replacement Order",
"orderQty": "3.000000",
"adjustedQuantity": "1",
"orderTotal": "551.000000",
"shipVia": "FedEx Ground (With Return Label)",
"locationAddress": "123 Sample Ave\r\nSample City, NY 12983\r\nUS",
"customerName": "Sample Customer",
"orderType": "SO",
"lineNbr": 4
}
]GET /api/orders/:orderId - Line items for a single order
Line item detail for a single order. :orderId is the order type + number combined, e.g. SO012345.
Request
curl -H "Authorization: Bearer $KEY" \ "https://portal.e2cc.com/api/orders/SO012345"
Sample response
[
{
"orderNbr": "057142",
"status": "Credit Hold",
"schedShipment": "2026-06-26T00:00:00",
"locationName": "Sample Location (NY)",
"inventoryId": "SAMPLE-SKU-001",
"lineDescription": "Sample Tablet, 128GB (Unlocked)",
"orderQty": "1.000000",
"unitPrice": "540.220000",
"customerName": "Sample Customer",
"orderType": "SO",
"lineNbr": 1
}
]GET /api/orders/shipments/:orderId - Shipment numbers for a given order
Returns the shipment numbers tied to a given order.
Request
curl -H "Authorization: Bearer $KEY" \ "https://portal.e2cc.com/api/orders/shipments/SO012345"
Sample response
[
{ "shipmentNbr": "SH009876" },
{ "shipmentNbr": "SH009901" }
]GET /api/shipments - List all shipments
List all your shipments. Accepts standard query parameters.
Note: locationAddress can contain HTML entities (e.g.  ) and \r\n line breaks - decode and normalize before display.
Request
curl -H "Authorization: Bearer $KEY" \ "https://portal.e2cc.com/api/shipments?pageSize=50&Status=Confirmed"
Sample response
[
{
"orderNbr": "001915",
"shipmentDate": "2025-11-20T00:00:00",
"shipmentNbr": "SH043926",
"locationId": "Sample School District",
"shipVia": "FEDEXGRO",
"status": "Completed",
"customerName": "Sample Customer",
"locationAddress": "123 Sample St\r\nTipp City, OH 45371\r\nUS",
"freightPrice": "0.0000",
"orderType": "RM"
}
]GET /api/shipments/:shipmentNbr - Line items for a single shipment
Line item and ship-to address detail for a single shipment. Also accepts standard query parameters.
Request
curl -H "Authorization: Bearer $KEY" \ "https://portal.e2cc.com/api/shipments/SH009876"
Sample response
[
{
"shipmentNbr": "SH043926",
"inventoryId": "SAMPLE-SKU-001",
"shipmentDate": "2025-11-20T00:00:00",
"customerName": "Sample Customer",
"shippedQty": "1.000000",
"description": "Sample product description",
"status": "Completed",
"shipmentType": "I",
"lineNbr": 1,
"orderType": "RM",
"orderNbr": "001915"
}
]GET /api/invoices - List all invoices
List all your invoices. Accepts standard query parameters.
Note: Numeric and quantity fields come back as strings ("1983.8000", "4.000000"). Some text fields are space-padded - trim on your side.
Request
curl -H "Authorization: Bearer $KEY" \ "https://portal.e2cc.com/api/invoices?pageSize=50&Status=Open"
Sample response
[
{
"amount": "1983.8000",
"balance": "1983.8000",
"createdDateTime": "2025-12-09T00:30:26.617",
"date": "2025-12-08T00:00:00",
"dueDate": "2026-02-06T00:00:00",
"status": "Open",
"detailInventoryId": "SAMPLE SKU",
"detailQty": "4.000000",
"customerName": "Sample Customer",
"type": "Invoice",
"referenceNbr": "AR-036248"
}
]GET /api/invoices/:refNbr - Line items for a single invoice
Line item detail for a single invoice by reference number, e.g. AR-036248.
Request
curl -H "Authorization: Bearer $KEY" \ "https://portal.e2cc.com/api/invoices/AR-036248"
Sample response
[
{
"type": "Invoice",
"referenceNbr": "AR-035311",
"amount": "5329.3300",
"balance": "5329.3300",
"date": "2025-11-17T00:00:00",
"dueDate": "2026-01-16T00:00:00",
"status": "Open",
"terms": "NET 60",
"detailInventoryId": "SAMPLE-SKU-001",
"detailQty": "8.000000",
"detailUnitPrice": "0.000000",
"detailDescription": "Sample Aluminum Asset Tag",
"payLink": "https://pay.example.com/EBizSecureForm.aspx?pid=..."
}
]GET /api/inventories - Inventory summary
Your inventory summary, de-duplicated by inventory ID. Accepts standard query parameters.
Request
curl -H "Authorization: Bearer $KEY" \ "https://portal.e2cc.com/api/inventories?pageSize=100&fields=inventoryId,description,qtyAvailable"
Sample response
[
{
"inventoryId": "30504",
"warehouse": "SAMPLEWH",
"description": "Sample 22-18 1/4 Inch Ring Terminal",
"qtyAvailable": "6622.000000",
"subitem": "0"
}
]GET /api/credits - Credit limit and standing
Returns your customer credit limit and standing. No query parameters accepted.
Request
curl -H "Authorization: Bearer $KEY" \ "https://portal.e2cc.com/api/credits"
Sample response
[
{
"customerId": "C99999",
"creditLimit": "250000.0000",
"remainingCreditLimit": "-1313621.4000",
"customerName": "Sample Customer",
"arBalancesSharedCreditCurrentBal": "433012.7200",
"arBalancesSharedCreditTotalOpenOrders": "15520.6800"
}
]GET /api/rmas - RMA / return records
Your RMA / return records. No query parameters accepted - returns your full set with no filtering, paging, or field selection.
Note: RMAs come from a separate data store, so the standard query parameters do not apply here.
Request
curl -H "Authorization: Bearer $KEY" \ "https://portal.e2cc.com/api/rmas"
Sample response
[
{
"id": 49579,
"Company": "Sample Customer",
"Date_Opened": "2026-01-12T15:12:01.000Z",
"Date_Closed": "2026-02-10T17:11:06.000Z",
"Subject": "#49579 SO 049718 Sample Return",
"Ticket_Status": "CLOSED",
"RMA_Resolution": "Complete - A Stock"
}
]POST /api/access-key - Create a new access key
Create a new access key.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
permissions | string[] | No | Permission labels |
expiresInDays | integer | No | Sets stored expiresAt date (not enforced - see Authentication) |
label | string | No | A friendly label |
Important: The response includes a key field with the raw secret. This is returned once only - store it immediately, it cannot be retrieved again.
Request
curl -X POST -H "Content-Type: application/json" \
-d '{ "label": "nightly-sync", "expiresInDays": 365 }' \
"https://portal.e2cc.com/api/access-key"Sample response - 201 Created
{
"key": "Zsl56AqsL6...raw_key_value",
"accessKey": {
"partialKey": "Zsl56AqsL6",
"label": "nightly-sync",
"owner": "user@example.com",
"permissions": [],
"status": "active",
"expiresAt": "2027-06-24T00:00:00.000Z"
}
}GET /api/access-key - List access keys
List your access keys. Results are wrapped in a pagination envelope: { "data": [...], "pagination": { ... } }
Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
page | integer | 1 | Page number |
pageSize | integer | 20 | Rows per page |
search | string | - | Match against label or owner |
status | string | - | active or revoked |
PATCH /api/access-key/:key - Rotate a key
Issues a new secret while keeping the record. Invalidates the old secret immediately. Body accepts permissions, expiresInDays, and label (all optional).
DELETE /api/access-key/:key - Revoke or delete a key
| Query parameter | Effect |
|---|---|
action=delete or hard=true | Permanently deletes the key |
| (none) | Revokes the key - keeps the record, sets status to revoked |