> For the complete documentation index, see [llms.txt](https://docs.enapi.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.enapi.com/pricing-and-tariffs/partner-specific-tariffs-cpo-managed.md).

# Partner Specific Tariffs CPO Managed

Offer different pricing to different eMSPs for the same locations — volume discounts, promotional rates, strategic partners.

In this model, the **CPO** creates the tariff variants and calculates session costs per partner. ENAPI ensures the correct tariff is routed to each eMSP but does not alter any tariff data, session costs, or CDRs — pricing remains entirely the CPO’s responsibility. Compatible with OCPI 2.1.1 (using backported routing headers), 2.2.1, and 2.3.0. If your CPMS can’t produce per-partner tariffs or re-rate sessions per partner, use [ENAPI Managed Tariff Adjustments](/pricing-and-tariffs/enapi-managed-tariff-adjustments.md) instead.

{% hint style="info" %}
**Activation required.** [Reach out to us](mailto:help@enapi.com) to enable partner-specific tariffs.
{% endhint %}

## How it works

A CPO publishes tariffs in two layers:

* **A standard tariff** — visible to any eMSP that doesn't have a specific variant. This is your baseline.
* **Partner-specific variants** — overrides for individual eMSPs, published under the same tariff ID but routed to a specific partner.

When an eMSP requests tariffs, ENAPI identifies them via their authentication credentials and serves the partner-specific version if one exists. If not, the eMSP gets the standard version. The eMSP doesn’t need to do anything — routing is invisible from their side.

{% stepper %}
{% step %}

#### Publish the standard tariff

Standard PUT to the Tariffs module, no special headers:

```jsx
PUT /ocpi/2.2.1/tariffs/DE/CPO/tariff_1
```

Every eMSP without a specific override will receive this version.
{% endstep %}

{% step %}

#### Publish a partner-specific variant

Same tariff ID, same PUT — but with OCPI routing headers identifying the target eMSP:

```jsx
PUT /ocpi/2.2.1/tariffs/DE/CPO/tariff_1
Headers:
	OCPI-to-party-id: <emsp_party_id>
	OCPI-to-country-code: <emsp_country_code>
```

ENAPI stores this as an override for the specified eMSP only. The standard version stays unchanged for everyone else.
{% endstep %}

{% step %}

#### Verify tariffs

Use a GET on the same endpoint to confirm what’s stored:

* **Standard tariff (no headers):**

```jsx
GET /ocpi/2.2.1/tariffs/DE/CPO/tariff_1
```

* **Partner-specific tariff (with headers):**

```jsx
GET /ocpi/2.2.1/tariffs/DE/CPO/tariff_1
Headers:
	OCPI-to-party-id: <emsp_party_id>
	OCPI-to-country-code: <emsp_country_code>
```

{% endstep %}
{% endstepper %}

### What you’re responsible for

In this model, the CPO owns the pricing logic end-to-end:

* **Cost calculation.** You calculate session and CDR costs using the partner-specific tariff that applies to each eMSP.
* **Invoice consistency.** Invoiced amounts must match the partner-specific tariff. Mismatches flag via **Tariff Cost Consistency** in CDR Clearing.
* **Setting correct headers.** ENAPI handles the routing itself — no action required on your side.

This option is ideal for CPOs with advanced tariff engines or CPMS platforms that already support partner-specific pricing.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.enapi.com/pricing-and-tariffs/partner-specific-tariffs-cpo-managed.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
