Getting started

Where the API is, the key, and who it acts as.

GET /api/v1 Where the API is

Answers without a key: the version, where the reference is and how to authenticate. A good first call when setting a client up.

No key needed

Answers 200

A Index. See Index.

Example call

curl \
  "https://manufactiq.co.uk/api/v1"
GET /api/v1/openapi.json The OpenAPI document

Every route, parameter and schema as an OpenAPI 3.0 document, for Postman, Insomnia, a code generator or a browser-based explorer.

No key needed

Answers 200

A OpenAPI. See OpenAPI.

Example call

curl \
  "https://manufactiq.co.uk/api/v1/openapi.json"
GET /api/v1/me Who this key is

The key, the person it acts as, the company and the rate limit. The call to make to check a key works.

Any key

Answers 200

A Me. See Me.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/me"
GET /api/v1/keys The company's API keys

Every key the company has made, live ones first, without the keys themselves - those were shown once. Administrators only; keys are made and revoked under Administration > API keys.

Any keyAdministrator

Answers 200

A list of ApiKey records under items. See ApiKey.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/keys"

Companies

Customers, prospects, contractors, architects and suppliers, and everything filed against them.

GET /api/v1/companies List companies

The company list, with the same filters as the Companies tab.

Any keyCompanies tab

Query

NameTypeWhat it is
qstringSearch the name, town, postcode, email and phone.
typestringOne company type. One of: prospect, customer, main_contractor, architect, supplier, other.
ownerintegerAn owner's user id.
archivedbooleantrue to include archived companies.
sortstringname (the default), name_desc, type, recent or created. One of: name, name_desc, type, recent, created.
x_<field>stringFilter on one of your own fields: x_<field>=value, or x_<field>.from and x_<field>.to for a number, money or date field.
pageintegerWhich page, counting from 1. Default 1.
per_pageintegerRows per page, 5 to 200. Default 25.

Answers 200

A page of Company records under items, with paging. See Company.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/companies"
POST /api/v1/companies Add a company

The same checks as the form, and the same duplicate check: a company that looks like one you already have is refused with 409 unless you say to add it anyway.

Write keyCompanies tab

Body

FieldTypeWhat it is
name requiredstringThe company's name.
company_typestringprospect (the default), customer, main_contractor, architect, supplier or other. One of: prospect, customer, main_contractor, architect, supplier, other.
sectorstringWhat they do.
phonestringTelephone.
emailstringGeneral address.
websitestringWebsite.
address_line1stringAddress, first line.
address_line2stringAddress, second line.
citystringTown or city.
countystringCounty.
postcodestringPostcode.
countrystringCountry; United Kingdom if left out.
currencystringThe currency they are usually quoted in (ISO code), or null for yours.
notesstringFree notes, up to 10,000 characters.
owner_user_idintegerThe account owner's user id (see GET /users); the key's own user if left out of a new company.
fieldsobjectThe company's extra fields, by name - see GET /fields.
confirm_duplicatebooleantrue to save even though a similar company exists; without it a likely duplicate is refused with 409 and the matches.

Example body

{
  "name": "Kestrel Archives Ltd",
  "company_type": "customer",
  "sector": "Records storage",
  "phone": "0118 902 4411",
  "email": "hello@kestrel.example",
  "website": "https://kestrel.example",
  "address_line1": "Unit 7, Brunel Way",
  "city": "Reading",
  "county": "Berkshire",
  "postcode": "RG1 8QT",
  "fields": {
    "customer_number": "C-0042"
  }
}

Answers 201

A Company. See Company.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Kestrel Archives Ltd", "company_type": "customer", "sector": "Records storage", "phone": "0118 902 4411", "email": "hello@kestrel.example", "website": "https://kestrel.example", "address_line1": "Unit 7, Brunel Way", "city": "Reading", "county": "Berkshire", "postcode": "RG1 8QT", "fields": {"customer_number": "C-0042"}}' \
  "https://manufactiq.co.uk/api/v1/companies"
GET /api/v1/companies/{company_id} One company

The company, with the headline figures its page shows under summary: open enquiries and their value, enquiries won, quotes, open tasks.

Any keyCompanies tab

Answers 200

A Company. See Company.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/companies/12"
PATCH /api/v1/companies/{company_id} Change a company

Send only the fields to change; the rest keep their values.

Write keyCompanies tab

Body

FieldTypeWhat it is
name requiredstringThe company's name.
company_typestringprospect (the default), customer, main_contractor, architect, supplier or other. One of: prospect, customer, main_contractor, architect, supplier, other.
sectorstringWhat they do.
phonestringTelephone.
emailstringGeneral address.
websitestringWebsite.
address_line1stringAddress, first line.
address_line2stringAddress, second line.
citystringTown or city.
countystringCounty.
postcodestringPostcode.
countrystringCountry; United Kingdom if left out.
currencystringThe currency they are usually quoted in (ISO code), or null for yours.
notesstringFree notes, up to 10,000 characters.
owner_user_idintegerThe account owner's user id (see GET /users); the key's own user if left out of a new company.
fieldsobjectThe company's extra fields, by name - see GET /fields.
confirm_duplicatebooleantrue to save even though a similar company exists; without it a likely duplicate is refused with 409 and the matches.

Example body

{
  "name": "Kestrel Archives Ltd",
  "company_type": "customer",
  "sector": "Records storage",
  "phone": "0118 902 4411",
  "email": "hello@kestrel.example",
  "website": "https://kestrel.example",
  "address_line1": "Unit 7, Brunel Way",
  "city": "Reading",
  "county": "Berkshire",
  "postcode": "RG1 8QT",
  "fields": {
    "customer_number": "C-0042"
  }
}

Answers 200

A Company. See Company.

Example call

curl \
  -X PATCH \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Kestrel Archives Ltd", "company_type": "customer", "sector": "Records storage", "phone": "0118 902 4411", "email": "hello@kestrel.example", "website": "https://kestrel.example", "address_line1": "Unit 7, Brunel Way", "city": "Reading", "county": "Berkshire", "postcode": "RG1 8QT", "fields": {"customer_number": "C-0042"}}' \
  "https://manufactiq.co.uk/api/v1/companies/12"
POST /api/v1/companies/{company_id}/archive Archive a company

The ordinary way to dispose of one: it keeps its history and leaves the lists.

Write keyCompanies tab

Answers 200

A Company. See Company.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/companies/12/archive"
POST /api/v1/companies/{company_id}/restore Restore an archived company
Write keyCompanies tab

Answers 200

A Company. See Company.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/companies/12/restore"
DELETE /api/v1/companies/{company_id} Delete a company permanently

Administrators only, and refused with 409 while enquiries, quotations or records on your own tabs still point at it. Contacts are detached; activities, tasks and documents go with it. Archive instead to keep the history.

Write keyAdministratorCompanies tab

Answers 200

A Deleted. See Deleted.

Example call

curl \
  -X DELETE \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/companies/12"
GET /api/v1/companies/{company_id}/contacts Its contacts

What the company's page shows under its contacts. Needs the contacts tab in the key's role.

Any keyCompanies tab

Answers 200

A list of Contact records under items. See Contact.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/companies/12/contacts"
GET /api/v1/companies/{company_id}/enquiries Its enquiries

What the company's page shows under its enquiries. Needs the enquiries tab in the key's role.

Any keyCompanies tab

Answers 200

A list of Enquiry records under items. See Enquiry.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/companies/12/enquiries"
GET /api/v1/companies/{company_id}/quotes Its quotations

What the company's page shows under its quotations. Needs the quotes tab in the key's role.

Any keyCompanies tab

Answers 200

A list of Quote records under items. See Quote.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/companies/12/quotes"
GET /api/v1/companies/{company_id}/orders Its orders

What the company's page shows under its orders. Needs the orders tab in the key's role.

Any keyCompanies tab

Answers 200

A list of Order records under items. See Order.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/companies/12/orders"
GET /api/v1/companies/{company_id}/invoices Its invoices

What the company's page shows under its invoices. Needs the invoices tab in the key's role.

Any keyCompanies tab

Answers 200

A list of Invoice records under items. See Invoice.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/companies/12/invoices"
GET /api/v1/companies/{company_id}/tasks Its open tasks

What the company's page shows under its open tasks. Needs the tasks tab in the key's role.

Any keyCompanies tab

Answers 200

A list of Task records under items. See Task.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/companies/12/tasks"
GET /api/v1/companies/{company_id}/activities Its activity

What the company's page shows under its activity. Needs the activities tab in the key's role.

Any keyCompanies tab

Answers 200

A list of Activity records under items. See Activity.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/companies/12/activities"
GET /api/v1/companies/{company_id}/documents Its documents

What the company's page shows under its documents. Needs the documents tab in the key's role.

Any keyCompanies tab

Answers 200

A list of Document records under items. See Document.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/companies/12/documents"
GET /api/v1/companies/{company_id}/emails Its captured emails

What the company's page shows under its captured emails.

Any keyCompanies tab

Answers 200

A list of Email records under items. See Email.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/companies/12/emails"
GET /api/v1/companies/{company_id}/records Records on your own tabs linked to it

Live records from the company's own tabs - an NCR raised against them, a survey done for them - with the tab each is on.

Any keyCompanies tab

Answers 200

A list of LinkedRecord records under items. See LinkedRecord.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/companies/12/records"

Contacts

The people at those companies.

GET /api/v1/contacts List contacts
Any keyContacts tab

Query

NameTypeWhat it is
qstringSearch the name, email, phone and company.
companyintegerA company id.
archivedbooleantrue to include archived contacts.
sortstringname (the default), name_desc, company or recent. One of: name, name_desc, company, recent.
x_<field>stringFilter on one of your own fields, as for companies.
pageintegerWhich page, counting from 1. Default 1.
per_pageintegerRows per page, 5 to 200. Default 25.

Answers 200

A page of Contact records under items, with paging. See Contact.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/contacts"
POST /api/v1/contacts Add a contact

A contact that looks like one you already have is refused with 409 and the matches, unless confirm_duplicate is true.

Write keyContacts tab

Body

FieldTypeWhat it is
company_idintegerThe company they are at (see GET /companies).
first_name requiredstringFirst name.
last_name requiredstringSurname.
job_titlestringJob title.
emailstringEmail address.
phonestringTelephone.
mobilestringMobile.
is_primarybooleantrue to make them the main contact at their company; the previous main contact stops being it.
notesstringFree notes, up to 10,000 characters.
fieldsobjectThe contact's extra fields, by name - see GET /fields.
confirm_duplicatebooleantrue to save even though a similar contact exists.

Example body

{
  "company_id": 12,
  "first_name": "Priya",
  "last_name": "Shah",
  "job_title": "Project architect",
  "email": "priya.shah@bramley.example",
  "is_primary": true
}

Answers 201

A Contact. See Contact.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"company_id": 12, "first_name": "Priya", "last_name": "Shah", "job_title": "Project architect", "email": "priya.shah@bramley.example", "is_primary": true}' \
  "https://manufactiq.co.uk/api/v1/contacts"
GET /api/v1/contacts/{contact_id} One contact
Any keyContacts tab

Answers 200

A Contact. See Contact.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/contacts/34"
PATCH /api/v1/contacts/{contact_id} Change a contact

Send only the fields to change.

Write keyContacts tab

Body

FieldTypeWhat it is
company_idintegerThe company they are at (see GET /companies).
first_name requiredstringFirst name.
last_name requiredstringSurname.
job_titlestringJob title.
emailstringEmail address.
phonestringTelephone.
mobilestringMobile.
is_primarybooleantrue to make them the main contact at their company; the previous main contact stops being it.
notesstringFree notes, up to 10,000 characters.
fieldsobjectThe contact's extra fields, by name - see GET /fields.
confirm_duplicatebooleantrue to save even though a similar contact exists.

Example body

{
  "company_id": 12,
  "first_name": "Priya",
  "last_name": "Shah",
  "job_title": "Project architect",
  "email": "priya.shah@bramley.example",
  "is_primary": true
}

Answers 200

A Contact. See Contact.

Example call

curl \
  -X PATCH \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"company_id": 12, "first_name": "Priya", "last_name": "Shah", "job_title": "Project architect", "email": "priya.shah@bramley.example", "is_primary": true}' \
  "https://manufactiq.co.uk/api/v1/contacts/34"
POST /api/v1/contacts/{contact_id}/archive Archive a contact
Write keyContacts tab

Answers 200

A Contact. See Contact.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/contacts/34/archive"
POST /api/v1/contacts/{contact_id}/restore Restore an archived contact
Write keyContacts tab

Answers 200

A Contact. See Contact.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/contacts/34/restore"
DELETE /api/v1/contacts/{contact_id} Delete a contact permanently

Administrators only. Their documents go with them.

Write keyAdministratorContacts tab

Answers 200

A Deleted. See Deleted.

Example call

curl \
  -X DELETE \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/contacts/34"

Enquiries

Every opportunity from the first call to won or lost, its lines and its stage, and the website's queue.

GET /api/v1/enquiries List enquiries
Any keyEnquiries tab

Query

NameTypeWhat it is
qstringSearch the reference, title, company, description and site postcode.
stageintegerA stage id.
pipelineintegerA pipeline id.
outcomestringopen, won or lost. One of: open, won, lost.
ownerintegerAn owner's user id.
minebooleantrue for the key's own user's enquiries.
companyintegerA company id.
categorystringA product category.
archivedbooleantrue to include archived enquiries.
sortstringrecent (the default), created, reference, value, value_asc, close, company or stage. One of: recent, created, reference, value, value_asc, close, company, stage.
x_<field>stringFilter on one of your own fields.
pageintegerWhich page, counting from 1. Default 1.
per_pageintegerRows per page, 5 to 200. Default 25.

Answers 200

A page of Enquiry records under items, with paging. See Enquiry.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/enquiries"
POST /api/v1/enquiries Raise an enquiry

Takes the next reference in the company's format. The owner is emailed and Microsoft Teams told, as from the form.

Write keyEnquiries tab

Body

FieldTypeWhat it is
title requiredstringWhat it is for, in a line.
company_id requiredintegerThe customer (see GET /companies).
contact_idintegerThe contact at that company.
pipeline_idintegerWhich enquiry pipeline it starts on; the default one if left out. On a PATCH, move it with POST .../stage instead.
stage_idintegerThe stage; the pipeline's first open stage if left out.
source_idintegerWhere it came from (see GET /sources).
product_categorystringWhat it is for: one of GET /product-categories; the company's default if left out.
estimated_valuemoneyWhat it is worth, in your currency.
probabilityintegerThe odds, 0 to 100; the stage's own figure if left out.
expected_close_datedateWhen a decision is expected.
site_postcodestringWhere the work would be.
descriptionstringThe long description, up to 20,000 characters.
owner_user_idintegerWhose it is; the key's own user if left out. A new owner is emailed.
linesarrayWhat is being asked for, as a list of lines (see PUT .../lines). On a POST only; change them afterwards with PUT .../lines.
fieldsobjectThe enquiry's extra fields, by name.

Example body

{
  "title": "Archive racking, 400 linear metres",
  "company_id": 12,
  "estimated_value": "86500.00",
  "probability": 35,
  "expected_close_date": "2026-11-30",
  "site_postcode": "RG1 8QT"
}

Answers 201

A Enquiry. See Enquiry.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title": "Archive racking, 400 linear metres", "company_id": 12, "estimated_value": "86500.00", "probability": 35, "expected_close_date": "2026-11-30", "site_postcode": "RG1 8QT"}' \
  "https://manufactiq.co.uk/api/v1/enquiries"
GET /api/v1/enquiries/{enquiry_id} One enquiry

With its lines, the quotations, orders and invoices behind it (those the key's role may see), and the stages of its pipeline with the odds it would take on each.

Any keyEnquiries tab

Answers 200

A Enquiry. See Enquiry.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/enquiries/7"
PATCH /api/v1/enquiries/{enquiry_id} Change an enquiry

Send only the fields to change. A changed stage carries the odds with it unless a probability is sent too; a new owner is emailed.

Write keyEnquiries tab

Body

FieldTypeWhat it is
title requiredstringWhat it is for, in a line.
company_id requiredintegerThe customer (see GET /companies).
contact_idintegerThe contact at that company.
pipeline_idintegerWhich enquiry pipeline it starts on; the default one if left out. On a PATCH, move it with POST .../stage instead.
stage_idintegerThe stage; the pipeline's first open stage if left out.
source_idintegerWhere it came from (see GET /sources).
product_categorystringWhat it is for: one of GET /product-categories; the company's default if left out.
estimated_valuemoneyWhat it is worth, in your currency.
probabilityintegerThe odds, 0 to 100; the stage's own figure if left out.
expected_close_datedateWhen a decision is expected.
site_postcodestringWhere the work would be.
descriptionstringThe long description, up to 20,000 characters.
owner_user_idintegerWhose it is; the key's own user if left out. A new owner is emailed.
linesarrayWhat is being asked for, as a list of lines (see PUT .../lines). On a POST only; change them afterwards with PUT .../lines.
fieldsobjectThe enquiry's extra fields, by name.

Example body

{
  "title": "Archive racking, 400 linear metres",
  "company_id": 12,
  "estimated_value": "86500.00",
  "probability": 35,
  "expected_close_date": "2026-11-30",
  "site_postcode": "RG1 8QT"
}

Answers 200

A Enquiry. See Enquiry.

Example call

curl \
  -X PATCH \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title": "Archive racking, 400 linear metres", "company_id": 12, "estimated_value": "86500.00", "probability": 35, "expected_close_date": "2026-11-30", "site_postcode": "RG1 8QT"}' \
  "https://manufactiq.co.uk/api/v1/enquiries/7"
POST /api/v1/enquiries/{enquiry_id}/stage Move an enquiry to a stage

What dragging the card does: the odds travel with it, a note is logged, and a won stage wins the chosen quotation and raises the order. The answer carries messages - what the page would have said.

Write keyEnquiries tab

Body

FieldTypeWhat it is
stage_id requiredintegerThe stage to move to - on any of the company's enquiry pipelines.
outcome_reasonstringWhy, where the stage is won or lost.
winning_quote_idintegerWhen moving to a won stage: which quotation won it. Marks that quotation won and raises its order, as the page does.
customer_postringThe customer's order number, for the order raised.
promised_datedateWhat the customer was promised, for the order raised.

Example body

{
  "stage_id": 42
}

Answers 200

A Enquiry. See Enquiry.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"stage_id": 42}' \
  "https://manufactiq.co.uk/api/v1/enquiries/7/stage"
POST /api/v1/enquiries/{enquiry_id}/pipeline Move an enquiry to another pipeline

It lands at the start of the new route - or, if won or lost, on that route's stage for the outcome.

Write keyEnquiries tab

Body

FieldTypeWhat it is
pipeline_id requiredintegerOne of the company's enquiry pipelines.

Example body

{
  "pipeline_id": 1
}

Answers 200

A Enquiry. See Enquiry.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"pipeline_id": 1}' \
  "https://manufactiq.co.uk/api/v1/enquiries/7/pipeline"
GET /api/v1/enquiries/{enquiry_id}/lines What an enquiry asks for
Any keyEnquiries tab

Answers 200

A list of EnquiryLine records under items. See EnquiryLine.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/enquiries/7/lines"
PUT /api/v1/enquiries/{enquiry_id}/lines Replace what an enquiry asks for

The whole set, as the page saves it. An unpriced line is allowed; the enquiry's estimated value is re-totalled from the priced ones.

Write keyEnquiries tab

Body

FieldTypeWhat it is
lines requiredarrayThe whole set of lines, each as below; an empty list removes them all.
product_idintegerA product from the price book; its wording, unit, price and cost fill whatever the line leaves blank.
descriptionstringWhat is asked for. Needed unless a product supplies it.
quantity requiredquantityHow many.
unitstringeach, bay, m and so on; the product's, or each.
unit_pricemoneyPrice each. Leave out while it is not yet priced.
unit_costmoneyCost each, if known.
notesstringA note on the line.
dim_lengthintegerLength in mm, for a product sold at a size.
dim_widthintegerWidth in mm.
dim_heightintegerHeight in mm.

Example body

{
  "lines": [
    {
      "description": "Mobile shelving bay",
      "quantity": "24",
      "unit": "bay",
      "unit_price": "1275.00"
    }
  ],
  "description": "Mobile shelving, 400 linear metres",
  "quantity": "24",
  "unit": "bay"
}

Answers 200

A Enquiry. See Enquiry.

Example call

curl \
  -X PUT \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lines": [{"description": "Mobile shelving bay", "quantity": "24", "unit": "bay", "unit_price": "1275.00"}], "description": "Mobile shelving, 400 linear metres", "quantity": "24", "unit": "bay"}' \
  "https://manufactiq.co.uk/api/v1/enquiries/7/lines"
POST /api/v1/enquiries/{enquiry_id}/archive Archive an enquiry
Write keyEnquiries tab

Answers 200

A Enquiry. See Enquiry.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/enquiries/7/archive"
POST /api/v1/enquiries/{enquiry_id}/restore Restore an archived enquiry
Write keyEnquiries tab

Answers 200

A Enquiry. See Enquiry.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/enquiries/7/restore"
DELETE /api/v1/enquiries/{enquiry_id} Delete an enquiry permanently

Administrators only. Its documents go with it.

Write keyAdministratorEnquiries tab

Answers 200

A Deleted. See Deleted.

Example call

curl \
  -X DELETE \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/enquiries/7"
GET /api/v1/enquiries/{enquiry_id}/quotes Its quotations

What the enquiry's page shows under its quotations. Needs the quotes tab in the key's role.

Any keyEnquiries tab

Answers 200

A list of Quote records under items. See Quote.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/enquiries/7/quotes"
GET /api/v1/enquiries/{enquiry_id}/orders Its orders

What the enquiry's page shows under its orders. Needs the orders tab in the key's role.

Any keyEnquiries tab

Answers 200

A list of Order records under items. See Order.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/enquiries/7/orders"
GET /api/v1/enquiries/{enquiry_id}/invoices Its invoices

What the enquiry's page shows under its invoices. Needs the invoices tab in the key's role.

Any keyEnquiries tab

Answers 200

A list of Invoice records under items. See Invoice.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/enquiries/7/invoices"
GET /api/v1/enquiries/{enquiry_id}/tasks Its tasks

What the enquiry's page shows under its tasks. Needs the tasks tab in the key's role.

Any keyEnquiries tab

Answers 200

A list of Task records under items. See Task.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/enquiries/7/tasks"
GET /api/v1/enquiries/{enquiry_id}/activities Its activity

What the enquiry's page shows under its activity. Needs the activities tab in the key's role.

Any keyEnquiries tab

Answers 200

A list of Activity records under items. See Activity.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/enquiries/7/activities"
GET /api/v1/enquiries/{enquiry_id}/documents Its documents

What the enquiry's page shows under its documents. Needs the documents tab in the key's role.

Any keyEnquiries tab

Answers 200

A list of Document records under items. See Document.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/enquiries/7/documents"
GET /api/v1/enquiries/{enquiry_id}/emails The job's captured emails

What the enquiry's page shows under the job's captured emails.

Any keyEnquiries tab

Answers 200

A list of Email records under items. See Email.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/enquiries/7/emails"
GET /api/v1/enquiries/waiting Website enquiries waiting to be approved

What the form on the company's website sent, newest first, until somebody approves or rejects each one.

Any keyEnquiries tab

Query

NameTypeWhat it is
pageintegerWhich page, counting from 1. Default 1.
per_pageintegerRows per page, 5 to 200. Default 25.

Answers 200

A page of WebSubmission records under items, with paging. See WebSubmission.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/enquiries/waiting"
GET /api/v1/enquiries/waiting/{submission_id} One website enquiry

With what the CRM already knows under matches - the contact by email, their company, or a company by name or domain - and the values the approval would start from under suggested.

Any keyEnquiries tab

Answers 200

A WebSubmission. See WebSubmission.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/enquiries/waiting/9"
POST /api/v1/enquiries/waiting/{submission_id}/approve Approve a website enquiry

What approving on the page does: the company and contact are found or made, the enquiry raised with the next reference and a note holding everything as sent, the owner emailed and Teams told. Every value starts from what GET .../waiting/{id} suggests; send only what differs.

Write keyEnquiries tab

Body

FieldTypeWhat it is
company_choicestringexisting or new. One of: existing, new.
company_idintegerWith existing: the company.
new_company_namestringWith new: the company's name, and new_company_phone, new_company_email, new_company_address_line1, new_company_address_line2, new_company_city, new_company_county, new_company_postcode as wanted.
contact_choicestringexisting, new or none. One of: existing, new, none.
contact_idintegerWith existing: the contact, at that company.
new_contact_first_namestringWith new: their first name, and new_contact_last_name, new_contact_job_title, new_contact_email, new_contact_phone, new_contact_mobile.
title requiredstringThe enquiry's title.
stage_idintegerThe stage; the default pipeline's first if left out.
owner_user_idintegerWho looks after it; the key's own user if left out.
source_idintegerThe enquiry source; the one called Website if there is one.
product_categorystringWhat it is for.
estimated_valuemoneyWhat it is worth.
probabilityintegerThe odds; the stage's figure if left out.
expected_close_datedateWhen a decision is expected.
site_postcodestringWhere the work would be.
descriptionstringThe description; the message and their answers if left out.
email_customerbooleanWhether to send the sender the 'in progress' email, where the company has it switched on. Defaults to the company's setting.
fieldsobjectThe enquiry's extra fields, by name.

Example body

{
  "company_choice": "new",
  "title": "..."
}

Answers 201

A Enquiry. See Enquiry.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"company_choice": "new", "title": "..."}' \
  "https://manufactiq.co.uk/api/v1/enquiries/waiting/9/approve"
POST /api/v1/enquiries/waiting/{submission_id}/reject Reject a website enquiry

Nothing is created and nobody is emailed. It can be put back for 30 days.

Write keyEnquiries tab

Body

FieldTypeWhat it is
review_notestringWhy, for the record.

Answers 200

A WebSubmission. See WebSubmission.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/enquiries/waiting/9/reject"
POST /api/v1/enquiries/waiting/{submission_id}/restore Put a rejected website enquiry back in the queue
Write keyEnquiries tab

Answers 200

A WebSubmission. See WebSubmission.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/enquiries/waiting/9/restore"

Quotations

Priced, revised, sent as a PDF, won or lost.

GET /api/v1/quotes List quotations

The latest revision of each number, unless all=true.

Any keyQuotations tab

Query

NameTypeWhat it is
qstringSearch the number, company, enquiry reference and title.
statusstringdraft, sent, accepted, rejected, superseded or expired. One of: draft, sent, accepted, rejected, superseded, expired.
pipelineintegerA pipeline id.
companyintegerA company id.
enquiryintegerAn enquiry id.
ownerintegerAn owner's user id.
allbooleantrue for every revision; otherwise only the latest of each number.
sortstringrecent (the default), number, date, value, company or status. One of: recent, number, date, value, company, status.
x_<field>stringFilter on one of your own fields.
pageintegerWhich page, counting from 1. Default 1.
per_pageintegerRows per page, 5 to 200. Default 25.

Answers 200

A page of Quote records under items, with paging. See Quote.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/quotes"
POST /api/v1/quotes Raise a quotation

Revision 1 of a new number - or, for an enquiry that already has a quotation, the next revision of it, superseding the earlier one unless it was won or lost. Lines left out are carried from the enquiry. The enquiry's pipeline hears that a quote was drafted.

Write keyQuotations tab

Body

FieldTypeWhat it is
company_id requiredintegerThe customer.
enquiry_idintegerThe enquiry it is for. The quotation then takes the enquiry's reference (as the next revision under it), and its lines if none are sent.
contact_idintegerThe contact; the enquiry's if left out.
quote_datedateDated; today if left out.
valid_untildateValid until; 30 days on if left out.
discount_pctnumberWhole-quote discount, per cent.
vat_ratenumberVAT rate; the company's default if left out.
currencystringISO code; the customer's usual currency, else yours.
fx_ratenumberUnits of that currency per one of yours; the company's rate table if left out.
lead_timestringLead time, as written.
delivery_termsstringDelivery terms.
payment_termsstringPayment terms; the company's default if left out.
notesstringNotes printed on it; the enquiry's title if left out.
owner_user_idintegerWhose it is; the key's own user if left out.
pipeline_idintegerWhich quote pipeline it travels; the default if left out.
linesarrayThe lines, each as below. At least one, unless the enquiry supplies them.
fieldsobjectThe quotation's extra fields, by name.

Example body

{
  "company_id": 12,
  "enquiry_id": 7,
  "discount_pct": "5",
  "currency": "GBP",
  "lead_time": "6-8 weeks",
  "lines": [
    {
      "product_id": 3,
      "quantity": "24"
    },
    {
      "description": "Site survey and installation",
      "quantity": "1",
      "unit_price": "950.00"
    }
  ]
}

Answers 201

A Quote. See Quote.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"company_id": 12, "enquiry_id": 7, "discount_pct": "5", "currency": "GBP", "lead_time": "6-8 weeks", "lines": [{"product_id": 3, "quantity": "24"}, {"description": "Site survey and installation", "quantity": "1", "unit_price": "950.00"}]}' \
  "https://manufactiq.co.uk/api/v1/quotes"
GET /api/v1/quotes/{quote_id} One quotation

With its lines, every revision of its number, and the orders and invoices that followed it (those the key's role may see).

Any keyQuotations tab

Answers 200

A Quote. See Quote.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/quotes/41"
PATCH /api/v1/quotes/{quote_id} Change a quotation

Send only the fields to change; lines sent replace the whole set, lines left out stay as they are. A won, lost or superseded revision cannot be changed (409): revise it instead.

Write keyQuotations tab

Body

FieldTypeWhat it is
company_id requiredintegerThe customer.
enquiry_idintegerThe enquiry it is for. The quotation then takes the enquiry's reference (as the next revision under it), and its lines if none are sent.
contact_idintegerThe contact; the enquiry's if left out.
quote_datedateDated; today if left out.
valid_untildateValid until; 30 days on if left out.
discount_pctnumberWhole-quote discount, per cent.
vat_ratenumberVAT rate; the company's default if left out.
currencystringISO code; the customer's usual currency, else yours.
fx_ratenumberUnits of that currency per one of yours; the company's rate table if left out.
lead_timestringLead time, as written.
delivery_termsstringDelivery terms.
payment_termsstringPayment terms; the company's default if left out.
notesstringNotes printed on it; the enquiry's title if left out.
owner_user_idintegerWhose it is; the key's own user if left out.
pipeline_idintegerWhich quote pipeline it travels; the default if left out.
linesarrayThe lines, each as below. At least one, unless the enquiry supplies them.
fieldsobjectThe quotation's extra fields, by name.

Example body

{
  "company_id": 12,
  "enquiry_id": 7,
  "discount_pct": "5",
  "currency": "GBP",
  "lead_time": "6-8 weeks",
  "lines": [
    {
      "product_id": 3,
      "quantity": "24"
    },
    {
      "description": "Site survey and installation",
      "quantity": "1",
      "unit_price": "950.00"
    }
  ]
}

Answers 200

A Quote. See Quote.

Example call

curl \
  -X PATCH \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"company_id": 12, "enquiry_id": 7, "discount_pct": "5", "currency": "GBP", "lead_time": "6-8 weeks", "lines": [{"product_id": 3, "quantity": "24"}, {"description": "Site survey and installation", "quantity": "1", "unit_price": "950.00"}]}' \
  "https://manufactiq.co.uk/api/v1/quotes/41"
POST /api/v1/quotes/{quote_id}/status Mark a quotation sent, won, lost or expired

What the page's status control does. Won is one event: the quotation is decided, the enquiry moves to its won stage and the order is raised. Sent and lost tell the enquiry's pipeline rules. The owner is emailed about a decision and Teams told. The answer carries messages.

Write keyQuotations tab

Body

FieldTypeWhat it is
status requiredstringdraft, sent, accepted (won), rejected (lost) or expired. One of: draft, sent, accepted, rejected, expired.
outcome_reasonstringWhy, for won or lost.
customer_postringFor won: the customer's order number, carried onto the order.
promised_datedateFor won: what the customer was promised.

Example body

{
  "status": "accepted"
}

Answers 200

A Quote. See Quote.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status": "accepted"}' \
  "https://manufactiq.co.uk/api/v1/quotes/41/status"
POST /api/v1/quotes/{quote_id}/stage Move a quotation to a stage

A stage stands for a status, so onto a stage recording won wins it and raises the order, as dragging the card does.

Write keyQuotations tab

Body

FieldTypeWhat it is
stage_id requiredintegerA stage on one of the company's quote pipelines.
outcome_reasonstringWhy, where the stage records won or lost.
customer_postringFor a won stage: the customer's order number.
promised_datedateFor a won stage: what was promised.

Example body

{
  "stage_id": 1
}

Answers 200

A Quote. See Quote.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"stage_id": 1}' \
  "https://manufactiq.co.uk/api/v1/quotes/41/stage"
POST /api/v1/quotes/{quote_id}/pipeline Move a quotation to another pipeline
Write keyQuotations tab

Body

FieldTypeWhat it is
pipeline_id requiredintegerOne of the company's quote pipelines.

Example body

{
  "pipeline_id": 1
}

Answers 200

A Quote. See Quote.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"pipeline_id": 1}' \
  "https://manufactiq.co.uk/api/v1/quotes/41/pipeline"
POST /api/v1/quotes/{quote_id}/revise Raise the next revision

Copies the header and every line to the next revision as a draft and supersedes the earlier revisions, except any that recorded a win or a loss. The enquiry's pipeline hears that the quote was revised. The answer is the new revision.

Write keyQuotations tab

Answers 201

A Quote. See Quote.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/quotes/41/revise"
POST /api/v1/quotes/{quote_id}/send Email a quotation to the customer

Queued like every message the CRM sends, in the key's own user's name with replies to their address; the PDF is filed under the quotation's documents. A draft becomes sent and the enquiry's pipeline hears of it. Refused for a superseded revision (409).

Write keyQuotations tab

Body

FieldTypeWhat it is
to_emailstringWho to; the contact's address if left out.
subjectstringThe subject; the company's own wording if left out.
messagestringA note above the document, up to 4,000 characters.
attach_pdfbooleanWhether the PDF goes with it. Default true.
include_linesbooleanWhether the lines and totals go in the body. Default true.

Example body

{
  "to_email": "priya.shah@bramley.example"
}

Answers 200

A Quote. See Quote.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to_email": "priya.shah@bramley.example"}' \
  "https://manufactiq.co.uk/api/v1/quotes/41/send"
GET /api/v1/quotes/{quote_id}/pdf The quotation as a PDF

The customer's copy, exactly as the page downloads it and the email attaches it.

Any keyQuotations tab

Answers 200

Not JSON: application/pdf.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -o download \
  "https://manufactiq.co.uk/api/v1/quotes/41/pdf"
DELETE /api/v1/quotes/{quote_id} Delete a revision permanently

Administrators only. Its documents go with it.

Write keyAdministratorQuotations tab

Answers 200

A Deleted. See Deleted.

Example call

curl \
  -X DELETE \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/quotes/41"
GET /api/v1/quotes/{quote_id}/documents Its documents
Any keyQuotations tab

Answers 200

A list of Document records under items. See Document.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/quotes/41/documents"
GET /api/v1/quotes/{quote_id}/emails The job's captured emails
Any keyQuotations tab

Answers 200

A list of Email records under items. See Email.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/quotes/41/emails"

Orders

The job once it is placed, through the workshop to delivery.

GET /api/v1/orders List orders

Soonest promised first. The answer carries the order book's summary too.

Any keyOrders tabOrder book on the plan

Query

NameTypeWhat it is
qstringSearch the reference, PO number, company, site and invoice reference.
statusstringOne workshop status. One of: confirmed, drawings, manufacturing, ready, delivered, installed, complete, cancelled.
pipelineintegerA pipeline id.
openbooleantrue for orders still in hand.
latebooleantrue for orders past their promised date and not delivered.
uninvoicedbooleantrue for delivered orders with no invoice recorded.
companyintegerA company id.
ownerintegerAn owner's user id.
minebooleantrue for the key's own user's orders.
archivedbooleantrue to include archived orders.
sortstringpromised (the default), promised_desc, reference, created, value, customer or status. One of: promised, promised_desc, reference, created, value, customer, status.
x_<field>stringFilter on one of your own fields.
pageintegerWhich page, counting from 1. Default 1.
per_pageintegerRows per page, 5 to 200. Default 25.

Answers 200

A page of Order records under items, with paging. See Order.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/orders"
POST /api/v1/orders Raise an order by hand

For a job placed without a quotation. It takes the enquiry's reference where it has one, else a fresh one, and the enquiry's pipeline hears that an order was raised.

Write keyOrders tabOrder book on the plan

Body

FieldTypeWhat it is
company_id requiredintegerThe customer.
contact_idintegerThe contact.
enquiry_idintegerThe enquiry it came from; the customer, contact and site postcode are taken from it when left out.
quote_idintegerThe quotation it came from. To raise an order from a won quotation with its lines, use POST /quotes/{quote_id}/order instead.
customer_postringThe customer's own order number.
order_datedatePlaced on; today if left out.
promised_datedateWhat the customer was promised.
site_namestringThe site.
site_addressstringThe site's address.
site_postcodestringThe site's postcode.
access_notesstringHow to get in.
vat_ratenumberVAT rate; the company's default if left out.
currencystringISO code; yours if left out.
fx_ratenumberUnits of that currency per one of yours.
lead_timestringLead time.
notesstringNotes.
owner_user_idintegerWhose it is; the key's own user if left out.
pipeline_idintegerWhich order pipeline it travels; the default if left out.
lines requiredarrayThe lines, each as below. At least one.
fieldsobjectThe order's extra fields, by name.

Example body

{
  "company_id": 12,
  "customer_po": "PO-4471",
  "promised_date": "2026-12-05",
  "lines": [
    {
      "description": "Mobile shelving bay",
      "quantity": "24",
      "unit": "bay",
      "unit_price": "1211.25"
    }
  ]
}

Answers 201

A Order. See Order.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"company_id": 12, "customer_po": "PO-4471", "promised_date": "2026-12-05", "lines": [{"description": "Mobile shelving bay", "quantity": "24", "unit": "bay", "unit_price": "1211.25"}]}' \
  "https://manufactiq.co.uk/api/v1/orders"
POST /api/v1/quotes/{quote_id}/order Raise the order for a won quotation

Winning a quotation raises its order by itself; this is for one that was won before that, or whose order was deleted. The lines come across with both discounts folded into the prices. A quotation that already has an order, or is not won, is refused with 409.

Write keyOrders tabOrder book on the plan

Body

FieldTypeWhat it is
customer_postringThe customer's order number.
order_datedatePlaced on; today if left out.
promised_datedateWhat the customer was promised.

Answers 201

A Order. See Order.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/quotes/41/order"
GET /api/v1/orders/{order_id} One order

With its lines, how much of it is billed (coverage), its invoices, the stages of its pipeline and the next workshop step.

Any keyOrders tabOrder book on the plan

Answers 200

A Order. See Order.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/orders/18"
PATCH /api/v1/orders/{order_id} Change an order

Send only the fields to change. Lines sent replace the set, matched by id so invoices keep their anchors; a line an invoice has billed cannot be removed or cut below what was billed (422).

Write keyOrders tabOrder book on the plan

Body

FieldTypeWhat it is
company_id requiredintegerThe customer.
contact_idintegerThe contact.
enquiry_idintegerThe enquiry it came from; the customer, contact and site postcode are taken from it when left out.
quote_idintegerThe quotation it came from. To raise an order from a won quotation with its lines, use POST /quotes/{quote_id}/order instead.
customer_postringThe customer's own order number.
order_datedatePlaced on; today if left out.
promised_datedateWhat the customer was promised.
site_namestringThe site.
site_addressstringThe site's address.
site_postcodestringThe site's postcode.
access_notesstringHow to get in.
vat_ratenumberVAT rate; the company's default if left out.
currencystringISO code; yours if left out.
fx_ratenumberUnits of that currency per one of yours.
lead_timestringLead time.
notesstringNotes.
owner_user_idintegerWhose it is; the key's own user if left out.
pipeline_idintegerWhich order pipeline it travels; the default if left out.
lines requiredarrayThe lines, each as below. At least one.
fieldsobjectThe order's extra fields, by name.

Example body

{
  "company_id": 12,
  "customer_po": "PO-4471",
  "promised_date": "2026-12-05",
  "lines": [
    {
      "description": "Mobile shelving bay",
      "quantity": "24",
      "unit": "bay",
      "unit_price": "1211.25"
    }
  ]
}

Answers 200

A Order. See Order.

Example call

curl \
  -X PATCH \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"company_id": 12, "customer_po": "PO-4471", "promised_date": "2026-12-05", "lines": [{"description": "Mobile shelving bay", "quantity": "24", "unit": "bay", "unit_price": "1211.25"}]}' \
  "https://manufactiq.co.uk/api/v1/orders/18"
POST /api/v1/orders/{order_id}/status Move an order along the workshop

Delivered and installed stamp their dates; complete and cancelled stamp when. The enquiry's pipeline hears each step, and a note is logged.

Write keyOrders tabOrder book on the plan

Body

FieldTypeWhat it is
status requiredstringconfirmed, drawings, manufacturing, ready, delivered, installed, complete or cancelled. One of: confirmed, drawings, manufacturing, ready, delivered, installed, complete, cancelled.
outcome_reasonstringA note, kept with the change.

Example body

{
  "status": "delivered"
}

Answers 200

A Order. See Order.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status": "delivered"}' \
  "https://manufactiq.co.uk/api/v1/orders/18/status"
POST /api/v1/orders/{order_id}/stage Move an order to a stage

A stage stands for a workshop status, so landing on one that records a different status is that status change, date stamp and all.

Write keyOrders tabOrder book on the plan

Body

FieldTypeWhat it is
stage_id requiredintegerA stage on one of the company's order pipelines.
outcome_reasonstringA note, kept with the change.

Example body

{
  "stage_id": 1
}

Answers 200

A Order. See Order.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"stage_id": 1}' \
  "https://manufactiq.co.uk/api/v1/orders/18/stage"
POST /api/v1/orders/{order_id}/pipeline Move an order to another pipeline
Write keyOrders tabOrder book on the plan

Body

FieldTypeWhat it is
pipeline_id requiredintegerOne of the company's order pipelines.

Example body

{
  "pipeline_id": 1
}

Answers 200

A Order. See Order.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"pipeline_id": 1}' \
  "https://manufactiq.co.uk/api/v1/orders/18/pipeline"
POST /api/v1/orders/{order_id}/invoiced Record an invoice raised elsewhere

For an order billed outside the CRM. An invoice raised in the CRM fills these in by itself.

Write keyOrders tabOrder book on the plan

Body

FieldTypeWhat it is
invoice_refstringThe invoice number from your accounts package.
invoiced_atdateWhen; today if left out.

Example body

{
  "invoice_ref": "SI-10422"
}

Answers 200

A Order. See Order.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"invoice_ref": "SI-10422"}' \
  "https://manufactiq.co.uk/api/v1/orders/18/invoiced"
GET /api/v1/orders/{order_id}/billable What is left to invoice on an order

Every line with how much is already on an invoice and how much is left, and the price agreed - what the invoice picker shows. Needs the invoices tab in the key's role.

Any keyOrders tabOrder book on the plan

Answers 200

A list of BillableLine records under items. See BillableLine.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/orders/18/billable"
POST /api/v1/orders/{order_id}/archive Archive an order
Write keyOrders tabOrder book on the plan

Answers 200

A Order. See Order.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/orders/18/archive"
POST /api/v1/orders/{order_id}/restore Restore an archived order
Write keyOrders tabOrder book on the plan

Answers 200

A Order. See Order.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/orders/18/restore"
DELETE /api/v1/orders/{order_id} Delete an order permanently

Administrators only.

Write keyAdministratorOrders tabOrder book on the plan

Answers 200

A Deleted. See Deleted.

Example call

curl \
  -X DELETE \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/orders/18"
GET /api/v1/orders/{order_id}/invoices Its invoices

What the order's page shows under its invoices. Needs the invoices tab in the key's role.

Any keyOrders tabOrder book on the plan

Answers 200

A list of Invoice records under items. See Invoice.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/orders/18/invoices"
GET /api/v1/orders/{order_id}/tasks Its tasks

What the order's page shows under its tasks. Needs the tasks tab in the key's role.

Any keyOrders tabOrder book on the plan

Answers 200

A list of Task records under items. See Task.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/orders/18/tasks"
GET /api/v1/orders/{order_id}/documents Its documents

What the order's page shows under its documents. Needs the documents tab in the key's role.

Any keyOrders tabOrder book on the plan

Answers 200

A list of Document records under items. See Document.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/orders/18/documents"
GET /api/v1/orders/{order_id}/emails The job's captured emails

What the order's page shows under the job's captured emails.

Any keyOrders tabOrder book on the plan

Answers 200

A list of Email records under items. See Email.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/orders/18/emails"

Invoices

Raised against an order, in parts, and sent with your bank details.

GET /api/v1/invoices List invoices

Newest first. The answer carries the invoice book's figures too: drafts, outstanding, overdue and billed this month.

Any keyInvoices tab

Query

NameTypeWhat it is
qstringSearch the reference, PO number, company, quotation and order references.
statusstringdraft, sent, paid or cancelled. One of: draft, sent, paid, cancelled.
pipelineintegerA pipeline id.
openbooleantrue for draft and sent invoices.
overduebooleantrue for sent invoices past their due date.
billingstringpart, full or none: how much of the invoice's order is billed. One of: part, full, none.
companyintegerA company id.
ownerintegerAn owner's user id.
minebooleantrue for the key's own user's invoices.
archivedbooleantrue to include archived invoices.
sortstringrecent (the default), reference, due, value, customer or status. One of: recent, reference, due, value, customer, status.
x_<field>stringFilter on one of your own fields.
pageintegerWhich page, counting from 1. Default 1.
per_pageintegerRows per page, 5 to 200. Default 25.

Answers 200

A page of Invoice records under items, with paging. See Invoice.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/invoices"
POST /api/v1/invoices Raise an invoice

An invoice typed in whole. Against an order (order_id) its lines may be anchored to the order's lines, and a quantity beyond what is left to bill is refused (422); a line with no anchor is deliberately uncapped. It takes the order's reference, with -2, -3 for further invoices on the job.

Write keyInvoices tab

Body

FieldTypeWhat it is
company_id requiredintegerThe customer.
contact_idintegerThe contact.
order_idintegerThe order it bills. To bill some of an order's lines, use POST /orders/{order_id}/invoice instead, which does the picking.
quote_idintegerThe quotation.
enquiry_idintegerThe enquiry.
customer_postringThe customer's order number.
invoice_datedateDated; today if left out.
due_datedatePayment due; the company's payment days on if left out.
payment_termsstringPayment terms, as written.
discount_pctnumberWhole-invoice discount, per cent; usually nil.
vat_ratenumberVAT rate; the company's default if left out.
currencystringISO code; yours if left out.
fx_ratenumberUnits of that currency per one of yours.
notesstringNotes printed on it.
owner_user_idintegerWhose it is; the key's own user if left out.
pipeline_idintegerWhich invoice pipeline it travels; the default if left out.
lines requiredarrayThe lines, each as below. At least one.
fieldsobjectThe invoice's extra fields, by name.

Example body

{
  "company_id": 1,
  "lines": [
    {
      "description": "Deposit, 30%",
      "quantity": "1",
      "unit_price": "9000.00"
    }
  ]
}

Answers 201

A Invoice. See Invoice.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"company_id": 1, "lines": [{"description": "Deposit, 30%", "quantity": "1", "unit_price": "9000.00"}]}' \
  "https://manufactiq.co.uk/api/v1/invoices"
POST /api/v1/orders/{order_id}/invoice Invoice some or all of an order

The part-invoicing screen: the lines are read off the order, never from the request, so only the quantity and price of each can be chosen. What is not picked stays on the order for the next invoice. An order with no lines, or a cancelled one, is refused (409). Needs the orders tab in the key's role.

Write keyInvoices tab

Body

FieldTypeWhat it is
linesarrayWhich order lines to bill, each {order_line_id, quantity, unit_price}: quantity defaults to what is left, unit_price to the price agreed. Leave the whole list out to bill everything left on the order.
invoice_datedateDated; today if left out.
due_datedatePayment due.
customer_postringThe customer's order number; the order's if left out.
payment_termsstringPayment terms; the quotation's if left out.
notesstringNotes printed on it.

Example body

{
  "lines": [
    {
      "order_line_id": 51,
      "quantity": "6"
    }
  ]
}

Answers 201

A Invoice. See Invoice.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lines": [{"order_line_id": 51, "quantity": "6"}]}' \
  "https://manufactiq.co.uk/api/v1/orders/18/invoice"
GET /api/v1/invoices/{invoice_id} One invoice

With its lines, how much of its order is billed, the other invoices on the same order and the stages of its pipeline.

Any keyInvoices tab

Answers 200

A Invoice. See Invoice.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/invoices/55"
PATCH /api/v1/invoices/{invoice_id} Change an invoice

Send only the fields to change; lines sent replace the set. A paid or cancelled invoice cannot be changed (409).

Write keyInvoices tab

Body

FieldTypeWhat it is
company_id requiredintegerThe customer.
contact_idintegerThe contact.
order_idintegerThe order it bills. To bill some of an order's lines, use POST /orders/{order_id}/invoice instead, which does the picking.
quote_idintegerThe quotation.
enquiry_idintegerThe enquiry.
customer_postringThe customer's order number.
invoice_datedateDated; today if left out.
due_datedatePayment due; the company's payment days on if left out.
payment_termsstringPayment terms, as written.
discount_pctnumberWhole-invoice discount, per cent; usually nil.
vat_ratenumberVAT rate; the company's default if left out.
currencystringISO code; yours if left out.
fx_ratenumberUnits of that currency per one of yours.
notesstringNotes printed on it.
owner_user_idintegerWhose it is; the key's own user if left out.
pipeline_idintegerWhich invoice pipeline it travels; the default if left out.
lines requiredarrayThe lines, each as below. At least one.
fieldsobjectThe invoice's extra fields, by name.

Example body

{
  "company_id": 1,
  "lines": [
    {
      "description": "Deposit, 30%",
      "quantity": "1",
      "unit_price": "9000.00"
    }
  ]
}

Answers 200

A Invoice. See Invoice.

Example call

curl \
  -X PATCH \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"company_id": 1, "lines": [{"description": "Deposit, 30%", "quantity": "1", "unit_price": "9000.00"}]}' \
  "https://manufactiq.co.uk/api/v1/invoices/55"
POST /api/v1/invoices/{invoice_id}/status Mark an invoice sent, paid or cancelled

Sent and paid stamp their dates and tell the enquiry's and the order's pipelines. Cancelling puts what was on it back on the order to be invoiced again. Paid tells Teams. A note is logged.

Write keyInvoices tab

Body

FieldTypeWhat it is
status requiredstringdraft, sent, paid or cancelled. One of: draft, sent, paid, cancelled.
outcome_reasonstringA note, kept with the change.

Example body

{
  "status": "paid"
}

Answers 200

A Invoice. See Invoice.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status": "paid"}' \
  "https://manufactiq.co.uk/api/v1/invoices/55/status"
POST /api/v1/invoices/{invoice_id}/stage Move an invoice to a stage

Onto a stage recording sent marks it sent, onto paid marks it paid, with everything that follows. A cancelled invoice is not moved (409).

Write keyInvoices tab

Body

FieldTypeWhat it is
stage_id requiredintegerA stage on one of the company's invoice pipelines.
outcome_reasonstringA note, kept with the change.

Example body

{
  "stage_id": 1
}

Answers 200

A Invoice. See Invoice.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"stage_id": 1}' \
  "https://manufactiq.co.uk/api/v1/invoices/55/stage"
POST /api/v1/invoices/{invoice_id}/pipeline Move an invoice to another pipeline
Write keyInvoices tab

Body

FieldTypeWhat it is
pipeline_id requiredintegerOne of the company's invoice pipelines.

Example body

{
  "pipeline_id": 1
}

Answers 200

A Invoice. See Invoice.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"pipeline_id": 1}' \
  "https://manufactiq.co.uk/api/v1/invoices/55/pipeline"
POST /api/v1/invoices/{invoice_id}/send Email an invoice, or a reminder

A draft goes as the invoice and becomes sent; one already sent goes again as a payment reminder. Your bank details and terms from Administration > Documents are on it. Paid and cancelled invoices are refused (409).

Write keyInvoices tab

Body

FieldTypeWhat it is
to_emailstringWho to; the contact's address if left out.
messagestringA note above the document, up to 2,000 characters.
attach_pdfbooleanWhether the PDF goes with it. Default true.

Answers 200

A Invoice. See Invoice.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/invoices/55/send"
GET /api/v1/invoices/{invoice_id}/pdf The invoice as a PDF

The customer's copy, with the letterhead, VAT number and bank details.

Any keyInvoices tab

Answers 200

Not JSON: application/pdf.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -o download \
  "https://manufactiq.co.uk/api/v1/invoices/55/pdf"
POST /api/v1/invoices/{invoice_id}/archive Archive an invoice
Write keyInvoices tab

Answers 200

A Invoice. See Invoice.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/invoices/55/archive"
POST /api/v1/invoices/{invoice_id}/restore Restore an archived invoice
Write keyInvoices tab

Answers 200

A Invoice. See Invoice.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/invoices/55/restore"
DELETE /api/v1/invoices/{invoice_id} Delete an invoice permanently

Administrators only. What it billed goes back on the order.

Write keyAdministratorInvoices tab

Answers 200

A Deleted. See Deleted.

Example call

curl \
  -X DELETE \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/invoices/55"
GET /api/v1/invoices/{invoice_id}/emails The job's captured emails
Any keyInvoices tab

Answers 200

A list of Email records under items. See Email.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/invoices/55/emails"

Products

The price book a line is built from.

GET /api/v1/products List products

Products on sale unless archived says otherwise.

Any keyProducts tabPrice book on the plan

Query

NameTypeWhat it is
qstringSearch the name, code, description and category.
categorystringOne category.
archivedbooleantrue to include withdrawn products.
uncostedbooleantrue for products with no cost recorded.
unpricedbooleantrue for products priced per job.
sortstringname (the default), name_desc, code, price, price_asc, category, recent or used. One of: name, name_desc, code, price, price_asc, category, recent, used.
pageintegerWhich page, counting from 1. Default 1.
per_pageintegerRows per page, 5 to 200. Default 25.

Answers 200

A page of Product records under items, with paging. See Product.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/products"
POST /api/v1/products Add a product

Administrators only, as on the Products tab. A code already in use is refused with 409.

Write keyAdministratorProducts tabPrice book on the plan

Body

FieldTypeWhat it is
codestringIts code, unique in the price book.
name requiredstringIts name.
descriptionstringThe wording a line starts with.
unitstringWhat it is sold by: each (the default), bay, m, m², linear m, hour, day, set, pair, or anything you like.
unit_pricemoneySell price in your currency; leave out for a product priced per job.
unit_costmoneyCost; leave out if unknown. Zero means free, not unknown.
categorystringIts category - what an enquiry can be filed under.
dimensionsarrayWhich of length, width and height a line asks for, for a product sold in different sizes. An empty list for one size.
notesstringNotes, up to 1,000 characters.
is_activebooleanOn sale (the default); false withdraws it.
fieldsobjectThe product's extra fields, by name.

Example body

{
  "code": "MS-B1000",
  "name": "Mobile shelving bay, 1000 mm",
  "unit": "bay",
  "unit_price": "1275.00",
  "unit_cost": "800.00",
  "category": "Mobile shelving",
  "dimensions": [
    "length",
    "width"
  ]
}

Answers 201

A Product. See Product.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"code": "MS-B1000", "name": "Mobile shelving bay, 1000 mm", "unit": "bay", "unit_price": "1275.00", "unit_cost": "800.00", "category": "Mobile shelving", "dimensions": ["length", "width"]}' \
  "https://manufactiq.co.uk/api/v1/products"
GET /api/v1/products/{product_id} One product
Any keyProducts tabPrice book on the plan

Answers 200

A Product. See Product.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/products/3"
PATCH /api/v1/products/{product_id} Change a product

Send only the fields to change. Lines already quoted keep the price they were quoted at.

Write keyAdministratorProducts tabPrice book on the plan

Body

FieldTypeWhat it is
codestringIts code, unique in the price book.
name requiredstringIts name.
descriptionstringThe wording a line starts with.
unitstringWhat it is sold by: each (the default), bay, m, m², linear m, hour, day, set, pair, or anything you like.
unit_pricemoneySell price in your currency; leave out for a product priced per job.
unit_costmoneyCost; leave out if unknown. Zero means free, not unknown.
categorystringIts category - what an enquiry can be filed under.
dimensionsarrayWhich of length, width and height a line asks for, for a product sold in different sizes. An empty list for one size.
notesstringNotes, up to 1,000 characters.
is_activebooleanOn sale (the default); false withdraws it.
fieldsobjectThe product's extra fields, by name.

Example body

{
  "code": "MS-B1000",
  "name": "Mobile shelving bay, 1000 mm",
  "unit": "bay",
  "unit_price": "1275.00",
  "unit_cost": "800.00",
  "category": "Mobile shelving",
  "dimensions": [
    "length",
    "width"
  ]
}

Answers 200

A Product. See Product.

Example call

curl \
  -X PATCH \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"code": "MS-B1000", "name": "Mobile shelving bay, 1000 mm", "unit": "bay", "unit_price": "1275.00", "unit_cost": "800.00", "category": "Mobile shelving", "dimensions": ["length", "width"]}' \
  "https://manufactiq.co.uk/api/v1/products/3"
POST /api/v1/products/{product_id}/archive Withdraw a product from sale

Lines that used it are untouched; it is no longer offered for new ones.

Write keyAdministratorProducts tabPrice book on the plan

Answers 200

A Product. See Product.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/products/3/archive"
POST /api/v1/products/{product_id}/restore Put a withdrawn product back on sale
Write keyAdministratorProducts tabPrice book on the plan

Answers 200

A Product. See Product.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/products/3/restore"
DELETE /api/v1/products/{product_id} Delete a product permanently

For the one typed in by mistake. Lines keep their copied wording and price and lose the link; the answer says how many.

Write keyAdministratorProducts tabPrice book on the plan

Answers 200

A Deleted. See Deleted.

Example call

curl \
  -X DELETE \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/products/3"

Tasks

Who is doing what, by when.

GET /api/v1/tasks List tasks

Open tasks unless status says otherwise, soonest due first.

Any keyTasks tab

Query

NameTypeWhat it is
qstringSearch the title, details and company.
statusstringopen (the default), done or cancelled; all for every status. One of: open, done, cancelled, all.
assigneeintegerA user id.
minebooleantrue for the key's own user's tasks.
duestringoverdue, today, week or none. One of: overdue, today, week, none.
sortstringdue (the default), due_desc, priority or created. One of: due, due_desc, priority, created.
x_<field>stringFilter on one of your own fields.
pageintegerWhich page, counting from 1. Default 1.
per_pageintegerRows per page, 5 to 200. Default 25.

Answers 200

A page of Task records under items, with paging. See Task.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/tasks"
POST /api/v1/tasks Add a task

The assignee is emailed that a task has been put in their name, as they would be from the form - unless they are the key's own user.

Write keyTasks tab

Body

FieldTypeWhat it is
title requiredstringWhat has to be done.
detailsstringMore detail, up to 10,000 characters.
due_datedateWhen by.
prioritystringlow, normal (the default) or high. One of: low, normal, high.
assigned_to_user_idintegerWhose it is; the key's own user if left out. They are emailed, unless it is the key's own user.
company_idintegerThe company it is about.
contact_idintegerThe contact.
enquiry_idintegerThe enquiry.
order_idintegerThe order.
fieldsobjectThe task's extra fields, by name.

Example body

{
  "title": "Ring back about the survey",
  "due_date": "2026-10-16"
}

Answers 201

A Task. See Task.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title": "Ring back about the survey", "due_date": "2026-10-16"}' \
  "https://manufactiq.co.uk/api/v1/tasks"
GET /api/v1/tasks/{task_id} One task
Any keyTasks tab

Answers 200

A Task. See Task.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/tasks/90"
PATCH /api/v1/tasks/{task_id} Change a task

Send only the fields to change. A new assignee is emailed.

Write keyTasks tab

Body

FieldTypeWhat it is
title requiredstringWhat has to be done.
detailsstringMore detail, up to 10,000 characters.
due_datedateWhen by.
prioritystringlow, normal (the default) or high. One of: low, normal, high.
assigned_to_user_idintegerWhose it is; the key's own user if left out. They are emailed, unless it is the key's own user.
company_idintegerThe company it is about.
contact_idintegerThe contact.
enquiry_idintegerThe enquiry.
order_idintegerThe order.
fieldsobjectThe task's extra fields, by name.

Example body

{
  "title": "Ring back about the survey",
  "due_date": "2026-10-16"
}

Answers 200

A Task. See Task.

Example call

curl \
  -X PATCH \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title": "Ring back about the survey", "due_date": "2026-10-16"}' \
  "https://manufactiq.co.uk/api/v1/tasks/90"
POST /api/v1/tasks/{task_id}/status Complete or reopen a task
Write keyTasks tab

Body

FieldTypeWhat it is
status requiredstringopen, done or cancelled. One of: open, done, cancelled.

Example body

{
  "status": "done"
}

Answers 200

A Task. See Task.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status": "done"}' \
  "https://manufactiq.co.uk/api/v1/tasks/90/status"
DELETE /api/v1/tasks/{task_id} Delete a task

The key's own user's tasks, or any task for an administrator.

Write keyTasks tab

Answers 200

A Deleted. See Deleted.

Example call

curl \
  -X DELETE \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/tasks/90"

Activity

Calls, emails, meetings, site visits and notes, logged against a record.

GET /api/v1/activities List activity

Newest first.

Any keyActivity tab

Query

NameTypeWhat it is
qstringSearch the subject, detail and company.
typestringOne activity type. One of: call, email, meeting, site_visit, note, other.
userintegerWho logged it: a user id.
daysintegerOnly the last so many days.
pageintegerWhich page, counting from 1. Default 1.
per_pageintegerRows per page, 5 to 200. Default 25.

Answers 200

A page of Activity records under items, with paging. See Activity.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/activities"
POST /api/v1/activities Log an activity

Logged in the key's own user's name. The company is filled in from the enquiry or contact when only those are given, so it shows on the customer's timeline.

Write keyActivity tab

Body

FieldTypeWhat it is
activity_typestringcall, email, meeting, site_visit, note (the default) or other. One of: call, email, meeting, site_visit, note, other.
subject requiredstringWhat it was, in a line.
bodystringThe detail, up to 20,000 characters. @Name tells a colleague, as on the form.
occurred_atdatetimeWhen; now if left out.
company_idintegerThe company. At least one of company, contact or enquiry is needed.
contact_idintegerThe contact.
enquiry_idintegerThe enquiry.

Example body

{
  "activity_type": "call",
  "subject": "Spoke to Priya about access",
  "occurred_at": "2026-10-09T14:30",
  "company_id": 12
}

Answers 201

A Activity. See Activity.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"activity_type": "call", "subject": "Spoke to Priya about access", "occurred_at": "2026-10-09T14:30", "company_id": 12}' \
  "https://manufactiq.co.uk/api/v1/activities"
GET /api/v1/activities/{activity_id} One activity
Any keyActivity tab

Answers 200

A Activity. See Activity.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/activities/120"
DELETE /api/v1/activities/{activity_id} Delete an activity

The key's own user's entries, or any entry for an administrator.

Write keyActivity tab

Answers 200

A Deleted. See Deleted.

Example call

curl \
  -X DELETE \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/activities/120"

Documents

The files held against a record, uploaded and downloaded.

GET /api/v1/documents List documents

Every document the company holds that the key's role may see, newest first, with how much storage is in use.

Any keyDocuments tab

Query

NameTypeWhat it is
qstringSearch the file name, description, company and references.
companyintegerA company id.
userintegerWho uploaded it: a user id.
daysintegerOnly the last so many days.
sortstringrecent (the default), oldest, name, name_desc, size or size_asc. One of: recent, oldest, name, name_desc, size, size_asc.
pageintegerWhich page, counting from 1. Default 1.
per_pageintegerRows per page, 5 to 200. Default 25.

Answers 200

A page of Document records under items, with paging. See Document.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/documents"
POST /api/v1/documents Upload documents

A multipart form, not JSON. Each file is dealt with on its own: one refused does not lose the others, and every refusal is named under refused. The storage allowance is checked for the whole batch first.

Write keyDocuments tab

Form parts

FieldTypeWhat it is
files requiredfileOne or more files, as multipart form parts named files (or file). The name, type and size rules are the upload box's: documents, spreadsheets, drawings, photographs and archives; never programs or scripts.
company_idintegerThe record to file them against: at least one of these.
contact_idintegerA contact.
enquiry_idintegerAn enquiry.
quote_idintegerA quotation.
order_idintegerAn order.
record_idintegerA record on one of your own tabs.
descriptionstringWhat the files are.

Answers 201

A list of Document records under items. See Document.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -F "files=@drawing.pdf" \
  "https://manufactiq.co.uk/api/v1/documents"
GET /api/v1/documents/{attachment_id} One document

The record of the file; the bytes are at .../file.

Any keyDocuments tab

Answers 200

A Document. See Document.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/documents/61"
GET /api/v1/documents/{attachment_id}/file Download a document

The bytes, as an attachment - or, where files are held in object storage, a redirect to a link that works for a few minutes. Follow redirects.

Any keyDocuments tab

Query

NameTypeWhat it is
inlinebooleantrue to ask for it inline, for a PDF or photograph.

Answers 200

Not JSON: the file's own type.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -o download \
  "https://manufactiq.co.uk/api/v1/documents/61/file"
PATCH /api/v1/documents/{attachment_id} Change a document's description
Write keyDocuments tab

Body

FieldTypeWhat it is
description requiredstringWhat the file is.

Example body

{
  "description": "..."
}

Answers 200

A Document. See Document.

Example call

curl \
  -X PATCH \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"description": "..."}' \
  "https://manufactiq.co.uk/api/v1/documents/61"
DELETE /api/v1/documents/{attachment_id} Delete a document

The key's own user's uploads, or any document for an administrator.

Write keyDocuments tab

Answers 200

A Deleted. See Deleted.

Example call

curl \
  -X DELETE \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/documents/61"

Your own tabs

Records on the tabs the company designed itself.

GET /api/v1/tabs/{slug}/records List a tab's records

The tab is named by its slug (GET /tabs). The key's role must include it.

Any key

Query

NameTypeWhat it is
qstringSearch the record's values, reference, company and enquiry.
companyintegerA company id.
ownerintegerA user id, for a tab with a link to a person.
archivedbooleantrue to include archived records.
sortstringrecent (the default), created, oldest, reference, title or company. One of: recent, created, oldest, reference, title, company.
x_<field>stringFilter on one of the tab's own fields: x_<field>=value, or x_<field>.from and x_<field>.to.
pageintegerWhich page, counting from 1. Default 1.
per_pageintegerRows per page, 5 to 200. Default 25.

Answers 200

A page of Record records under items, with paging. See Record.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/tabs/ncr-reports/records"
POST /api/v1/tabs/{slug}/records Add a record to a tab

Checked field by field as the tab's form checks it: a required field missing, an option not on the list or a link to another company's record is refused (422). A numbered tab gives it the next reference.

Write key

Body

FieldTypeWhat it is
fields requiredobjectThe record's values, by field name - see GET /tabs/{slug}. A link field takes an id: a company's, a contact's, an enquiry's or a user's.

Example body

{
  "fields": {
    "machine": "Press 3",
    "severity": "Major",
    "company": 12
  }
}

Answers 201

A Record. See Record.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"fields": {"machine": "Press 3", "severity": "Major", "company": 12}}' \
  "https://manufactiq.co.uk/api/v1/tabs/ncr-reports/records"
GET /api/v1/tabs/{slug}/records/{record_id} One record

With its documents under documents.

Any key

Answers 200

A Record. See Record.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/tabs/ncr-reports/records/5"
PATCH /api/v1/tabs/{slug}/records/{record_id} Change a record

Send only the fields to change.

Write key

Body

FieldTypeWhat it is
fields requiredobjectThe record's values, by field name - see GET /tabs/{slug}. A link field takes an id: a company's, a contact's, an enquiry's or a user's.

Example body

{
  "fields": {
    "machine": "Press 3",
    "severity": "Major",
    "company": 12
  }
}

Answers 200

A Record. See Record.

Example call

curl \
  -X PATCH \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"fields": {"machine": "Press 3", "severity": "Major", "company": 12}}' \
  "https://manufactiq.co.uk/api/v1/tabs/ncr-reports/records/5"
POST /api/v1/tabs/{slug}/records/{record_id}/archive Archive a record
Write key

Answers 200

A Record. See Record.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/tabs/ncr-reports/records/5/archive"
POST /api/v1/tabs/{slug}/records/{record_id}/restore Restore an archived record
Write key

Answers 200

A Record. See Record.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/tabs/ncr-reports/records/5/restore"
DELETE /api/v1/tabs/{slug}/records/{record_id} Delete a record permanently

Administrators only. Its documents go with it.

Write keyAdministrator

Answers 200

A Deleted. See Deleted.

Example call

curl \
  -X DELETE \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/tabs/ncr-reports/records/5"

Calendar

Every date in the CRM, between two days.

GET /api/v1/calendar What is in the diary

Calls and meetings, tasks due, enquiries expected to close, quotations expiring and orders promised, in date order, with a count of each kind.

Any keyCalendar tab

Query

NameTypeWhat it is
fromdateThe first day; today if left out.
todateThe last day, inclusive; 30 days on if left out. At most a year.
kindsstringWhich to include, comma-separated: meeting, task, enquiry, quote, order, note. Everything but notes if left out; only kinds from tabs in the key's role are drawn.
ownerintegerWhose diary: a user id.
minebooleantrue for the key's own user's diary.
donebooleantrue to include what is already done, delivered or decided.

Answers 200

A list of CalendarEvent records under items. See CalendarEvent.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/calendar"

Reports

The figures the Reports tab shows, and the report builder.

GET /api/v1/reports/sales The sales report

Every table the sales report prints: performance by month, the forecast by expected close, by owner, by product category, by source, the top customers, quotation conversion and margin (for a role with quotes), lost reasons and the won-by-month series. Needs the enquiries tab in the key's role.

Any keyReports tab

Query

NameTypeWhat it is
monthsinteger3, 6, 12, 24 or 36; 12 if left out. One of: 3, 6, 12, 24, 36.
ownerintegerOne person's share: a user id.
minebooleantrue for the key's own user's share.

Answers 200

A SalesReport. See SalesReport.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/reports/sales"
GET /api/v1/reports/kpis The Reports page's figures

Sales, workshop, cash, customers, people and your own tabs: each section's tiles (value, the comparison and the change), its snapshots of right now and its tables, for the period asked for. A section is null where the key's role leaves its tab out. The charts are left out; the figures behind them are in the tiles.

Any keyReports tab

Query

NameTypeWhat it is
rangestringThe period: this_month, last_month, this_quarter, last_quarter, this_year, last_year, this_fy, last_fy, last_3m, last_6m, last_12m, last_24m, custom. last_12m if left out. One of: this_month, last_month, this_quarter, last_quarter, this_year, last_year, this_fy, last_fy, last_3m, last_6m, last_12m, last_24m, custom.
fromdateWith range=custom: the first day.
todateWith range=custom: the last day.
comparestringWhat to set it against: previous, year, none. One of: previous, year, none.
ownerintegerOne person's share: a user id.
minebooleantrue for the key's own user's share.

Answers 200

A KpiHub. See KpiHub.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/reports/kpis"
GET /api/v1/reports/dashboard The dashboard's figures

The headline (open pipeline, weighted forecast, won this month and the rest), the twelve-month conversion, the order book and the invoice book, and what needs a person today - overdue invoices, late orders, overdue tasks, quotations about to expire, enquiries gone quiet - each with the record's page. Only the parts in the key's role.

Any keyReports tab

Query

NameTypeWhat it is
ownerintegerOne person's share: a user id.
minebooleantrue for the key's own user's share.

Answers 200

A Dashboard. See Dashboard.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/reports/dashboard"
GET /api/v1/reports/datasets What can be reported on

Every dataset the key's role may report on, with its dimensions, figures, date fields, filters and list columns - the vocabulary the totals and list routes take.

Any keyReports tab

Answers 200

A list of Dataset records under items. See Dataset.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/reports/datasets"
GET /api/v1/reports/totals Run a totals report

The report builder: figures grouped by a dimension over a period, against the period before, with the totals. The same words as the report's own address, so one built on screen runs here from its URL. A word the dataset does not offer is replaced by the dataset's default.

Any keyReports tab

Query

NameTypeWhat it is
dataset requiredstringWhat it is about: a key from GET /reports/datasets. Default enquiries.
dimstringWhat to group by: a dimension of the dataset. Default stage.
measurestringWhich figures, repeated for more than one, up to four. Default count.
datestringWhich date the period applies to: a date field of the dataset.
rangestringThe period: this_month, last_month, this_quarter, last_quarter, this_year, last_year, this_fy, last_fy, last_3m, last_6m, last_12m, last_24m, custom. last_12m if left out. One of: this_month, last_month, this_quarter, last_quarter, this_year, last_year, this_fy, last_fy, last_3m, last_6m, last_12m, last_24m, custom.
fromdateWith range=custom: the first day.
todateWith range=custom: the last day.
comparestringWhat to set it against: previous, year, none. One of: previous, year, none.
ownerstringA user id, or mine.
statusstringA status the dataset offers.

Answers 200

A TotalsReport. See TotalsReport.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/reports/totals?dataset=1"
GET /api/v1/reports/list Run a list report

Every record on its own row with the columns chosen, over a period or any date, sorted and searched - what the list report page shows and exports.

Any keyReports tab

Query

NameTypeWhat it is
dataset requiredstringWhat it lists: a key from GET /reports/datasets.
colstringWhich columns, repeated, up to 16; the dataset's own if left out.
sortstringA column key to sort by.
dirstringasc or desc. One of: asc, desc.
datestringWhich date the period applies to.
rangestringA period, or all for any date. One of: all, this_month, last_month, this_quarter, last_quarter, this_year, last_year, this_fy, last_fy, last_3m, last_6m, last_12m, last_24m, custom.
fromdateWith range=custom: the first day.
todateWith range=custom: the last day.
ownerstringA user id, or mine.
statusstringA status the dataset offers.
qstringA search within the rows.
limitintegerAt most so many rows; 500 if left out, 10,000 at most.

Answers 200

A ListReport. See ListReport.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/reports/list?dataset=1"
GET /api/v1/reports/saved The saved reports

Every saved report the key's own user may see: shared ones, and their own private ones, over data in their role.

Any keyReports tab

Answers 200

A list of SavedReport records under items. See SavedReport.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/reports/saved"
POST /api/v1/reports/saved Save a report
Write keyReports tab

Body

FieldTypeWhat it is
name requiredstringIts name, unique in the company.
descriptionstringWhat it is for.
visibilitystringshared (the default) or private to the key's own user. One of: shared, private.
spec requiredobjectThe report: the same keys GET /reports/totals or GET /reports/list take (kind: list for a list), as an object. Checked word by word; anything the dataset does not offer is replaced by its default.

Example body

{
  "name": "Won by product, this FY",
  "spec": {
    "dataset": "enquiries",
    "dim": "product",
    "measure": [
      "won_value",
      "win_rate"
    ],
    "date": "closed",
    "range": "this_fy"
  }
}

Answers 201

A SavedReport. See SavedReport.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Won by product, this FY", "spec": {"dataset": "enquiries", "dim": "product", "measure": ["won_value", "win_rate"], "date": "closed", "range": "this_fy"}}' \
  "https://manufactiq.co.uk/api/v1/reports/saved"
GET /api/v1/reports/saved/{report_id} Run a saved report

The saved report, run now: a TotalsReport or a ListReport by its kind, with the saved report itself under saved.

Any keyReports tab

Query

NameTypeWhat it is
rangestringA period to run it over instead of its own. One of: this_month, last_month, this_quarter, last_quarter, this_year, last_year, this_fy, last_fy, last_3m, last_6m, last_12m, last_24m, custom.
limitintegerFor a list: at most so many rows.

Answers 200

A TotalsReport. See TotalsReport.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/reports/saved/4"
PATCH /api/v1/reports/saved/{report_id} Change a saved report

Its owner, or an administrator. Send only what changes.

Write keyReports tab

Body

FieldTypeWhat it is
name requiredstringIts name, unique in the company.
descriptionstringWhat it is for.
visibilitystringshared (the default) or private to the key's own user. One of: shared, private.
spec requiredobjectThe report: the same keys GET /reports/totals or GET /reports/list take (kind: list for a list), as an object. Checked word by word; anything the dataset does not offer is replaced by its default.

Example body

{
  "name": "Won by product, this FY",
  "spec": {
    "dataset": "enquiries",
    "dim": "product",
    "measure": [
      "won_value",
      "win_rate"
    ],
    "date": "closed",
    "range": "this_fy"
  }
}

Answers 200

A SavedReport. See SavedReport.

Example call

curl \
  -X PATCH \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Won by product, this FY", "spec": {"dataset": "enquiries", "dim": "product", "measure": ["won_value", "win_rate"], "date": "closed", "range": "this_fy"}}' \
  "https://manufactiq.co.uk/api/v1/reports/saved/4"
DELETE /api/v1/reports/saved/{report_id} Delete a saved report
Write keyReports tab

Answers 200

A Deleted. See Deleted.

Example call

curl \
  -X DELETE \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/reports/saved/4"

Queues

Saved, named filters over a list, and the records in them.

GET /api/v1/queues List queues

Every queue the key's own user may see - shared ones, and their own private ones - over lists their role includes, each with its live count.

Any keyQueues tab

Answers 200

A list of Queue records under items. See Queue.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/queues"
POST /api/v1/queues Save a queue
Write keyQueues tab

Body

FieldTypeWhat it is
name requiredstringIts name, unique in the company.
dataset requiredstringThe list it is over: enquiries, quotes, orders, invoices, tasks, companies, contacts, or records:<tab id>. Fixed once made.
filtersobjectThe list's own arguments, as GET /queues/{queue_id}/records and the list routes take them: status, owner, mine, overdue, q, sort, x_<field>... Anything the list does not take is dropped.
columnsarrayThe column keys to show, in order, or null for the list's own.
descriptionstringWhat it is for.
visibilitystringshared (the default) or private to the key's own user. One of: shared, private.

Example body

{
  "name": "Quotes awaiting an answer",
  "dataset": "quotes",
  "filters": {
    "status": "sent",
    "sort": "date"
  }
}

Answers 201

A Queue. See Queue.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Quotes awaiting an answer", "dataset": "quotes", "filters": {"status": "sent", "sort": "date"}}' \
  "https://manufactiq.co.uk/api/v1/queues"
GET /api/v1/queues/{queue_id} One queue
Any keyQueues tab

Answers 200

A Queue. See Queue.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/queues/2"
GET /api/v1/queues/{queue_id}/records The records in a queue

A page of whatever the queue is over - enquiries, quotations, orders, invoices, tasks, companies, contacts or a tab of your own - each answered as its own route would answer it. 'Mine' in a queue means the key's own user.

Any keyQueues tab

Query

NameTypeWhat it is
sortstringAn ordering the list offers, overriding the queue's.
pageintegerWhich page, counting from 1. Default 1.
per_pageintegerRows per page, 5 to 200. Default 25.

Answers 200

A page of Record records under items, with paging. See Record.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/queues/2/records"
PATCH /api/v1/queues/{queue_id} Change a queue

Its owner, or an administrator for a shared queue. The list it is over cannot change.

Write keyQueues tab

Body

FieldTypeWhat it is
name requiredstringIts name, unique in the company.
dataset requiredstringThe list it is over: enquiries, quotes, orders, invoices, tasks, companies, contacts, or records:<tab id>. Fixed once made.
filtersobjectThe list's own arguments, as GET /queues/{queue_id}/records and the list routes take them: status, owner, mine, overdue, q, sort, x_<field>... Anything the list does not take is dropped.
columnsarrayThe column keys to show, in order, or null for the list's own.
descriptionstringWhat it is for.
visibilitystringshared (the default) or private to the key's own user. One of: shared, private.

Example body

{
  "name": "Quotes awaiting an answer",
  "dataset": "quotes",
  "filters": {
    "status": "sent",
    "sort": "date"
  }
}

Answers 200

A Queue. See Queue.

Example call

curl \
  -X PATCH \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Quotes awaiting an answer", "dataset": "quotes", "filters": {"status": "sent", "sort": "date"}}' \
  "https://manufactiq.co.uk/api/v1/queues/2"
DELETE /api/v1/queues/{queue_id} Delete a queue
Write keyQueues tab

Answers 200

A Deleted. See Deleted.

Example call

curl \
  -X DELETE \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/queues/2"

Captured email

The correspondence filed against a record.

GET /api/v1/emails Captured emails on a record

One of the record arguments is needed. For an enquiry, quotation, order or invoice the answer is the whole job's correspondence, as the pages show it. Messages a colleague captured privately are left out; the record must be on a tab in the key's role.

Any key

Query

NameTypeWhat it is
companyintegerFiled against a company: its id.
contactintegerA contact's id.
enquiryintegerAn enquiry's id - which answers for the whole job.
quoteintegerA quotation's id.
orderintegerAn order's id.
invoiceintegerAn invoice's id.
limitintegerAt most so many, newest first; 100 if left out.

Answers 200

A list of Email records under items. See Email.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/emails"
GET /api/v1/emails/{email_id} One captured email

With its plain-text body (quoted history trimmed), who was on it and what was attached. A colleague's private message answers 404.

Any key

Answers 200

A Email. See Email.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/emails/310"
GET /api/v1/emails/{email_id}/files/{attachment_id} Download an email's attachment

Always as an attachment, never inline: these bytes came from outside.

Any key

Answers 200

Not JSON: the file's own type.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -o download \
  "https://manufactiq.co.uk/api/v1/emails/310/files/61"

Automations

What the company has set up, whether it is on, and what it did.

GET /api/v1/automations List automations

Every automation, switched-on ones first, each with what it does in a line and what, if anything, stops it being switched on.

Any keyAdministrator

Answers 200

A list of Automation records under items. See Automation.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/automations"
GET /api/v1/automations/runs What automations did lately

The log across every automation: the record, the cause, the outcome and what each step did.

Any keyAdministrator

Query

NameTypeWhat it is
limitintegerAt most so many, newest first; 50 if left out.

Answers 200

A list of AutomationRun records under items. See AutomationRun.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/automations/runs"
GET /api/v1/automations/{automation_id} One automation

With its own recent runs under runs.

Any keyAdministrator

Answers 200

A Automation. See Automation.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/automations/1"
POST /api/v1/automations/{automation_id}/switch Switch an automation on or off

On only once it is complete; the answer says what is missing otherwise (422). Switched on, it acts on what happens from now on.

Write keyAdministratorAutomations on the plan

Body

FieldTypeWhat it is
on requiredbooleantrue to switch it on, false to switch it off.

Example body

{
  "on": true
}

Answers 200

A Automation. See Automation.

Example call

curl \
  -X POST \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"on": true}' \
  "https://manufactiq.co.uk/api/v1/automations/1/switch"

One box across everything.

Audit trail

Who changed which record, and to what.

GET /api/v1/audit The audit trail

With entity and record_id, one record's history - for a kind in the key's role. Without a record, the whole company's trail, newest first: administrators only.

Any key

Query

NameTypeWhat it is
entitystringA kind of record: company, contact, enquiry, quote, order, invoice, product, task, api_key or tenant_settings.
record_idintegerOne record of that kind: its history.
limitintegerAt most so many, newest first; 100 if left out, 500 at most.

Answers 200

A list of AuditEntry records under items. See AuditEntry.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/audit"

Reference data

People, roles, pipelines, sources, categories, fields, tabs and settings.

GET /api/v1/users The company's people

Everybody at the company, active ones first: the ids that owner and assignee fields take. Email addresses are answered only to an administrator's key.

Any key

Query

NameTypeWhat it is
inactivebooleantrue to include disabled accounts.

Answers 200

A list of User records under items. See User.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/users"
GET /api/v1/roles The roles people hold

The two built-in roles and the company's own, each with the tab keys it includes. A built-in role has no id.

Any key

Answers 200

A list of Role records under items. See Role.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/roles"
GET /api/v1/pipelines The pipelines and their stages

Every route of every kind the key's role includes, default first, with its stages in order - the stage ids the stage routes take, and what each stands for - and its rules.

Any key

Query

NameTypeWhat it is
entitystringenquiry, quote, order or invoice; all four if left out. One of: enquiry, quote, order, invoice.

Answers 200

A list of Pipeline records under items. See Pipeline.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/pipelines"
GET /api/v1/pipelines/{pipeline_id} One pipeline
Any key

Answers 200

A Pipeline. See Pipeline.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/pipelines/1"
GET /api/v1/sources The enquiry sources

Where enquiries come from, as Administration lists them, retired ones included and marked.

Any key

Answers 200

A list of Source records under items. See Source.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/sources"
GET /api/v1/product-categories The product categories

What an enquiry can be filed under: the categories that ship and the ones on the price book, grouped as the form groups them, and the default.

Any key

Answers 200

A ProductCategories. See ProductCategories.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/product-categories"
GET /api/v1/fields The extra fields on each tab

The fields the company added to the tabs that ship (Administration > Extra fields), by tab, for the tabs in the key's role: what a record's 'fields' object may carry, and what the x_<field> list filters take.

Any key

Query

NameTypeWhat it is
entitystringOne tab: company, contact, enquiry, quote, order, invoice, product or task. One of: company, contact, enquiry, quote, order, invoice, product, task.

Answers 200

A list of FieldDefinition records under items. See FieldDefinition.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/fields"
GET /api/v1/tabs The company's own tabs

Every tab the company designed itself that the key's role includes, with its fields - and its slug, which the records routes take.

Any key

Answers 200

A list of Tab records under items. See Tab.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/tabs"
GET /api/v1/tabs/{slug} One of the company's own tabs
Any key

Answers 200

A Tab. See Tab.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/tabs/ncr-reports"
GET /api/v1/vocabulary The fixed vocabularies

Every fixed list of values a route takes or answers, with what each is called - statuses, types, outcomes - and the company's own words for its record types.

Any key

Answers 200

A Vocabulary. See Vocabulary.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/vocabulary"
GET /api/v1/settings The company's settings

What the company has set up: its letterhead, its currency and rates, its wording and workshop steps, its reference format, the defaults a new document starts with, what its paperwork carries, its plan's allowances and which features are in force. The bank details are answered only to a key whose role includes invoices.

Any key

Answers 200

A Settings. See Settings.

Example call

curl \
  -H "Authorization: Bearer $MANUFACTIQ_KEY" \
  "https://manufactiq.co.uk/api/v1/settings"

What a record looks like

Every record answers the fields below, plus these two:

FieldTypeWhat it is
web_urlstringThe record's own page in the CRM.
fieldsobjectThe record's extra fields, by name, where the tab takes them.
RecordCompany22 fields
FieldTypeWhat it is
idintegerThe company's id.
namestringThe company's name.
company_typestringprospect, customer, main_contractor, architect, supplier or other.
sectorstringFree text: what they do.
phonestringSwitchboard number.
emailstringGeneral address.
websitestringWebsite.
address_line1stringAddress, first line.
address_line2stringAddress, second line.
citystringTown or city.
countystringCounty.
postcodestringPostcode, tidied to UK form where it is one.
countrystringCountry; United Kingdom unless said.
currencystringThe currency they are usually quoted in (ISO code), or null for yours.
notesstringFree notes.
owner_user_idintegerThe account owner's user id.
owner_namestringThe account owner's name.
contact_countintegerLive contacts at the company.
open_enquiry_countintegerEnquiries still open.
is_archivedbooleanArchived rather than deleted.
created_atdatetimeWhen the record was made.
updated_atdatetimeWhen it last changed.
RecordContact15 fields
FieldTypeWhat it is
idintegerThe contact's id.
company_idintegerThe company they are at, or null.
company_namestringThat company's name.
first_namestringFirst name.
last_namestringSurname.
full_namestringBoth together.
job_titlestringJob title.
emailstringEmail address.
phonestringTelephone.
mobilestringMobile.
is_primarybooleanThe main contact at their company; one per company.
notesstringFree notes.
is_archivedbooleanArchived rather than deleted.
created_atdatetimeWhen the record was made.
updated_atdatetimeWhen it last changed.
RecordEnquiry32 fields
FieldTypeWhat it is
idintegerThe enquiry's id.
referencestringIts reference, in the company's own format - carried by its quote, order and invoices.
titlestringWhat it is for, in a line.
company_idintegerThe customer.
company_namestringThe customer's name.
contact_idintegerThe contact, or null.
contact_namestringThe contact's name.
contact_emailstringThe contact's address.
pipeline_idintegerThe pipeline it is on.
pipeline_namestringThat pipeline's name.
stage_idintegerThe stage it is at.
stage_namestringThat stage's name.
stage_outcomestringopen, won or lost - what the stage means.
source_idintegerWhere it came from (an enquiry source), or null.
source_namestringThat source's name.
product_categorystringWhat it is for: a category from the price book.
estimated_valuemoneyWhat it is worth, in your currency.
probabilityintegerThe odds, 0 to 100.
expected_close_datedateWhen a decision is expected.
site_postcodestringWhere the work would be.
descriptionstringThe long description.
lines_totalmoneyThe total of its priced lines.
lines_costmoneyThe total cost of its costed lines.
unpriced_linesintegerLines still without a price.
outcome_reasonstringWhy it was won or lost.
closed_atdatetimeWhen it was won or lost, or null while open.
owner_user_idintegerWhose it is.
owner_namestringTheir name.
quote_countintegerQuotations raised for it, every revision counted.
is_archivedbooleanArchived rather than deleted.
created_atdatetimeWhen the record was made.
updated_atdatetimeWhen it last changed.
RecordEnquiryLine16 fields
FieldTypeWhat it is
idintegerThe line's id.
line_nointegerIts position.
product_idintegerThe product it came from, or null for free text.
product_codestringThat product's code.
product_namestringThat product's name.
descriptionstringWhat is being asked for.
quantityquantityHow many.
unitstringeach, bay, m and so on.
dim_lengthintegerLength in mm, where asked for at a size.
dim_widthintegerWidth in mm.
dim_heightintegerHeight in mm.
unit_pricemoneyPrice each, or null while unpriced.
unit_costmoneyCost each, or null if unknown.
line_totalmoneyquantity × unit_price.
line_costmoneyquantity × unit_cost, or null.
notesstringA note on the line.
RecordQuote42 fields
FieldTypeWhat it is
idintegerThis revision's id.
quote_numberstringThe quotation's number - its enquiry's reference.
revisionintegerWhich revision this is, from 1.
latest_revisionintegerThe newest revision of the number.
statusstringdraft, sent, accepted (won), rejected (lost), superseded or expired.
enquiry_idintegerThe enquiry it is for, or null.
enquiry_referencestringThat enquiry's reference.
enquiry_titlestringThat enquiry's title.
company_idintegerThe customer.
company_namestringThe customer's name.
contact_idintegerThe contact, or null.
contact_namestringThe contact's name.
contact_emailstringThe contact's address.
pipeline_idintegerThe quote pipeline it is on.
pipeline_namestringThat pipeline's name.
stage_idintegerThe stage it is at.
stage_namestringThat stage's name.
quote_datedateDated.
valid_untildateValid until.
discount_pctnumberWhole-quote discount, per cent.
currencystringThe document's currency (ISO code).
fx_ratenumberUnits of that currency per one of yours, fixed when it was raised.
vat_ratenumberVAT rate applied, per cent.
net_subtotalmoneyThe lines added up, after their own discounts.
discount_amountmoneyThe whole-document discount taken off.
net_totalmoneyNet of VAT, after discount.
vat_amountmoneyVAT.
gross_totalmoneyTotal payable.
total_costmoneyCost of the costed lines.
uncosted_linesintegerLines with no cost recorded, so the margin is incomplete.
lead_timestringLead time, as written.
delivery_termsstringDelivery terms.
payment_termsstringPayment terms.
notesstringNotes printed on it.
outcome_reasonstringWhy it was won or lost.
sent_atdatetimeWhen it was first sent.
decided_atdatetimeWhen it was won or lost.
owner_user_idintegerWhose it is.
owner_namestringTheir name.
line_countintegerHow many lines.
created_atdatetimeWhen the record was made.
updated_atdatetimeWhen it last changed.
RecordQuoteLine15 fields
FieldTypeWhat it is
idintegerThe line's id.
line_nointegerIts position.
product_idintegerThe product it came from, or null.
product_codestringThe code printed.
descriptionstringThe wording printed.
quantityquantityHow many.
unitstringeach, bay, m and so on.
dim_lengthintegerLength in mm, where sold at a size.
dim_widthintegerWidth in mm.
dim_heightintegerHeight in mm.
unit_pricemoneyPrice each.
line_discount_pctnumberDiscount on this line, per cent.
line_totalmoneyAfter the line's own discount.
unit_costmoneyCost each, or null.
line_costmoneyquantity × unit_cost, or null.
RecordOrder50 fields
FieldTypeWhat it is
idintegerThe order's id.
referencestringIts reference - the enquiry's, with -2 for a second order on the same job.
statusstringconfirmed, drawings, manufacturing, ready, delivered, installed, complete or cancelled.
status_labelstringWhat the company calls that step.
quote_idintegerThe quotation it came from, or null.
quote_numberstringThat quotation's number.
quote_revisionintegerThat quotation's revision.
enquiry_idintegerThe enquiry, or null.
enquiry_referencestringThat enquiry's reference.
enquiry_titlestringThat enquiry's title.
company_idintegerThe customer.
company_namestringThe customer's name.
contact_idintegerThe contact, or null.
contact_namestringThe contact's name.
pipeline_idintegerThe order pipeline it is on.
pipeline_namestringThat pipeline's name.
stage_idintegerThe stage it is at.
stage_namestringThat stage's name.
customer_postringThe customer's own order number.
order_datedatePlaced on.
promised_datedateWhat the customer was promised.
delivered_datedateWhen it was delivered.
installed_datedateWhen it was installed.
site_namestringThe site.
site_addressstringThe site's address.
site_postcodestringThe site's postcode.
access_notesstringHow to get in.
currencystringThe document's currency (ISO code).
fx_ratenumberUnits of that currency per one of yours, fixed when it was raised.
vat_ratenumberVAT rate applied, per cent.
net_subtotalmoneyThe lines added up, after their own discounts.
discount_amountmoneyThe whole-document discount taken off.
net_totalmoneyNet of VAT, after discount.
vat_amountmoneyVAT.
gross_totalmoneyTotal payable.
total_costmoneyCost of the costed lines.
uncosted_linesintegerLines with no cost recorded, so the margin is incomplete.
invoiced_atdateWhen it was fully billed, or null.
invoice_refstringThe invoice that billed it, or one typed from your accounts package.
lead_timestringLead time, as written.
notesstringNotes.
outcome_reasonstringThe note on its last status change.
completed_atdatetimeWhen it was completed or cancelled.
owner_user_idintegerWhose it is.
owner_namestringTheir name.
is_latebooleanPast its promised date and not yet delivered.
days_lateintegerDays past the promised date (negative while there is time).
is_archivedbooleanArchived rather than deleted.
created_atdatetimeWhen the record was made.
updated_atdatetimeWhen it last changed.
RecordOrderLine17 fields
FieldTypeWhat it is
idintegerThe line's id - kept for life, because invoices point at it.
line_nointegerIts position.
quote_line_idintegerThe quote line it was copied from, or null.
product_idintegerThe product, or null.
product_codestringThe code.
descriptionstringThe wording.
quantityquantityHow many ordered.
quantity_deliveredquantityHow many have gone out.
unitstringeach, bay, m and so on.
dim_lengthintegerLength in mm, where sold at a size.
dim_widthintegerWidth in mm.
dim_heightintegerHeight in mm.
unit_pricemoneyPrice each, discounts already folded in.
unit_costmoneyCost each, or null.
line_totalmoneyquantity × unit_price.
line_costmoneyquantity × unit_cost, or null.
notesstringA note on the line.
RecordInvoice47 fields
FieldTypeWhat it is
idintegerThe invoice's id.
referencestringIts reference - the order's, with -2, -3 for further invoices on the job.
statusstringdraft, sent, paid or cancelled.
quote_idintegerThe quotation, or null.
quote_numberstringThat quotation's number.
order_idintegerThe order it bills, or null for one raised on its own.
order_referencestringThat order's reference.
enquiry_idintegerThe enquiry, or null.
enquiry_referencestringThat enquiry's reference.
company_idintegerThe customer.
company_namestringThe customer's name.
contact_idintegerThe contact, or null.
contact_namestringThe contact's name.
contact_emailstringThe contact's address.
pipeline_idintegerThe invoice pipeline it is on.
pipeline_namestringThat pipeline's name.
stage_idintegerThe stage it is at.
stage_namestringThat stage's name.
customer_postringThe customer's own order number.
invoice_datedateDated.
due_datedatePayment due.
payment_termsstringPayment terms, as written.
discount_pctnumberWhole-invoice discount, per cent; usually nil.
currencystringThe document's currency (ISO code).
fx_ratenumberUnits of that currency per one of yours, fixed when it was raised.
vat_ratenumberVAT rate applied, per cent.
net_subtotalmoneyThe lines added up, after their own discounts.
discount_amountmoneyThe whole-document discount taken off.
net_totalmoneyNet of VAT, after discount.
vat_amountmoneyVAT.
gross_totalmoneyTotal payable.
total_costmoneyCost of the costed lines.
uncosted_linesintegerLines with no cost recorded, so the margin is incomplete.
notesstringNotes printed on it.
outcome_reasonstringThe note on its last status change.
sent_atdatetimeWhen it was sent.
paid_atdateWhen it was paid.
owner_user_idintegerWhose it is.
owner_namestringTheir name.
is_overduebooleanSent and past its due date.
days_overdueintegerDays past the due date (negative while there is time).
order_net_totalmoneyThe order's net value, where it bills one.
order_remaining_netmoneyWhat is still to bill on that order, by value.
order_is_settledbooleanWhether that order is now fully billed.
is_archivedbooleanArchived rather than deleted.
created_atdatetimeWhen the record was made.
updated_atdatetimeWhen it last changed.
RecordInvoiceLine13 fields
FieldTypeWhat it is
idintegerThe line's id.
line_nointegerIts position.
order_line_idintegerThe order line it bills, or null for a line not on the order.
product_idintegerThe product, or null.
product_codestringThe code.
descriptionstringThe wording.
quantityquantityHow many are billed on this invoice.
unitstringeach, bay, m and so on.
unit_pricemoneyPrice each.
unit_costmoneyCost each, or null.
line_totalmoneyquantity × unit_price.
line_costmoneyquantity × unit_cost, or null.
notesstringA note on the line.
RecordBillableLine12 fields
FieldTypeWhat it is
order_line_idintegerThe order line.
line_nointegerIts position on the order.
product_idintegerThe product, or null.
product_codestringThe code.
descriptionstringThe wording.
quantityquantityOrdered.
quantity_invoicedquantityAlready on an invoice that is not cancelled.
quantity_remainingquantityLeft to invoice.
is_fully_invoicedbooleanNothing left on it.
unitstringeach, bay, m and so on.
bill_pricemoneyThe price agreed: the line total spread over the quantity.
unit_pricemoneyThe order line's price each.
RecordCoverage6 fields
FieldTypeWhat it is
net_totalmoneyThe order's net value.
billed_netmoneyInvoiced so far, net, not counting cancelled invoices.
remaining_netmoneyStill to bill, never below zero.
invoice_countintegerInvoices raised against it that are not cancelled.
is_settledbooleanFully billed, within a penny.
percentintegerHow much of it is billed, 0 to 100.
RecordProduct15 fields
FieldTypeWhat it is
idintegerThe product's id.
codestringIts code, unique in your price book, or null.
namestringIts name.
descriptionstringThe wording a line starts with.
unitstringWhat it is sold by: each, bay, m and so on.
dimensionsarrayWhich of length, width, height a line asks for; empty for one size.
unit_pricemoneySell price in your currency, or null when priced per job.
unit_costmoneyCost, or null when unknown - which is what switches margin reporting off for it.
categorystringIts category - what an enquiry can be filed under.
notesstringNotes.
is_activebooleanOn sale; false once withdrawn.
times_quotedintegerQuote lines that came from it.
times_enquiredintegerEnquiry lines that came from it.
created_atdatetimeWhen the record was made.
updated_atdatetimeWhen it last changed.
RecordTask21 fields
FieldTypeWhat it is
idintegerThe task's id.
titlestringWhat has to be done.
detailsstringMore detail.
due_datedateWhen by.
prioritystringlow, normal or high.
statusstringopen, done or cancelled.
assigned_to_user_idintegerWhose it is.
assignee_namestringTheir name.
company_idintegerThe company it is about, or null.
company_namestringThat company's name.
contact_idintegerThe contact, or null.
contact_namestringThat contact's name.
enquiry_idintegerThe enquiry, or null.
enquiry_referencestringThat enquiry's reference.
order_idintegerThe order, or null.
order_referencestringThat order's reference.
completed_atdatetimeWhen it was done.
is_overduebooleanOpen and past its due date.
created_byintegerWho made it.
created_atdatetimeWhen the record was made.
updated_atdatetimeWhen it last changed.
RecordActivity14 fields
FieldTypeWhat it is
idintegerThe entry's id.
activity_typestringcall, email, meeting, site_visit, note or other.
subjectstringWhat it was.
bodystringThe detail.
occurred_atdatetimeWhen.
user_idintegerWho logged it.
logged_bystringTheir name.
company_idintegerThe company, or null.
company_namestringThat company's name.
contact_idintegerThe contact, or null.
contact_namestringThat contact's name.
enquiry_idintegerThe enquiry, or null.
enquiry_referencestringThat enquiry's reference.
created_atdatetimeWhen it was logged.
RecordDocument20 fields
FieldTypeWhat it is
idintegerThe document's id.
filenamestringThe name it was uploaded with, and downloads as.
content_typestringIts media type, from the extension.
byte_sizeintegerSize in bytes.
checksumstringSHA-256 of the file.
descriptionstringWhat it is.
company_idintegerThe customer it is held for.
company_namestringThat company's name.
contact_idintegerThe contact it was filed against, or null.
enquiry_idintegerThe enquiry, or null.
enquiry_referencestringThat enquiry's reference.
quote_idintegerThe quotation, or null.
quote_numberstringThat quotation's number.
order_idintegerThe order, or null.
order_referencestringThat order's reference.
record_idintegerThe record on one of your own tabs, or null.
record_referencestringThat record's reference.
uploaded_byintegerWho uploaded it.
uploaded_by_namestringTheir name.
created_atdatetimeWhen.
RecordRecord15 fields
FieldTypeWhat it is
idintegerThe record's id.
module_idintegerThe tab it is on.
referencestringIts reference, where the tab numbers its records.
titlestringIts name.
company_idintegerThe company it is linked to, or null.
company_namestringThat company's name.
contact_idintegerThe contact, or null.
contact_namestringThat contact's name.
enquiry_idintegerThe enquiry, or null.
enquiry_referencestringThat enquiry's reference.
owner_user_idintegerThe person it is linked to, or null.
owner_namestringTheir name.
is_archivedbooleanArchived rather than deleted.
created_atdatetimeWhen the record was made.
updated_atdatetimeWhen it last changed.
RecordEmail17 fields
FieldTypeWhat it is
idintegerThe message's id.
subjectstringSubject line.
from_addressstringWho sent it.
from_namestringTheir name as sent.
sent_atdatetimeWhen it was sent.
received_atdatetimeWhen it was captured.
visibilitystringshared, or private to whoever captured it.
match_rulestringHow it was filed: job, thread, token, contact, domain or none.
company_idintegerThe company it is filed against, or null.
company_namestringThat company's name.
contact_idintegerThe contact, or null.
enquiry_idintegerThe enquiry, or null.
enquiry_referencestringThat enquiry's reference.
quote_idintegerThe quotation, or null.
order_idintegerThe order, or null.
invoice_idintegerThe invoice, or null.
captured_bystringWhose capture address caught it.
RecordEmailAttachment6 fields
FieldTypeWhat it is
idintegerThe attachment's id.
filenamestringIts name.
content_typestringIts media type.
byte_sizeintegerSize in bytes.
is_inlinebooleanPart of the message's own layout (a signature image) rather than a file sent.
refused_reasonstringWhy the file was not kept, or null.
RecordUser7 fields
FieldTypeWhat it is
idintegerThe user's id - what owner and assignee fields take.
full_namestringTheir name.
emailstringTheir address.
rolestringtenant_admin or standard.
role_namestringAdministrator, Standard, or the company's own role.
is_activebooleanWhether they can sign in.
last_login_atdatetimeWhen they last signed in.
RecordPipeline9 fields
FieldTypeWhat it is
idintegerThe pipeline's id.
entitystringenquiry, quote, order or invoice.
namestringIts name.
descriptionstringWhat it is for.
is_defaultbooleanWhere a new record of its kind starts.
is_activebooleanOffered on forms and boards.
sort_orderintegerIts position.
stagesarrayIts stages, in order: id, name, sort_order, outcome, maps_to, default_probability, is_active.
rulesarrayWhat moves records along it: trigger_key, after_days, target_stage_id, target_name, is_active.
RecordStage8 fields
FieldTypeWhat it is
idintegerThe stage's id.
pipeline_idintegerIts pipeline.
namestringIts name.
sort_orderintegerIts position.
outcomestringopen, won or lost.
maps_tostringThe fixed status a quote, order or invoice stage records; null on an enquiry stage.
default_probabilityintegerThe odds a typical enquiry has here.
is_activebooleanStill offered.
RecordSource4 fields
FieldTypeWhat it is
idintegerThe source's id.
namestringIts name.
sort_orderintegerIts position.
is_activebooleanStill offered.
RecordRole5 fields
FieldTypeWhat it is
idintegerThe role's id.
namestringIts name.
tabsarrayThe tab keys it includes.
peopleintegerHow many hold it.
active_peopleintegerHow many of them are active.
RecordApiKey11 fields
FieldTypeWhat it is
idintegerThe key's id.
namestringWhat it was called.
key_prefixstringThe start of the key, to tell it apart.
scopestringread or write.
user_idintegerThe account it acts as.
user_namestringTheir name.
expires_atdatetimeWhen it stops, or null.
last_used_atdatetimeWhen it was last used.
use_countintegerHow many requests it has made.
revoked_atdatetimeWhen it was revoked, or null.
created_atdatetimeWhen it was made.
RecordFieldDefinition8 fields
FieldTypeWhat it is
idintegerThe field's id.
namestringIts key - how it is sent and answered under 'fields'.
labelstringWhat the form calls it.
field_typestringtext, textarea, number, money, date, datetime, select, checkbox, or a link type on a tab of your own.
optionsarrayThe choices of a select field.
hintstringThe help under the box.
is_requiredbooleanMust be filled in.
sort_orderintegerIts position.
RecordTab8 fields
FieldTypeWhat it is
idintegerThe tab's id.
namestringIts name.
slugstringIts address segment - what the records routes take.
item_namestringWhat one record is called.
reference_prefixstringThe prefix its references take, or null if not numbered.
descriptionstringWhat it is for.
is_activebooleanShown in the menu.
fieldsarrayIts fields, each as a FieldDefinition with is_title and show_in_list as well.
RecordQueue11 fields
FieldTypeWhat it is
idintegerThe queue's id.
namestringIts name.
datasetstringThe list it is over: enquiries, quotes, orders, invoices, tasks, companies, contacts, or records:<tab id>.
filtersobjectThe list page's arguments it carries.
filter_textarrayThe same, in words.
columnsarrayIts column keys, or null for the list's own.
descriptionstringWhat it is for.
visibilitystringshared or private.
owner_user_idintegerWho made it.
owner_namestringTheir name.
countintegerHow many records are in it now.
RecordSavedReport8 fields
FieldTypeWhat it is
idintegerThe report's id.
namestringIts name.
descriptionstringWhat it is for.
kindstringtotals or list.
specobjectIts specification: the same keys the report routes take.
visibilitystringshared or private.
owner_user_idintegerWho made it.
owner_namestringTheir name.
RecordAutomation14 fields
FieldTypeWhat it is
idintegerThe automation's id.
namestringIts name.
sentencestringWhat it does, in a line.
entitystringThe tab it watches.
eventstringcreated, updated, archived or date.
is_activebooleanSwitched on.
problemsarrayWhat stops it being switched on.
run_countintegerHow many times it has acted.
last_run_atdatetimeWhen it last acted.
failure_streakintegerFailures in a row.
off_reasonstringWhy it switched itself off, if it did.
definitionobjectThe trigger, conditions and steps, as the builder stores them.
created_atdatetimeWhen the record was made.
updated_atdatetimeWhen it last changed.
RecordAutomationRun12 fields
FieldTypeWhat it is
idintegerThe run's id.
automation_idintegerWhich automation.
automation_namestringIts name.
entitystringThe tab of the record it acted on.
record_idintegerThe record.
record_labelstringThe record's reference or name.
causestringWhat set it off.
outcomestringdone, partly, failed or nothing.
summarystringWhat happened, in a line.
detailarrayWhat each step did.
actor_namestringWho made the change that set it off.
created_atdatetimeWhen.
RecordAuditEntry10 fields
FieldTypeWhat it is
idintegerThe entry's id.
entitystringThe kind of record: company, enquiry, quote, order, invoice, product, task, contact, api_key, tenant_settings.
record_idintegerWhich record.
record_labelstringIts reference or name at the time.
actionstringcreated, updated, archived, restored, deleted or status_changed.
actor_user_idintegerWho, or null for the system.
actor_namestringTheir name - with the API key's name when it was a program.
changesobjectField name to {from, to}.
summarystringThe change in a line.
created_atdatetimeWhen.
RecordCalendarEvent15 fields
FieldTypeWhat it is
kindstringmeeting, note, task, enquiry, quote or order.
idintegerThe record's id.
ondateThe day.
atdatetimeThe time, for a call or meeting; null for an all-day item.
ends_atdatetimeHalf an hour on, for a call or meeting.
titlestringWhat it is.
refstringThe record's reference, where it has one.
statestringIts status or stage.
donebooleanAlready happened or completed.
valuemoneyWhat it is worth, where it is worth something.
company_idintegerThe company, or null.
company_namestringIts name.
enquiry_idintegerThe enquiry, or null.
owner_user_idintegerWhose it is.
owner_namestringTheir name.
RecordWebSubmission27 fields
FieldTypeWhat it is
idintegerThe submission's id.
statusstringpending, approved or rejected.
received_atdatetimeWhen the website sent it.
namestringThe sender's name.
emailstringThe sender's address.
companystringThe company they gave.
job_titlestringTheir job title.
phonestringTelephone.
mobilestringMobile.
address_line1stringAddress.
address_line2stringAddress, second line.
citystringTown or city.
countystringCounty.
postcodestringPostcode.
site_postcodestringWhere the work would be.
productstringWhat it is for.
budgetstringThe budget band.
timescalestringWhen it is needed.
heard_aboutstringHow they heard of you.
subjectstringSubject.
messagestringWhat they wrote.
pagestringThe page of your site the form was on.
enquiry_idintegerThe enquiry it became, once approved.
enquiry_referencestringThat enquiry's reference.
reviewer_namestringWho approved or rejected it.
reviewed_atdatetimeWhen.
review_notestringWhy it was rejected.
RecordIndex6 fields
FieldTypeWhat it is
namestringManufactIQ API.
versionstringThe API version in every address.
applicationstringThe CRM's own version.
docs_urlstringThe reference.
openapi_urlstringThe OpenAPI document.
authenticatestringHow to send a key.
RecordMe7 fields
FieldTypeWhat it is
keyobjectThe key, as an ApiKey.
userobjectThe person the key acts as, as a User.
companyobjectid, name, slug and plan.
scopestringread or write.
rate_limitobjectper_minute, and remaining in this minute.
server_timedatetimeThe server's clock, in its own time.
versionstringThe API version.
RecordOpenAPI3 fields
FieldTypeWhat it is
openapistring3.0.3.
pathsobjectEvery route.
componentsobjectEvery schema.
RecordDeleted3 fields
FieldTypeWhat it is
deletedbooleantrue.
idintegerWhat was deleted.
namestringWhat it was called.
RecordAction2 fields
FieldTypeWhat it is
okbooleantrue.
messagesarrayWhat the CRM would have said to a person doing the same thing on screen.
RecordLinkedRecord8 fields
FieldTypeWhat it is
idintegerThe record's id.
referencestringIts reference.
titlestringIts name.
created_atdatetimeWhen.
module_idintegerThe tab it is on.
module_namestringThat tab's name.
slugstringThat tab's address segment.
item_namestringWhat one record on that tab is called.
RecordSearchResult1 fields
FieldTypeWhat it is
groupsarrayOne group per kind with hits: key, label, and items of {id, title, sub, web_url}.
RecordSalesReport14 fields
FieldTypeWhat it is
monthsintegerThe period, in months.
owner_idintegerWhose share, or null for everybody.
generated_atdatetimeWhen.
performanceobjectWon, lost and open by month, with win rate, average deal and the sales cycle.
forecastarrayThe open pipeline by expected close month, with weighted values.
by_ownerarrayWon and lost by person.
by_categoryarrayWon and lost by product category.
by_sourcearrayWon and lost by enquiry source.
top_customersarrayThe customers who bought most.
quotesobjectQuotation conversion, or null for a role without quotes.
lost_reasonsarrayWhy work was lost, by reason.
lost_totalintegerHow many were lost.
marginobjectThe margin quoted, or null for a role without quotes.
monthlyarrayWon value by month.
RecordKpiHub11 fields
FieldTypeWhat it is
periodobjectfrom, to and label.
comparisonobjectThe period it is set against, or null.
compare_labelstringWhat the comparison is called.
salesobjectkpis, snapshots, stage_rows, by_product, by_source - or null.
workshopobjectkpis, snapshots, load, by_area - or null.
cashobjectkpis, snapshots, aged, aged_total - or null.
customersobjectkpis and the tables about customers - or null.
peopleobjectEach person's figures - or null.
tabsarrayA block per tab of your own that carries dates.
fieldsarrayA block per extra field worth grouping by.
overviewobjectThe lead tiles and snapshots from every section.
RecordDashboard6 fields
FieldTypeWhat it is
headlineobjectOpen pipeline, weighted forecast, won and lost this month and more.
conversionobjectWon, lost and the rate over twelve months.
pipeline_by_stagearrayOpen enquiries and their value at each stage.
order_bookobjectOpen orders, their value, late ones, due this week, delivered but not invoiced.
invoice_bookobjectDrafts, outstanding, overdue and billed this month.
attentionarrayWhat needs a person today: tone, kind, title, detail, web_url.
RecordDataset8 fields
FieldTypeWhat it is
keystringWhat the report routes take as dataset.
labelstringWhat it is called.
dimensionsarrayWhat it can be grouped by: key and label.
measuresarrayIts figures: key, label, format (count, money, pct, days, number) and hint.
datesarrayThe date fields a period can apply to.
filtersarrayThe filter arguments it takes (owner, status...).
columnsarrayThe columns a list of it can show.
defaultsobjectdim, measures, date and columns when none is sent.
RecordTotalsReport11 fields
FieldTypeWhat it is
specobjectThe report, every word checked.
argsobjectThe same as query-string arguments.
titlestringThe report in a sentence.
periodobjectfrom, to and label.
comparisonobjectThe period it is set against, or null.
measuresarrayThe figures: key, label and format.
dimensionobjectWhat it is grouped by.
rowsarrayOne per group: key, label, each measure's value, its previous value and the change.
totalsobjectThe same, added up.
otherobjectGroups beyond the first sixty, folded together, or null.
web_urlstringThe report's own page.
RecordListReport9 fields
FieldTypeWhat it is
specobjectThe list, every word checked.
argsobjectThe same as query-string arguments.
titlestringWhat it lists.
periodobjectfrom, to and label, or null for any date.
columnsarrayThe columns: key, label and format.
rowsarrayOne per record, keyed by column.
totalintegerHow many rows matched.
truncatedbooleanWhether the limit cut the rows short.
web_urlstringThe list's own page.
RecordProductCategories2 fields
FieldTypeWhat it is
groupsarrayEach group's name and its items of {value, label}.
defaultstringThe category a new enquiry starts on.
RecordVocabulary14 fields
FieldTypeWhat it is
termsobjectThe company's words for each record type: singular and plural.
company_typesarraykey and label.
activity_typesarraykey and label.
task_prioritiesarraykey and label.
task_statusesarraykey and label.
quote_statusesarraykey and label.
order_statusesarraykey, the company's label, and whether the step is hidden.
invoice_statusesarraykey and label.
stage_outcomesarrayopen, won, lost.
pipeline_entitiesarrayenquiry, quote, order, invoice.
submission_statusesarraypending, approved, rejected.
field_typesarrayThe types a field on a tab of your own may have.
extra_field_typesarrayThe types an extra field on a shipped tab may have.
key_scopesarrayread and write.
RecordSettings13 fields
FieldTypeWhat it is
letterheadobjectname, address, phone, email, website, vat_number, company_number.
settingsobjectcurrency, currency_symbol, default_vat_rate, financial_year_start_month, timezone, date_format, quote_validity_days, quote_footer, order_footer.
currencyobjectbase, symbol, and rates by ISO code.
termsobjectThe company's words for each record type.
modulesobjectWhich tabs are switched on, by key.
order_stepsarrayThe workshop steps in order: key, label, hidden, fixed.
numberingobjectThe reference format.
example_referencestringWhat the next reference would look like.
defaultsobjectpayment_days, payment_terms, lead_time, delivery_terms, quote_notes, product_category.
documentsobjectWhat the quotation and invoice carry; the bank details for a role with invoices.
planobjectkey, label, trial_ends_on, max_users, used_users, max_storage_mb, used_mb.
featuresobjectEach plan feature and whether it is in force.
apiobjectversion, rate_limit_per_minute, docs_url.

Errors

Every refusal is JSON with a status, a code and a message.

StatusCodeMeaning
400invalid_jsonThe body is not a JSON object.
401unauthenticatedNo key was sent, or the key is not recognised, revoked, expired or acting as a disabled account. Which of those it was is not said.
403plan_requiredThe company's plan does not include the API, or the part of the CRM the route needs.
403read_only_keyA read-only key called a route that writes.
403administrator_requiredThe route is for company administrators and the key's user is not one.
403not_in_roleThe tab the route belongs to is not in the key's user's role.
403forbiddenSomething only the record's owner, or an administrator, may do.
404not_foundNo such record in this company, or no such address.
405method_not_allowedA real address called with a method it does not take; Allow lists the ones it does.
409duplicate, in_use, quote_decided, order_exists, quote_not_won, invoice_locked, no_lines, order_cancelled, already_decided, storage_full, list_gone, tab_not_readyThe request is well formed but the record's state refuses it; the code says which, and the message says what to do instead.
413too_largeThe request is bigger than the installation accepts.
415unsupported_media_typeSend JSON, with Content-Type: application/json.
422validation_failedA value the form would refuse, in the form's own words; details carries every message.
429rate_limitedThe key has made its allowance of requests this minute; Retry-After says how many seconds to wait.
500server_errorSomething went wrong on the server and has been logged.
503not_readyThe installation's database has not been brought up to date for the API yet, or the PDF engine is not installed.