Private Endpoints are an add-on to the Enterprise Plan. To enable them for your organization, talk to your OpenRouter account representative or visit openrouter.ai/enterprise/form. Once enabled, organization admins add and manage endpoints from Settings > Private Endpoints. Private providers are a separate add-on enabled the same way; without it, endpoints can only run under providers in the OpenRouter catalog.
How it works
Once a private endpoint is active:- Approved users and organizations call it through the standard OpenRouter API (chat completions and responses), the same way they call public models.
- The model slug works with Model Fallbacks, Provider Selection, and the other routing features.
- For callers with access, OpenRouter prefers the private endpoint. Public providers for the model stay available as fallbacks if you list them.
Adding a private endpoint
A private endpoint must meet two requirements:- It is hosted by a provider that OpenRouter supports for BYOK, since requests are authenticated with your own provider key.
- It serves a model that already exists in the OpenRouter catalog, with the same request and response shape and the same behavior as that model. The endpoint inherits the model’s slug and capabilities.
- Blueprint. Pick the catalog model your endpoint serves and the BYOK provider that hosts it.
- Connect. Enter the HTTPS base URL of your endpoint and the upstream model or deployment ID it serves. You can also set pricing for cost reporting and declare whether the endpoint retains prompts (see ZDR).
- Test. OpenRouter sends requests to your endpoint using the provider key saved under BYOK in one of your workspaces. The checks confirm that the key is accepted, the response is OpenAI-compatible, streaming works, usage fields come back, and the served model ID matches what you entered.
- Activate. Once the checks pass, activation makes the endpoint routable for workspaces in your organization.
Manage endpoints with the API or Terraform
You can also manage private endpoints programmatically, which helps when you run many of them or keep configuration in code. The Private Endpoints API covers the same lifecycle as the wizard: create, validate, activate, update pricing, disable, enable, and delete. Requests are authenticated with an organization Management API key. Keys created on a personal account are rejected, and the organization must have Private Endpoints enabled. The wizard steps map to these calls:POST /api/v1/private-endpointscreates a draft frommodel_permaslug,provider_slug,upstream_model_id, and, for providers that need it,base_url. You can also setpricing,declared_zdr, anddeclared_region.POST /api/v1/private-endpoints/{id}/validateruns the Test checks with the BYOK key saved in the workspace you pass asworkspace_id. The workspace must belong to your organization and have a key for the endpoint’s provider.POST /api/v1/private-endpoints/{id}/activatemakes a validated draft routable.
activate: { "workspace_id": "..." } in the create body:
PATCH /api/v1/private-endpoints/{id} (only drafts can be edited), then call /validate and /activate again instead of creating a new endpoint.
Send an Idempotency-Key header to make create retry-safe. Repeating a request with the same key returns the endpoint the first request created; reusing the key with a different body returns 422 idempotency_key_reused.
After activation, PUT /api/v1/private-endpoints/{id}/pricing updates the reported rates, and /disable and /enable stop or resume routing. DELETE /api/v1/private-endpoints/{id} removes an endpoint and stops routing to it. Pass draft_only=true to refuse the delete (409) if the endpoint has ever been activated.
Terraform
The OpenRouter Terraform provider includes anopenrouter_private_endpoint resource built on the same API:
terraform apply creates, validates, and activates the endpoint. Changing pricing updates it in place; changing the model, provider, base URL, upstream model ID, declarations, or activate workspace replaces it. terraform destroy disables and deletes it, and terraform import openrouter_private_endpoint.gpt4o <endpoint-id> adopts an endpoint that already exists.
Private providers
provider_slug names the provider an endpoint runs under. For a deployment hosted by a provider in the OpenRouter catalog, use that provider’s slug (openai, anthropic, and so on). For a deployment you host yourself, or one with no public provider, create a private provider first and use its slug.
A private provider records a name, a slug, an OpenAI-compatible HTTPS base_url, and a data_policy. New endpoints under it start with that base URL and data policy, so you only set them on an endpoint that differs. The provider is visible only to your organization, and other organizations can use the same name for their own private providers without seeing yours.
Organization admins add private providers from Settings > Private Endpoints, or with the Private Providers API using the same organization Management API key:
"provider_slug": "acme". The slug works wherever a provider slug is accepted: BYOK keys, and provider.order, only, and ignore on a request.
GET, PATCH, and DELETE /api/v1/private-providers/{slug} read, edit, and remove a provider. The name and slug are fixed at creation and may not match a public provider. display_name and base_url can be changed at any time, and a new base_url applies only to endpoints created after the change; a data_policy change is refused (409) once OpenRouter pins the declared policy on one of the provider’s endpoints. Deleting a provider returns 409 provider_has_endpoints while any endpoint still runs under it, so delete the endpoints first. Each organization can have up to 5 private providers.
Endpoint limit
Each organization can have up to 10 private endpoints by default. Every endpoint you have created counts toward the limit, including drafts. If you need more than 10, talk to your OpenRouter account representative about raising the limit for your organization.In-Region Routing
A private endpoint is eligible for in-region routing when OpenRouter can derive a region from its base URL, or when you declare a data region during setup. Endpoints with neither route on the globalopenrouter.ai domain. See the In-Region Routing guide for supported providers.