Responses API
curl --request POST \
--url https://api.unifically.com/v1/responses \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"input": {},
"instructions": "<string>",
"stream": true,
"temperature": 123,
"max_output_tokens": 123,
"tools": [
{}
],
"tool_choice": {},
"previous_response_id": "<string>",
"store": true
}
'import requests
url = "https://api.unifically.com/v1/responses"
payload = {
"model": "<string>",
"input": {},
"instructions": "<string>",
"stream": True,
"temperature": 123,
"max_output_tokens": 123,
"tools": [{}],
"tool_choice": {},
"previous_response_id": "<string>",
"store": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
input: {},
instructions: '<string>',
stream: true,
temperature: 123,
max_output_tokens: 123,
tools: [{}],
tool_choice: {},
previous_response_id: '<string>',
store: true
})
};
fetch('https://api.unifically.com/v1/responses', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.unifically.com/v1/responses",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => '<string>',
'input' => [
],
'instructions' => '<string>',
'stream' => true,
'temperature' => 123,
'max_output_tokens' => 123,
'tools' => [
[
]
],
'tool_choice' => [
],
'previous_response_id' => '<string>',
'store' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.unifically.com/v1/responses"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"input\": {},\n \"instructions\": \"<string>\",\n \"stream\": true,\n \"temperature\": 123,\n \"max_output_tokens\": 123,\n \"tools\": [\n {}\n ],\n \"tool_choice\": {},\n \"previous_response_id\": \"<string>\",\n \"store\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.unifically.com/v1/responses")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"input\": {},\n \"instructions\": \"<string>\",\n \"stream\": true,\n \"temperature\": 123,\n \"max_output_tokens\": 123,\n \"tools\": [\n {}\n ],\n \"tool_choice\": {},\n \"previous_response_id\": \"<string>\",\n \"store\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.unifically.com/v1/responses")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"<string>\",\n \"input\": {},\n \"instructions\": \"<string>\",\n \"stream\": true,\n \"temperature\": 123,\n \"max_output_tokens\": 123,\n \"tools\": [\n {}\n ],\n \"tool_choice\": {},\n \"previous_response_id\": \"<string>\",\n \"store\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "resp_abc123",
"object": "response",
"created_at": 1710000000,
"model": "openai/gpt-5.4",
"status": "completed",
"output": [
{
"type": "message",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "Code flows like rain\nBugs hide in silent logic\nCompile, then rejoice"
}
]
}
],
"usage": {
"input_tokens": 12,
"output_tokens": 24,
"total_tokens": 36
}
}
Getting Started
Responses API
OpenAI Responses-compatible API for all supported LLM models
POST
/
v1
/
responses
Responses API
curl --request POST \
--url https://api.unifically.com/v1/responses \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"input": {},
"instructions": "<string>",
"stream": true,
"temperature": 123,
"max_output_tokens": 123,
"tools": [
{}
],
"tool_choice": {},
"previous_response_id": "<string>",
"store": true
}
'import requests
url = "https://api.unifically.com/v1/responses"
payload = {
"model": "<string>",
"input": {},
"instructions": "<string>",
"stream": True,
"temperature": 123,
"max_output_tokens": 123,
"tools": [{}],
"tool_choice": {},
"previous_response_id": "<string>",
"store": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
input: {},
instructions: '<string>',
stream: true,
temperature: 123,
max_output_tokens: 123,
tools: [{}],
tool_choice: {},
previous_response_id: '<string>',
store: true
})
};
fetch('https://api.unifically.com/v1/responses', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.unifically.com/v1/responses",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => '<string>',
'input' => [
],
'instructions' => '<string>',
'stream' => true,
'temperature' => 123,
'max_output_tokens' => 123,
'tools' => [
[
]
],
'tool_choice' => [
],
'previous_response_id' => '<string>',
'store' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.unifically.com/v1/responses"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"input\": {},\n \"instructions\": \"<string>\",\n \"stream\": true,\n \"temperature\": 123,\n \"max_output_tokens\": 123,\n \"tools\": [\n {}\n ],\n \"tool_choice\": {},\n \"previous_response_id\": \"<string>\",\n \"store\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.unifically.com/v1/responses")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"input\": {},\n \"instructions\": \"<string>\",\n \"stream\": true,\n \"temperature\": 123,\n \"max_output_tokens\": 123,\n \"tools\": [\n {}\n ],\n \"tool_choice\": {},\n \"previous_response_id\": \"<string>\",\n \"store\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.unifically.com/v1/responses")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"<string>\",\n \"input\": {},\n \"instructions\": \"<string>\",\n \"stream\": true,\n \"temperature\": 123,\n \"max_output_tokens\": 123,\n \"tools\": [\n {}\n ],\n \"tool_choice\": {},\n \"previous_response_id\": \"<string>\",\n \"store\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "resp_abc123",
"object": "response",
"created_at": 1710000000,
"model": "openai/gpt-5.4",
"status": "completed",
"output": [
{
"type": "message",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "Code flows like rain\nBugs hide in silent logic\nCompile, then rejoice"
}
]
}
],
"usage": {
"input_tokens": 12,
"output_tokens": 24,
"total_tokens": 36
}
}
The
See individual model pages under LLM Models for details.
/v1/responses endpoint provides an OpenAI Responses API-compatible interface for text generation, tool use, and multi-turn conversations. Use the same request format as the OpenAI Responses API — swap the base URL to https://api.unifically.com and pass any supported model ID in the model field.
All LLM models support this endpoint, including Cursor, OpenAI, and Anthropic models.
Create Response
POST/v1/responses
Request
curl -X POST https://api.unifically.com/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"model": "openai/gpt-5.4",
"input": "Write a haiku about programming."
}'
Request Parameters
Model identifier in
provider/model-name format. See Available LLM Models.Text prompt, or an array of input items (messages, tool results, etc.) for multi-turn conversations.
System-level instructions for the model.
If
true, the response is streamed using server-sent events. Default: false.Sampling temperature between
0 and 2.Maximum number of output tokens to generate.
Tools available to the model. Each tool includes a
type and definition.Controls tool usage:
none, auto, required, or a specific tool.ID of a previous response to continue a multi-turn conversation.
Whether to store the response for later retrieval. Default:
true.Multi-turn Example
curl -X POST https://api.unifically.com/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"model": "anthropic/claude-opus-4-8",
"instructions": "You are a concise technical writer.",
"input": [
{"role": "user", "content": "What is an API gateway?"},
{"role": "assistant", "content": "An API gateway is a server that acts as an entry point for API requests..."},
{"role": "user", "content": "Give me a shorter version."}
]
}'
Response
{
"id": "resp_abc123",
"object": "response",
"created_at": 1710000000,
"model": "openai/gpt-5.4",
"status": "completed",
"output": [
{
"type": "message",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "Code flows like rain\nBugs hide in silent logic\nCompile, then rejoice"
}
]
}
],
"usage": {
"input_tokens": 12,
"output_tokens": 24,
"total_tokens": 36
}
}
Streaming Response
Whenstream: true, the API returns server-sent events with partial response objects:
curl -X POST https://api.unifically.com/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"model": "cursor/composer-2.5",
"input": "Explain recursion simply.",
"stream": true
}'
Supported Models
| Model | Provider |
|---|---|
cursor/composer-2.5 | Cursor |
cursor/composer-2.5-fast | Cursor |
openai/gpt-5.4-mini | OpenAI |
openai/gpt-5.4-nano | OpenAI |
openai/gpt-5.4 | OpenAI |
openai/gpt-5.5 | OpenAI |
anthropic/claude-sonnet-4-6 | Anthropic |
anthropic/claude-opus-4-6 | Anthropic |
anthropic/claude-opus-4-7 | Anthropic |
anthropic/claude-opus-4-8 | Anthropic |
SDK Compatibility
Point any OpenAI SDK at Unifically by changing the base URL:from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.unifically.com/v1"
)
response = client.responses.create(
model="openai/gpt-5.5",
input="Summarize REST APIs in two sentences."
)
print(response.output_text)
⌘I
