Account

Open as markdown

For AI agents: the docs index is at /llms.txt, and every page is also served as markdown at its URL plus .md.

Your account, its plan and its prospect credits, a full export of your data, plus the two public endpoints that need no key.

Base URL: YOUR_API_BASE_URL. Every request and response is JSON. Errors use one envelope.

OperationWhat it does
GET /healthLiveness check.
GET /plansThe three plans. Prices are set and nothing is charged live.
GET /v1/accountAccount, plan, credit balance, usage and keys.
GET /v1/account/exportEvery row the account has, as one JSON document: profile, keys (by prefix), credit ledger, invoices, domains, mailboxes, campaigns, prospects, replies and the do-not-contact list. Secrets are left out. Three requests per account every ten minutes.
POST /v1/billing/checkoutStart a hosted checkout session. The plan starts when the payment is confirmed.

GET/health#

Liveness check.

Authentication: none. This endpoint is public and not rate limited.

Response#

Status 200 OK.

JSON
{
  "status": "ok"
}

Example request#

Shell
curl YOUR_API_BASE_URL/health \
  -H "Authorization: Bearer $COLDMEETINGS_API_KEY"

GET/plans#

The three plans. Prices are set and nothing is charged live.

Authentication: none. This endpoint is public and not rate limited.

Response#

Status 200 OK.

JSON
{
  "plans": [
    {
      "id": "professional",
      "name": "Professional",
      "clientPaysSuppliers": true,
      "includes": [
        "Sending-domain setup",
        "Mailbox setup",
        "SPF, DKIM and DMARC records",
        "Outreach course",
        "Monthly sequences",
        "10,000 verified prospects a month",
        "Monthly optimization call",
        "Priority support"
      ],
      "billing": "monthly",
      "priceUsd": 495,
      "checkout": "self_serve",
      "monthlyProspectCredits": 10000,
      "maxDomains": 12,
      "maxMailboxes": 30,
      "maxActiveCampaigns": 5
    }
  ]
}
  • plans holds one object per plan: professional and enterprise. The example shows one. checkout is self_serve for Professional and book_call for Enterprise, whose priceUsd is its starting price.
  • refund_terms is the refund sentence: You can ask for a refund of your first paid month within 7 days of paying.
  • Prices are in US dollars.

Example request#

Shell
curl YOUR_API_BASE_URL/plans \
  -H "Authorization: Bearer $COLDMEETINGS_API_KEY"

GET/v1/account#

Account, plan, credit balance, usage and keys.

Authentication: send your API key as a bearer token. See Authentication.

Response#

Status 200 OK.

JSON
{
  "account": {
    "id": "acct_9fKd2LmQx7RtVw3ZbN1pEs",
    "name": "Acme Software",
    "created_at": "2026-10-17T12:00:00.000Z"
  },
  "plan": {
    "id": "professional",
    "name": "Professional",
    "clientPaysSuppliers": true,
    "includes": [
      "Sending-domain setup",
      "Mailbox setup",
      "SPF, DKIM and DMARC records",
      "Outreach course",
      "Monthly sequences",
      "10,000 verified prospects a month",
      "Monthly optimization call",
      "Priority support"
    ],
    "billing": "monthly",
    "priceUsd": 495,
    "checkout": "self_serve",
    "monthlyProspectCredits": 10000,
    "maxDomains": 12,
    "maxMailboxes": 30,
    "maxActiveCampaigns": 5
  },
  "prospect_credits": {
    "available": 9850,
    "reserved": 0
  },
  "usage": {
    "domains": 3,
    "mailboxes": 9,
    "active_campaigns": 1
  },
  "keys": [
    {
      "id": "T4vXq9LmB2zK",
      "prefix": "cm_live_",
      "name": "first key",
      "revoked": false
    }
  ]
}
  • plan is the account's current plan. An account with no paid plan yet has plan: null.
  • prospect_credits.reserved is the number of credits held by an import that is still running.
  • keys lists key ids, prefixes and names. A key value is never returned after creation.

Errors#

  • unauthorized, HTTP 401: The API key is missing, malformed, revoked or unknown.
  • rate_limited, HTTP 429: Too many requests for this key. Wait the number of seconds in Retry-After.

Example request#

Shell
curl YOUR_API_BASE_URL/v1/account \
  -H "Authorization: Bearer $COLDMEETINGS_API_KEY"

GET/v1/account/export#

Every row the account has, as one JSON document: profile, keys (by prefix), credit ledger, invoices, domains, mailboxes, campaigns, prospects, replies and the do-not-contact list. Secrets are left out. Three requests per account every ten minutes.

Authentication: send your API key as a bearer token. See Authentication.

Response#

Status 200 OK.

JSON
{
  "brand": "coldmeetings",
  "account_id": "acct_9fKd2LmQx7RtVw3ZbN1pEs",
  "exported_at": "2026-10-17T12:00:00.000Z",
  "profile": {
    "id": "acct_9fKd2LmQx7RtVw3ZbN1pEs",
    "name": "Acme Software",
    "created_at": "2026-10-17T12:00:00.000Z"
  },
  "tables": {
    "campaigns": [
      {
        "id": "cmp_2LmQx7RtVw3ZbN1pEs9fKd",
        "name": "Q4 outreach",
        "status": "paused"
      }
    ]
  },
  "redacted_columns": {
    "api_keys": [
      "key_hash"
    ]
  },
  "truncated": {}
}
  • tables holds every table that has rows for the account, each as a list of rows. Keys are listed by prefix only; secrets are left out and named in redacted_columns.
  • truncated names any table cut at the row cap, with the number of rows the account has there.
  • Three requests per account every ten minutes.

Errors#

  • unauthorized, HTTP 401: The API key is missing, malformed, revoked or unknown.
  • rate_limited, HTTP 429: Too many requests for this key. Wait the number of seconds in Retry-After.

Example request#

Shell
curl YOUR_API_BASE_URL/v1/account/export \
  -H "Authorization: Bearer $COLDMEETINGS_API_KEY"

POST/v1/billing/checkout#

Start a hosted checkout session. The plan starts when the payment is confirmed.

The plan starts when the payment is confirmed, normally within seconds, and not before.

Authentication: send your API key as a bearer token. See Authentication.

Request body#

Send a JSON object.

FieldTypeRequiredNotes
planstringYesProfessional starts a Checkout. Enterprise is bought on a call and answers 400 with the booking page. One of professional, enterprise.
customer_emailstringYesThe email address of the person who pays. It is trimmed and lowercased.
attempt_idstringNoA random id your client makes once per buy and sends again on every retry of it. A repeat with the same id returns the same Checkout instead of making another. Pattern ^[A-Za-z0-9_-]{16,64}$.
success_urlstringNoWhere checkout returns after payment. Must be a page on the ColdMeetings site; defaults to the pricing page. Format: uri.
cancel_urlstringNoWhere checkout returns if the person backs out. Must be a page on the ColdMeetings site; defaults to the pricing page. Format: uri.

Example body:

JSON
{
  "plan": "professional",
  "customer_email": "maya@acme.example"
}

Response#

Status 200 OK.

JSON
{
  "session_id": "cs_test_a1B2c3D4e5F6g7H8",
  "url": "https://checkout.example/session/cs_test_a1B2c3D4e5F6g7H8"
}
  • Send the person to url to finish checkout. Only Professional has a checkout, and it has no trial.
  • success_url and cancel_url are optional. When given, they must be pages on the ColdMeetings site; both default to the pricing page.

Errors#

  • unauthorized, HTTP 401: The API key is missing, malformed, revoked or unknown.
  • invalid_input, HTTP 400: A return address is not a page on the ColdMeetings site, or the plan is Enterprise, which is bought on a call. A body that is empty, is not JSON or fails validation also answers this, and the message names the field.
  • payload_too_large, HTTP 413: The body is over 256 KiB.
  • conflict, HTTP 409: The account already has a subscription.
  • provider_unavailable, HTTP 503: Payments could not be reached. Retry with backoff.
  • rate_limited, HTTP 429: Too many requests for this key. Wait the number of seconds in Retry-After.

Example request#

Shell
curl -X POST YOUR_API_BASE_URL/v1/billing/checkout \
  -H "Authorization: Bearer $COLDMEETINGS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"plan":"professional","customer_email":"maya@acme.example"}'
Documentation menu