For the complete documentation index, see llms.txt. This page is also available as Markdown.

Accounts

Get a list of accounts

get
/accounts

Returns a paginated list of accounts for the organization.

Rate limit: 300 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Query parameters
cursorstringOptional

The cursor to use for pagination.

limitinteger · int64Optional

The number of accounts to fetch. Defaults to 100. Must be greater than 0 and less than 1000.

Responses
200Success
application/json
request_idstringRequired

The request ID for tracking.

get/accounts
GET /accounts HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "data": [
    {
      "associated_account_ids": [
        "text"
      ],
      "channels": [
        {
          "channel_id": "text",
          "channel_name": "text",
          "channel_url": "text",
          "is_internal": true,
          "is_primary": true,
          "mirror_to": {
            "channel_id": "text",
            "source": "slack"
          },
          "source": "slack"
        }
      ],
      "created_at": "2026-01-01T00:00:00.000Z",
      "crm_settings": {
        "details": [
          {
            "id": "text",
            "source": "text"
          }
        ]
      },
      "custom_fields": {
        "plan": {
          "value": "enterprise"
        }
      },
      "domain": "text",
      "domains": [
        "text"
      ],
      "external_ids": [
        {
          "external_id": "text",
          "label": "text"
        }
      ],
      "id": "text",
      "is_disabled": true,
      "latest_customer_activity_time": "text",
      "latest_vendor_activity_time": "text",
      "logo_url": "text",
      "name": "text",
      "owner": {
        "email": "text",
        "id": "text"
      },
      "parent_account_id": "text",
      "primary_domain": "text",
      "subaccount_ids": [
        "text"
      ],
      "tags": [
        "text"
      ],
      "type": "customer",
      "updated_at": "2026-01-01T00:00:00.000Z"
    }
  ],
  "pagination": {
    "cursor": "text",
    "has_next_page": true
  },
  "request_id": "text"
}

Create a new account

post
/accounts

Creates a new account with the specified name and optional metadata.

Rate limit: 300 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Body
account_typestring · enumOptional

The type of the account. Must be one of "customer", "internal", "community", or "partner". Defaults to "customer" if not specified.

Default: customerExample: customerPossible values:
domainstringOptional

Deprecated. Please use Domains and PrimaryDomain instead.

domainsstring[]Optional

The domains of the account, without any leading scheme, for example stripe.com. Must specify one domain as primary.

logo_urlstringOptional

The logo URL of the account. Must be a square .png, .jpg or .jpeg.

namestringRequired

The name of the account.

owner_idstringOptional

The ID of the owner of the account.

primary_domainstringOptional

Must be in the list of domains. If there are any domains, there must be exactly one primary domain.

subaccount_idsstring[]Optional

An array of account IDs to be added as subaccounts to this account. For normal accounts, these represent subaccounts. For partner accounts, these represent associated accounts.

tagsstring[]Optional

An array of strings to use as tags on this account. If provided, the accounts tags will be updated to the given tags.

Responses
200Success
application/json
request_idstringRequired

The request ID for tracking.

post/accounts
POST /accounts HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 483

{
  "account_type": "customer",
  "channels": [
    {
      "channel_id": "text",
      "channel_name": "text",
      "channel_url": "text",
      "is_internal": true,
      "is_primary": true,
      "mirror_to": {
        "channel_id": "text",
        "source": "slack"
      },
      "source": "slack"
    }
  ],
  "custom_fields": [
    {
      "slug": "text",
      "value": "text",
      "values": [
        "text"
      ]
    }
  ],
  "domain": "text",
  "domains": [
    "text"
  ],
  "external_ids": [
    {
      "external_id": "text",
      "label": "text"
    }
  ],
  "logo_url": "text",
  "name": "text",
  "owner_id": "text",
  "primary_domain": "text",
  "subaccount_ids": [
    "text"
  ],
  "tags": [
    "text"
  ]
}
{
  "data": {
    "associated_account_ids": [
      "text"
    ],
    "channels": [
      {
        "channel_id": "text",
        "channel_name": "text",
        "channel_url": "text",
        "is_internal": true,
        "is_primary": true,
        "mirror_to": {
          "channel_id": "text",
          "source": "slack"
        },
        "source": "slack"
      }
    ],
    "created_at": "2026-01-01T00:00:00.000Z",
    "crm_settings": {
      "details": [
        {
          "id": "text",
          "source": "text"
        }
      ]
    },
    "custom_fields": {
      "plan": {
        "value": "enterprise"
      }
    },
    "domain": "text",
    "domains": [
      "text"
    ],
    "external_ids": [
      {
        "external_id": "text",
        "label": "text"
      }
    ],
    "id": "text",
    "is_disabled": true,
    "latest_customer_activity_time": "text",
    "latest_vendor_activity_time": "text",
    "logo_url": "text",
    "name": "text",
    "owner": {
      "email": "text",
      "id": "text"
    },
    "parent_account_id": "text",
    "primary_domain": "text",
    "subaccount_ids": [
      "text"
    ],
    "tags": [
      "text"
    ],
    "type": "customer",
    "updated_at": "2026-01-01T00:00:00.000Z"
  },
  "request_id": "text"
}

Update multiple accounts

patch
/accounts

Updates multiple accounts in a single request. Only provided fields are modified.

Rate limit: 120 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Body
account_idsstring[]Required

The account IDs to update. The number of accounts to update must be between 1 and 100.

account_typestring · enumOptional

The type of the account. Can only be changed to "customer" or "partner".

Example: customerPossible values:
is_disabledbooleanOptional

Whether the accounts are disabled.

owner_idstringOptional

The ID of the new owner. If empty string is passed in, the owner will be removed.

tagsstring[]Optional

An array of tags to be updated on the accounts.

tags_apply_modestring · enumOptional

The mode for applying tags. Valid values: "append_only", "remove_only", "replace". Defaults to "replace".

Default: replaceExample: replacePossible values:
Responses
200Success
application/json
request_idstringRequired

The request ID for tracking.

successbooleanRequired

Whether the update was successfully initiated.

patch/accounts
PATCH /accounts HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 198

{
  "account_ids": [
    "text"
  ],
  "account_type": "customer",
  "custom_fields": [
    {
      "slug": "text",
      "value": "text",
      "values": [
        "text"
      ]
    }
  ],
  "is_disabled": true,
  "owner_id": "text",
  "tags": [
    "text"
  ],
  "tags_apply_mode": "replace"
}
{
  "request_id": "text",
  "success": true
}

Get an account by its ID or external ID

get
/accounts/{id}

Returns a single account by ID or external ID.

Rate limit: 300 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Path parameters
idstringRequired

The ID or external ID of the account to fetch.

Responses
200Success
application/json
request_idstringRequired

The request ID for tracking.

get/accounts/{id}
GET /accounts/{id} HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "data": {
    "associated_account_ids": [
      "text"
    ],
    "channels": [
      {
        "channel_id": "text",
        "channel_name": "text",
        "channel_url": "text",
        "is_internal": true,
        "is_primary": true,
        "mirror_to": {
          "channel_id": "text",
          "source": "slack"
        },
        "source": "slack"
      }
    ],
    "created_at": "2026-01-01T00:00:00.000Z",
    "crm_settings": {
      "details": [
        {
          "id": "text",
          "source": "text"
        }
      ]
    },
    "custom_fields": {
      "plan": {
        "value": "enterprise"
      }
    },
    "domain": "text",
    "domains": [
      "text"
    ],
    "external_ids": [
      {
        "external_id": "text",
        "label": "text"
      }
    ],
    "id": "text",
    "is_disabled": true,
    "latest_customer_activity_time": "text",
    "latest_vendor_activity_time": "text",
    "logo_url": "text",
    "name": "text",
    "owner": {
      "email": "text",
      "id": "text"
    },
    "parent_account_id": "text",
    "primary_domain": "text",
    "subaccount_ids": [
      "text"
    ],
    "tags": [
      "text"
    ],
    "type": "customer",
    "updated_at": "2026-01-01T00:00:00.000Z"
  },
  "request_id": "text"
}

Update an existing account

patch
/accounts/{id}

Updates an existing account by ID or external ID. Only provided fields are modified.

Rate limit: 300 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Path parameters
idstringRequired

The ID or external ID of the account to update.

Body
account_typestring · enumOptional

The type of the account. Can only be changed to "customer" or "partner".

Example: customerPossible values:
domainsstring[]Optional

Domains of the account. Replaces the account's domains. Must specify one domain as primary.

is_disabledbooleanOptional

Whether the account is disabled.

logo_urlstringOptional

Logo URL of the account.

namestringOptional

The name of the account.

owner_idstringOptional

The ID of the owner of the account. If empty string is passed in, the owner will be removed.

primary_domainstringOptional

Must be in the list of domains. If there are any domains, there must be exactly one primary domain.

subaccount_idsstring[]Optional

An array of account IDs to set as this account's subaccounts. If provided, the account's subaccounts become exactly this list; accounts you leave out are detached.

tagsstring[]Optional

An array of strings to use as tags on this account. If provided, the accounts tags will be updated to the given tags.

Responses
200Success
application/json
request_idstringRequired

The request ID for tracking.

patch/accounts/{id}
PATCH /accounts/{id} HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 486

{
  "account_type": "customer",
  "channels": [
    {
      "channel_id": "text",
      "channel_name": "text",
      "channel_url": "text",
      "is_internal": true,
      "is_primary": true,
      "mirror_to": {
        "channel_id": "text",
        "source": "slack"
      },
      "source": "slack"
    }
  ],
  "custom_fields": [
    {
      "slug": "text",
      "value": "text",
      "values": [
        "text"
      ]
    }
  ],
  "domains": [
    "text"
  ],
  "external_ids": [
    {
      "external_id": "text",
      "label": "text"
    }
  ],
  "is_disabled": true,
  "logo_url": "text",
  "name": "text",
  "owner_id": "text",
  "primary_domain": "text",
  "subaccount_ids": [
    "text"
  ],
  "tags": [
    "text"
  ]
}
{
  "data": {
    "associated_account_ids": [
      "text"
    ],
    "channels": [
      {
        "channel_id": "text",
        "channel_name": "text",
        "channel_url": "text",
        "is_internal": true,
        "is_primary": true,
        "mirror_to": {
          "channel_id": "text",
          "source": "slack"
        },
        "source": "slack"
      }
    ],
    "created_at": "2026-01-01T00:00:00.000Z",
    "crm_settings": {
      "details": [
        {
          "id": "text",
          "source": "text"
        }
      ]
    },
    "custom_fields": {
      "plan": {
        "value": "enterprise"
      }
    },
    "domain": "text",
    "domains": [
      "text"
    ],
    "external_ids": [
      {
        "external_id": "text",
        "label": "text"
      }
    ],
    "id": "text",
    "is_disabled": true,
    "latest_customer_activity_time": "text",
    "latest_vendor_activity_time": "text",
    "logo_url": "text",
    "name": "text",
    "owner": {
      "email": "text",
      "id": "text"
    },
    "parent_account_id": "text",
    "primary_domain": "text",
    "subaccount_ids": [
      "text"
    ],
    "tags": [
      "text"
    ],
    "type": "customer",
    "updated_at": "2026-01-01T00:00:00.000Z"
  },
  "request_id": "text"
}

Delete an existing account

delete
/accounts/{id}

Permanently deletes an account by ID or external ID.

Rate limit: 30 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Path parameters
idstringRequired

The ID or external ID of the account to delete.

Responses
200Success
application/json
request_idstringRequired

The request ID for tracking.

delete/accounts/{id}
DELETE /accounts/{id} HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "request_id": "text"
}

Search for accounts by a given filter

post
/accounts/search

Optionally pass search_text for fuzzy matching. Results are intersected with any provided filter.

Filterable fields and their allowed operators:

Field
Allowed operators

id

equals, in, not_in

domains

contains, does_not_contain, in, not_in

tags

contains, does_not_contain, in, not_in

name

equals, in, not_in, string_contains

external_ids

equals, in, not_in, is_set, is_unset

owner_id

equals, in, not_in, is_set, is_unset

For custom fields, pass the field slug as field.

Rate limit: 120 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Body
cursorstringOptional

The cursor to use for pagination.

limitinteger · int64Optional

The number of accounts to fetch. Defaults to 100. Must be between 1 and 1000.

search_textstringOptional

Fuzzy text search. Results are intersected with any provided filter.

Responses
200Success
application/json
request_idstringRequired

The request ID for tracking.

post/accounts/search
POST /accounts/search HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 194

{
  "cursor": "text",
  "filter": {
    "field": "text",
    "operator": "equals",
    "subfilters": [
      {
        "field": "state",
        "operator": "equals",
        "value": "new"
      }
    ],
    "value": "text",
    "values": [
      "text"
    ]
  },
  "limit": 1,
  "search_text": "text"
}
{
  "data": [
    {
      "associated_account_ids": [
        "text"
      ],
      "channels": [
        {
          "channel_id": "text",
          "channel_name": "text",
          "channel_url": "text",
          "is_internal": true,
          "is_primary": true,
          "mirror_to": {
            "channel_id": "text",
            "source": "slack"
          },
          "source": "slack"
        }
      ],
      "created_at": "2026-01-01T00:00:00.000Z",
      "crm_settings": {
        "details": [
          {
            "id": "text",
            "source": "text"
          }
        ]
      },
      "custom_fields": {
        "plan": {
          "value": "enterprise"
        }
      },
      "domain": "text",
      "domains": [
        "text"
      ],
      "external_ids": [
        {
          "external_id": "text",
          "label": "text"
        }
      ],
      "id": "text",
      "is_disabled": true,
      "latest_customer_activity_time": "text",
      "latest_vendor_activity_time": "text",
      "logo_url": "text",
      "name": "text",
      "owner": {
        "email": "text",
        "id": "text"
      },
      "parent_account_id": "text",
      "primary_domain": "text",
      "subaccount_ids": [
        "text"
      ],
      "tags": [
        "text"
      ],
      "type": "customer",
      "updated_at": "2026-01-01T00:00:00.000Z"
    }
  ],
  "pagination": {
    "cursor": "text",
    "has_next_page": true
  },
  "request_id": "text"
}

Merge accounts

post
/accounts/merge

Merges one or more accounts into a surviving account. Issues, contacts, opportunities, domains, channels, external IDs, and other associated data are transferred to the surviving account. Tags and custom field values of the merged accounts are not transferred. The merged accounts are permanently deleted. This cannot be undone. Accounts are merged sequentially, each in its own transaction; if a merge fails partway through, accounts already merged are not restored.

Rate limit: 30 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Body
merge_account_idsstring[]Required

The IDs of the accounts to merge into the surviving account. These accounts are permanently deleted after their data is transferred. The number of accounts to merge must be between 1 and 100.

merge_into_account_idstringRequired

The ID of the account that will survive the merge and receive the merged data.

Responses
200Success
application/json
request_idstringRequired

The request ID for tracking.

post/accounts/merge
POST /accounts/merge HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 61

{
  "merge_account_ids": [
    "text"
  ],
  "merge_into_account_id": "text"
}
{
  "data": {
    "associated_account_ids": [
      "text"
    ],
    "channels": [
      {
        "channel_id": "text",
        "channel_name": "text",
        "channel_url": "text",
        "is_internal": true,
        "is_primary": true,
        "mirror_to": {
          "channel_id": "text",
          "source": "slack"
        },
        "source": "slack"
      }
    ],
    "created_at": "2026-01-01T00:00:00.000Z",
    "crm_settings": {
      "details": [
        {
          "id": "text",
          "source": "text"
        }
      ]
    },
    "custom_fields": {
      "plan": {
        "value": "enterprise"
      }
    },
    "domain": "text",
    "domains": [
      "text"
    ],
    "external_ids": [
      {
        "external_id": "text",
        "label": "text"
      }
    ],
    "id": "text",
    "is_disabled": true,
    "latest_customer_activity_time": "text",
    "latest_vendor_activity_time": "text",
    "logo_url": "text",
    "name": "text",
    "owner": {
      "email": "text",
      "id": "text"
    },
    "parent_account_id": "text",
    "primary_domain": "text",
    "subaccount_ids": [
      "text"
    ],
    "tags": [
      "text"
    ],
    "type": "customer",
    "updated_at": "2026-01-01T00:00:00.000Z"
  },
  "request_id": "text"
}

Get account relationships

get
/accounts/{account_id}/relationships

Returns the parent-child and partner-client relationships where the account is the child or client.

Rate limit: 300 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Path parameters
account_idstringRequired

The ID of the child or client account whose relationships should be returned.

Responses
200Success
application/json
request_idstringRequired

The request ID for tracking.

get/accounts/{account_id}/relationships
GET /accounts/{account_id}/relationships HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "data": [
    {
      "child_account_id": "text",
      "created_at": "2026-01-01T00:00:00.000Z",
      "id": "text",
      "parent_account_id": "text",
      "related_object_id": "text",
      "relationship_type": "text",
      "updated_at": "2026-01-01T00:00:00.000Z"
    }
  ],
  "request_id": "text"
}

Create an account relationship

post
/accounts/{account_id}/relationship

Creates a parent or partner relationship for the account in the URL.

Rate limit: 120 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Path parameters
account_idstringRequired

The ID of the child or client account.

Body
related_object_idstringRequired

The ID of the related parent or partner account.

relationship_typestringRequired

The relationship type. Must be "parent_account" or "partner_account".

Responses
200Success
application/json
request_idstringRequired

The request ID for tracking.

post/accounts/{account_id}/relationship
POST /accounts/{account_id}/relationship HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 55

{
  "related_object_id": "text",
  "relationship_type": "text"
}
{
  "data": {
    "child_account_id": "text",
    "created_at": "2026-01-01T00:00:00.000Z",
    "id": "text",
    "parent_account_id": "text",
    "related_object_id": "text",
    "relationship_type": "text",
    "updated_at": "2026-01-01T00:00:00.000Z"
  },
  "request_id": "text"
}

Delete an account relationship

delete
/accounts/{account_id}/relationships/{relationship_id}

Deletes an account relationship by ID.

Rate limit: 120 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Path parameters
account_idstringRequired

The ID of the child or client account.

relationship_idstringRequired

The ID of the account relationship to delete.

Responses
200Success
application/json
request_idstringRequired

The request ID for tracking.

delete/accounts/{account_id}/relationships/{relationship_id}
DELETE /accounts/{account_id}/relationships/{relationship_id} HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "data": {
    "child_account_id": "text",
    "created_at": "2026-01-01T00:00:00.000Z",
    "id": "text",
    "parent_account_id": "text",
    "related_object_id": "text",
    "relationship_type": "text",
    "updated_at": "2026-01-01T00:00:00.000Z"
  },
  "request_id": "text"
}

Append a note to an account notebook block

post
/accounts/{account_id}/notebook-blocks/{block_id}/notes

Creates a note in a specific Notes block in an account notebook.

Rate limit: 120 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Path parameters
account_idstringRequired

The ID or external ID of the account.

block_idstringRequired

The ID of the Notes block, copied from the notebook UI.

Body
content_htmlstringRequired

The note body as HTML.

titlestringOptional

An optional title for the note.

Responses
200Success
application/json
request_idstringRequired

The request ID for tracking.

post/accounts/{account_id}/notebook-blocks/{block_id}/notes
POST /accounts/{account_id}/notebook-blocks/{block_id}/notes HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 38

{
  "content_html": "text",
  "title": "text"
}
{
  "data": {
    "account_id": "text",
    "block_id": "text",
    "content_html": "text",
    "created_at": "2026-01-01T00:00:00.000Z",
    "created_by_user_id": "text",
    "id": "text",
    "title": "text",
    "updated_at": "2026-01-01T00:00:00.000Z"
  },
  "request_id": "text"
}

Get notes from an account notebook block

get
/accounts/{account_id}/notebook-blocks/{block_id}/notes

Returns notes from a specific Notes block in an account notebook.

Rate limit: 300 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Path parameters
account_idstringRequired

The ID or external ID of the account.

block_idstringRequired

The ID of the Notes block, copied from the notebook UI.

Query parameters
cursorstringOptional

The cursor to use for pagination.

limitinteger · int64Optional

The number of notes to fetch. Defaults to 20. Must be greater than 0 and less than or equal to 20.

Responses
200Success
application/json
request_idstringRequired

The request ID for tracking.

get/accounts/{account_id}/notebook-blocks/{block_id}/notes
GET /accounts/{account_id}/notebook-blocks/{block_id}/notes HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "data": [
    {
      "account_id": "text",
      "block_id": "text",
      "content_html": "text",
      "created_at": "2026-01-01T00:00:00.000Z",
      "created_by_user_id": "text",
      "id": "text",
      "title": "text",
      "updated_at": "2026-01-01T00:00:00.000Z"
    }
  ],
  "pagination": {
    "cursor": "text",
    "has_next_page": true
  },
  "request_id": "text"
}

Last updated

Was this helpful?