Stitchflow
Baremetrics logo

Baremetrics User Management API Guide

API workflow

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

UpdatedMar 4, 2026

Summary and recommendation

Baremetrics exposes a REST API at `https://api.baremetrics.com/v1`, authenticated via a static Bearer token API key. There is no OAuth 2.0 flow and no SCIM endpoint - identity lifecycle automation is not supported at the API layer.

The API is primarily useful for reading and enriching customer and subscription data, with write operations restricted to Baremetrics-native sources only.

For teams building automated user lifecycle workflows across their SaaS stack, Stitchflow's MCP server with ~100 deep IT/identity integrations offers a more direct path than assembling custom Baremetrics API logic for provisioning use cases the API was not designed to support.

API quick reference

Has user APIYes
Auth methodAPI Key (Bearer token in Authorization header)
Base URLOfficial docs
SCIM availableNo

Authentication

Auth method: API Key (Bearer token in Authorization header)

Setup steps

  1. Log in to your Baremetrics account.
  2. Navigate to Settings > API.
  3. Generate or copy your API key.
  4. Include the key as a Bearer token in the Authorization header: 'Authorization: Bearer {api_key}'.

User object / data model

Field Type Description On create On update Notes
oid string Your internal unique identifier for the customer required used in URL path Maps to your system's customer ID
name string Customer's full name optional optional
email string Customer's email address optional optional
notes string Free-text notes about the customer optional optional
created integer Unix timestamp of customer creation optional read-only Defaults to current time if omitted
id string Baremetrics internal customer ID system-generated read-only
source string Data source identifier (e.g., stripe, baremetrics) required read-only Identifies the payment source integration
source_id string ID of the customer in the source system required read-only
ltv integer Lifetime value in cents read-only read-only Computed by Baremetrics
current_mrr integer Current MRR in cents read-only read-only Computed by Baremetrics
current_arr integer Current ARR in cents read-only read-only Computed by Baremetrics
attributes object Custom key-value attributes for the customer optional optional Supports custom segmentation fields

Core endpoints

List Customers

  • Method: GET
  • URL: https://api.baremetrics.com/v1/{source_id}/customers
  • Watch out for: source_id in the path refers to your Baremetrics source identifier, not a customer ID.

Request example

GET /v1/abc123/customers?per_page=30&page=1
Authorization: Bearer {api_key}

Response example

{
  "customers": [
    {"oid":"cust_1","name":"Jane Doe","email":"jane@example.com"}
  ],
  "meta": {"pagination": {"total": 100}}
}

Retrieve Customer

  • Method: GET
  • URL: https://api.baremetrics.com/v1/{source_id}/customers/{oid}
  • Watch out for: Use your own OID (oid), not the Baremetrics internal id.

Request example

GET /v1/abc123/customers/cust_1
Authorization: Bearer {api_key}

Response example

{
  "customer": {
    "oid": "cust_1",
    "name": "Jane Doe",
    "email": "jane@example.com",
    "current_mrr": 4900
  }
}

Create Customer

  • Method: POST
  • URL: https://api.baremetrics.com/v1/{source_id}/customers
  • Watch out for: Only available for Baremetrics-native sources; customers from Stripe/Braintree etc. are synced automatically.

Request example

POST /v1/abc123/customers
Content-Type: application/json
{
  "oid": "cust_new",
  "name": "John Smith",
  "email": "john@example.com"
}

Response example

{
  "customer": {
    "oid": "cust_new",
    "name": "John Smith",
    "email": "john@example.com"
  }
}

Update Customer

  • Method: PUT
  • URL: https://api.baremetrics.com/v1/{source_id}/customers/{oid}
  • Watch out for: PUT replaces updatable fields; omitted optional fields may be cleared.

Request example

PUT /v1/abc123/customers/cust_1
Content-Type: application/json
{
  "name": "Jane Updated",
  "email": "jane_new@example.com"
}

Response example

{
  "customer": {
    "oid": "cust_1",
    "name": "Jane Updated",
    "email": "jane_new@example.com"
  }
}

Delete Customer

  • Method: DELETE
  • URL: https://api.baremetrics.com/v1/{source_id}/customers/{oid}
  • Watch out for: Only applicable to Baremetrics-native source customers. Deleting removes all associated subscription data.

Request example

DELETE /v1/abc123/customers/cust_1
Authorization: Bearer {api_key}

Response example

HTTP 204 No Content

List Subscriptions for Customer

  • Method: GET
  • URL: https://api.baremetrics.com/v1/{source_id}/subscriptions
  • Watch out for: Filter by customer_oid to scope to a single customer.

Request example

GET /v1/abc123/subscriptions?customer_oid=cust_1
Authorization: Bearer {api_key}

Response example

{
  "subscriptions": [
    {"oid":"sub_1","plan_oid":"plan_pro","status":"active"}
  ]
}

List Sources

  • Method: GET
  • URL: https://api.baremetrics.com/v1/sources
  • Watch out for: You must retrieve your source_id from this endpoint before making customer/subscription calls.

Request example

GET /v1/sources
Authorization: Bearer {api_key}

Response example

{
  "sources": [
    {"id": "abc123", "provider": "stripe", "provider_id": "acct_xxx"}
  ]
}

Update Customer Attributes

  • Method: PUT
  • URL: https://api.baremetrics.com/v1/{source_id}/customers/{oid}
  • Watch out for: Custom attributes are used for segmentation in Baremetrics dashboards; key names must be pre-defined in settings.

Request example

PUT /v1/abc123/customers/cust_1
Content-Type: application/json
{
  "attributes": {"plan_tier": "enterprise", "region": "US"}
}

Response example

{
  "customer": {
    "oid": "cust_1",
    "attributes": {"plan_tier": "enterprise", "region": "US"}
  }
}

Rate limits, pagination, and events

  • Rate limits: Baremetrics does not publicly document specific rate limit numbers. Requests that exceed limits receive HTTP 429 responses.

  • Rate-limit headers: No

  • Retry-After header: No

  • Rate-limit notes: No publicly documented per-plan rate limit tiers found in official docs. Contact Baremetrics support for enterprise limits.

  • Pagination method: cursor

  • Default page size: 30

  • Max page size: 200

  • Pagination pointer: per_page / page

  • Webhooks available: Yes

  • Webhook notes: Baremetrics supports webhooks that fire on subscription and customer lifecycle events. Configure endpoints in Settings > Webhooks.

  • Alternative event strategy: Poll the REST API for changes if webhooks are not feasible.

  • Webhook events: subscription.created, subscription.updated, subscription.canceled, subscription.reactivated, customer.created, customer.updated, customer.deleted, charge.created, charge.refunded

SCIM API status

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

Limitations:

  • No SCIM support documented in official Baremetrics developer docs.

Common scenarios

Three integration scenarios are well-supported by the documented API:

  • Provision a native customer and subscription: Call GET /v1/sources to retrieve your source_id, then POST /v1/{source_id}/customers with oid, name, and email, followed by POST /v1/{source_id}/subscriptions. This only applies to Baremetrics-native sources - Stripe-synced customers are read-only.

  • Enrich customer records with segmentation attributes: Pre-define attribute keys in Settings > Attributes, then PUT /v1/{source_id}/customers/{oid} with an attributes object. Keys not pre-defined in the dashboard will be rejected or silently ignored.

  • Sync customer deletions: On a user removal event in your system, call DELETE /v1/{source_id}/customers/{oid} and confirm HTTP 204. Deletion is permanent and removes all associated subscription and charge history - use only for native-source customers.

Pagination uses page and per_page query parameters with a maximum of 200 records per page. Rate limits are not publicly documented; HTTP 429 is returned when limits are exceeded, with no Retry-After header provided.

Provision a new customer and subscription via Baremetrics native source

  1. Call GET /v1/sources to retrieve your Baremetrics native source_id.
  2. Call POST /v1/{source_id}/customers with oid, name, and email to create the customer.
  3. Call POST /v1/{source_id}/subscriptions with customer_oid, plan_oid, and started_at to create the subscription.

Watch out for: This workflow only applies to the Baremetrics native source. If your billing is in Stripe, customers are auto-synced and cannot be created via API.

Enrich customer records with custom segmentation attributes

  1. Pre-define custom attribute keys in Baremetrics Settings > Attributes.
  2. Call GET /v1/{source_id}/customers to list existing customers and identify target OIDs.
  3. Call PUT /v1/{source_id}/customers/{oid} with an 'attributes' object containing your key-value pairs.

Watch out for: Attribute keys not pre-defined in the dashboard will be rejected or silently ignored.

Sync customer deletions when a user is removed from your system

  1. Receive a user deletion event in your system.
  2. Call GET /v1/sources to confirm the correct source_id.
  3. Call DELETE /v1/{source_id}/customers/{oid} using the customer's OID.
  4. Verify HTTP 204 response to confirm deletion.

Watch out for: Deletion is permanent and removes all historical subscription and charge data for that customer in Baremetrics. Only use for Baremetrics-native source customers.

Why building this yourself is a trap

The most significant API caveat is source scope: all write operations - create, update, delete - are only available for Baremetrics-native source customers. Any customer synced from Stripe, Braintree, Chargebee, or Recurly is read-only via the API. Teams that assume full API control over their customer records will hit this wall immediately.

Additional sharp edges: the oid field is your system's identifier and must be used in all path parameters - the Baremetrics internal id is not interchangeable. Custom attributes must be pre-configured in the dashboard before they can be set via API; there is no way to create attribute keys programmatically.

Authentication is solely via static API key with no rotation mechanism documented, which is a credential hygiene concern for production integrations.

Automate Baremetrics 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 4, 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