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.
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.
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.
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.
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.
Query
| Name | Type | What it is |
|---|---|---|
q | string | Search the name, town, postcode, email and phone. |
type | string | One company type. One of: prospect, customer, main_contractor, architect, supplier, other. |
owner | integer | An owner's user id. |
archived | boolean | true to include archived companies. |
sort | string | name (the default), name_desc, type, recent or created. One of: name, name_desc, type, recent, created. |
x_<field> | string | Filter on one of your own fields: x_<field>=value, or x_<field>.from and x_<field>.to for a number, money or date field. |
page | integer | Which page, counting from 1. Default 1. |
per_page | integer | Rows 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.
Body
| Field | Type | What it is |
|---|---|---|
name required | string | The company's name. |
company_type | string | prospect (the default), customer, main_contractor, architect, supplier or other. One of: prospect, customer, main_contractor, architect, supplier, other. |
sector | string | What they do. |
phone | string | Telephone. |
email | string | General address. |
website | string | Website. |
address_line1 | string | Address, first line. |
address_line2 | string | Address, second line. |
city | string | Town or city. |
county | string | County. |
postcode | string | Postcode. |
country | string | Country; United Kingdom if left out. |
currency | string | The currency they are usually quoted in (ISO code), or null for yours. |
notes | string | Free notes, up to 10,000 characters. |
owner_user_id | integer | The account owner's user id (see GET /users); the key's own user if left out of a new company. |
fields | object | The company's extra fields, by name - see GET /fields. |
confirm_duplicate | boolean | true 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.
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.
Body
| Field | Type | What it is |
|---|---|---|
name required | string | The company's name. |
company_type | string | prospect (the default), customer, main_contractor, architect, supplier or other. One of: prospect, customer, main_contractor, architect, supplier, other. |
sector | string | What they do. |
phone | string | Telephone. |
email | string | General address. |
website | string | Website. |
address_line1 | string | Address, first line. |
address_line2 | string | Address, second line. |
city | string | Town or city. |
county | string | County. |
postcode | string | Postcode. |
country | string | Country; United Kingdom if left out. |
currency | string | The currency they are usually quoted in (ISO code), or null for yours. |
notes | string | Free notes, up to 10,000 characters. |
owner_user_id | integer | The account owner's user id (see GET /users); the key's own user if left out of a new company. |
fields | object | The company's extra fields, by name - see GET /fields. |
confirm_duplicate | boolean | true 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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
Query
| Name | Type | What it is |
|---|---|---|
q | string | Search the name, email, phone and company. |
company | integer | A company id. |
archived | boolean | true to include archived contacts. |
sort | string | name (the default), name_desc, company or recent. One of: name, name_desc, company, recent. |
x_<field> | string | Filter on one of your own fields, as for companies. |
page | integer | Which page, counting from 1. Default 1. |
per_page | integer | Rows 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.
Body
| Field | Type | What it is |
|---|---|---|
company_id | integer | The company they are at (see GET /companies). |
first_name required | string | First name. |
last_name required | string | Surname. |
job_title | string | Job title. |
email | string | Email address. |
phone | string | Telephone. |
mobile | string | Mobile. |
is_primary | boolean | true to make them the main contact at their company; the previous main contact stops being it. |
notes | string | Free notes, up to 10,000 characters. |
fields | object | The contact's extra fields, by name - see GET /fields. |
confirm_duplicate | boolean | true 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
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.
Body
| Field | Type | What it is |
|---|---|---|
company_id | integer | The company they are at (see GET /companies). |
first_name required | string | First name. |
last_name required | string | Surname. |
job_title | string | Job title. |
email | string | Email address. |
phone | string | Telephone. |
mobile | string | Mobile. |
is_primary | boolean | true to make them the main contact at their company; the previous main contact stops being it. |
notes | string | Free notes, up to 10,000 characters. |
fields | object | The contact's extra fields, by name - see GET /fields. |
confirm_duplicate | boolean | true 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
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
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.
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
Query
| Name | Type | What it is |
|---|---|---|
q | string | Search the reference, title, company, description and site postcode. |
stage | integer | A stage id. |
pipeline | integer | A pipeline id. |
outcome | string | open, won or lost. One of: open, won, lost. |
owner | integer | An owner's user id. |
mine | boolean | true for the key's own user's enquiries. |
company | integer | A company id. |
category | string | A product category. |
archived | boolean | true to include archived enquiries. |
sort | string | recent (the default), created, reference, value, value_asc, close, company or stage. One of: recent, created, reference, value, value_asc, close, company, stage. |
x_<field> | string | Filter on one of your own fields. |
page | integer | Which page, counting from 1. Default 1. |
per_page | integer | Rows 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.
Body
| Field | Type | What it is |
|---|---|---|
title required | string | What it is for, in a line. |
company_id required | integer | The customer (see GET /companies). |
contact_id | integer | The contact at that company. |
pipeline_id | integer | Which enquiry pipeline it starts on; the default one if left out. On a PATCH, move it with POST .../stage instead. |
stage_id | integer | The stage; the pipeline's first open stage if left out. |
source_id | integer | Where it came from (see GET /sources). |
product_category | string | What it is for: one of GET /product-categories; the company's default if left out. |
estimated_value | money | What it is worth, in your currency. |
probability | integer | The odds, 0 to 100; the stage's own figure if left out. |
expected_close_date | date | When a decision is expected. |
site_postcode | string | Where the work would be. |
description | string | The long description, up to 20,000 characters. |
owner_user_id | integer | Whose it is; the key's own user if left out. A new owner is emailed. |
lines | array | What is being asked for, as a list of lines (see PUT .../lines). On a POST only; change them afterwards with PUT .../lines. |
fields | object | The 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.
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.
Body
| Field | Type | What it is |
|---|---|---|
title required | string | What it is for, in a line. |
company_id required | integer | The customer (see GET /companies). |
contact_id | integer | The contact at that company. |
pipeline_id | integer | Which enquiry pipeline it starts on; the default one if left out. On a PATCH, move it with POST .../stage instead. |
stage_id | integer | The stage; the pipeline's first open stage if left out. |
source_id | integer | Where it came from (see GET /sources). |
product_category | string | What it is for: one of GET /product-categories; the company's default if left out. |
estimated_value | money | What it is worth, in your currency. |
probability | integer | The odds, 0 to 100; the stage's own figure if left out. |
expected_close_date | date | When a decision is expected. |
site_postcode | string | Where the work would be. |
description | string | The long description, up to 20,000 characters. |
owner_user_id | integer | Whose it is; the key's own user if left out. A new owner is emailed. |
lines | array | What is being asked for, as a list of lines (see PUT .../lines). On a POST only; change them afterwards with PUT .../lines. |
fields | object | The 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.
Body
| Field | Type | What it is |
|---|---|---|
stage_id required | integer | The stage to move to - on any of the company's enquiry pipelines. |
outcome_reason | string | Why, where the stage is won or lost. |
winning_quote_id | integer | When moving to a won stage: which quotation won it. Marks that quotation won and raises its order, as the page does. |
customer_po | string | The customer's order number, for the order raised. |
promised_date | date | What 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.
Body
| Field | Type | What it is |
|---|---|---|
pipeline_id required | integer | One 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
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.
Body
| Field | Type | What it is |
|---|---|---|
lines required | array | The whole set of lines, each as below; an empty list removes them all. |
product_id | integer | A product from the price book; its wording, unit, price and cost fill whatever the line leaves blank. |
description | string | What is asked for. Needed unless a product supplies it. |
quantity required | quantity | How many. |
unit | string | each, bay, m and so on; the product's, or each. |
unit_price | money | Price each. Leave out while it is not yet priced. |
unit_cost | money | Cost each, if known. |
notes | string | A note on the line. |
dim_length | integer | Length in mm, for a product sold at a size. |
dim_width | integer | Width in mm. |
dim_height | integer | Height 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
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
Query
| Name | Type | What it is |
|---|---|---|
page | integer | Which page, counting from 1. Default 1. |
per_page | integer | Rows 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.
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.
Body
| Field | Type | What it is |
|---|---|---|
company_choice | string | existing or new. One of: existing, new. |
company_id | integer | With existing: the company. |
new_company_name | string | With 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_choice | string | existing, new or none. One of: existing, new, none. |
contact_id | integer | With existing: the contact, at that company. |
new_contact_first_name | string | With new: their first name, and new_contact_last_name, new_contact_job_title, new_contact_email, new_contact_phone, new_contact_mobile. |
title required | string | The enquiry's title. |
stage_id | integer | The stage; the default pipeline's first if left out. |
owner_user_id | integer | Who looks after it; the key's own user if left out. |
source_id | integer | The enquiry source; the one called Website if there is one. |
product_category | string | What it is for. |
estimated_value | money | What it is worth. |
probability | integer | The odds; the stage's figure if left out. |
expected_close_date | date | When a decision is expected. |
site_postcode | string | Where the work would be. |
description | string | The description; the message and their answers if left out. |
email_customer | boolean | Whether to send the sender the 'in progress' email, where the company has it switched on. Defaults to the company's setting. |
fields | object | The 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.
Body
| Field | Type | What it is |
|---|---|---|
review_note | string | Why, 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
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.
Query
| Name | Type | What it is |
|---|---|---|
q | string | Search the number, company, enquiry reference and title. |
status | string | draft, sent, accepted, rejected, superseded or expired. One of: draft, sent, accepted, rejected, superseded, expired. |
pipeline | integer | A pipeline id. |
company | integer | A company id. |
enquiry | integer | An enquiry id. |
owner | integer | An owner's user id. |
all | boolean | true for every revision; otherwise only the latest of each number. |
sort | string | recent (the default), number, date, value, company or status. One of: recent, number, date, value, company, status. |
x_<field> | string | Filter on one of your own fields. |
page | integer | Which page, counting from 1. Default 1. |
per_page | integer | Rows 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.
Body
| Field | Type | What it is |
|---|---|---|
company_id required | integer | The customer. |
enquiry_id | integer | The 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_id | integer | The contact; the enquiry's if left out. |
quote_date | date | Dated; today if left out. |
valid_until | date | Valid until; 30 days on if left out. |
discount_pct | number | Whole-quote discount, per cent. |
vat_rate | number | VAT rate; the company's default if left out. |
currency | string | ISO code; the customer's usual currency, else yours. |
fx_rate | number | Units of that currency per one of yours; the company's rate table if left out. |
lead_time | string | Lead time, as written. |
delivery_terms | string | Delivery terms. |
payment_terms | string | Payment terms; the company's default if left out. |
notes | string | Notes printed on it; the enquiry's title if left out. |
owner_user_id | integer | Whose it is; the key's own user if left out. |
pipeline_id | integer | Which quote pipeline it travels; the default if left out. |
lines | array | The lines, each as below. At least one, unless the enquiry supplies them. |
fields | object | The 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).
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.
Body
| Field | Type | What it is |
|---|---|---|
company_id required | integer | The customer. |
enquiry_id | integer | The 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_id | integer | The contact; the enquiry's if left out. |
quote_date | date | Dated; today if left out. |
valid_until | date | Valid until; 30 days on if left out. |
discount_pct | number | Whole-quote discount, per cent. |
vat_rate | number | VAT rate; the company's default if left out. |
currency | string | ISO code; the customer's usual currency, else yours. |
fx_rate | number | Units of that currency per one of yours; the company's rate table if left out. |
lead_time | string | Lead time, as written. |
delivery_terms | string | Delivery terms. |
payment_terms | string | Payment terms; the company's default if left out. |
notes | string | Notes printed on it; the enquiry's title if left out. |
owner_user_id | integer | Whose it is; the key's own user if left out. |
pipeline_id | integer | Which quote pipeline it travels; the default if left out. |
lines | array | The lines, each as below. At least one, unless the enquiry supplies them. |
fields | object | The 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.
Body
| Field | Type | What it is |
|---|---|---|
status required | string | draft, sent, accepted (won), rejected (lost) or expired. One of: draft, sent, accepted, rejected, expired. |
outcome_reason | string | Why, for won or lost. |
customer_po | string | For won: the customer's order number, carried onto the order. |
promised_date | date | For 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.
Body
| Field | Type | What it is |
|---|---|---|
stage_id required | integer | A stage on one of the company's quote pipelines. |
outcome_reason | string | Why, where the stage records won or lost. |
customer_po | string | For a won stage: the customer's order number. |
promised_date | date | For 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
Body
| Field | Type | What it is |
|---|---|---|
pipeline_id required | integer | One 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.
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).
Body
| Field | Type | What it is |
|---|---|---|
to_email | string | Who to; the contact's address if left out. |
subject | string | The subject; the company's own wording if left out. |
message | string | A note above the document, up to 4,000 characters. |
attach_pdf | boolean | Whether the PDF goes with it. Default true. |
include_lines | boolean | Whether 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.
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.
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
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
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.
Query
| Name | Type | What it is |
|---|---|---|
q | string | Search the reference, PO number, company, site and invoice reference. |
status | string | One workshop status. One of: confirmed, drawings, manufacturing, ready, delivered, installed, complete, cancelled. |
pipeline | integer | A pipeline id. |
open | boolean | true for orders still in hand. |
late | boolean | true for orders past their promised date and not delivered. |
uninvoiced | boolean | true for delivered orders with no invoice recorded. |
company | integer | A company id. |
owner | integer | An owner's user id. |
mine | boolean | true for the key's own user's orders. |
archived | boolean | true to include archived orders. |
sort | string | promised (the default), promised_desc, reference, created, value, customer or status. One of: promised, promised_desc, reference, created, value, customer, status. |
x_<field> | string | Filter on one of your own fields. |
page | integer | Which page, counting from 1. Default 1. |
per_page | integer | Rows 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.
Body
| Field | Type | What it is |
|---|---|---|
company_id required | integer | The customer. |
contact_id | integer | The contact. |
enquiry_id | integer | The enquiry it came from; the customer, contact and site postcode are taken from it when left out. |
quote_id | integer | The quotation it came from. To raise an order from a won quotation with its lines, use POST /quotes/{quote_id}/order instead. |
customer_po | string | The customer's own order number. |
order_date | date | Placed on; today if left out. |
promised_date | date | What the customer was promised. |
site_name | string | The site. |
site_address | string | The site's address. |
site_postcode | string | The site's postcode. |
access_notes | string | How to get in. |
vat_rate | number | VAT rate; the company's default if left out. |
currency | string | ISO code; yours if left out. |
fx_rate | number | Units of that currency per one of yours. |
lead_time | string | Lead time. |
notes | string | Notes. |
owner_user_id | integer | Whose it is; the key's own user if left out. |
pipeline_id | integer | Which order pipeline it travels; the default if left out. |
lines required | array | The lines, each as below. At least one. |
fields | object | The 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.
Body
| Field | Type | What it is |
|---|---|---|
customer_po | string | The customer's order number. |
order_date | date | Placed on; today if left out. |
promised_date | date | What 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.
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).
Body
| Field | Type | What it is |
|---|---|---|
company_id required | integer | The customer. |
contact_id | integer | The contact. |
enquiry_id | integer | The enquiry it came from; the customer, contact and site postcode are taken from it when left out. |
quote_id | integer | The quotation it came from. To raise an order from a won quotation with its lines, use POST /quotes/{quote_id}/order instead. |
customer_po | string | The customer's own order number. |
order_date | date | Placed on; today if left out. |
promised_date | date | What the customer was promised. |
site_name | string | The site. |
site_address | string | The site's address. |
site_postcode | string | The site's postcode. |
access_notes | string | How to get in. |
vat_rate | number | VAT rate; the company's default if left out. |
currency | string | ISO code; yours if left out. |
fx_rate | number | Units of that currency per one of yours. |
lead_time | string | Lead time. |
notes | string | Notes. |
owner_user_id | integer | Whose it is; the key's own user if left out. |
pipeline_id | integer | Which order pipeline it travels; the default if left out. |
lines required | array | The lines, each as below. At least one. |
fields | object | The 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.
Body
| Field | Type | What it is |
|---|---|---|
status required | string | confirmed, drawings, manufacturing, ready, delivered, installed, complete or cancelled. One of: confirmed, drawings, manufacturing, ready, delivered, installed, complete, cancelled. |
outcome_reason | string | A 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.
Body
| Field | Type | What it is |
|---|---|---|
stage_id required | integer | A stage on one of the company's order pipelines. |
outcome_reason | string | A 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
Body
| Field | Type | What it is |
|---|---|---|
pipeline_id required | integer | One 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.
Body
| Field | Type | What it is |
|---|---|---|
invoice_ref | string | The invoice number from your accounts package. |
invoiced_at | date | When; 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.
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
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
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.
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.
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.
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.
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.
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.
Query
| Name | Type | What it is |
|---|---|---|
q | string | Search the reference, PO number, company, quotation and order references. |
status | string | draft, sent, paid or cancelled. One of: draft, sent, paid, cancelled. |
pipeline | integer | A pipeline id. |
open | boolean | true for draft and sent invoices. |
overdue | boolean | true for sent invoices past their due date. |
billing | string | part, full or none: how much of the invoice's order is billed. One of: part, full, none. |
company | integer | A company id. |
owner | integer | An owner's user id. |
mine | boolean | true for the key's own user's invoices. |
archived | boolean | true to include archived invoices. |
sort | string | recent (the default), reference, due, value, customer or status. One of: recent, reference, due, value, customer, status. |
x_<field> | string | Filter on one of your own fields. |
page | integer | Which page, counting from 1. Default 1. |
per_page | integer | Rows 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.
Body
| Field | Type | What it is |
|---|---|---|
company_id required | integer | The customer. |
contact_id | integer | The contact. |
order_id | integer | The order it bills. To bill some of an order's lines, use POST /orders/{order_id}/invoice instead, which does the picking. |
quote_id | integer | The quotation. |
enquiry_id | integer | The enquiry. |
customer_po | string | The customer's order number. |
invoice_date | date | Dated; today if left out. |
due_date | date | Payment due; the company's payment days on if left out. |
payment_terms | string | Payment terms, as written. |
discount_pct | number | Whole-invoice discount, per cent; usually nil. |
vat_rate | number | VAT rate; the company's default if left out. |
currency | string | ISO code; yours if left out. |
fx_rate | number | Units of that currency per one of yours. |
notes | string | Notes printed on it. |
owner_user_id | integer | Whose it is; the key's own user if left out. |
pipeline_id | integer | Which invoice pipeline it travels; the default if left out. |
lines required | array | The lines, each as below. At least one. |
fields | object | The 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.
Body
| Field | Type | What it is |
|---|---|---|
lines | array | Which 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_date | date | Dated; today if left out. |
due_date | date | Payment due. |
customer_po | string | The customer's order number; the order's if left out. |
payment_terms | string | Payment terms; the quotation's if left out. |
notes | string | Notes 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.
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).
Body
| Field | Type | What it is |
|---|---|---|
company_id required | integer | The customer. |
contact_id | integer | The contact. |
order_id | integer | The order it bills. To bill some of an order's lines, use POST /orders/{order_id}/invoice instead, which does the picking. |
quote_id | integer | The quotation. |
enquiry_id | integer | The enquiry. |
customer_po | string | The customer's order number. |
invoice_date | date | Dated; today if left out. |
due_date | date | Payment due; the company's payment days on if left out. |
payment_terms | string | Payment terms, as written. |
discount_pct | number | Whole-invoice discount, per cent; usually nil. |
vat_rate | number | VAT rate; the company's default if left out. |
currency | string | ISO code; yours if left out. |
fx_rate | number | Units of that currency per one of yours. |
notes | string | Notes printed on it. |
owner_user_id | integer | Whose it is; the key's own user if left out. |
pipeline_id | integer | Which invoice pipeline it travels; the default if left out. |
lines required | array | The lines, each as below. At least one. |
fields | object | The 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.
Body
| Field | Type | What it is |
|---|---|---|
status required | string | draft, sent, paid or cancelled. One of: draft, sent, paid, cancelled. |
outcome_reason | string | A 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).
Body
| Field | Type | What it is |
|---|---|---|
stage_id required | integer | A stage on one of the company's invoice pipelines. |
outcome_reason | string | A 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
Body
| Field | Type | What it is |
|---|---|---|
pipeline_id required | integer | One 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).
Body
| Field | Type | What it is |
|---|---|---|
to_email | string | Who to; the contact's address if left out. |
message | string | A note above the document, up to 2,000 characters. |
attach_pdf | boolean | Whether 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.
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
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
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.
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
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.
Query
| Name | Type | What it is |
|---|---|---|
q | string | Search the name, code, description and category. |
category | string | One category. |
archived | boolean | true to include withdrawn products. |
uncosted | boolean | true for products with no cost recorded. |
unpriced | boolean | true for products priced per job. |
sort | string | name (the default), name_desc, code, price, price_asc, category, recent or used. One of: name, name_desc, code, price, price_asc, category, recent, used. |
page | integer | Which page, counting from 1. Default 1. |
per_page | integer | Rows 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.
Body
| Field | Type | What it is |
|---|---|---|
code | string | Its code, unique in the price book. |
name required | string | Its name. |
description | string | The wording a line starts with. |
unit | string | What it is sold by: each (the default), bay, m, m², linear m, hour, day, set, pair, or anything you like. |
unit_price | money | Sell price in your currency; leave out for a product priced per job. |
unit_cost | money | Cost; leave out if unknown. Zero means free, not unknown. |
category | string | Its category - what an enquiry can be filed under. |
dimensions | array | Which of length, width and height a line asks for, for a product sold in different sizes. An empty list for one size. |
notes | string | Notes, up to 1,000 characters. |
is_active | boolean | On sale (the default); false withdraws it. |
fields | object | The 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
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.
Body
| Field | Type | What it is |
|---|---|---|
code | string | Its code, unique in the price book. |
name required | string | Its name. |
description | string | The wording a line starts with. |
unit | string | What it is sold by: each (the default), bay, m, m², linear m, hour, day, set, pair, or anything you like. |
unit_price | money | Sell price in your currency; leave out for a product priced per job. |
unit_cost | money | Cost; leave out if unknown. Zero means free, not unknown. |
category | string | Its category - what an enquiry can be filed under. |
dimensions | array | Which of length, width and height a line asks for, for a product sold in different sizes. An empty list for one size. |
notes | string | Notes, up to 1,000 characters. |
is_active | boolean | On sale (the default); false withdraws it. |
fields | object | The 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.
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
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.
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.
Query
| Name | Type | What it is |
|---|---|---|
q | string | Search the title, details and company. |
status | string | open (the default), done or cancelled; all for every status. One of: open, done, cancelled, all. |
assignee | integer | A user id. |
mine | boolean | true for the key's own user's tasks. |
due | string | overdue, today, week or none. One of: overdue, today, week, none. |
sort | string | due (the default), due_desc, priority or created. One of: due, due_desc, priority, created. |
x_<field> | string | Filter on one of your own fields. |
page | integer | Which page, counting from 1. Default 1. |
per_page | integer | Rows 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.
Body
| Field | Type | What it is |
|---|---|---|
title required | string | What has to be done. |
details | string | More detail, up to 10,000 characters. |
due_date | date | When by. |
priority | string | low, normal (the default) or high. One of: low, normal, high. |
assigned_to_user_id | integer | Whose it is; the key's own user if left out. They are emailed, unless it is the key's own user. |
company_id | integer | The company it is about. |
contact_id | integer | The contact. |
enquiry_id | integer | The enquiry. |
order_id | integer | The order. |
fields | object | The 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
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.
Body
| Field | Type | What it is |
|---|---|---|
title required | string | What has to be done. |
details | string | More detail, up to 10,000 characters. |
due_date | date | When by. |
priority | string | low, normal (the default) or high. One of: low, normal, high. |
assigned_to_user_id | integer | Whose it is; the key's own user if left out. They are emailed, unless it is the key's own user. |
company_id | integer | The company it is about. |
contact_id | integer | The contact. |
enquiry_id | integer | The enquiry. |
order_id | integer | The order. |
fields | object | The 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
Body
| Field | Type | What it is |
|---|---|---|
status required | string | open, 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.
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.
Query
| Name | Type | What it is |
|---|---|---|
q | string | Search the subject, detail and company. |
type | string | One activity type. One of: call, email, meeting, site_visit, note, other. |
user | integer | Who logged it: a user id. |
days | integer | Only the last so many days. |
page | integer | Which page, counting from 1. Default 1. |
per_page | integer | Rows 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.
Body
| Field | Type | What it is |
|---|---|---|
activity_type | string | call, email, meeting, site_visit, note (the default) or other. One of: call, email, meeting, site_visit, note, other. |
subject required | string | What it was, in a line. |
body | string | The detail, up to 20,000 characters. @Name tells a colleague, as on the form. |
occurred_at | datetime | When; now if left out. |
company_id | integer | The company. At least one of company, contact or enquiry is needed. |
contact_id | integer | The contact. |
enquiry_id | integer | The 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
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.
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.
Query
| Name | Type | What it is |
|---|---|---|
q | string | Search the file name, description, company and references. |
company | integer | A company id. |
user | integer | Who uploaded it: a user id. |
days | integer | Only the last so many days. |
sort | string | recent (the default), oldest, name, name_desc, size or size_asc. One of: recent, oldest, name, name_desc, size, size_asc. |
page | integer | Which page, counting from 1. Default 1. |
per_page | integer | Rows 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.
Form parts
| Field | Type | What it is |
|---|---|---|
files required | file | One 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_id | integer | The record to file them against: at least one of these. |
contact_id | integer | A contact. |
enquiry_id | integer | An enquiry. |
quote_id | integer | A quotation. |
order_id | integer | An order. |
record_id | integer | A record on one of your own tabs. |
description | string | What 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.
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.
Query
| Name | Type | What it is |
|---|---|---|
inline | boolean | true 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
Body
| Field | Type | What it is |
|---|---|---|
description required | string | What 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.
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.
Query
| Name | Type | What it is |
|---|---|---|
q | string | Search the record's values, reference, company and enquiry. |
company | integer | A company id. |
owner | integer | A user id, for a tab with a link to a person. |
archived | boolean | true to include archived records. |
sort | string | recent (the default), created, oldest, reference, title or company. One of: recent, created, oldest, reference, title, company. |
x_<field> | string | Filter on one of the tab's own fields: x_<field>=value, or x_<field>.from and x_<field>.to. |
page | integer | Which page, counting from 1. Default 1. |
per_page | integer | Rows 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.
Body
| Field | Type | What it is |
|---|---|---|
fields required | object | The 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.
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.
Body
| Field | Type | What it is |
|---|---|---|
fields required | object | The 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
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
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.
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.
Query
| Name | Type | What it is |
|---|---|---|
from | date | The first day; today if left out. |
to | date | The last day, inclusive; 30 days on if left out. At most a year. |
kinds | string | Which 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. |
owner | integer | Whose diary: a user id. |
mine | boolean | true for the key's own user's diary. |
done | boolean | true 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.
Query
| Name | Type | What it is |
|---|---|---|
months | integer | 3, 6, 12, 24 or 36; 12 if left out. One of: 3, 6, 12, 24, 36. |
owner | integer | One person's share: a user id. |
mine | boolean | true 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.
Query
| Name | Type | What it is |
|---|---|---|
range | string | The 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. |
from | date | With range=custom: the first day. |
to | date | With range=custom: the last day. |
compare | string | What to set it against: previous, year, none. One of: previous, year, none. |
owner | integer | One person's share: a user id. |
mine | boolean | true 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.
Query
| Name | Type | What it is |
|---|---|---|
owner | integer | One person's share: a user id. |
mine | boolean | true 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.
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.
Query
| Name | Type | What it is |
|---|---|---|
dataset required | string | What it is about: a key from GET /reports/datasets. Default enquiries. |
dim | string | What to group by: a dimension of the dataset. Default stage. |
measure | string | Which figures, repeated for more than one, up to four. Default count. |
date | string | Which date the period applies to: a date field of the dataset. |
range | string | The 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. |
from | date | With range=custom: the first day. |
to | date | With range=custom: the last day. |
compare | string | What to set it against: previous, year, none. One of: previous, year, none. |
owner | string | A user id, or mine. |
status | string | A 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.
Query
| Name | Type | What it is |
|---|---|---|
dataset required | string | What it lists: a key from GET /reports/datasets. |
col | string | Which columns, repeated, up to 16; the dataset's own if left out. |
sort | string | A column key to sort by. |
dir | string | asc or desc. One of: asc, desc. |
date | string | Which date the period applies to. |
range | string | A 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. |
from | date | With range=custom: the first day. |
to | date | With range=custom: the last day. |
owner | string | A user id, or mine. |
status | string | A status the dataset offers. |
q | string | A search within the rows. |
limit | integer | At 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.
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
Body
| Field | Type | What it is |
|---|---|---|
name required | string | Its name, unique in the company. |
description | string | What it is for. |
visibility | string | shared (the default) or private to the key's own user. One of: shared, private. |
spec required | object | The 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.
Query
| Name | Type | What it is |
|---|---|---|
range | string | A 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. |
limit | integer | For 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.
Body
| Field | Type | What it is |
|---|---|---|
name required | string | Its name, unique in the company. |
description | string | What it is for. |
visibility | string | shared (the default) or private to the key's own user. One of: shared, private. |
spec required | object | The 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
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.
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
Body
| Field | Type | What it is |
|---|---|---|
name required | string | Its name, unique in the company. |
dataset required | string | The list it is over: enquiries, quotes, orders, invoices, tasks, companies, contacts, or records:<tab id>. Fixed once made. |
filters | object | The 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. |
columns | array | The column keys to show, in order, or null for the list's own. |
description | string | What it is for. |
visibility | string | shared (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
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.
Query
| Name | Type | What it is |
|---|---|---|
sort | string | An ordering the list offers, overriding the queue's. |
page | integer | Which page, counting from 1. Default 1. |
per_page | integer | Rows 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.
Body
| Field | Type | What it is |
|---|---|---|
name required | string | Its name, unique in the company. |
dataset required | string | The list it is over: enquiries, quotes, orders, invoices, tasks, companies, contacts, or records:<tab id>. Fixed once made. |
filters | object | The 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. |
columns | array | The column keys to show, in order, or null for the list's own. |
description | string | What it is for. |
visibility | string | shared (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
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.
Query
| Name | Type | What it is |
|---|---|---|
company | integer | Filed against a company: its id. |
contact | integer | A contact's id. |
enquiry | integer | An enquiry's id - which answers for the whole job. |
quote | integer | A quotation's id. |
order | integer | An order's id. |
invoice | integer | An invoice's id. |
limit | integer | At 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.
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.
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.
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.
Query
| Name | Type | What it is |
|---|---|---|
limit | integer | At 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.
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.
Body
| Field | Type | What it is |
|---|---|---|
on required | boolean | true 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"
Search
One box across everything.
GET
/api/v1/search
Search everything
Companies, contacts, enquiries, quotations, orders, invoices and documents, a few of each, grouped - only the kinds in the key's role. Each hit carries its id, a title, a line of detail and the record's page.
Query
| Name | Type | What it is |
|---|---|---|
q required | string | What to look for; at least two characters. |
limit | integer | At most so many of each kind; 5 if left out, 25 at most. |
Answers 200
A SearchResult. See SearchResult.
Example call
curl \
-H "Authorization: Bearer $MANUFACTIQ_KEY" \
"https://manufactiq.co.uk/api/v1/search?q=racking"
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.
Query
| Name | Type | What it is |
|---|---|---|
entity | string | A kind of record: company, contact, enquiry, quote, order, invoice, product, task, api_key or tenant_settings. |
record_id | integer | One record of that kind: its history. |
limit | integer | At 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.
Query
| Name | Type | What it is |
|---|---|---|
inactive | boolean | true 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.
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.
Query
| Name | Type | What it is |
|---|---|---|
entity | string | enquiry, 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
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.
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.
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.
Query
| Name | Type | What it is |
|---|---|---|
entity | string | One 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.
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
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.
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.
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:
| Field | Type | What it is |
|---|---|---|
web_url | string | The record's own page in the CRM. |
fields | object | The record's extra fields, by name, where the tab takes them. |
RecordCompany22 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The company's id. |
name | string | The company's name. |
company_type | string | prospect, customer, main_contractor, architect, supplier or other. |
sector | string | Free text: what they do. |
phone | string | Switchboard number. |
email | string | General address. |
website | string | Website. |
address_line1 | string | Address, first line. |
address_line2 | string | Address, second line. |
city | string | Town or city. |
county | string | County. |
postcode | string | Postcode, tidied to UK form where it is one. |
country | string | Country; United Kingdom unless said. |
currency | string | The currency they are usually quoted in (ISO code), or null for yours. |
notes | string | Free notes. |
owner_user_id | integer | The account owner's user id. |
owner_name | string | The account owner's name. |
contact_count | integer | Live contacts at the company. |
open_enquiry_count | integer | Enquiries still open. |
is_archived | boolean | Archived rather than deleted. |
created_at | datetime | When the record was made. |
updated_at | datetime | When it last changed. |
RecordContact15 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The contact's id. |
company_id | integer | The company they are at, or null. |
company_name | string | That company's name. |
first_name | string | First name. |
last_name | string | Surname. |
full_name | string | Both together. |
job_title | string | Job title. |
email | string | Email address. |
phone | string | Telephone. |
mobile | string | Mobile. |
is_primary | boolean | The main contact at their company; one per company. |
notes | string | Free notes. |
is_archived | boolean | Archived rather than deleted. |
created_at | datetime | When the record was made. |
updated_at | datetime | When it last changed. |
RecordEnquiry32 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The enquiry's id. |
reference | string | Its reference, in the company's own format - carried by its quote, order and invoices. |
title | string | What it is for, in a line. |
company_id | integer | The customer. |
company_name | string | The customer's name. |
contact_id | integer | The contact, or null. |
contact_name | string | The contact's name. |
contact_email | string | The contact's address. |
pipeline_id | integer | The pipeline it is on. |
pipeline_name | string | That pipeline's name. |
stage_id | integer | The stage it is at. |
stage_name | string | That stage's name. |
stage_outcome | string | open, won or lost - what the stage means. |
source_id | integer | Where it came from (an enquiry source), or null. |
source_name | string | That source's name. |
product_category | string | What it is for: a category from the price book. |
estimated_value | money | What it is worth, in your currency. |
probability | integer | The odds, 0 to 100. |
expected_close_date | date | When a decision is expected. |
site_postcode | string | Where the work would be. |
description | string | The long description. |
lines_total | money | The total of its priced lines. |
lines_cost | money | The total cost of its costed lines. |
unpriced_lines | integer | Lines still without a price. |
outcome_reason | string | Why it was won or lost. |
closed_at | datetime | When it was won or lost, or null while open. |
owner_user_id | integer | Whose it is. |
owner_name | string | Their name. |
quote_count | integer | Quotations raised for it, every revision counted. |
is_archived | boolean | Archived rather than deleted. |
created_at | datetime | When the record was made. |
updated_at | datetime | When it last changed. |
RecordEnquiryLine16 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The line's id. |
line_no | integer | Its position. |
product_id | integer | The product it came from, or null for free text. |
product_code | string | That product's code. |
product_name | string | That product's name. |
description | string | What is being asked for. |
quantity | quantity | How many. |
unit | string | each, bay, m and so on. |
dim_length | integer | Length in mm, where asked for at a size. |
dim_width | integer | Width in mm. |
dim_height | integer | Height in mm. |
unit_price | money | Price each, or null while unpriced. |
unit_cost | money | Cost each, or null if unknown. |
line_total | money | quantity × unit_price. |
line_cost | money | quantity × unit_cost, or null. |
notes | string | A note on the line. |
RecordQuote42 fields
| Field | Type | What it is |
|---|---|---|
id | integer | This revision's id. |
quote_number | string | The quotation's number - its enquiry's reference. |
revision | integer | Which revision this is, from 1. |
latest_revision | integer | The newest revision of the number. |
status | string | draft, sent, accepted (won), rejected (lost), superseded or expired. |
enquiry_id | integer | The enquiry it is for, or null. |
enquiry_reference | string | That enquiry's reference. |
enquiry_title | string | That enquiry's title. |
company_id | integer | The customer. |
company_name | string | The customer's name. |
contact_id | integer | The contact, or null. |
contact_name | string | The contact's name. |
contact_email | string | The contact's address. |
pipeline_id | integer | The quote pipeline it is on. |
pipeline_name | string | That pipeline's name. |
stage_id | integer | The stage it is at. |
stage_name | string | That stage's name. |
quote_date | date | Dated. |
valid_until | date | Valid until. |
discount_pct | number | Whole-quote discount, per cent. |
currency | string | The document's currency (ISO code). |
fx_rate | number | Units of that currency per one of yours, fixed when it was raised. |
vat_rate | number | VAT rate applied, per cent. |
net_subtotal | money | The lines added up, after their own discounts. |
discount_amount | money | The whole-document discount taken off. |
net_total | money | Net of VAT, after discount. |
vat_amount | money | VAT. |
gross_total | money | Total payable. |
total_cost | money | Cost of the costed lines. |
uncosted_lines | integer | Lines with no cost recorded, so the margin is incomplete. |
lead_time | string | Lead time, as written. |
delivery_terms | string | Delivery terms. |
payment_terms | string | Payment terms. |
notes | string | Notes printed on it. |
outcome_reason | string | Why it was won or lost. |
sent_at | datetime | When it was first sent. |
decided_at | datetime | When it was won or lost. |
owner_user_id | integer | Whose it is. |
owner_name | string | Their name. |
line_count | integer | How many lines. |
created_at | datetime | When the record was made. |
updated_at | datetime | When it last changed. |
RecordQuoteLine15 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The line's id. |
line_no | integer | Its position. |
product_id | integer | The product it came from, or null. |
product_code | string | The code printed. |
description | string | The wording printed. |
quantity | quantity | How many. |
unit | string | each, bay, m and so on. |
dim_length | integer | Length in mm, where sold at a size. |
dim_width | integer | Width in mm. |
dim_height | integer | Height in mm. |
unit_price | money | Price each. |
line_discount_pct | number | Discount on this line, per cent. |
line_total | money | After the line's own discount. |
unit_cost | money | Cost each, or null. |
line_cost | money | quantity × unit_cost, or null. |
RecordOrder50 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The order's id. |
reference | string | Its reference - the enquiry's, with -2 for a second order on the same job. |
status | string | confirmed, drawings, manufacturing, ready, delivered, installed, complete or cancelled. |
status_label | string | What the company calls that step. |
quote_id | integer | The quotation it came from, or null. |
quote_number | string | That quotation's number. |
quote_revision | integer | That quotation's revision. |
enquiry_id | integer | The enquiry, or null. |
enquiry_reference | string | That enquiry's reference. |
enquiry_title | string | That enquiry's title. |
company_id | integer | The customer. |
company_name | string | The customer's name. |
contact_id | integer | The contact, or null. |
contact_name | string | The contact's name. |
pipeline_id | integer | The order pipeline it is on. |
pipeline_name | string | That pipeline's name. |
stage_id | integer | The stage it is at. |
stage_name | string | That stage's name. |
customer_po | string | The customer's own order number. |
order_date | date | Placed on. |
promised_date | date | What the customer was promised. |
delivered_date | date | When it was delivered. |
installed_date | date | When it was installed. |
site_name | string | The site. |
site_address | string | The site's address. |
site_postcode | string | The site's postcode. |
access_notes | string | How to get in. |
currency | string | The document's currency (ISO code). |
fx_rate | number | Units of that currency per one of yours, fixed when it was raised. |
vat_rate | number | VAT rate applied, per cent. |
net_subtotal | money | The lines added up, after their own discounts. |
discount_amount | money | The whole-document discount taken off. |
net_total | money | Net of VAT, after discount. |
vat_amount | money | VAT. |
gross_total | money | Total payable. |
total_cost | money | Cost of the costed lines. |
uncosted_lines | integer | Lines with no cost recorded, so the margin is incomplete. |
invoiced_at | date | When it was fully billed, or null. |
invoice_ref | string | The invoice that billed it, or one typed from your accounts package. |
lead_time | string | Lead time, as written. |
notes | string | Notes. |
outcome_reason | string | The note on its last status change. |
completed_at | datetime | When it was completed or cancelled. |
owner_user_id | integer | Whose it is. |
owner_name | string | Their name. |
is_late | boolean | Past its promised date and not yet delivered. |
days_late | integer | Days past the promised date (negative while there is time). |
is_archived | boolean | Archived rather than deleted. |
created_at | datetime | When the record was made. |
updated_at | datetime | When it last changed. |
RecordOrderLine17 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The line's id - kept for life, because invoices point at it. |
line_no | integer | Its position. |
quote_line_id | integer | The quote line it was copied from, or null. |
product_id | integer | The product, or null. |
product_code | string | The code. |
description | string | The wording. |
quantity | quantity | How many ordered. |
quantity_delivered | quantity | How many have gone out. |
unit | string | each, bay, m and so on. |
dim_length | integer | Length in mm, where sold at a size. |
dim_width | integer | Width in mm. |
dim_height | integer | Height in mm. |
unit_price | money | Price each, discounts already folded in. |
unit_cost | money | Cost each, or null. |
line_total | money | quantity × unit_price. |
line_cost | money | quantity × unit_cost, or null. |
notes | string | A note on the line. |
RecordInvoice47 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The invoice's id. |
reference | string | Its reference - the order's, with -2, -3 for further invoices on the job. |
status | string | draft, sent, paid or cancelled. |
quote_id | integer | The quotation, or null. |
quote_number | string | That quotation's number. |
order_id | integer | The order it bills, or null for one raised on its own. |
order_reference | string | That order's reference. |
enquiry_id | integer | The enquiry, or null. |
enquiry_reference | string | That enquiry's reference. |
company_id | integer | The customer. |
company_name | string | The customer's name. |
contact_id | integer | The contact, or null. |
contact_name | string | The contact's name. |
contact_email | string | The contact's address. |
pipeline_id | integer | The invoice pipeline it is on. |
pipeline_name | string | That pipeline's name. |
stage_id | integer | The stage it is at. |
stage_name | string | That stage's name. |
customer_po | string | The customer's own order number. |
invoice_date | date | Dated. |
due_date | date | Payment due. |
payment_terms | string | Payment terms, as written. |
discount_pct | number | Whole-invoice discount, per cent; usually nil. |
currency | string | The document's currency (ISO code). |
fx_rate | number | Units of that currency per one of yours, fixed when it was raised. |
vat_rate | number | VAT rate applied, per cent. |
net_subtotal | money | The lines added up, after their own discounts. |
discount_amount | money | The whole-document discount taken off. |
net_total | money | Net of VAT, after discount. |
vat_amount | money | VAT. |
gross_total | money | Total payable. |
total_cost | money | Cost of the costed lines. |
uncosted_lines | integer | Lines with no cost recorded, so the margin is incomplete. |
notes | string | Notes printed on it. |
outcome_reason | string | The note on its last status change. |
sent_at | datetime | When it was sent. |
paid_at | date | When it was paid. |
owner_user_id | integer | Whose it is. |
owner_name | string | Their name. |
is_overdue | boolean | Sent and past its due date. |
days_overdue | integer | Days past the due date (negative while there is time). |
order_net_total | money | The order's net value, where it bills one. |
order_remaining_net | money | What is still to bill on that order, by value. |
order_is_settled | boolean | Whether that order is now fully billed. |
is_archived | boolean | Archived rather than deleted. |
created_at | datetime | When the record was made. |
updated_at | datetime | When it last changed. |
RecordInvoiceLine13 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The line's id. |
line_no | integer | Its position. |
order_line_id | integer | The order line it bills, or null for a line not on the order. |
product_id | integer | The product, or null. |
product_code | string | The code. |
description | string | The wording. |
quantity | quantity | How many are billed on this invoice. |
unit | string | each, bay, m and so on. |
unit_price | money | Price each. |
unit_cost | money | Cost each, or null. |
line_total | money | quantity × unit_price. |
line_cost | money | quantity × unit_cost, or null. |
notes | string | A note on the line. |
RecordBillableLine12 fields
| Field | Type | What it is |
|---|---|---|
order_line_id | integer | The order line. |
line_no | integer | Its position on the order. |
product_id | integer | The product, or null. |
product_code | string | The code. |
description | string | The wording. |
quantity | quantity | Ordered. |
quantity_invoiced | quantity | Already on an invoice that is not cancelled. |
quantity_remaining | quantity | Left to invoice. |
is_fully_invoiced | boolean | Nothing left on it. |
unit | string | each, bay, m and so on. |
bill_price | money | The price agreed: the line total spread over the quantity. |
unit_price | money | The order line's price each. |
RecordCoverage6 fields
| Field | Type | What it is |
|---|---|---|
net_total | money | The order's net value. |
billed_net | money | Invoiced so far, net, not counting cancelled invoices. |
remaining_net | money | Still to bill, never below zero. |
invoice_count | integer | Invoices raised against it that are not cancelled. |
is_settled | boolean | Fully billed, within a penny. |
percent | integer | How much of it is billed, 0 to 100. |
RecordProduct15 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The product's id. |
code | string | Its code, unique in your price book, or null. |
name | string | Its name. |
description | string | The wording a line starts with. |
unit | string | What it is sold by: each, bay, m and so on. |
dimensions | array | Which of length, width, height a line asks for; empty for one size. |
unit_price | money | Sell price in your currency, or null when priced per job. |
unit_cost | money | Cost, or null when unknown - which is what switches margin reporting off for it. |
category | string | Its category - what an enquiry can be filed under. |
notes | string | Notes. |
is_active | boolean | On sale; false once withdrawn. |
times_quoted | integer | Quote lines that came from it. |
times_enquired | integer | Enquiry lines that came from it. |
created_at | datetime | When the record was made. |
updated_at | datetime | When it last changed. |
RecordTask21 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The task's id. |
title | string | What has to be done. |
details | string | More detail. |
due_date | date | When by. |
priority | string | low, normal or high. |
status | string | open, done or cancelled. |
assigned_to_user_id | integer | Whose it is. |
assignee_name | string | Their name. |
company_id | integer | The company it is about, or null. |
company_name | string | That company's name. |
contact_id | integer | The contact, or null. |
contact_name | string | That contact's name. |
enquiry_id | integer | The enquiry, or null. |
enquiry_reference | string | That enquiry's reference. |
order_id | integer | The order, or null. |
order_reference | string | That order's reference. |
completed_at | datetime | When it was done. |
is_overdue | boolean | Open and past its due date. |
created_by | integer | Who made it. |
created_at | datetime | When the record was made. |
updated_at | datetime | When it last changed. |
RecordActivity14 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The entry's id. |
activity_type | string | call, email, meeting, site_visit, note or other. |
subject | string | What it was. |
body | string | The detail. |
occurred_at | datetime | When. |
user_id | integer | Who logged it. |
logged_by | string | Their name. |
company_id | integer | The company, or null. |
company_name | string | That company's name. |
contact_id | integer | The contact, or null. |
contact_name | string | That contact's name. |
enquiry_id | integer | The enquiry, or null. |
enquiry_reference | string | That enquiry's reference. |
created_at | datetime | When it was logged. |
RecordDocument20 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The document's id. |
filename | string | The name it was uploaded with, and downloads as. |
content_type | string | Its media type, from the extension. |
byte_size | integer | Size in bytes. |
checksum | string | SHA-256 of the file. |
description | string | What it is. |
company_id | integer | The customer it is held for. |
company_name | string | That company's name. |
contact_id | integer | The contact it was filed against, or null. |
enquiry_id | integer | The enquiry, or null. |
enquiry_reference | string | That enquiry's reference. |
quote_id | integer | The quotation, or null. |
quote_number | string | That quotation's number. |
order_id | integer | The order, or null. |
order_reference | string | That order's reference. |
record_id | integer | The record on one of your own tabs, or null. |
record_reference | string | That record's reference. |
uploaded_by | integer | Who uploaded it. |
uploaded_by_name | string | Their name. |
created_at | datetime | When. |
RecordRecord15 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The record's id. |
module_id | integer | The tab it is on. |
reference | string | Its reference, where the tab numbers its records. |
title | string | Its name. |
company_id | integer | The company it is linked to, or null. |
company_name | string | That company's name. |
contact_id | integer | The contact, or null. |
contact_name | string | That contact's name. |
enquiry_id | integer | The enquiry, or null. |
enquiry_reference | string | That enquiry's reference. |
owner_user_id | integer | The person it is linked to, or null. |
owner_name | string | Their name. |
is_archived | boolean | Archived rather than deleted. |
created_at | datetime | When the record was made. |
updated_at | datetime | When it last changed. |
RecordEmail17 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The message's id. |
subject | string | Subject line. |
from_address | string | Who sent it. |
from_name | string | Their name as sent. |
sent_at | datetime | When it was sent. |
received_at | datetime | When it was captured. |
visibility | string | shared, or private to whoever captured it. |
match_rule | string | How it was filed: job, thread, token, contact, domain or none. |
company_id | integer | The company it is filed against, or null. |
company_name | string | That company's name. |
contact_id | integer | The contact, or null. |
enquiry_id | integer | The enquiry, or null. |
enquiry_reference | string | That enquiry's reference. |
quote_id | integer | The quotation, or null. |
order_id | integer | The order, or null. |
invoice_id | integer | The invoice, or null. |
captured_by | string | Whose capture address caught it. |
RecordEmailAttachment6 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The attachment's id. |
filename | string | Its name. |
content_type | string | Its media type. |
byte_size | integer | Size in bytes. |
is_inline | boolean | Part of the message's own layout (a signature image) rather than a file sent. |
refused_reason | string | Why the file was not kept, or null. |
RecordUser7 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The user's id - what owner and assignee fields take. |
full_name | string | Their name. |
email | string | Their address. |
role | string | tenant_admin or standard. |
role_name | string | Administrator, Standard, or the company's own role. |
is_active | boolean | Whether they can sign in. |
last_login_at | datetime | When they last signed in. |
RecordPipeline9 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The pipeline's id. |
entity | string | enquiry, quote, order or invoice. |
name | string | Its name. |
description | string | What it is for. |
is_default | boolean | Where a new record of its kind starts. |
is_active | boolean | Offered on forms and boards. |
sort_order | integer | Its position. |
stages | array | Its stages, in order: id, name, sort_order, outcome, maps_to, default_probability, is_active. |
rules | array | What moves records along it: trigger_key, after_days, target_stage_id, target_name, is_active. |
RecordStage8 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The stage's id. |
pipeline_id | integer | Its pipeline. |
name | string | Its name. |
sort_order | integer | Its position. |
outcome | string | open, won or lost. |
maps_to | string | The fixed status a quote, order or invoice stage records; null on an enquiry stage. |
default_probability | integer | The odds a typical enquiry has here. |
is_active | boolean | Still offered. |
RecordSource4 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The source's id. |
name | string | Its name. |
sort_order | integer | Its position. |
is_active | boolean | Still offered. |
RecordRole5 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The role's id. |
name | string | Its name. |
tabs | array | The tab keys it includes. |
people | integer | How many hold it. |
active_people | integer | How many of them are active. |
RecordApiKey11 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The key's id. |
name | string | What it was called. |
key_prefix | string | The start of the key, to tell it apart. |
scope | string | read or write. |
user_id | integer | The account it acts as. |
user_name | string | Their name. |
expires_at | datetime | When it stops, or null. |
last_used_at | datetime | When it was last used. |
use_count | integer | How many requests it has made. |
revoked_at | datetime | When it was revoked, or null. |
created_at | datetime | When it was made. |
RecordFieldDefinition8 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The field's id. |
name | string | Its key - how it is sent and answered under 'fields'. |
label | string | What the form calls it. |
field_type | string | text, textarea, number, money, date, datetime, select, checkbox, or a link type on a tab of your own. |
options | array | The choices of a select field. |
hint | string | The help under the box. |
is_required | boolean | Must be filled in. |
sort_order | integer | Its position. |
RecordTab8 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The tab's id. |
name | string | Its name. |
slug | string | Its address segment - what the records routes take. |
item_name | string | What one record is called. |
reference_prefix | string | The prefix its references take, or null if not numbered. |
description | string | What it is for. |
is_active | boolean | Shown in the menu. |
fields | array | Its fields, each as a FieldDefinition with is_title and show_in_list as well. |
RecordQueue11 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The queue's id. |
name | string | Its name. |
dataset | string | The list it is over: enquiries, quotes, orders, invoices, tasks, companies, contacts, or records:<tab id>. |
filters | object | The list page's arguments it carries. |
filter_text | array | The same, in words. |
columns | array | Its column keys, or null for the list's own. |
description | string | What it is for. |
visibility | string | shared or private. |
owner_user_id | integer | Who made it. |
owner_name | string | Their name. |
count | integer | How many records are in it now. |
RecordSavedReport8 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The report's id. |
name | string | Its name. |
description | string | What it is for. |
kind | string | totals or list. |
spec | object | Its specification: the same keys the report routes take. |
visibility | string | shared or private. |
owner_user_id | integer | Who made it. |
owner_name | string | Their name. |
RecordAutomation14 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The automation's id. |
name | string | Its name. |
sentence | string | What it does, in a line. |
entity | string | The tab it watches. |
event | string | created, updated, archived or date. |
is_active | boolean | Switched on. |
problems | array | What stops it being switched on. |
run_count | integer | How many times it has acted. |
last_run_at | datetime | When it last acted. |
failure_streak | integer | Failures in a row. |
off_reason | string | Why it switched itself off, if it did. |
definition | object | The trigger, conditions and steps, as the builder stores them. |
created_at | datetime | When the record was made. |
updated_at | datetime | When it last changed. |
RecordAutomationRun12 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The run's id. |
automation_id | integer | Which automation. |
automation_name | string | Its name. |
entity | string | The tab of the record it acted on. |
record_id | integer | The record. |
record_label | string | The record's reference or name. |
cause | string | What set it off. |
outcome | string | done, partly, failed or nothing. |
summary | string | What happened, in a line. |
detail | array | What each step did. |
actor_name | string | Who made the change that set it off. |
created_at | datetime | When. |
RecordAuditEntry10 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The entry's id. |
entity | string | The kind of record: company, enquiry, quote, order, invoice, product, task, contact, api_key, tenant_settings. |
record_id | integer | Which record. |
record_label | string | Its reference or name at the time. |
action | string | created, updated, archived, restored, deleted or status_changed. |
actor_user_id | integer | Who, or null for the system. |
actor_name | string | Their name - with the API key's name when it was a program. |
changes | object | Field name to {from, to}. |
summary | string | The change in a line. |
created_at | datetime | When. |
RecordCalendarEvent15 fields
| Field | Type | What it is |
|---|---|---|
kind | string | meeting, note, task, enquiry, quote or order. |
id | integer | The record's id. |
on | date | The day. |
at | datetime | The time, for a call or meeting; null for an all-day item. |
ends_at | datetime | Half an hour on, for a call or meeting. |
title | string | What it is. |
ref | string | The record's reference, where it has one. |
state | string | Its status or stage. |
done | boolean | Already happened or completed. |
value | money | What it is worth, where it is worth something. |
company_id | integer | The company, or null. |
company_name | string | Its name. |
enquiry_id | integer | The enquiry, or null. |
owner_user_id | integer | Whose it is. |
owner_name | string | Their name. |
RecordWebSubmission27 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The submission's id. |
status | string | pending, approved or rejected. |
received_at | datetime | When the website sent it. |
name | string | The sender's name. |
email | string | The sender's address. |
company | string | The company they gave. |
job_title | string | Their job title. |
phone | string | Telephone. |
mobile | string | Mobile. |
address_line1 | string | Address. |
address_line2 | string | Address, second line. |
city | string | Town or city. |
county | string | County. |
postcode | string | Postcode. |
site_postcode | string | Where the work would be. |
product | string | What it is for. |
budget | string | The budget band. |
timescale | string | When it is needed. |
heard_about | string | How they heard of you. |
subject | string | Subject. |
message | string | What they wrote. |
page | string | The page of your site the form was on. |
enquiry_id | integer | The enquiry it became, once approved. |
enquiry_reference | string | That enquiry's reference. |
reviewer_name | string | Who approved or rejected it. |
reviewed_at | datetime | When. |
review_note | string | Why it was rejected. |
RecordIndex6 fields
| Field | Type | What it is |
|---|---|---|
name | string | ManufactIQ API. |
version | string | The API version in every address. |
application | string | The CRM's own version. |
docs_url | string | The reference. |
openapi_url | string | The OpenAPI document. |
authenticate | string | How to send a key. |
RecordMe7 fields
| Field | Type | What it is |
|---|---|---|
key | object | The key, as an ApiKey. |
user | object | The person the key acts as, as a User. |
company | object | id, name, slug and plan. |
scope | string | read or write. |
rate_limit | object | per_minute, and remaining in this minute. |
server_time | datetime | The server's clock, in its own time. |
version | string | The API version. |
RecordOpenAPI3 fields
| Field | Type | What it is |
|---|---|---|
openapi | string | 3.0.3. |
paths | object | Every route. |
components | object | Every schema. |
RecordDeleted3 fields
| Field | Type | What it is |
|---|---|---|
deleted | boolean | true. |
id | integer | What was deleted. |
name | string | What it was called. |
RecordAction2 fields
| Field | Type | What it is |
|---|---|---|
ok | boolean | true. |
messages | array | What the CRM would have said to a person doing the same thing on screen. |
RecordLinkedRecord8 fields
| Field | Type | What it is |
|---|---|---|
id | integer | The record's id. |
reference | string | Its reference. |
title | string | Its name. |
created_at | datetime | When. |
module_id | integer | The tab it is on. |
module_name | string | That tab's name. |
slug | string | That tab's address segment. |
item_name | string | What one record on that tab is called. |
RecordSearchResult1 fields
| Field | Type | What it is |
|---|---|---|
groups | array | One group per kind with hits: key, label, and items of {id, title, sub, web_url}. |
RecordSalesReport14 fields
| Field | Type | What it is |
|---|---|---|
months | integer | The period, in months. |
owner_id | integer | Whose share, or null for everybody. |
generated_at | datetime | When. |
performance | object | Won, lost and open by month, with win rate, average deal and the sales cycle. |
forecast | array | The open pipeline by expected close month, with weighted values. |
by_owner | array | Won and lost by person. |
by_category | array | Won and lost by product category. |
by_source | array | Won and lost by enquiry source. |
top_customers | array | The customers who bought most. |
quotes | object | Quotation conversion, or null for a role without quotes. |
lost_reasons | array | Why work was lost, by reason. |
lost_total | integer | How many were lost. |
margin | object | The margin quoted, or null for a role without quotes. |
monthly | array | Won value by month. |
RecordKpiHub11 fields
| Field | Type | What it is |
|---|---|---|
period | object | from, to and label. |
comparison | object | The period it is set against, or null. |
compare_label | string | What the comparison is called. |
sales | object | kpis, snapshots, stage_rows, by_product, by_source - or null. |
workshop | object | kpis, snapshots, load, by_area - or null. |
cash | object | kpis, snapshots, aged, aged_total - or null. |
customers | object | kpis and the tables about customers - or null. |
people | object | Each person's figures - or null. |
tabs | array | A block per tab of your own that carries dates. |
fields | array | A block per extra field worth grouping by. |
overview | object | The lead tiles and snapshots from every section. |
RecordDashboard6 fields
| Field | Type | What it is |
|---|---|---|
headline | object | Open pipeline, weighted forecast, won and lost this month and more. |
conversion | object | Won, lost and the rate over twelve months. |
pipeline_by_stage | array | Open enquiries and their value at each stage. |
order_book | object | Open orders, their value, late ones, due this week, delivered but not invoiced. |
invoice_book | object | Drafts, outstanding, overdue and billed this month. |
attention | array | What needs a person today: tone, kind, title, detail, web_url. |
RecordDataset8 fields
| Field | Type | What it is |
|---|---|---|
key | string | What the report routes take as dataset. |
label | string | What it is called. |
dimensions | array | What it can be grouped by: key and label. |
measures | array | Its figures: key, label, format (count, money, pct, days, number) and hint. |
dates | array | The date fields a period can apply to. |
filters | array | The filter arguments it takes (owner, status...). |
columns | array | The columns a list of it can show. |
defaults | object | dim, measures, date and columns when none is sent. |
RecordTotalsReport11 fields
| Field | Type | What it is |
|---|---|---|
spec | object | The report, every word checked. |
args | object | The same as query-string arguments. |
title | string | The report in a sentence. |
period | object | from, to and label. |
comparison | object | The period it is set against, or null. |
measures | array | The figures: key, label and format. |
dimension | object | What it is grouped by. |
rows | array | One per group: key, label, each measure's value, its previous value and the change. |
totals | object | The same, added up. |
other | object | Groups beyond the first sixty, folded together, or null. |
web_url | string | The report's own page. |
RecordListReport9 fields
| Field | Type | What it is |
|---|---|---|
spec | object | The list, every word checked. |
args | object | The same as query-string arguments. |
title | string | What it lists. |
period | object | from, to and label, or null for any date. |
columns | array | The columns: key, label and format. |
rows | array | One per record, keyed by column. |
total | integer | How many rows matched. |
truncated | boolean | Whether the limit cut the rows short. |
web_url | string | The list's own page. |
RecordProductCategories2 fields
| Field | Type | What it is |
|---|---|---|
groups | array | Each group's name and its items of {value, label}. |
default | string | The category a new enquiry starts on. |
RecordVocabulary14 fields
| Field | Type | What it is |
|---|---|---|
terms | object | The company's words for each record type: singular and plural. |
company_types | array | key and label. |
activity_types | array | key and label. |
task_priorities | array | key and label. |
task_statuses | array | key and label. |
quote_statuses | array | key and label. |
order_statuses | array | key, the company's label, and whether the step is hidden. |
invoice_statuses | array | key and label. |
stage_outcomes | array | open, won, lost. |
pipeline_entities | array | enquiry, quote, order, invoice. |
submission_statuses | array | pending, approved, rejected. |
field_types | array | The types a field on a tab of your own may have. |
extra_field_types | array | The types an extra field on a shipped tab may have. |
key_scopes | array | read and write. |
RecordSettings13 fields
| Field | Type | What it is |
|---|---|---|
letterhead | object | name, address, phone, email, website, vat_number, company_number. |
settings | object | currency, currency_symbol, default_vat_rate, financial_year_start_month, timezone, date_format, quote_validity_days, quote_footer, order_footer. |
currency | object | base, symbol, and rates by ISO code. |
terms | object | The company's words for each record type. |
modules | object | Which tabs are switched on, by key. |
order_steps | array | The workshop steps in order: key, label, hidden, fixed. |
numbering | object | The reference format. |
example_reference | string | What the next reference would look like. |
defaults | object | payment_days, payment_terms, lead_time, delivery_terms, quote_notes, product_category. |
documents | object | What the quotation and invoice carry; the bank details for a role with invoices. |
plan | object | key, label, trial_ends_on, max_users, used_users, max_storage_mb, used_mb. |
features | object | Each plan feature and whether it is in force. |
api | object | version, rate_limit_per_minute, docs_url. |
Errors
Every refusal is JSON with a status, a code and a message.
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_json | The body is not a JSON object. |
| 401 | unauthenticated | No 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. |
| 403 | plan_required | The company's plan does not include the API, or the part of the CRM the route needs. |
| 403 | read_only_key | A read-only key called a route that writes. |
| 403 | administrator_required | The route is for company administrators and the key's user is not one. |
| 403 | not_in_role | The tab the route belongs to is not in the key's user's role. |
| 403 | forbidden | Something only the record's owner, or an administrator, may do. |
| 404 | not_found | No such record in this company, or no such address. |
| 405 | method_not_allowed | A real address called with a method it does not take; Allow lists the ones it does. |
| 409 | duplicate, in_use, quote_decided, order_exists, quote_not_won, invoice_locked, no_lines, order_cancelled, already_decided, storage_full, list_gone, tab_not_ready | The request is well formed but the record's state refuses it; the code says which, and the message says what to do instead. |
| 413 | too_large | The request is bigger than the installation accepts. |
| 415 | unsupported_media_type | Send JSON, with Content-Type: application/json. |
| 422 | validation_failed | A value the form would refuse, in the form's own words; details carries every message. |
| 429 | rate_limited | The key has made its allowance of requests this minute; Retry-After says how many seconds to wait. |
| 500 | server_error | Something went wrong on the server and has been logged. |
| 503 | not_ready | The installation's database has not been brought up to date for the API yet, or the PDF engine is not installed. |