Unified gateway

One CXOPIN API key for every connected model.

Customers send Authorization: Bearer with a CXOPIN API key. The gateway resolves the key, project, permission, and requested model. Provider credentials never appear in the response.

Operational today

  • GET /v1/models lists verified catalog rows.
  • POST /v1/chat/completions authenticates the key and resolves an exact model. Unconnected models return provider_not_connected. No completion text is generated.
  • GET /v1/api-key reports the key prefix, project, and permissions.

Prepared, not mounted

  • POST /v1/responses and POST /v1/embeddings
  • POST /v1/images/generations
  • POST /v1/audio/speech and POST /v1/audio/transcriptions
  • POST /v1/videos and GET /v1/videos/{job_id}

Production example

curl https://api.cxopin.dev/v1/chat/completions \
  -H "Authorization: Bearer $CXOPIN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"<model-id-from-catalog>","messages":[{"role":"user","content":"Hello"}]}'

Python and JavaScript use the same CXOPIN_API_KEY variable against https://api.cxopin.dev. The model id stays the one the customer requested. CXOPIN does not silently substitute another model. For Mac monorepo ports and loopback health checks, see Local development.