Skip to main content

List accounts

GET /api/v1/accounts Returns a paginated list of accounts in your organization.
curl https://zudo.so/api/v1/accounts \
  -H "x-api-key: psk_your_key_here"

Query parameters

ParameterTypeDefaultDescription
pageinteger1Page number
pageSizeinteger25Results per page (max 100)
searchstringFilter by account name or externalId (case-insensitive substring match)
externalIdstringFilter to the account whose externalId exactly matches this value. Useful for reverse-lookup by your own customer identifier.
statusstringFilter by status: active, onboarding, churned, or inactive
sortBystringnameSort field: name, mrr, createdAt, or updatedAt
sortOrderstringascSort direction: asc or desc

Response

{
	"data": [
		{
			"id": 1,
			"name": "Pied Piper",
			"externalId": "piedpiper",
			"mrr": 48000,
			"active": true,
			"churned": false,
			"onboarding": false,
			"logoUrl": null,
			"createdAt": "2024-03-15T08:00:00.000Z",
			"updatedAt": "2025-01-10T14:22:00.000Z"
		}
	],
	"pagination": {
		"page": 1,
		"pageSize": 25,
		"total": 47,
		"totalPages": 2,
		"hasNextPage": true,
		"hasPrevPage": false
	}
}

Get account

GET /api/v1/accounts/{accountId} Returns full details for a single account, including contacts, recent meetings, and linked requests.
curl https://zudo.so/api/v1/accounts/1 \
  -H "x-api-key: psk_your_key_here"

Path parameters

ParameterTypeDescription
accountIdintegerThe account ID

Response

{
	"data": {
		"id": 1,
		"name": "Pied Piper",
		"externalId": "piedpiper",
		"mrr": 48000,
		"active": true,
		"churned": false,
		"onboarding": false,
		"logoUrl": null,
		"createdAt": "2024-03-15T08:00:00.000Z",
		"updatedAt": "2025-01-10T14:22:00.000Z",
		"contacts": [
			{
				"id": 1,
				"name": "Richard Hendricks",
				"email": "richard@piedpiper.com"
			}
		],
		"meetings": [
			{
				"id": 5,
				"title": "Q1 Review",
				"startAt": "2025-01-08T14:00:00.000Z",
				"endAt": "2025-01-08T15:00:00.000Z"
			}
		],
		"requests": [
			{
				"id": 3,
				"title": "SSO integration",
				"status": "Open",
				"severity": 62,
				"requestedAt": "2024-11-01T00:00:00.000Z"
			}
		]
	}
}
Returns 404 if the account is not found or does not belong to your organization.

Create account

POST /api/v1/accounts Creates a new account in your organization.
curl -X POST https://zudo.so/api/v1/accounts \
  -H "x-api-key: psk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Aviato",
    "externalId": "aviato-prod-7421",
    "mrr": 12000,
    "status": "active",
    "contactName": "Erlich Bachman",
    "contactEmail": "erlich@aviato.com"
  }'

Request body

FieldTypeRequiredDescription
namestringYesAccount name
externalIdstringNoYour unique identifier for this account (e.g. your internal customer ID). Used to match incoming product-usage events to this account. Must be unique within your organization.
mrrnumberNoMonthly recurring revenue
statusstringNoactive (default), onboarding, or churned
contactNamestringNoName of an initial contact to create
contactEmailstringNoEmail of an initial contact to create

Response

Returns 201 with the created account object on success.
{
	"data": {
		"id": 48,
		"name": "Aviato",
		"externalId": "aviato-prod-7421",
		"mrr": 12000,
		"active": true,
		"churned": false,
		"onboarding": false,
		"createdAt": "2025-02-01T10:00:00.000Z",
		"updatedAt": "2025-02-01T10:00:00.000Z"
	}
}
Returns 400 if name is missing or empty, or if externalId is not a string. Returns a database error if externalId collides with another account in your organization.

Update account

PATCH /api/v1/accounts/{accountId} Updates fields on an existing account.
curl -X PATCH https://zudo.so/api/v1/accounts/1 \
  -H "x-api-key: psk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "externalId": "piedpiper-v2",
    "contactActivityAt": "2025-06-10T14:30:00.000Z"
  }'

Path parameters

ParameterTypeDescription
accountIdintegerThe account ID

Request body

FieldTypeRequiredDescription
externalIdstring | nullNoYour unique identifier for this account. Used to match incoming product-usage events. Must be unique within your organization. Set to null or "" to clear.
contactActivityAtstring | nullNoISO 8601 timestamp of when a contact was last active. Used as a health score factor. Set to null to clear. Cannot be in the future.

Response

Returns 200 with the updated account object on success.
{
	"data": {
		"id": 1,
		"name": "Pied Piper",
		"externalId": "piedpiper-v2",
		"mrr": 48000,
		"active": true,
		"churned": false,
		"onboarding": false,
		"contactActivityAt": "2025-06-10T14:30:00.000Z",
		"createdAt": "2024-03-15T08:00:00.000Z",
		"updatedAt": "2025-06-10T14:35:00.000Z"
	}
}
Returns 400 if the date is invalid or in the future, or if no valid fields are provided. Returns 404 if the account is not found or does not belong to your organization.
Use this endpoint to feed contact activity data from external systems (support platforms, product analytics, etc.) into Zudo’s health score. When set via the API, this value takes priority over Vitally’s lastSeenTimestamp.