API details
Base API URL
All API endpoints in the reference documentation are relative to the following base URL:
Authentication
For any request you make when communicating with Merge Gateway, you will need an API key to authenticate yourself as an authorized user.
Add your API Key with a “Bearer ” prefix as a header called Authorization to authorize your Merge API requests. This header must be included in every request in this format:
Key endpoints
Gateway’s public API surface is centered around three endpoint groups:
GET /models- list models
- filter by
providerorvendor - fetch a single model by query string with
?model=<provider/model_id>
GET /vendors- list execution vendors and the models they currently serve
- fetch a single vendor with
GET /vendors/{vendor_id}
POST /responses- create an LLM response
- the response includes the
vendorthat ultimately served the request and theservice_tierthat actually served it
Models API shape
GET /models returns canonical model identity at the top level and vendor-specific execution metadata under vendors.
Example:
Use GET /models?model=<provider/model_id> when you want one specific model object but prefer a query parameter over a path parameter. The slash is fine there because it is part of the query parameter value.
Vendors API shape
GET /vendors returns execution hosts, not canonical model owners.
Example:
Responses
POST /responses returns the canonical model that served the request and a top-level vendor field for the execution host that actually handled it.
Request parameters
Beyond the message input, the request accepts these optional fields:
Served tier and billing
The response echoes a top-level service_tier: the tier that actually served the request and the rate you were billed at. On a throttle fallback this differs from the tier you sent (e.g. you requested flex but were served and billed at standard).
See Service tiers for the full flow, supported vendor routes, and fallback behavior.
Per-call cost
Every response carries usage.cost: the provider cost in USD that Gateway computed for that call, from the tokens above and the pricing of the route that actually served the request. No request parameter is needed.
usage.cost is returned on:
Three details worth knowing:
costisnull, never0, when the served route has no pricing on file. A false zero would be recorded as real spend by anything summing costs, so an unknown price is reported as unknown. Cost-tracking tools that read this field, such as Langfuse, skip a null instead of logging $0.- It is the same figure as
routing.cost_usd, which is only returned when you setinclude_routing_metadata: true. Both come from the same calculation, so a request that asks for both sees them agree. Useusage.costfor everyday cost tracking and routing metadata when you also need the policy and vendor decisions behind the call. - It is provider cost, not your invoiced amount. The two can differ, and the invoice is the authority. Billing starts from this figure and then applies your organization’s plan rate, prices BYOK requests against the model’s list price rather than what your own provider account charged, and adds server-tool charges such as web search, which never appear in
usage.cost.
Cost reflects the tier that served the request, so a flex request that fell back to standard is priced at standard. For invoiced spend, budgets, and dashboards, see Cost governance and savings.