Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.monaco.com/llms.txt

Use this file to discover all available pages before exploring further.

All list endpoints in the Monaco Public API (POST /v1/{entity}/list) accept a JSON request body that controls pagination, sorting, and filtering.
{
  "filters": [],
  "sort": "-created_at",
  "page": 1,
  "page_size": 50
}

Pagination

FieldTypeDefaultMinMaxDescription
pageint11Page number (1-indexed)
page_sizeint501500Results per page
Every list response includes a pagination object:
{
  "data": [ ... ],
  "pagination": {
    "page": 1,
    "page_size": 50,
    "total_count": 142,
    "total_pages": 3
  },
  "meta": { ... }
}
FieldTypeDescription
pageintThe page you requested
page_sizeintThe page size you requested
total_countintTotal matching records across pages
total_pagesintTotal number of pages

Iterating through pages

To fetch all records, increment page until page >= total_pages:
# Page 1
curl -X POST .../v1/accounts/list \
  -H "x-monaco-api-key: $KEY" -H "Content-Type: application/json" \
  -d '{"page": 1, "page_size": 100}'

# Response includes pagination.total_pages = 3

# Page 2
curl -X POST .../v1/accounts/list \
  -H "x-monaco-api-key: $KEY" -H "Content-Type: application/json" \
  -d '{"page": 2, "page_size": 100}'

# Page 3 (final)
curl -X POST .../v1/accounts/list \
  -H "x-monaco-api-key: $KEY" -H "Content-Type: application/json" \
  -d '{"page": 3, "page_size": 100}'

Sorting

Pass a field key in sort. Prefix with - for descending order. The default is -created_at (newest first) for most objects.
{"sort": "name"}           // A → Z
{"sort": "-name"}          // Z → A
{"sort": "created_at"}     // oldest first
{"sort": "-created_at"}    // newest first
Not every field supports sorting. Attempting to sort by an unsupported field returns a 422 error. Use the field schemas endpoint to discover sortable fields.

Filtering

Filters are provided as either a flat array of rules (implicitly ANDed) or a recursive filter expression for complex AND/OR logic.

Simple filters

Pass an array of rules. All rules are implicitly ANDed together. Each rule has three properties:
PropertyTypeRequiredDescription
fieldstringyesThe field key to filter on
conditionstringyesThe comparison operator
valueanynoThe value to compare against (omit for empty checks)
{
  "filters": [
    { "field": "status", "condition": "is", "value": "active" },
    {
      "field": "created_at",
      "condition": "is_after",
      "value": "2025-01-01T00:00:00Z"
    }
  ]
}

Complex filters (AND / OR)

For OR logic or nested conditions, pass a filter expression object instead of an array. An expression has:
PropertyTypeRequiredDescription
operatorstringno"and" or "or" — how to combine the filters. Defaults to "and"
filtersarrayyesArray of filter rules and/or nested filter expressions
Expressions can be nested to arbitrary depth, letting you build trees of AND/OR logic. Example — OR across two conditions:
{
  "filters": {
    "operator": "or",
    "filters": [
      { "field": "status", "condition": "is", "value": "active" },
      { "field": "status", "condition": "is", "value": "pending" }
    ]
  }
}
Example — OR with a nested AND group:
{
  "filters": {
    "operator": "or",
    "filters": [
      { "field": "status", "condition": "is", "value": "active" },
      {
        "operator": "and",
        "filters": [
          { "field": "name", "condition": "contains", "value": "Acme" },
          {
            "field": "created_at",
            "condition": "is_after",
            "value": "2025-01-01T00:00:00Z"
          }
        ]
      }
    ]
  }
}

Common conditions

ConditionValue requiredDescription
isyesExact match OR exists in list
is_notyesNot equal
equalsyesExact match
containsyesSubstring match
not_containsyesSubstring exclusion
is_emptynoField is null or empty
is_not_emptynoField has a value
is_beforeyesDate is before value
is_afteryesDate is after value
The exact set of conditions available depends on the field type. Use the Field Schemas endpoint to discover them.

Enum field values

For enum fields (e.g., status, stage), use the field’s key value when filtering or sorting — not the human-readable display name. You can find the valid keys in the enum_field_settings.allowed_values array returned by the Field Schemas endpoint.
// Correct — uses the key
{"field": "status", "condition": "is", "value": "active"}

// Incorrect — uses the display name
{"field": "status", "condition": "is", "value": "Active"}

Date values

Date filter values should be ISO 8601 strings. Trailing Z (UTC) is supported:
{"field": "created_at", "condition": "greater_than", "value": "2025-06-01T00:00:00Z"}

Custom fields in sorting and filtering

Custom fields (prefixed with custom_field_ in responses) can be used in sort and filters using their full key:
{
  "sort": "-custom_field_cf_arr",
  "filters": [
    {"field": "custom_field_cf_industry_vertical", "condition": "is", "value": "FinTech"}
  ]
}

Discovering sortable and filterable fields

Use the Field Schemas endpoint to discover which fields support sorting and filtering, and which conditions each field accepts:
GET /v1/schemas/{entity}
Where {entity} is one of: accounts, contacts, opportunities, tasks, or meetings.