Create chat completion (OpenAI format)
/openai/v1/chat/completionsCreates a chat completion using OpenAI-compatible format. Supports streaming via SSE.
Async inference: Send x-bf-async: true to submit the request as a background job and receive a job ID immediately. Poll with x-bf-async-id: <job-id> to retrieve the result. When the job is still processing, the response will have an empty choices array. When completed, choices will contain the full result. See Async Inference for details.
Note: This endpoint also works without the /v1 prefix (e.g., /openai/chat/completions).
Header Parameters
Set to true to submit this request as an async job. Returns immediately with a job ID. Not compatible with streaming.
"true"Poll for results of a previously submitted async job by providing the job ID returned from the initial async request.
Override the default result TTL in seconds. Results expire after this duration from completion time.
3600Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "http://localhost:8080/openai/v1/chat/completions" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4", "messages": [ { "role": "system" } ] }'{
"id": "string",
"choices": [
{
"index": 0,
"finish_reason": "string",
"log_probs": {
"content": [
{
"bytes": [
0
],
"logprob": 0,
"token": "string",
"top_logprobs": [
{
"bytes": [
0
],
"logprob": 0,
"token": "string"
}
]
}
],
"refusal": [
{
"bytes": [
0
],
"logprob": 0,
"token": "string"
}
],
"text_offset": [
0
],
"token_logprobs": [
0
],
"tokens": [
"string"
],
"top_logprobs": [
{
"property1": 0,
"property2": 0
}
]
},
"text": "string",
"message": {
"role": "assistant",
"name": "string",
"content": "string",
"tool_call_id": "string",
"refusal": "string",
"audio": {
"id": "string",
"data": "string",
"expires_at": 0,
"transcript": "string"
},
"reasoning": "string",
"reasoning_details": [
{
"id": "string",
"index": 0,
"type": "reasoning.summary",
"summary": "string",
"text": "string",
"signature": "string",
"data": "string"
}
],
"annotations": [
{
"type": "string",
"url_citation": {
"start_index": 0,
"end_index": 0,
"title": "string",
"url": "string",
"sources": {},
"type": "string"
}
}
],
"tool_calls": [
{
"index": 0,
"type": "string",
"id": "string",
"function": {
"name": "string",
"arguments": "string"
}
}
]
},
"delta": {
"role": "string",
"content": "string",
"refusal": "string",
"audio": {
"id": "string",
"data": "string",
"expires_at": 0,
"transcript": "string"
},
"reasoning": "string",
"reasoning_details": [
{
"id": "string",
"index": 0,
"type": "reasoning.summary",
"summary": "string",
"text": "string",
"signature": "string",
"data": "string"
}
],
"tool_calls": [
{
"index": 0,
"type": "string",
"id": "string",
"function": {
"name": "string",
"arguments": "string"
}
}
]
}
}
],
"created": 0,
"model": "string",
"object": "string",
"service_tier": "string",
"system_fingerprint": "string",
"usage": {
"prompt_tokens": 0,
"prompt_tokens_details": {
"text_tokens": 0,
"audio_tokens": 0,
"image_tokens": 0,
"cached_read_tokens": 0,
"cached_write_tokens": 0
},
"completion_tokens": 0,
"completion_tokens_details": {
"text_tokens": 0,
"accepted_prediction_tokens": 0,
"audio_tokens": 0,
"citation_tokens": 0,
"num_search_queries": 0,
"reasoning_tokens": 0,
"image_tokens": 0,
"rejected_prediction_tokens": 0
},
"total_tokens": 0,
"cost": {
"input_tokens_cost": 0,
"output_tokens_cost": 0,
"reasoning_tokens_cost": 0,
"citation_tokens_cost": 0,
"search_queries_cost": 0,
"request_cost": 0,
"total_cost": 0
}
},
"extra_fields": {
"request_type": "string",
"provider": "openai",
"model_requested": "string",
"model_deployment": "string",
"latency": 0,
"chunk_index": 0,
"raw_request": {},
"raw_response": {},
"cache_debug": {
"cache_hit": true,
"cache_id": "string",
"hit_type": "string",
"requested_provider": "string",
"requested_model": "string",
"provider_used": "string",
"model_used": "string",
"input_tokens": 0,
"threshold": 0,
"similarity": 0
}
},
"search_results": [
{
"title": "string",
"url": "string",
"date": "string",
"last_updated": "string",
"snippet": "string",
"source": "string"
}
],
"videos": [
{
"url": "string",
"thumbnail_url": "string",
"thumbnail_width": 0,
"thumbnail_height": 0,
"duration": 0
}
],
"citations": [
"string"
]
}{
"event_id": "string",
"type": "string",
"is_bifrost_error": true,
"status_code": 0,
"error": {
"type": "string",
"code": "string",
"message": "string",
"param": "string",
"event_id": "string"
},
"extra_fields": {
"provider": "openai",
"model_requested": "string",
"request_type": "string"
}
}{
"event_id": "string",
"type": "string",
"is_bifrost_error": true,
"status_code": 0,
"error": {
"type": "string",
"code": "string",
"message": "string",
"param": "string",
"event_id": "string"
},
"extra_fields": {
"provider": "openai",
"model_requested": "string",
"request_type": "string"
}
}Create batch job (OpenAI format) POST
Creates a batch processing job. Note: This endpoint also works without the /v1 prefix (e.g., /openai/batches).
Create container (OpenAI format) POST
Creates a new container for storing files and data. Note: This endpoint also works without the /v1 prefix (e.g., /openai/containers).