CostMonStart free

Connector docs — bring any vendor

No connector yet? Push the numbers directly.

For a provider with no connector yet, push normalized cost rows directly. This is the same endpoint a manual connector's entries come through.

The endpoint

POST /v1/costs

Body: { entries: EntryInput[] }. Each entry needs source, service, amount, currency, occurred_on at minimum.

Entry fields

What one entry can carry

source
Free-text provider label, e.g. "aws" or a vendor name you choose.
service
The line item or service name.
amount
The charge amount, in the entry's currency.
currency
ISO currency code.
occurred_on
YYYY-MM-DD the charge applies to.
connector_id
Optional. Must point at a connector of kind=manual. Attaching to a syncable connector's ID is rejected.
dedupe_key
Optional. Supply your own, or let CostMon derive one from source, service, occurred_on, and tags.
tags
Optional arbitrary JSON object.
effective_cost, provider, billing_account_id, sub_account_id, service_category, region, sku, usage_quantity, usage_unit, charge_category, commitment_id, billing_period
Optional FOCUS core dimensions. Empty is valid; set what you have.

Idempotency

Re-sending a window is safe

Re-posting the same window replaces amounts instead of duplicating rows: entries are upserted on a UNIQUE (org_id, dedupe_key) constraint, and dedupe_key defaults to a hash of source, service, occurred_on, and tags when you don't supply one.

No API client? Use CSV

POST /v1/costs/import (multipart) + GET /v1/costs/import/template

Upload a CSV against a manual connector; the template endpoint returns the exact column headers CostMon expects.

Restrictions

  • Only connectors of kind=manual accept pushed entries or CSV imports.
  • Attempting to sync a manual connector returns 409 manual_connector. It never polls anything on its own.

Example

A minimal request body

POST /v1/costs
{
  "entries": [
    {
      "source": "datadog",
      "service": "APM host indexing",
      "amount": 412.50,
      "currency": "USD",
      "occurred_on": "2026-08-01",
      "connector_id": "<your manual connector id>"
    }
  ]
}

FAQ

Common questions about pushing data

Can I push cost data for a provider CostMon doesn't have a connector for?

Yes, that's what this endpoint is for. Create a manual connector, then push entries or import a CSV against it.

What happens if I push the same entries twice?

They upsert in place rather than duplicating, keyed on (org_id, dedupe_key). Re-importing a corrected export for the same window replaces the old amounts.

A rate you looked up will change again.

Provider pricing pages change without notice. CostMon tracks the bill that pays for it.

Esc