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
{
"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.