What it is
An adapter over the chat endpoint, not a separate path.prompt becomes a single user message, and choices[].message.content comes back as choices[].text. Models, pricing, streaming, failover and usage.cost are identical, because the request goes through exactly the same pipeline.
Three things return 400 instead of guessing
best_of and logprobs are accepted and ignored — their absence is visible in the response, so there is nothing to guess about.
Streaming
Supported, in the legacy chunk shape:finish_reason, so it is dropped rather than emitted as an empty chunk.