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, RMAs, and asset info.
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,Warehouse"
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"
}
]GET /api/asset-info - Asset records tied to your orders
Asset records tied to your orders, such as the employee or vehicle assigned, phone number, SIM, ESN, carrier account, and serial number. With no parameters it returns every asset for your account. To limit it to one order, pass both OrderType and OrderNbr.
Note: Several fields hold two kinds of data depending on the asset. For a phone or tablet, employeeFirstNameYearMakeModel is the employee's first name; for a vehicle it is the year, make, and model. The same applies to employeeLastNameEquipment, employeeNumberVehicleIdentifier, and phoneNumberServiceId. Blank values may come back empty or missing.
Request
curl -H "Authorization: Bearer $KEY" \ "https://portal.e2cc.com/api/asset-info?OrderType=SO&OrderNbr=012345"
Sample response
[
{
"orderType": "SO",
"orderNbr": "012345",
"customerOrderNbr": "PO-7788",
"employeeFirstNameYearMakeModel": "Jane",
"employeeLastNameEquipment": "Sample",
"employeeNumberVehicleIdentifier": "143939",
"phoneNumberServiceId": "555-010-0100",
"esnSecondaryId": "359483088299875",
"sim": "89148000004050012345",
"carrierAccountNumber": "786080835-00001",
"alternateInfo": "",
"serialNumber": "SN0000001",
"customerName": "Sample Customer",
"createdDateTime": "2026-06-24T10:15:00"
}
]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 (not enforced - see Authentication) |
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 (not enforced - see Authentication), 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 |