Developers

A real API. For real integrations.

Atlas exposes a public REST API for ERP sync, BI integration, and factory MES connectivity. Bearer auth, JSON over HTTPS, real responses. Try it live with the demo key below.

Quickstart

Authenticate & make your first call.

1 · Use the demo key

Public read access for the demo dataset. For your own tenant, contact us.

# Demo API key (read-only, shared)
atlas_demo_KuhlerExampleKey_2026

2 · Make a request

Authorization header is required on every protected endpoint.

curl https://kuhler.com/api/v1/orders \
  -H "Authorization: Bearer atlas_demo_KuhlerExampleKey_2026"

Both kuhler.com and demo.kuhler.comserve the same API. The data is shared (it’s the demo dataset).

Endpoints

REST endpoints.

GET/api/v1/ordersbearer auth

List orders

Returns all orders visible to the API key. Useful for ERP sync.

Example response
{
  "data": [
    {
      "id": "ord-001",
      "code": "PO-2417",
      "brand_slug": "summit",
      "ship_by": "2026-06-10",
      "total_units": 2400,
      "status": "in_production",
      "created_at": "2026-04-12",
      "line_item_count": 4,
      "batch_ids": ["batch-001"]
    }
  ],
  "meta": { "count": 5, "total": 5 }
}
GET/api/v1/orders/{id}bearer auth

Get order detail

Returns the order plus its line items and production batches with milestones.

Example response
{
  "data": {
    "id": "ord-001",
    "code": "PO-2417",
    "brand_slug": "summit",
    "ship_by": "2026-06-10",
    "total_units": 2400,
    "status": "in_production",
    "line_items": [...],
    "batches": [
      {
        "id": "batch-001",
        "code": "B-2417-A",
        "factory": "Plant A · China",
        "milestones": [
          { "id": "m1", "label": "Materials sourced", "state": "done", "date": "2026-04-22" }
        ]
      }
    ]
  }
}
POST/api/v1/ordersbearer auth

Create order (intake)

Accepts a structured PO from an external system. Validates and accepts; in production, inserts into the orders table and triggers webhooks.

Example response
{
  "data": {
    "id": "ord-q3k7m2",
    "code": "PO-9999",
    "brand_slug": "summit",
    "ship_by": "2026-09-01",
    "total_units": 1200,
    "status": "received",
    "line_items_received": 4,
    "created_at": "2026-05-06T18:42:00.000Z"
  }
}
GET/api/v1/batchesbearer auth

List batches

Returns all production batches. Useful for cross-factory KPI dashboards.

Example response
{
  "data": [
    {
      "id": "batch-001",
      "code": "B-2417-A",
      "factory": "Plant A · China",
      "units": 2400,
      "order_id": "ord-001",
      "milestone_count": 5,
      "milestones": [...]
    }
  ],
  "meta": { "count": 4 }
}
GET/api/v1/customersbearer auth

List customers

Returns all customer brands the API key can access, with portal URLs.

Example response
{
  "data": [
    {
      "slug": "summit",
      "name": "Summit Athletics",
      "primary_color": "#14532D",
      "contact": "Mira Chen",
      "contact_email": "mira@summitathletics.com",
      "portal_url": "https://demo.kuhler.com/portal/summit"
    }
  ],
  "meta": { "count": 2 }
}

Webhooks

Event hooks in and out.

Inbound webhooks let your factory MES (or external systems) push events into Atlas. Outbound webhooks deliver Atlas events to your endpoints. Both use the same Bearer auth.

POST/api/webhooks/milestone-completedbearer auth

Receive milestone completion event

Inbound webhook your factory MES (or your team) calls when a milestone is marked complete. Atlas advances the milestone, posts the auto-update to the order conversation, and notifies the customer portal.

Example response
{
  "data": {
    "received": true,
    "batch_id": "batch-001",
    "milestone_id": "m3",
    "completed_at": "2026-05-08T14:30:00Z",
    "completed_by": "lin.wei@plantA.local"
  }
}

Errors

Standard HTTP status codes.

StatusMeaningBody
200OKdata + meta
201Createddata
400Bad requestinvalid JSON or shape
401Unauthorizedmissing / invalid Bearer token
404Not foundresource doesn't exist
422Validation failederror.details lists field errors
429Rate limitedretry after Retry-After seconds
500Server errorwe'll get paged

Ready to wire your ERP?

We have prebuilt connectors for NetSuite and Microsoft Dynamics; for SAP and others we use the generic API. Onboarding includes a custom integration session with our engineering team.