Skip to content
GlyphTechnologies

API reference

Jobs

List, create, retrieve, and accept jobs.

GET/api/intake/jobs

List this key's jobs, newest first, without operations and files. Query: limit, 1 to 100, default 50.

200:

{ "jobs": [ { "id": "2c5c95fc-…", "status": "invoiced", "next": "pay", "name": "Bracket run, 50 pcs", "operations": [], "files": [], … } ] }
POST/api/intake/jobs

Create a job and compute its estimate. Needs a key tied to a customer. Supports Idempotency-Key.

Body
nameRequired. 200 characters.
operationsRequired. 1 to 50 of { op_ref, name, machine_options, duration_hr, predecessors? }.
materialOptional. 200 characters.
material_cost_centsOptional. Non-negative integer.
quantityOptional. Positive integer.
due_atOptional. ISO 8601.
notesOptional. 4 000 characters.
external_referenceOptional. 200 characters.

201, the Job object plus two extra fields:

{
  "id": "2c5c95fc-0ec3-4a30-9d75-17d6e012c645",
  "status": "estimated",
  "next": "accept",
  "estimate": { "machine_cents": 21000, "material_cents": 12000, "setup_cents": 5000, "total_cents": 38000 },
  "operations": [ { "op_ref": "OP-10", "name": "Rough mill", "machine_options": "MILL", "duration_hr": 2, "predecessors": "", "status": "pending" } ],
  "files": [],
  "estimate_lines": [ { "op_ref": "OP-10", "machine": "MILL", "hours": 2, "cents": 18000 } ],
  "auto_quote_limit_cents": 50000
}

200, replay: the Job, with its operations and files, plus "replayed": true. 403:

{ "error": "This API key is not linked to a customer, so it cannot create jobs. Ask Glyph to link it in Hiero." }

400, 401, 409, 503: see Errors.

GET/api/intake/jobs/{id}

Retrieve a job with its operations and files.

200: the Job object below. 404 if it belongs to another key.

POST/api/intake/jobs/{id}/accept

Accept the estimate or the quote.

201, invoiced:

{ "id": "2c5c95fc-…", "status": "invoiced", "next": "pay", "quoted_total_cents": 38000, "invoice": { "url": "https://invoice.stripe.com/i/…", "invoiced_at": "2026-10-12T14:06:10.002+00:00", "paid_at": null }, "accepted": true }

202, above the auto-quote limit:

{ "id": "2c5c95fc-…", "status": "estimated", "next": "awaiting_staff_quote", "quote_requested_at": "2026-10-12T14:06:10.002+00:00", "accepted": true, "awaiting": "staff_quote" }

200: already invoiced or paid; the Job with "accepted": true. 202 again if the job is still waiting for a staff quote. 409: wrong state. See Accept and pay.

The Job object

idUUID.
statusSee Statuses and next steps.
nextaccept, awaiting_staff_quote, pay, awaiting_release, scheduled, in_production, awaiting_shipment, complete, or the status itself.
name, material, quantity, due_at, notesAs submitted.
external_referenceAs submitted.
currencyusd.
estimate{ machine_cents, material_cents, setup_cents, total_cents } or null.
quoted_total_centsThe confirmed price, or null.
quote_requested_atSet when you accepted above your limit.
invoice{ url, invoiced_at, paid_at } or null.
schedule{ start, end } or null.
operations[{ op_ref, name, machine_options, duration_hr, predecessors, status, scheduled_machine, scheduled_start, scheduled_end }]
files[{ id, filename, size_bytes, content_type, uploaded_at }]. content_type is what your client sent with the upload.
created_at, updated_atISO 8601.