Stitchflow
Metronome logo

Metronome User Management API Guide

API workflow

How to automate user lifecycle operations through APIs with caveats that matter in production.

UpdatedMar 17, 2026

Summary and recommendation

Metronome exposes a REST API at `https://api.metronome.com/v1` authenticated via Bearer token.

The critical framing caveat: Metronome's `customers` object represents billing accounts or tenants, not individual human identities.

There is no user or person management API

this is not an identity graph in the traditional sense, and it should not be treated as one when building identity graph pipelines or reconciling human access records.

Custom field keys must be pre-registered in the dashboard before they can be written via API, and `ingest_aliases` must be globally unique across the account or usage events will be silently misattributed.

API quick reference

Has user APIYes
Auth methodBearer token (API key)
Base URLOfficial docs
SCIM availableNo

Authentication

Auth method: Bearer token (API key)

Setup steps

  1. Log in to the Metronome dashboard.
  2. Navigate to Settings > API Keys.
  3. Generate a new API key.
  4. Include the key in the Authorization header as: Authorization: Bearer

User object / data model

Field Type Description On create On update Notes
id string (UUID) Metronome-assigned unique identifier for the customer auto-generated immutable Used as the primary key in all subsequent API calls
name string Human-readable name of the customer required mutable
ingest_aliases array of strings Alternative identifiers used to match usage events to this customer optional mutable Critical for event ingestion matching; must be unique across customers
external_id string Your internal identifier for the customer optional mutable Useful for cross-system reconciliation
custom_fields object (key-value) Arbitrary metadata attached to the customer optional mutable Keys must be pre-registered in Metronome dashboard
created_at string (ISO 8601) Timestamp when the customer was created auto-generated immutable
billing_config object Billing provider configuration (e.g., Stripe customer ID) optional mutable Supports Stripe, AWS Marketplace, and other billing providers
current_billable_status object Indicates whether the customer is currently billable auto-derived immutable (derived) Reflects active contract/plan status

Core endpoints

Create customer

  • Method: POST
  • URL: https://api.metronome.com/v1/customers
  • Watch out for: ingest_aliases must be globally unique; duplicate aliases will cause event ingestion conflicts.

Request example

POST /v1/customers
Authorization: Bearer <API_KEY>
Content-Type: application/json
{
  "name": "Acme Corp",
  "ingest_aliases": ["acme-corp-001"]
}

Response example

{
  "data": {
    "id": "3a1b2c3d-...",
    "name": "Acme Corp",
    "ingest_aliases": ["acme-corp-001"],
    "created_at": "2024-01-15T10:00:00Z"
  }
}

List customers

  • Method: GET
  • URL: https://api.metronome.com/v1/customers
  • Watch out for: Use next_page cursor token for pagination; absence of next_page indicates last page.

Request example

GET /v1/customers?limit=100
Authorization: Bearer <API_KEY>

Response example

{
  "data": [{"id": "...", "name": "Acme Corp"}],
  "next_page": "eyJpZCI6..."
}

Get customer

  • Method: GET
  • URL: https://api.metronome.com/v1/customers/{customer_id}

Request example

GET /v1/customers/3a1b2c3d-...
Authorization: Bearer <API_KEY>

Response example

{
  "data": {
    "id": "3a1b2c3d-...",
    "name": "Acme Corp",
    "ingest_aliases": ["acme-corp-001"]
  }
}

Update customer

  • Method: POST
  • URL: https://api.metronome.com/v1/customers/{customer_id}
  • Watch out for: Metronome uses POST (not PATCH) for customer updates on some endpoints; verify against current API reference.

Request example

POST /v1/customers/3a1b2c3d-...
Authorization: Bearer <API_KEY>
Content-Type: application/json
{
  "name": "Acme Corp Updated"
}

Response example

{
  "data": {
    "id": "3a1b2c3d-...",
    "name": "Acme Corp Updated"
  }
}

Set customer billing config

  • Method: POST
  • URL: https://api.metronome.com/v1/customers/{customer_id}/setBillingConfig
  • Watch out for: Billing provider must be configured in Metronome dashboard before this call succeeds.

Request example

POST /v1/customers/3a1b2c3d-.../setBillingConfig
Authorization: Bearer <API_KEY>
Content-Type: application/json
{
  "billing_provider_type": "stripe",
  "billing_provider_customer_id": "cus_abc123"
}

Response example

{}

Archive customer

  • Method: POST
  • URL: https://api.metronome.com/v1/customers/{customer_id}/archive
  • Watch out for: Archiving is irreversible via API; archived customers cannot be reactivated through standard endpoints.

Request example

POST /v1/customers/3a1b2c3d-.../archive
Authorization: Bearer <API_KEY>

Response example

{}

List customer plans

  • Method: GET
  • URL: https://api.metronome.com/v1/customers/{customer_id}/plans

Request example

GET /v1/customers/3a1b2c3d-.../plans
Authorization: Bearer <API_KEY>

Response example

{
  "data": [{"id": "...", "plan_name": "Pro", "starting_on": "2024-01-01"}]
}

Add plan to customer

  • Method: POST
  • URL: https://api.metronome.com/v1/customers/{customer_id}/plans/add
  • Watch out for: starting_on must be a future date aligned to billing period boundaries; misaligned dates may cause billing errors.

Request example

POST /v1/customers/3a1b2c3d-.../plans/add
Authorization: Bearer <API_KEY>
Content-Type: application/json
{
  "plan_id": "plan-uuid-...",
  "starting_on": "2024-02-01T00:00:00Z"
}

Response example

{
  "data": {
    "customer_plan_id": "cp-uuid-..."
  }
}

Rate limits, pagination, and events

  • Rate limits: Metronome does not publicly document specific rate limit thresholds or tiers in their official docs as of the research date.

  • Rate-limit headers: Unknown

  • Retry-After header: Unknown

  • Rate-limit notes: No publicly documented rate limits found. Contact Metronome support for enterprise rate limit details.

  • Pagination method: cursor

  • Default page size: 100

  • Max page size: Not documented

  • Pagination pointer: next_page

  • Webhooks available: Yes

  • Webhook notes: Metronome supports webhooks for event-driven notifications on billing and usage events.

  • Alternative event strategy: Not documented

  • Webhook events: invoice.finalized, invoice.payment_failed, customer.plan.added, customer.plan.ended, alert.triggered

SCIM API status

  • SCIM available: No
  • SCIM version: Not documented
  • Plan required: Not documented
  • Endpoint: Not documented

Limitations:

  • No SCIM provisioning support documented in official Metronome docs.
  • No IdP integrations (Okta, Entra, Google Workspace, OneLogin) documented for SCIM.

Common scenarios

Three primary automation scenarios are supported by the documented endpoints.

First, provisioning a new billing customer: POST /v1/customers with name and ingest_aliases, capture the returned id, call setBillingConfig to attach a Stripe customer ID, then POST to /v1/customers/{customer_id}/plans/add with a future starting_on date aligned to billing period boundaries

misaligned dates risk billing errors.

Second, paginating all customers: GET /v1/customers?limit=100, follow the opaque next_page cursor token until it is absent;

cursor tokens are time-sensitive and must not be cached across sessions.

Third, archiving a churned customer: confirm no active plans via GET /v1/customers/{customer_id}/plans, then POST to /v1/customers/{customer_id}/archive

this operation is irreversible through standard API endpoints, so billing and usage reconciliation must be completed beforehand.

Webhooks are available for event-driven triggers including invoice.finalized, customer.plan.added, and alert.triggered.

Provision a new billing customer and attach a plan

  1. POST /v1/customers with name and ingest_aliases to create the customer record.
  2. Note the returned customer id.
  3. POST /v1/customers/{customer_id}/setBillingConfig to link a Stripe or other billing provider customer ID.
  4. POST /v1/customers/{customer_id}/plans/add with the target plan_id and a future starting_on date.

Watch out for: ingest_aliases must match the customer_id or alias used in usage event ingestion; mismatch causes events to be dropped or misattributed.

Retrieve and paginate all customers

  1. GET /v1/customers?limit=100 to fetch the first page.
  2. Check response for next_page cursor token.
  3. If next_page is present, GET /v1/customers?next_page= for subsequent pages.
  4. Repeat until next_page is absent in the response.

Watch out for: Cursor tokens are opaque and time-sensitive; do not cache or reuse tokens across sessions.

Archive a churned customer

  1. Confirm the customer has no active plans via GET /v1/customers/{customer_id}/plans.
  2. POST /v1/customers/{customer_id}/archive to deactivate the customer.
  3. Verify the customer no longer appears in active customer list responses.

Watch out for: Archiving is irreversible via the API; ensure all billing and usage data has been reconciled before archiving.

Why building this yourself is a trap

The most consequential API gotcha is the semantic mismatch: Metronome customers are billing entities, not human users, which means this API cannot substitute for an identity provider or feed a human identity graph without a separate mapping layer. Rate limits are not publicly documented; production integrations must implement exponential backoff defensively.

Metronome uses POST rather than PATCH for some update operations - verify the current API reference before assuming standard REST semantics. No SCIM support exists, so customer lifecycle cannot be delegated to an IdP; all provisioning and archiving must flow through the REST API or dashboard explicitly.

Automate Metronome workflows without one-off scripts

Stitchflow builds and maintains end-to-end IT automation across your SaaS stack, including apps without APIs. Built for exactly how your company works, with human approvals where they matter.

Every app coverage, including apps without APIs
60+ app integrations plus browser automation for apps without APIs
IT graph reconciliation across apps and your IdP
Less than a week to launch, maintained as APIs and admin consoles change
SOC 2 Type II. ~2 hours of your team's time

UpdatedMar 17, 2026

* Details sourced from official product documentation and admin references.

Keep exploring

Related apps

Abnormal Security logo

Abnormal Security

API Only
AutomationAPI only
Last updatedMar 2026

Abnormal Security is an enterprise email security platform focused on detecting and investigating threats such as phishing, account takeover (ATO), and vendor email compromise. It does not support SCIM provisioning, which means every app in your stack

ActiveCampaign logo

ActiveCampaign

API Only
AutomationAPI only
Last updatedFeb 2026

ActiveCampaign uses a group-based permission model: every user belongs to exactly one group, and all feature-area access (Contacts, Campaigns, Automations, Deals, Reports, Templates) is configured at the group level, not per individual. The default Adm

ADP logo

ADP

API Only
AutomationAPI only
Last updatedFeb 2026

ADP Workforce Now is a mid-market to enterprise HCM platform that serves as the HR source of record for employee data — payroll, benefits, time, and talent. User access is governed by a hybrid permission model: predefined security roles (Security Maste