Browse opportunities, products, stock, availability and invoices, and create quotes in Current RMS.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Rental availability for ONE product over a date range: arrays of quantity held, booked, unavailable, available, on sub-rent and quoted — one entry per availability period (hour, quarter day, half day or day depending on the range and system setting) — plus the opportunities that book it. Read-only, even though the API uses POST. Current RMS: POST /availability/product.
Start date, ISO 8601, e.g. 2026-10-01.
The product id.
Number of days to report on.
Only these stores.
Rental availability for ONE product over a date range: arrays of quantity held, booked, unavailable, available, on sub-rent and quoted — one entry per availability period (hour, quarter day, half day or day depending on the range and system setting) — plus the opportunities that book it. Read-only, even though the API uses POST. Current RMS: POST /availability/product.
| Argument | Type | Description |
|---|---|---|
| starts_at* | string | Start date, ISO 8601, e.g. 2026-10-01. |
| store_ids | array | Only these stores. |
| product_id* | integer | The product id. |
| days_period* | integer | Number of days to report on. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"product_id",
"starts_at",
"days_period"
],
"properties": {
"starts_at": {
"type": "string",
"description": "Start date, ISO 8601, e.g. 2026-10-01."
},
"store_ids": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"description": "Only these stores."
},
"product_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The product id.",
"exclusiveMinimum": 0
},
"days_period": {
"type": "integer",
"maximum": 366,
"minimum": 1,
"description": "Number of days to report on."
}
}
}Log an activity (call, meeting, task, note) against a member, opportunity or project, optionally with participants. Current RMS: POST /activities.
| Argument | Type | Description |
|---|---|---|
| ends_at | string | End (UTC). |
| subject* | string | The activity's subject. |
| type_id | integer | Activity type list-value id. |
| location | string | Where it takes place. |
| owned_by | integer | User member id of the owner. |
| priority | integer | Priority, 1-5. |
| completed | boolean | Mark as already completed. |
| starts_at | string | Start (UTC). |
| status_id | integer | Activity status list-value id. |
| description | string |
Create an Organisation, Contact or Venue. To link a new Contact to its Organisation, pass parent_member_id. Current RMS: POST /members.
| Argument | Type | Description |
|---|---|---|
| name* | string | The member's name. |
| title | string | Job title (Contacts only). |
| emails | array | Email addresses to add. |
| phones | array | Phone numbers to add. |
| tag_list | array | Tags. |
| department | string | Department (Contacts only). |
| description | string | Notes about the member. |
| custom_fields | object | Custom field values by field name. |
| membership_type* | string | The kind of member. |
| parent_member_id |
Create an opportunity (a rental job) as an Enquiry, Draft or Quotation. store_id is required (see current_rms_list_stores); set member_id for the customer and starts_at/ends_at for the job dates. Line items are added in Current RMS. Current RMS: POST /opportunities.
| Argument | Type | Description |
|---|---|---|
| state | any | 0 = Enquiry, 1 = Draft, 2 = Quotation. Converting to an Order is left to Current RMS. |
| rating | integer | Rating, 0-5. |
| ends_at | string | Overall end / collection date-time (UTC). |
| subject | string | The opportunity's subject (title). |
| owned_by | integer | User member id of the owner. |
| store_id* | integer | The store the job is served from. |
| tag_list | array | Tags. |
| venue_id | integer | The Venue member id. |
| member_id | integer |
Fetch one invoice or credit note with its status, due date and totals; include invoice_items for the lines. Current RMS: GET /invoices/{id}.
| Argument | Type | Description |
|---|---|---|
| include | array | Associations to embed, e.g. ["invoice_items"]. |
| invoice_id* | integer | The invoice id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"invoice_id"
],
"properties": {
"include": {
"type": "array",
"items": {
"enum": [
"owner",
"member",
"billing_address",
"destination",
"venue",
"invoice_taxes",
"tax_class",
"invoice_items"
],
"type": "string"
},
"description": "Associations to embed, e.g. [\"invoice_items\"]."
},
"invoice_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The invoice id.",
"exclusiveMinimum": 0
}
}
}Fetch one member (organisation, contact, venue or user) with its addresses, emails, phones, links, linked parent/child members and custom fields. Current RMS: GET /members/{id}.
| Argument | Type | Description |
|---|---|---|
| member_id* | integer | The member id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"member_id"
],
"properties": {
"member_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The member id.",
"exclusiveMinimum": 0
}
}
}Fetch one opportunity with its dates, state (0 Enquiry, 1 Draft, 2 Quotation, 3 Order), status and charge/cost totals. Associations (customer, venue, line items, assets, participants) are only returned when named in include. Current RMS: GET /opportunities/{id}.
| Argument | Type | Description |
|---|---|---|
| include | array | Associations to embed, e.g. ["member", "venue", "opportunity_items"]. |
| opportunity_id* | integer | The opportunity id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"opportunity_id"
],
"properties": {
"include": {
"type": "array",
"items": {
"enum": [
"owner",
"member",
"billing_address",
"destination",
"collection",
"venue",
"opportunity_surcharges",
"participants",
"opportunity_items",
"item_assets",
"return_item_assets"
],
"type": "string"
},
"description": "Associations to embed, e.g. [\"member\", \"venue\", \"opportunity_items\"]."
},
"opportunity_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The opportunity id.",
"exclusiveMinimum": 0
}
}
}Fetch one product with its rates, stock settings and custom fields. Current RMS: GET /products/{id}.
| Argument | Type | Description |
|---|---|---|
| include | array | Associations to embed. |
| product_id* | integer | The product id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"product_id"
],
"properties": {
"include": {
"type": "array",
"items": {
"enum": [
"accessories",
"icon",
"product_group"
],
"type": "string"
},
"description": "Associations to embed."
},
"product_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The product id.",
"exclusiveMinimum": 0
}
}
}List activities — calls, meetings, tasks and notes logged against members, opportunities and projects. filtermode: pending, completed, all. Example filters for one person's busy time in a window: {"time_status_eq": 1, "starts_at_lt": "2026-10-02T00:00:00.000Z", "ends_at_gteq": "2026-10-01T00:00:00.000Z", "participants_member_id_eq": [123]}. Current RMS: GET /activities.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. |
| sort | array | Sort order, e.g. ["name asc"] or ["updated_at desc", "id asc"]. Add "id asc" when paging so the order is deterministic. |
| search | string | Free-text search on subject, description, location or tags. |
| filters | object | Extra Current RMS query-engine predicates, sent as q[<key>]=<value> (arrays become q[<key>][]). Examples: {"updated_at_gt": "2026-01-01T00:00:00.000Z"}, {"number_eq": "003664"}, {"status_not_eq": 40}, {"work_email_address_eq": "[email protected]"}, {"asset_number_eq": "ABC-1"}. Unknown predicates are silently ignored by the API. |
| include | array | Associations to embed. |
| view_id | integer | Record id of a saved custom view to apply. |
| per_page | integer |
List invoices and credit notes with number, dates, status and totals. Free-text search covers subject, number, description, customer name and tags. filtermode: live, inactive, all, invoices, credits. To find one opportunity's invoices pass filters {"invoice_items_source_type_eq": "Opportunity", "invoice_items_source_id_eq": <opportunity id>} with filtermode all. Current RMS: GET /invoices.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. |
| sort | array | Sort order, e.g. ["name asc"] or ["updated_at desc", "id asc"]. Add "id asc" when paging so the order is deterministic. |
| search | string | Free-text search on subject, number, description, customer name or tags. |
| filters | object | Extra Current RMS query-engine predicates, sent as q[<key>]=<value> (arrays become q[<key>][]). Examples: {"updated_at_gt": "2026-01-01T00:00:00.000Z"}, {"number_eq": "003664"}, {"status_not_eq": 40}, {"work_email_address_eq": "[email protected]"}, {"asset_number_eq": "ABC-1"}. Unknown predicates are silently ignored by the API. |
| include | array | Associations to embed. |
| view_id | integer | Record id of a saved custom view to apply. |
| per_page |
List members — Current RMS's single record type for Organisations, Contacts, Venues and Users. Free-text search covers name, street, work phone, work email and tags. Defaults to active records; filtermode can be active, inactive, all, organisation, contact, venue, user, with_pending_activities, with_live_opportunities, bookable. Current RMS: GET /members.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. |
| sort | array | Sort order, e.g. ["name asc"] or ["updated_at desc", "id asc"]. Add "id asc" when paging so the order is deterministic. |
| search | string | Free-text search on name, street, work phone, work email, user email or tags. |
| filters | object | Extra Current RMS query-engine predicates, sent as q[<key>]=<value> (arrays become q[<key>][]). Examples: {"updated_at_gt": "2026-01-01T00:00:00.000Z"}, {"number_eq": "003664"}, {"status_not_eq": 40}, {"work_email_address_eq": "[email protected]"}, {"asset_number_eq": "ABC-1"}. Unknown predicates are silently ignored by the API. |
| view_id | integer | Record id of a saved custom view to apply. |
| per_page | integer | Records per page, 1-100 (default 20). |
| filtermode |
List opportunities — the enquiries, drafts, quotations and orders for a rental job — with their dates, state and charge totals. Free-text search covers subject, description, number, customer name and tags. filtermode e.g. live, all, inactive, enquiries, drafts, quotations, orders, invoiced, not_invoiced, needing_prep. Line items are NOT included here: use current_rms_get_opportunity or current_rms_list_opportunity_items. Max 25 per page. Current RMS: GET /opportunities.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. |
| sort | array | Sort order, e.g. ["name asc"] or ["updated_at desc", "id asc"]. Add "id asc" when paging so the order is deterministic. |
| search | string | Free-text search on subject, description, number, customer name or tags. |
| filters | object | Extra Current RMS query-engine predicates, sent as q[<key>]=<value> (arrays become q[<key>][]). Examples: {"updated_at_gt": "2026-01-01T00:00:00.000Z"}, {"number_eq": "003664"}, {"status_not_eq": 40}, {"work_email_address_eq": "[email protected]"}, {"asset_number_eq": "ABC-1"}. Unknown predicates are silently ignored by the API. |
| include | array | Associations to embed in each record. |
| view_id | integer | Record id of a saved custom view to apply. |
List the line items on one opportunity — products, services and groups, with quantity, rate, discount, dates and charge totals. Current RMS: GET /opportunities/{opportunity_id}/opportunity_items.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. |
| include | array | Associations to embed on each line. |
| per_page | integer | Records per page, 1-100 (default 20). |
| opportunity_id* | integer | The opportunity id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"opportunity_id"
],
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
},
"include": {
"type": "array",
"items": {
"enum": [
"item",
"item_assets",
"rate_definition",
"item_surcharges"
],
"type": "string"
},
"description": "Associations to embed on each line."
},
"per_page": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 20)."
},
"opportunity_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The opportunity id.",
"exclusiveMinimum": 0
}
}
}Stock snapshot per product: rental quantity held, booked, unavailable, on sub-rent and AVAILABLE, plus sale stock and prices. Pass starts_at/ends_at to compute rental availability for a job's dates instead of today, and store_id to restrict to one store. filtermode: active, inactive, all, rental, sale. Current RMS: GET /product_inventories.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. |
| sort | array | Sort order, e.g. ["name asc"] or ["updated_at desc", "id asc"]. Add "id asc" when paging so the order is deterministic. |
| search | string | Free-text search on name, product group name or tags. |
| ends_at | string | End of the period to compute rental availability for (UTC). |
| filters | object | Extra Current RMS query-engine predicates, sent as q[<key>]=<value> (arrays become q[<key>][]). Examples: {"updated_at_gt": "2026-01-01T00:00:00.000Z"}, {"number_eq": "003664"}, {"status_not_eq": 40}, {"work_email_address_eq": "[email protected]"}, {"asset_number_eq": "ABC-1"}. Unknown predicates are silently ignored by the API. |
| view_id | integer | Record id of a saved custom view to apply. |
| per_page |
List products (rental and sale items) with their group, stock method, rates, weight and barcode. Free-text search covers name, product group name and tags. filtermode: active (default), inactive, all. Current RMS: GET /products.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. |
| sort | array | Sort order, e.g. ["name asc"] or ["updated_at desc", "id asc"]. Add "id asc" when paging so the order is deterministic. |
| search | string | Free-text search on name, product group name or tags. |
| filters | object | Extra Current RMS query-engine predicates, sent as q[<key>]=<value> (arrays become q[<key>][]). Examples: {"updated_at_gt": "2026-01-01T00:00:00.000Z"}, {"number_eq": "003664"}, {"status_not_eq": 40}, {"work_email_address_eq": "[email protected]"}, {"asset_number_eq": "ABC-1"}. Unknown predicates are silently ignored by the API. |
| include | array | Associations to embed. |
| per_page | integer | Records per page, 1-100 (default 20). |
| filtermode | string | Which products to return. |
List projects — groups of related opportunities for one customer or event. Free-text search covers name, customer name and tags. filtermode: active (default), inactive, all. Current RMS: GET /projects.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. |
| sort | array | Sort order, e.g. ["name asc"] or ["updated_at desc", "id asc"]. Add "id asc" when paging so the order is deterministic. |
| search | string | Free-text search on name, customer name or tags. |
| filters | object | Extra Current RMS query-engine predicates, sent as q[<key>]=<value> (arrays become q[<key>][]). Examples: {"updated_at_gt": "2026-01-01T00:00:00.000Z"}, {"number_eq": "003664"}, {"status_not_eq": 40}, {"work_email_address_eq": "[email protected]"}, {"asset_number_eq": "ABC-1"}. Unknown predicates are silently ignored by the API. |
| view_id | integer | Record id of a saved custom view to apply. |
| per_page | integer | Records per page, 1-100 (default 20). |
| filtermode | string | Which projects to return. |
List stock levels — the individual serialised assets (asset number, serial number, location, store) or bulk stock quantities held. Pass product_id for one product's stock, or use filters such as {"asset_number_eq": "ABC-1234"} to find an asset. Current RMS: GET /stock_levels or GET /products/{product_id}/stock_levels.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. |
| sort | array | Sort order, e.g. ["name asc"] or ["updated_at desc", "id asc"]. Add "id asc" when paging so the order is deterministic. |
| filters | object | Extra Current RMS query-engine predicates, sent as q[<key>]=<value> (arrays become q[<key>][]). Examples: {"updated_at_gt": "2026-01-01T00:00:00.000Z"}, {"number_eq": "003664"}, {"status_not_eq": 40}, {"work_email_address_eq": "[email protected]"}, {"asset_number_eq": "ABC-1"}. Unknown predicates are silently ignored by the API. |
| include | array | Associations to embed. |
| per_page | integer | Records per page, 1-100 (default 20). |
| product_id | integer | Only this product's stock levels. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
},
"sort": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_]+ (asc|desc)$"
},
"description": "Sort order, e.g. [\"name asc\"] or [\"updated_at desc\", \"id asc\"]. Add \"id asc\" when paging so the order is deterministic."
},
"filters": {
"type": "object",
"description": "Extra Current RMS query-engine predicates, sent as q[<key>]=<value> (arrays become q[<key>][]). Examples: {\"updated_at_gt\": \"2026-01-01T00:00:00.000Z\"}, {\"number_eq\": \"003664\"}, {\"status_not_eq\": 40}, {\"work_email_address_eq\": \"[email protected]\"}, {\"asset_number_eq\": \"ABC-1\"}. Unknown predicates are silently ignored by the API.",
"propertyNames": {
"type": "string",
"pattern": "^[A-Za-z0-9_]+$"
},
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": [
"string",
"number"
]
}
}
]
}
},
"include": {
"type": "array",
"items": {
"enum": [
"item",
"icon"
],
"type": "string"
},
"description": "Associations to embed."
},
"per_page": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 20)."
},
"product_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only this product's stock levels.",
"exclusiveMinimum": 0
}
}
}List the account's stores (warehouses/depots) with their ids and addresses — needed for store_id when creating an opportunity. Current RMS: GET /stores.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Update fields on an existing member. Only the fields you pass are sent. Emails and phones passed here are ADDED (existing ones are kept). When updating custom_fields, also pass the member's membership_type. Current RMS: PUT /members/{id}.
| Argument | Type | Description |
|---|---|---|
| name | string | New name. |
| active | boolean | Set false to make the member inactive (reversible). |
| emails | array | Email addresses to add. |
| phones | array | Phone numbers to add. |
| tag_list | array | Replacement tag list. |
| member_id* | integer | The member id. |
| description | string | Notes about the member. |
| custom_fields | object | Custom field values by field name. |
| membership_type | string | The member's EXISTING type — required by the API when updating custom_fields. |
Update header fields on an existing opportunity — subject, customer, venue, dates, reference, instructions, tags, custom fields. Only the fields you pass are sent. State changes (convert to quote/order, cancel, mark lost) are deliberately not available. Current RMS: PUT /opportunities/{id}.
| Argument | Type | Description |
|---|---|---|
| rating | integer | Rating, 0-5. |
| ends_at | string | Overall end / collection date-time (UTC). |
| subject | string | The opportunity's subject (title). |
| owned_by | integer | User member id of the owner. |
| store_id | integer | Move the job to another store. |
| tag_list | array | Tags. |
| venue_id | integer | The Venue member id. |
| member_id | integer | The customer (Organisation/Contact member) id. |
| reference | string | Customer reference, e.g. their PO number. |
| Details. |
| time_status | any | 0 = Free, 1 = Busy. |
| regarding_id | integer | The id of that record. |
| regarding_type | string | The kind of record it concerns, e.g. "Opportunity", "Member" or "Project". |
| participant_member_ids | array | Member ids to add as participants. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"subject"
],
"properties": {
"ends_at": {
"type": "string",
"description": "End (UTC)."
},
"subject": {
"type": "string",
"minLength": 1,
"description": "The activity's subject."
},
"type_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Activity type list-value id."
},
"location": {
"type": "string",
"description": "Where it takes place."
},
"owned_by": {
"type": "integer",
"maximum": 9007199254740991,
"description": "User member id of the owner.",
"exclusiveMinimum": 0
},
"priority": {
"type": "integer",
"maximum": 5,
"minimum": 1,
"description": "Priority, 1-5."
},
"completed": {
"type": "boolean",
"description": "Mark as already completed."
},
"starts_at": {
"type": "string",
"description": "Start (UTC)."
},
"status_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Activity status list-value id."
},
"description": {
"type": "string",
"description": "Details."
},
"time_status": {
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 1
}
],
"description": "0 = Free, 1 = Busy."
},
"regarding_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The id of that record.",
"exclusiveMinimum": 0
},
"regarding_type": {
"type": "string",
"description": "The kind of record it concerns, e.g. \"Opportunity\", \"Member\" or \"Project\"."
},
"participant_member_ids": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"description": "Member ids to add as participants."
}
}
}| integer |
| Organisation (or Venue) member id to link this Contact to. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"membership_type"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "The member's name."
},
"title": {
"type": "string",
"description": "Job title (Contacts only)."
},
"emails": {
"type": "array",
"items": {
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"type": "string",
"description": "Email address."
},
"type_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Email type list-value id (4001 = Work in a default setup)."
}
}
},
"description": "Email addresses to add."
},
"phones": {
"type": "array",
"items": {
"type": "object",
"required": [
"number"
],
"properties": {
"number": {
"type": "string",
"description": "Phone number."
},
"type_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Phone type list-value id (6001 = Work in a default setup)."
}
}
},
"description": "Phone numbers to add."
},
"tag_list": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tags."
},
"department": {
"type": "string",
"description": "Department (Contacts only)."
},
"description": {
"type": "string",
"description": "Notes about the member."
},
"custom_fields": {
"type": "object",
"description": "Custom field values by field name.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"membership_type": {
"enum": [
"Organisation",
"Contact",
"Venue"
],
"type": "string",
"description": "The kind of member."
},
"parent_member_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Organisation (or Venue) member id to link this Contact to.",
"exclusiveMinimum": 0
}
}
}| The customer (Organisation/Contact member) id. |
| reference | string | Customer reference, e.g. their PO number. |
| starts_at | string | Overall start / delivery date-time (UTC). |
| project_id | integer | The project this opportunity belongs to. |
| description | string | Internal description. |
| custom_fields | object | Custom field values by field name. |
| charge_ends_at | string | Charging period end (UTC). |
| charge_starts_at | string | Charging period start (UTC). |
| billing_address_id | integer | The member's address id used for billing. |
| customer_returning | boolean | The customer returns the goods themselves. |
| customer_collecting | boolean | The customer collects the goods themselves. |
| external_description | string | Description shown on customer documents. |
| delivery_instructions | string | Delivery instructions. |
| collection_instructions | string | Collection instructions. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"store_id"
],
"properties": {
"state": {
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 2
}
],
"description": "0 = Enquiry, 1 = Draft, 2 = Quotation. Converting to an Order is left to Current RMS."
},
"rating": {
"type": "integer",
"maximum": 5,
"minimum": 0,
"description": "Rating, 0-5."
},
"ends_at": {
"type": "string",
"description": "Overall end / collection date-time (UTC)."
},
"subject": {
"type": "string",
"description": "The opportunity's subject (title)."
},
"owned_by": {
"type": "integer",
"maximum": 9007199254740991,
"description": "User member id of the owner.",
"exclusiveMinimum": 0
},
"store_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The store the job is served from.",
"exclusiveMinimum": 0
},
"tag_list": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tags."
},
"venue_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The Venue member id.",
"exclusiveMinimum": 0
},
"member_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The customer (Organisation/Contact member) id.",
"exclusiveMinimum": 0
},
"reference": {
"type": "string",
"description": "Customer reference, e.g. their PO number."
},
"starts_at": {
"type": "string",
"description": "Overall start / delivery date-time (UTC)."
},
"project_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The project this opportunity belongs to.",
"exclusiveMinimum": 0
},
"description": {
"type": "string",
"description": "Internal description."
},
"custom_fields": {
"type": "object",
"description": "Custom field values by field name.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"charge_ends_at": {
"type": "string",
"description": "Charging period end (UTC)."
},
"charge_starts_at": {
"type": "string",
"description": "Charging period start (UTC)."
},
"billing_address_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The member's address id used for billing.",
"exclusiveMinimum": 0
},
"customer_returning": {
"type": "boolean",
"description": "The customer returns the goods themselves."
},
"customer_collecting": {
"type": "boolean",
"description": "The customer collects the goods themselves."
},
"external_description": {
"type": "string",
"description": "Description shown on customer documents."
},
"delivery_instructions": {
"type": "string",
"description": "Delivery instructions."
},
"collection_instructions": {
"type": "string",
"description": "Collection instructions."
}
}
}| Records per page, 1-100 (default 20). |
| filtermode | string | Which activities to return. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
},
"sort": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_]+ (asc|desc)$"
},
"description": "Sort order, e.g. [\"name asc\"] or [\"updated_at desc\", \"id asc\"]. Add \"id asc\" when paging so the order is deterministic."
},
"search": {
"type": "string",
"description": "Free-text search on subject, description, location or tags."
},
"filters": {
"type": "object",
"description": "Extra Current RMS query-engine predicates, sent as q[<key>]=<value> (arrays become q[<key>][]). Examples: {\"updated_at_gt\": \"2026-01-01T00:00:00.000Z\"}, {\"number_eq\": \"003664\"}, {\"status_not_eq\": 40}, {\"work_email_address_eq\": \"[email protected]\"}, {\"asset_number_eq\": \"ABC-1\"}. Unknown predicates are silently ignored by the API.",
"propertyNames": {
"type": "string",
"pattern": "^[A-Za-z0-9_]+$"
},
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": [
"string",
"number"
]
}
}
]
}
},
"include": {
"type": "array",
"items": {
"enum": [
"regarding",
"owner",
"opportunity_item_asset",
"participants"
],
"type": "string"
},
"description": "Associations to embed."
},
"view_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Record id of a saved custom view to apply.",
"exclusiveMinimum": 0
},
"per_page": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 20)."
},
"filtermode": {
"enum": [
"pending",
"completed",
"all"
],
"type": "string",
"description": "Which activities to return."
}
}
}| integer |
| Records per page, 1-100 (default 20). |
| filtermode | string | Built-in filter: live, inactive, all, invoices, credits. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
},
"sort": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_]+ (asc|desc)$"
},
"description": "Sort order, e.g. [\"name asc\"] or [\"updated_at desc\", \"id asc\"]. Add \"id asc\" when paging so the order is deterministic."
},
"search": {
"type": "string",
"description": "Free-text search on subject, number, description, customer name or tags."
},
"filters": {
"type": "object",
"description": "Extra Current RMS query-engine predicates, sent as q[<key>]=<value> (arrays become q[<key>][]). Examples: {\"updated_at_gt\": \"2026-01-01T00:00:00.000Z\"}, {\"number_eq\": \"003664\"}, {\"status_not_eq\": 40}, {\"work_email_address_eq\": \"[email protected]\"}, {\"asset_number_eq\": \"ABC-1\"}. Unknown predicates are silently ignored by the API.",
"propertyNames": {
"type": "string",
"pattern": "^[A-Za-z0-9_]+$"
},
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": [
"string",
"number"
]
}
}
]
}
},
"include": {
"type": "array",
"items": {
"enum": [
"owner",
"member",
"billing_address",
"destination",
"venue",
"invoice_taxes",
"tax_class",
"invoice_items"
],
"type": "string"
},
"description": "Associations to embed."
},
"view_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Record id of a saved custom view to apply.",
"exclusiveMinimum": 0
},
"per_page": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 20)."
},
"filtermode": {
"type": "string",
"description": "Built-in filter: live, inactive, all, invoices, credits."
}
}
}| string |
| Built-in filter, e.g. all, organisation, contact, venue, user, inactive. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
},
"sort": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_]+ (asc|desc)$"
},
"description": "Sort order, e.g. [\"name asc\"] or [\"updated_at desc\", \"id asc\"]. Add \"id asc\" when paging so the order is deterministic."
},
"search": {
"type": "string",
"description": "Free-text search on name, street, work phone, work email, user email or tags."
},
"filters": {
"type": "object",
"description": "Extra Current RMS query-engine predicates, sent as q[<key>]=<value> (arrays become q[<key>][]). Examples: {\"updated_at_gt\": \"2026-01-01T00:00:00.000Z\"}, {\"number_eq\": \"003664\"}, {\"status_not_eq\": 40}, {\"work_email_address_eq\": \"[email protected]\"}, {\"asset_number_eq\": \"ABC-1\"}. Unknown predicates are silently ignored by the API.",
"propertyNames": {
"type": "string",
"pattern": "^[A-Za-z0-9_]+$"
},
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": [
"string",
"number"
]
}
}
]
}
},
"view_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Record id of a saved custom view to apply.",
"exclusiveMinimum": 0
},
"per_page": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 20)."
},
"filtermode": {
"type": "string",
"description": "Built-in filter, e.g. all, organisation, contact, venue, user, inactive."
}
}
}| per_page | integer | Records per page, 1-25. |
| filtermode | string | Built-in filter, e.g. live, all, quotations, orders, not_invoiced. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
},
"sort": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_]+ (asc|desc)$"
},
"description": "Sort order, e.g. [\"name asc\"] or [\"updated_at desc\", \"id asc\"]. Add \"id asc\" when paging so the order is deterministic."
},
"search": {
"type": "string",
"description": "Free-text search on subject, description, number, customer name or tags."
},
"filters": {
"type": "object",
"description": "Extra Current RMS query-engine predicates, sent as q[<key>]=<value> (arrays become q[<key>][]). Examples: {\"updated_at_gt\": \"2026-01-01T00:00:00.000Z\"}, {\"number_eq\": \"003664\"}, {\"status_not_eq\": 40}, {\"work_email_address_eq\": \"[email protected]\"}, {\"asset_number_eq\": \"ABC-1\"}. Unknown predicates are silently ignored by the API.",
"propertyNames": {
"type": "string",
"pattern": "^[A-Za-z0-9_]+$"
},
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": [
"string",
"number"
]
}
}
]
}
},
"include": {
"type": "array",
"items": {
"enum": [
"owner",
"member",
"billing_address",
"destination",
"collection",
"venue",
"opportunity_surcharges"
],
"type": "string"
},
"description": "Associations to embed in each record."
},
"view_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Record id of a saved custom view to apply.",
"exclusiveMinimum": 0
},
"per_page": {
"type": "integer",
"maximum": 25,
"minimum": 1,
"description": "Records per page, 1-25."
},
"filtermode": {
"type": "string",
"description": "Built-in filter, e.g. live, all, quotations, orders, not_invoiced."
}
}
}| integer |
| Records per page, 1-100 (default 20). |
| store_id | integer | Only this store. |
| starts_at | string | Start of the period to compute rental availability for (UTC). |
| filtermode | string | Built-in filter, e.g. rental, sale, all. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
},
"sort": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_]+ (asc|desc)$"
},
"description": "Sort order, e.g. [\"name asc\"] or [\"updated_at desc\", \"id asc\"]. Add \"id asc\" when paging so the order is deterministic."
},
"search": {
"type": "string",
"description": "Free-text search on name, product group name or tags."
},
"ends_at": {
"type": "string",
"description": "End of the period to compute rental availability for (UTC)."
},
"filters": {
"type": "object",
"description": "Extra Current RMS query-engine predicates, sent as q[<key>]=<value> (arrays become q[<key>][]). Examples: {\"updated_at_gt\": \"2026-01-01T00:00:00.000Z\"}, {\"number_eq\": \"003664\"}, {\"status_not_eq\": 40}, {\"work_email_address_eq\": \"[email protected]\"}, {\"asset_number_eq\": \"ABC-1\"}. Unknown predicates are silently ignored by the API.",
"propertyNames": {
"type": "string",
"pattern": "^[A-Za-z0-9_]+$"
},
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": [
"string",
"number"
]
}
}
]
}
},
"view_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Record id of a saved custom view to apply.",
"exclusiveMinimum": 0
},
"per_page": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 20)."
},
"store_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only this store.",
"exclusiveMinimum": 0
},
"starts_at": {
"type": "string",
"description": "Start of the period to compute rental availability for (UTC)."
},
"filtermode": {
"type": "string",
"description": "Built-in filter, e.g. rental, sale, all."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
},
"sort": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_]+ (asc|desc)$"
},
"description": "Sort order, e.g. [\"name asc\"] or [\"updated_at desc\", \"id asc\"]. Add \"id asc\" when paging so the order is deterministic."
},
"search": {
"type": "string",
"description": "Free-text search on name, product group name or tags."
},
"filters": {
"type": "object",
"description": "Extra Current RMS query-engine predicates, sent as q[<key>]=<value> (arrays become q[<key>][]). Examples: {\"updated_at_gt\": \"2026-01-01T00:00:00.000Z\"}, {\"number_eq\": \"003664\"}, {\"status_not_eq\": 40}, {\"work_email_address_eq\": \"[email protected]\"}, {\"asset_number_eq\": \"ABC-1\"}. Unknown predicates are silently ignored by the API.",
"propertyNames": {
"type": "string",
"pattern": "^[A-Za-z0-9_]+$"
},
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": [
"string",
"number"
]
}
}
]
}
},
"include": {
"type": "array",
"items": {
"enum": [
"accessories"
],
"type": "string"
},
"description": "Associations to embed."
},
"per_page": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 20)."
},
"filtermode": {
"enum": [
"active",
"inactive",
"all"
],
"type": "string",
"description": "Which products to return."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
},
"sort": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_]+ (asc|desc)$"
},
"description": "Sort order, e.g. [\"name asc\"] or [\"updated_at desc\", \"id asc\"]. Add \"id asc\" when paging so the order is deterministic."
},
"search": {
"type": "string",
"description": "Free-text search on name, customer name or tags."
},
"filters": {
"type": "object",
"description": "Extra Current RMS query-engine predicates, sent as q[<key>]=<value> (arrays become q[<key>][]). Examples: {\"updated_at_gt\": \"2026-01-01T00:00:00.000Z\"}, {\"number_eq\": \"003664\"}, {\"status_not_eq\": 40}, {\"work_email_address_eq\": \"[email protected]\"}, {\"asset_number_eq\": \"ABC-1\"}. Unknown predicates are silently ignored by the API.",
"propertyNames": {
"type": "string",
"pattern": "^[A-Za-z0-9_]+$"
},
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": [
"string",
"number"
]
}
}
]
}
},
"view_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Record id of a saved custom view to apply.",
"exclusiveMinimum": 0
},
"per_page": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 20)."
},
"filtermode": {
"enum": [
"active",
"inactive",
"all"
],
"type": "string",
"description": "Which projects to return."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"member_id"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "New name."
},
"active": {
"type": "boolean",
"description": "Set false to make the member inactive (reversible)."
},
"emails": {
"type": "array",
"items": {
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"type": "string",
"description": "Email address."
},
"type_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Email type list-value id (4001 = Work in a default setup)."
}
}
},
"description": "Email addresses to add."
},
"phones": {
"type": "array",
"items": {
"type": "object",
"required": [
"number"
],
"properties": {
"number": {
"type": "string",
"description": "Phone number."
},
"type_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Phone type list-value id (6001 = Work in a default setup)."
}
}
},
"description": "Phone numbers to add."
},
"tag_list": {
"type": "array",
"items": {
"type": "string"
},
"description": "Replacement tag list."
},
"member_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The member id.",
"exclusiveMinimum": 0
},
"description": {
"type": "string",
"description": "Notes about the member."
},
"custom_fields": {
"type": "object",
"description": "Custom field values by field name.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"membership_type": {
"enum": [
"Organisation",
"Contact",
"Venue",
"User"
],
"type": "string",
"description": "The member's EXISTING type — required by the API when updating custom_fields."
}
}
}| starts_at | string | Overall start / delivery date-time (UTC). |
| project_id | integer | The project this opportunity belongs to. |
| description | string | Internal description. |
| custom_fields | object | Custom field values by field name. |
| charge_ends_at | string | Charging period end (UTC). |
| opportunity_id* | integer | The opportunity id. |
| charge_starts_at | string | Charging period start (UTC). |
| billing_address_id | integer | The member's address id used for billing. |
| customer_returning | boolean | The customer returns the goods themselves. |
| customer_collecting | boolean | The customer collects the goods themselves. |
| external_description | string | Description shown on customer documents. |
| delivery_instructions | string | Delivery instructions. |
| collection_instructions | string | Collection instructions. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"opportunity_id"
],
"properties": {
"rating": {
"type": "integer",
"maximum": 5,
"minimum": 0,
"description": "Rating, 0-5."
},
"ends_at": {
"type": "string",
"description": "Overall end / collection date-time (UTC)."
},
"subject": {
"type": "string",
"description": "The opportunity's subject (title)."
},
"owned_by": {
"type": "integer",
"maximum": 9007199254740991,
"description": "User member id of the owner.",
"exclusiveMinimum": 0
},
"store_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Move the job to another store.",
"exclusiveMinimum": 0
},
"tag_list": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tags."
},
"venue_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The Venue member id.",
"exclusiveMinimum": 0
},
"member_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The customer (Organisation/Contact member) id.",
"exclusiveMinimum": 0
},
"reference": {
"type": "string",
"description": "Customer reference, e.g. their PO number."
},
"starts_at": {
"type": "string",
"description": "Overall start / delivery date-time (UTC)."
},
"project_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The project this opportunity belongs to.",
"exclusiveMinimum": 0
},
"description": {
"type": "string",
"description": "Internal description."
},
"custom_fields": {
"type": "object",
"description": "Custom field values by field name.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"charge_ends_at": {
"type": "string",
"description": "Charging period end (UTC)."
},
"opportunity_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The opportunity id.",
"exclusiveMinimum": 0
},
"charge_starts_at": {
"type": "string",
"description": "Charging period start (UTC)."
},
"billing_address_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The member's address id used for billing.",
"exclusiveMinimum": 0
},
"customer_returning": {
"type": "boolean",
"description": "The customer returns the goods themselves."
},
"customer_collecting": {
"type": "boolean",
"description": "The customer collects the goods themselves."
},
"external_description": {
"type": "string",
"description": "Description shown on customer documents."
},
"delivery_instructions": {
"type": "string",
"description": "Delivery instructions."
},
"collection_instructions": {
"type": "string",
"description": "Collection instructions."
}
}
}