Query Method CRM customers, leads, activities and invoices; create and update records.
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.
How many records a table has, optionally matching a filter (same filter syntax as method_query_records). Cheap: call it before paging through a big table. GET /api/v1/tables/{table}/count.
Table name exactly as method_list_tables shows it, e.g. Customer, Contacts, Activity, Invoice, Estimate.
Filter expression.
How many records a table has, optionally matching a filter (same filter syntax as method_query_records). Cheap: call it before paging through a big table. GET /api/v1/tables/{table}/count.
| Argument | Type | Description |
|---|---|---|
| table* | string | Table name exactly as method_list_tables shows it, e.g. Customer, Contacts, Activity, Invoice, Estimate. |
| filter | string | Filter expression. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"table"
],
"properties": {
"table": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$",
"description": "Table name exactly as method_list_tables shows it, e.g. Customer, Contacts, Activity, Invoice, Estimate."
},
"filter": {
"type": "string",
"maxLength": 1500,
"minLength": 1,
"description": "Filter expression."
}
}
}WRITE: logs an activity (call, email, to-do, note) on a customer/lead. entity_id is the Customer RecordID; contact_id is the Contact RecordID (not the Customer's; method_list_contacts finds it). The text goes in Comments. Prefer activity_type_id (read it from an existing activity of that type) over the caption activity_type: a caption that matches zero or several options is silently dropped. Method requires an assignee on standard accounts. The reply re-reads the activity so you can check the links were stored (field names are account-specific; method_get_table_fields with table Activity shows them). It does not email anyone. Not idempotent. POST /api/v1/tables/Activity.
| Argument | Type | Description |
|---|---|---|
| due | string | Due/start time, YYYY-MM-DDTHH:mm:ss. |
| comments* | string | The note body. |
| entity_id* | integer | The Customer (entity) RecordID the activity belongs to, so it shows in its history. |
| status_id | integer | ActivityStatus_RecordID (account-defined, e.g. Not Started / Completed). |
| contact_id | integer | The Contact RecordID. |
| activity_type | string | Activity type caption, e.g. Call. Use only if you have no id. |
| assigned_to_id | integer | Method user id of the owner (method_get_account). |
| activity_type_id | integer | ActivityType_RecordID from an existing activity of the wanted type. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"entity_id",
"comments"
],
"properties": {
"due": {
"type": "string",
"description": "Due/start time, YYYY-MM-DDTHH:mm:ss."
},
"comments": {
"type": "string",
"maxLength": 8000,
"minLength": 1,
"description": "The note body."
},
"entity_id": {
"type": "integer",
"maximum": 2147483647,
"description": "The Customer (entity) RecordID the activity belongs to, so it shows in its history.",
"exclusiveMinimum": 0
},
"status_id": {
"type": "integer",
"maximum": 2147483647,
"description": "ActivityStatus_RecordID (account-defined, e.g. Not Started / Completed).",
"exclusiveMinimum": 0
},
"contact_id": {
"type": "integer",
"maximum": 2147483647,
"description": "The Contact RecordID.",
"exclusiveMinimum": 0
},
"activity_type": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Activity type caption, e.g. Call. Use only if you have no id."
},
"assigned_to_id": {
"type": "integer",
"maximum": 2147483647,
"description": "Method user id of the owner (method_get_account).",
"exclusiveMinimum": 0
},
"activity_type_id": {
"type": "integer",
"maximum": 2147483647,
"description": "ActivityType_RecordID from an existing activity of the wanted type.",
"exclusiveMinimum": 0
}
}
}WRITE: creates a record in Method's Customer table. is_lead true = a Customer Lead (does not sync to the accounting system); is_lead false = a full customer, which Method syncs to QuickBooks/Xero (it appears there too). Method also creates the primary Contact; its RecordID is returned as contact_id when it could be found (use it, not the customer id, to link activities). Name is required (for a person with no company use "First Last"). `extra_fields` sets other fields by their exact names (see method_get_table_fields, table Customer). Not idempotent: calling twice creates two records, so search first (method_search_customers). POST /api/v1/tables/Customer.
| Argument | Type | Description |
|---|---|---|
| name* | string | Display name of the customer or lead. |
| string | ||
| phone | string | |
| is_lead* | boolean | true = lead (not synced to accounting), false = customer (synced to QuickBooks/Xero). |
| last_name | string | |
| first_name | string | |
| lead_status | string | Account-defined lead status, e.g. Open (leads only). |
WRITE: creates a record in any table that allows it (method_list_tables shows canCreate), e.g. Estimate, Invoice, Item, Vendor. For customers/leads and activities use the dedicated tools. Field names are case-sensitive and a wrong one is silently ignored: read them with method_get_table_fields first, and send dropdown links as their `_RecordID` integer. Creating accounting records (Invoice, Estimate, Customer ...) makes Method sync them to QuickBooks/Xero. Child lines (InvoiceLine ...) are not supported here. Not idempotent. Returns the new RecordID. POST /api/v1/tables/{table}.
| Argument | Type | Description |
|---|---|---|
| table* | string | Table name exactly as method_list_tables shows it, e.g. Customer, Contacts, Activity, Invoice, Estimate. |
| fields* | object | Field name -> value, exactly as method_get_table_fields names them (case-sensitive; a misspelled name is silently ignored by Method). For a dropdown/linked field send the integer id in its `_RecordID` field (e.g. Customer_RecordID: 1234), not the caption. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"table",
"fields"
],
"properties": {
"table": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$",
"description": "Table name exactly as method_list_tables shows it, e.g. Customer, Contacts, Activity, Invoice, Estimate."
},
"fields": {
"type": "object",
"description": "Field name -> value, exactly as method_get_table_fields names them (case-sensitive; a misspelled name is silently ignored by Method). For a dropdown/linked field send the integer id in its `_RecordID` field (e.g. Customer_RecordID: 1234), not the caption.",
"propertyNames": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$"
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 8000
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
]
}
}
}
}Who the API key acts as: the Method user behind it (id and name; use the id as an assignee). Also a cheap check that the key works. GET /api/v1/me.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}A temporary download link (valid 20 minutes) for an attached file, by the file id from method_list_files. The link works without the API key: share it only with someone allowed to see the file. GET /api/v1/files/{id}/url.
| Argument | Type | Description |
|---|---|---|
| file_id* | string | File id (a GUID). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{8,64}$",
"description": "File id (a GUID)."
}
}
}One record by RecordID from any table. Pass `select` to limit the columns; `expand` names a related CHILD table whose rows are embedded (e.g. InvoiceLine on Invoice; at most 50 rows); a parent such as a contact's Entity is not expanded: read it with its own RecordID (Entity_RecordID). GET /api/v1/tables/{table}/{recordId}.
| Argument | Type | Description |
|---|---|---|
| table* | string | Table name exactly as method_list_tables shows it, e.g. Customer, Contacts, Activity, Invoice, Estimate. |
| expand | string | A child table to embed (a table with a dropdown field to this one), e.g. InvoiceLine on Invoice. At most 50 child rows. |
| select | array | Field names to return (case-sensitive, from method_get_table_fields). Without a select Method returns hundreds of columns per row. |
| record_id* | integer | The record's RecordID. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"table",
"record_id"
],
"properties": {
"table": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$",
"description": "Table name exactly as method_list_tables shows it, e.g. Customer, Contacts, Activity, Invoice, Estimate."
},
"expand": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$",
"description": "A child table to embed (a table with a dropdown field to this one), e.g. InvoiceLine on Invoice. At most 50 child rows."
},
"select": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$"
},
"maxItems": 60,
"minItems": 1,
"description": "Field names to return (case-sensitive, from method_get_table_fields). Without a select Method returns hundreds of columns per row."
},
"record_id": {
"type": "integer",
"maximum": 2147483647,
"description": "The record's RecordID.",
"exclusiveMinimum": 0
}
}
}The exact field names of a table with type, whether required, creatable and mutable, and for dropdowns the table they reference. Use it to pick `select` fields and to name fields in create/update calls (names are case-sensitive and wrong ones are silently ignored). GET /api/v1/tables/{table}/fields.
| Argument | Type | Description |
|---|---|---|
| table* | string | Table name exactly as method_list_tables shows it, e.g. Customer, Contacts, Activity, Invoice, Estimate. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"table"
],
"properties": {
"table": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$",
"description": "Table name exactly as method_list_tables shows it, e.g. Customer, Contacts, Activity, Invoice, Estimate."
}
}
}List activities (calls, emails, to-dos, notes), newest first. Filter by the entity they belong to, the assigned user or a due-date window. The note text is in Comments. Override `select` for other fields (method_get_table_fields with table Activity). GET /api/v1/tables/Activity.
| Argument | Type | Description |
|---|---|---|
| top | integer | Rows per page, 1-100 (default 25). |
| skip | integer | Rows to skip (default 0). Pass the previous reply's next_skip. |
| select | array | Field names to return (case-sensitive, from method_get_table_fields). Without a select Method returns hundreds of columns per row. |
| due_after | string | ISO 8601 date-time WITH a timezone (Z or +hh:mm), e.g. 2026-10-01T00:00:00Z. |
| entity_id | integer | Only activities of this entity (Customer RecordID). |
| due_before | string | ISO 8601 date-time WITH a timezone (Z or +hh:mm), e.g. 2026-10-01T00:00:00Z. |
| assigned_to_id | integer | Only activities assigned to this user id (method_get_account or the Users table). |
List contacts (people), optionally those of one customer/lead entity (entity_id = the Customer's RecordID) or matching text in name/email/phone. Returns RecordID, name, email, phone, the entity link and active flag. Use a Contact's RecordID (not the Customer's) when linking activities. GET /api/v1/tables/Contacts.
| Argument | Type | Description |
|---|---|---|
| top | integer | Rows per page, 1-100 (default 25). |
| skip | integer | Rows to skip (default 0). Pass the previous reply's next_skip. |
| text | string | Matches contacts whose Name, Email or Phone contains this text. |
| select | array | Field names to return (case-sensitive, from method_get_table_fields). Without a select Method returns hundreds of columns per row. |
| entity_id | integer | Only contacts of this entity (the Customer/Vendor RecordID). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"top": {
"type": "integer",
"maximum": 100,
"description": "Rows per page, 1-100 (default 25).",
"exclusiveMinimum": 0
},
"skip": {
"type": "integer",
"maximum": 10000000,
"minimum": 0,
"description": "Rows to skip (default 0). Pass the previous reply's next_skip."
},
"text": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Matches contacts whose Name, Email or Phone contains this text."
},
"select": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$"
},
"maxItems": 60,
"minItems": 1,
"description": "Field names to return (case-sensitive, from method_get_table_fields). Without a select Method returns hundreds of columns per row."
},
"entity_id": {
"type": "integer",
"maximum": 2147483647,
"description": "Only contacts of this entity (the Customer/Vendor RecordID).",
"exclusiveMinimum": 0
}
}
}List the files attached to a record (name, size, who added it, id). Use the id with method_get_file_url. GET /api/v1/files.
| Argument | Type | Description |
|---|---|---|
| table* | string | Table name exactly as method_list_tables shows it, e.g. Customer, Contacts, Activity, Invoice, Estimate. |
| record_id* | integer | The record's RecordID. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"table",
"record_id"
],
"properties": {
"table": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$",
"description": "Table name exactly as method_list_tables shows it, e.g. Customer, Contacts, Activity, Invoice, Estimate."
},
"record_id": {
"type": "integer",
"maximum": 2147483647,
"description": "The record's RecordID.",
"exclusiveMinimum": 0
}
}
}List invoices, newest first, optionally only unpaid ones (BalanceRemaining > 0), one customer's (customer_id = Customer RecordID) or created since a time. Returns reference number, customer, dates, amount and balance; override `select` for other fields. For totals use method_query_records with `apply`. GET /api/v1/tables/Invoice.
| Argument | Type | Description |
|---|---|---|
| top | integer | Rows per page, 1-100 (default 25). |
| skip | integer | Rows to skip (default 0). Pass the previous reply's next_skip. |
| select | array | Field names to return (case-sensitive, from method_get_table_fields). Without a select Method returns hundreds of columns per row. |
| customer_id | integer | Only invoices of this customer (Customer RecordID). |
| unpaid_only | boolean | Only invoices with an outstanding balance. |
| created_since | string | ISO 8601 date-time WITH a timezone (Z or +hh:mm), e.g. 2026-10-01T00:00:00Z. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"top": {
"type": "integer",
"maximum": 100,
"description": "Rows per page, 1-100 (default 25).",
"exclusiveMinimum": 0
},
"skip": {
"type": "integer",
"maximum": 10000000,
"minimum": 0,
"description": "Rows to skip (default 0). Pass the previous reply's next_skip."
},
"select": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$"
},
"maxItems": 60,
"minItems": 1,
"description": "Field names to return (case-sensitive, from method_get_table_fields). Without a select Method returns hundreds of columns per row."
},
"customer_id": {
"type": "integer",
"maximum": 2147483647,
"description": "Only invoices of this customer (Customer RecordID).",
"exclusiveMinimum": 0
},
"unpaid_only": {
"type": "boolean",
"description": "Only invoices with an outstanding balance."
},
"created_since": {
"type": "string",
"description": "ISO 8601 date-time WITH a timezone (Z or +hh:mm), e.g. 2026-10-01T00:00:00Z."
}
}
}List every table on this Method account (standard QuickBooks/Xero/Method tables and custom ones) with its source and whether it can be created, updated or deleted. Tables differ per account: call this before querying a table you are unsure of. GET /api/v1/tables.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Query any table (Customer, Contacts, Activity, Invoice, Estimate, Item, Users, custom tables ...). Always pass `select`. `filter` uses OData-style syntax: strings in single quotes, dates as '2026-05-26T00:00:00Z' with Z or an offset, operators eq ne lt gt le ge and or not, functions contains(Name,'x') startswith() endswith(); e.g. "BalanceRemaining gt 0 and DueDate lt '2026-10-01T00:00:00Z'". `apply` runs server-side aggregation instead of listing rows, e.g. "aggregate(BalanceRemaining with sum as Outstanding)" or "groupby((Customer), aggregate(Amount with sum as Total))". Default order is RecordID ascending (stable paging); page with next_skip. GET /api/v1/tables/{table}.
| Argument | Type | Description |
|---|---|---|
| top | integer | Rows per page, 1-100 (default 25). |
| skip | integer | Rows to skip (default 0). Pass the previous reply's next_skip. |
| apply | string | Aggregation, e.g. "aggregate($count as Total)"; ignores paging. |
| table* | string | Table name exactly as method_list_tables shows it, e.g. Customer, Contacts, Activity, Invoice, Estimate. |
| filter | string | Filter expression, e.g. "IsLeadStatusOnly eq true and contains(Name,'Smith')". |
| select | array | Field names to return (case-sensitive, from method_get_table_fields). Without a select Method returns hundreds of columns per row. |
Find customers and leads (the Customer table: Customers & Leads in Method) by text in the name or email, by lead/customer type, or list them all. Returns RecordID, name, email, phone, lead flag and status; override `select` for other fields (see method_get_table_fields with table Customer). Page with next_skip. GET /api/v1/tables/Customer.
| Argument | Type | Description |
|---|---|---|
| top | integer | Rows per page, 1-100 (default 25). |
| kind | string | leads = IsLeadStatusOnly true, customers = false (default all). |
| skip | integer | Rows to skip (default 0). Pass the previous reply's next_skip. |
| text | string | Matches records whose Name or Email contains this text (case-insensitive). |
| select | array | Field names to return (case-sensitive, from method_get_table_fields). Without a select Method returns hundreds of columns per row. |
| active_only | boolean | Only active records (IsActive true). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"top": {
"type": "integer",
"maximum": 100,
"description": "Rows per page, 1-100 (default 25).",
"exclusiveMinimum": 0
},
"kind": {
"enum": [
"all",
"leads",
"customers"
],
"type": "string",
"description": "leads = IsLeadStatusOnly true, customers = false (default all)."
},
"skip": {
"type": "integer",
"maximum": 10000000,
"minimum": 0,
"description": "Rows to skip (default 0). Pass the previous reply's next_skip."
},
"text": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Matches records whose Name or Email contains this text (case-insensitive)."
},
"select": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$"
},
"maxItems": 60,
"minItems": 1,
"description": "Field names to return (case-sensitive, from method_get_table_fields). Without a select Method returns hundreds of columns per row."
},
"active_only": {
"type": "boolean",
"description": "Only active records (IsActive true)."
}
}
}WRITE: changes fields on one record (PATCH: only the fields you pass change). Field names are case-sensitive and Method silently ignores wrong or read-only names, so the reply re-reads the record and shows the stored values of the fields you sent: check them. Linked fields are changed through their `_RecordID` integer field. Updating accounting records (Customer, Invoice ...) makes Method sync the change to QuickBooks/Xero; setting IsLeadStatusOnly to false converts a lead into a synced customer. There is no delete tool. PATCH /api/v1/tables/{table}/{recordId}.
| Argument | Type | Description |
|---|---|---|
| table* | string | Table name exactly as method_list_tables shows it, e.g. Customer, Contacts, Activity, Invoice, Estimate. |
| fields* | object | Field name -> value, exactly as method_get_table_fields names them (case-sensitive; a misspelled name is silently ignored by Method). For a dropdown/linked field send the integer id in its `_RecordID` field (e.g. Customer_RecordID: 1234), not the caption. |
| record_id* | integer | The record's RecordID. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"table",
"record_id",
"fields"
],
"properties": {
"table": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$",
"description": "Table name exactly as method_list_tables shows it, e.g. Customer, Contacts, Activity, Invoice, Estimate."
},
"fields": {
"type": "object",
"description": "Field name -> value, exactly as method_get_table_fields names them (case-sensitive; a misspelled name is silently ignored by Method). For a dropdown/linked field send the integer id in its `_RecordID` field (e.g. Customer_RecordID: 1234), not the caption.",
"propertyNames": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$"
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 8000
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
]
}
},
"record_id": {
"type": "integer",
"maximum": 2147483647,
"description": "The record's RecordID.",
"exclusiveMinimum": 0
}
}
}| extra_fields | object | Field name -> value, exactly as method_get_table_fields names them (case-sensitive; a misspelled name is silently ignored by Method). For a dropdown/linked field send the integer id in its `_RecordID` field (e.g. Customer_RecordID: 1234), not the caption. |
| assigned_to_id | integer | Owner: a Method user id (method_get_account, or the Users table). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"is_lead"
],
"properties": {
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Display name of the customer or lead."
},
"email": {
"type": "string",
"maxLength": 254
},
"phone": {
"type": "string",
"maxLength": 50
},
"is_lead": {
"type": "boolean",
"description": "true = lead (not synced to accounting), false = customer (synced to QuickBooks/Xero)."
},
"last_name": {
"type": "string",
"maxLength": 100
},
"first_name": {
"type": "string",
"maxLength": 100
},
"lead_status": {
"type": "string",
"maxLength": 100,
"description": "Account-defined lead status, e.g. Open (leads only)."
},
"extra_fields": {
"type": "object",
"description": "Field name -> value, exactly as method_get_table_fields names them (case-sensitive; a misspelled name is silently ignored by Method). For a dropdown/linked field send the integer id in its `_RecordID` field (e.g. Customer_RecordID: 1234), not the caption.",
"propertyNames": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$"
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 8000
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
]
}
},
"assigned_to_id": {
"type": "integer",
"maximum": 2147483647,
"description": "Owner: a Method user id (method_get_account, or the Users table).",
"exclusiveMinimum": 0
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"top": {
"type": "integer",
"maximum": 100,
"description": "Rows per page, 1-100 (default 25).",
"exclusiveMinimum": 0
},
"skip": {
"type": "integer",
"maximum": 10000000,
"minimum": 0,
"description": "Rows to skip (default 0). Pass the previous reply's next_skip."
},
"select": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$"
},
"maxItems": 60,
"minItems": 1,
"description": "Field names to return (case-sensitive, from method_get_table_fields). Without a select Method returns hundreds of columns per row."
},
"due_after": {
"type": "string",
"description": "ISO 8601 date-time WITH a timezone (Z or +hh:mm), e.g. 2026-10-01T00:00:00Z."
},
"entity_id": {
"type": "integer",
"maximum": 2147483647,
"description": "Only activities of this entity (Customer RecordID).",
"exclusiveMinimum": 0
},
"due_before": {
"type": "string",
"description": "ISO 8601 date-time WITH a timezone (Z or +hh:mm), e.g. 2026-10-01T00:00:00Z."
},
"assigned_to_id": {
"type": "integer",
"maximum": 2147483647,
"description": "Only activities assigned to this user id (method_get_account or the Users table).",
"exclusiveMinimum": 0
}
}
}| orderby | string | Sort, e.g. "RecordID desc" or "TotalBalance desc,RecordID". |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"table"
],
"properties": {
"top": {
"type": "integer",
"maximum": 100,
"description": "Rows per page, 1-100 (default 25).",
"exclusiveMinimum": 0
},
"skip": {
"type": "integer",
"maximum": 10000000,
"minimum": 0,
"description": "Rows to skip (default 0). Pass the previous reply's next_skip."
},
"apply": {
"type": "string",
"maxLength": 1500,
"minLength": 1,
"description": "Aggregation, e.g. \"aggregate($count as Total)\"; ignores paging."
},
"table": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$",
"description": "Table name exactly as method_list_tables shows it, e.g. Customer, Contacts, Activity, Invoice, Estimate."
},
"filter": {
"type": "string",
"maxLength": 1500,
"minLength": 1,
"description": "Filter expression, e.g. \"IsLeadStatusOnly eq true and contains(Name,'Smith')\"."
},
"select": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$"
},
"maxItems": 60,
"minItems": 1,
"description": "Field names to return (case-sensitive, from method_get_table_fields). Without a select Method returns hundreds of columns per row."
},
"orderby": {
"type": "string",
"pattern": "^[A-Za-z0-9_, ]+$",
"maxLength": 300,
"minLength": 1,
"description": "Sort, e.g. \"RecordID desc\" or \"TotalBalance desc,RecordID\"."
}
}
}