Overview
Base URL:
https://ace.entercloud.com.mx/api
Protected endpoints require a JWT generated by POST /api/login. Customer and warehouse are
resolved from the authenticated user, so API clients should not send a customer field in receiving
request, pull or inventory requests.
The token expires after 1 hour. Generate a new token before calling protected endpoints if a request
returns Token expired or Invalid token.
Authentication
POST
https://ace.entercloud.com.mx/api/login
Public
Request body
{
"login": "customer_user",
"pswd": "password"
}
Success response
{
"success": true,
"token": "eyJhbGciOiJIUzI1NiIs...",
"userId": 123,
"name": "Customer User",
"expiresAt": "2026-06-17 15:30:00"
}
Protected request headers
Authorization: Bearer <token>
Content-Type: application/json
Create Receiving Request
POST
https://ace.entercloud.com.mx/api/receivings
JWT required
Creates the initial receiving request in ACE with its packing list detail lines. This request represents
inbound goods expected at the warehouse; it does not mark the material as physically received.
Request body
{
"arrival_date": "2026-06-17",
"trailer": "TRAILER-001",
"license_plates": "ABC123",
"bol": "BOL-001",
"seal": "SEAL-001",
"mx_pediment": "PED-001",
"transportation_mode": "Truck",
"gross_weight": 1200.5,
"ftz": "FTZ-001",
"packing_list": [
{
"part_number": "PART-001",
"bundle_type": "BOX",
"description": "Sample part",
"quantity": 10,
"serial": "PALLET-001",
"customer_reference": "REF-001",
"invoice": "INV-001",
"comments": "Optional comment"
}
],
"documents": [
"BASE64_PDF_OR_FILE_CONTENT"
]
}
Fields
| Required |
Optional |
Notes |
arrival_date, trailer, license_plates, bol,
seal, mx_pediment, transportation_mode,
packing_list
|
documents, gross_weight, ftz |
packing_list must contain at least one item. Each item requires
part_number and numeric quantity.
|
Success response
{
"success": true,
"receiving_id": 456
}
Update Receiving Request
PUT
https://ace.entercloud.com.mx/api/receivings/{receiving_id}
JWT required
Updates the arrival date and/or replaces the packing list for an existing receiving request owned by the
authenticated customer.
The same endpoint also accepts PATCH and POST.
Request body
{
"arrival_date": "2026-06-18",
"packing_list": [
{
"entry_detail_id": 1001,
"part_number": "PART-001",
"bundle_type": "BOX",
"description": "Updated sample part",
"quantity": 12,
"serial": "PALLET-001",
"customer_reference": "REF-001",
"invoice": "INV-001",
"comments": "Updated comment"
},
{
"part_number": "PART-002",
"bundle_type": "BOX",
"description": "New packing list item",
"quantity": 4,
"serial": "PALLET-002",
"customer_reference": "REF-001",
"invoice": "INV-002"
}
]
}
Rules
| Field |
Behavior |
arrival_date |
Optional. Updates entry.date. Must be a valid date. |
packing_list |
Optional. When provided, it replaces the current packing list. Each item requires
part_number and numeric quantity.
|
entry_detail_id or id |
Optional. Updates that exact entry_details row when it belongs to the receiving. If
omitted, ACE tries to match by serial. |
| Removed rows |
Rows omitted from the replacement list are removed only when they have not been received or
shipped. |
Success response
{
"success": true,
"receiving_id": 456,
"updated": {
"arrival_date": true,
"packing_list": true
},
"packing_list_items": 2
}
Create Pull Request
POST
https://ace.entercloud.com.mx/api/picklists
JWT required
Creates the initial pull request in ACE with its pick list detail lines. The API endpoint is named
picklists, but the business operation is a pull request.
Request body
{
"customer_reference": "REF-001",
"consignee": "Consignee Name",
"carrier": "Carrier Name",
"track_guide": "TRACK-001",
"date_required": "2026-06-20",
"gross_weight": 950.75,
"pick_list": [
{
"part_number": "PART-001",
"bundle_type": "BOX",
"quantity": 5,
"serial": "PALLET-001"
}
],
"documents": [
"BASE64_PDF_OR_FILE_CONTENT"
]
}
Fields
| Required |
Optional |
Notes |
customer_reference, consignee, carrier,
track_guide, pick_list
|
documents, gross_weight, date_required |
pick_list must contain at least one item. Each item requires
part_number and numeric quantity. date_required is the
expected date to prepare the order and is applied to every pick list line.
|
Success response
{
"success": true,
"picklist_id": 789
}
Update Pull Request
PUT
https://ace.entercloud.com.mx/api/picklists/{picklist_id}
JWT required
Updates the expected preparation date and/or replaces the pick list for an existing pull request owned by
the authenticated customer. The same endpoint also accepts PATCH and POST.
Request body
{
"date_required": "2026-06-21",
"pick_list": [
{
"part_number": "PART-001",
"bundle_type": "BOX",
"quantity": 6,
"serial": "PALLET-001",
"customer_reference": "REF-001"
},
{
"part_number": "PART-002",
"bundle_type": "BOX",
"quantity": 3,
"serial": "PALLET-002",
"customer_reference": "REF-001"
}
]
}
Rules
| Field |
Behavior |
date_required |
Optional. Updates the expected date to prepare the order on all pick list lines. |
pick_list |
Optional. When provided, it replaces the current pick list. Each item requires
part_number and numeric quantity.
|
picklist_detail_id or id |
Optional. Updates that exact picklist_details row when it belongs to the pull
request. If omitted, ACE tries to match by serial. |
| Removed rows |
Rows omitted from the replacement list are removed only when they have not been picked or
shipped. |
Success response
{
"success": true,
"picklist_id": 789,
"updated": {
"date_required": true,
"pick_list": true
},
"pick_list_items": 2
}
Inventory
POST
https://ace.entercloud.com.mx/api/inventory
JWT required
Returns active inventory for the customer tied to the token. All filters are optional.
Request body
{
"is_received": "Y",
"status": ["In Transit", "Received"],
"group_by": "part_number",
"receiving_id": 456,
"bill_of_lading": "BOL-001",
"customer_reference": "REF-001"
}
Allowed filters
| Field |
Values |
is_received |
Y or N |
status |
In Transit, Received, Ready to scan, Picked,
Audited, Shipped. Can be a string or an array.
|
group_by |
serial, parts, or part_number. Default is
serial.
|
receiving_id, bill_of_lading, customer_reference |
Exact match filters. |
Response grouped by serial
{
"total_items": 1,
"inventory": {
"PALLET-001": {
"part_number": "PART-001",
"bundle_type": "BOX",
"description": "Sample part",
"quantity": "10",
"status": "Received",
"received_date": "2026-06-17 10:25:00",
"reference": "REF-001",
"days_in_stock": "0",
"warehouse": "Warehouse A",
"is_bonded": "No",
"inbond": ""
}
}
}
Response grouped by part_number
{
"total_items": 1,
"inventory": {
"PART-001": {
"count": 2,
"items": [
{
"serial": "PALLET-001",
"part_number": "PART-001",
"quantity": "10",
"status": "Received"
},
{
"serial": "PALLET-002",
"part_number": "PART-001",
"quantity": "4",
"status": "Received"
}
]
}
}
}
Errors
API errors return JSON with status and message.
{
"status": "error",
"message": "Invalid token"
}
| HTTP status |
Typical reason |
400 |
Missing required field, invalid field, unexpected field, or invalid group_by. |
401 |
Missing, malformed, expired, or invalid token. |
404 |
No customer or warehouse assigned to the authenticated user. |
409 |
Duplicate receiving BOL or duplicate picklist customer reference. |
500 |
Server-side configuration or persistence error. |