ACE API Documentation

Public reference for API login, receiving requests, pulls and inventory.

Back to login

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.