Responses API | Parasail
Base URL
Copy
https://api.parasail.io/v1
Use your existing Parasail API key for authentication. The API key is the same as for all other Parasail endpoints.
Requirements
Requirement
Details
Base URL
https://api.parasail.io/v1
store parameter
Must be set to false on every request. The gateway does not support server-side state storage. Omitting this will return an error.
AuthenticationAuthorization: Bearer <PARASAIL_API_KEY> (same key as the standard API)
Compatibility
The table below shows which Responses API features are supported.
| Feature | Supported | Notes |
|---|---|---|
| Single-turn completions | ✅ | |
| Multi-turn conversations | ✅ | |
Pass full conversation history in input |
✅ | |
| Reasoning / thinking | ✅ | Reasoning content returned automatically for reasoning models |
| Function / tool calling | ✅ | Define tools with tools parameter |
| Parallel tool calls | ✅ | Model may issue multiple tool calls in one turn |
tool_choice (auto, required, none) |
✅ | |
store: true (server-side state) |
❌ | Must set store: false |
previous_response_id (stateful chaining) |
❌ | Not supported—pass full history in input instead |
| Streaming | ✅ | Use stream: true |
| Web search tool | ❌ | Not currently available |
| File search tool | ❌ | Not currently available |
| Computer use tool | ❌ | Not currently available |
Quick Start
Python (OpenAI SDK)
Copy
from openai import OpenAI
client = OpenAI(
base_url="https://api.parasail.io/v1",
api_key="<PARASAIL_API_KEY>"
)
response = client.responses.create(
model="parasail-kimi-k25-elicit",
store=False,
input="Explain the difference between TCP and UDP in two sentences."
)
print(response.output_text)
cURL
Copy
curl -s https://api.parasail.io/v1/responses \
-H "Authorization: Bearer $PARASAIL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "parasail-kimi-k25-elicit",
"store": false,
"input": "Explain the difference between TCP and UDP in two sentences."
}'
Multi-Turn Conversations
Since previous_response_id is not supported, you maintain conversation history by passing the full message array in input. Each turn appends the assistant's reply and the next user message.
Copy
from openai import OpenAI
client = OpenAI(
base_url="https://api.parasail.io/v1",
api_key="<PARASAIL_API_KEY>"
)
# Turn 1
response = client.responses.create(
model="parasail-kimi-k25-elicit",
store=False,
input=[\
{"role": "user", "content": "I'm planning a trip to Tokyo. What should I see on day 1?"}\
]
)
turn1_text = response.output_text
print("Turn 1:", turn1_text)
# Turn 2 — pass the full history
response = client.responses.create(
model="parasail-kimi-k25-elicit",
store=False,
input=[\
{"role": "user", "content": "I'm planning a trip to Tokyo. What should I see on day 1?"},\
{"role": "assistant", "content": turn1_text},\
{"role": "user", "content": "What about day 2? Suggest different areas."}\
]
)
print("Turn 2:", response.output_text)
Function Calling (Agentic)
The Responses API supports tool definitions and multi-step agentic loops where the model calls functions and you return results.
Define Tools
Copy
tools = [\
{\
"type": "function",\
"name": "get_weather",\
"description": "Get the current weather for a city.",\
"parameters": {\
"type": "object",\
"properties": {\
"city": {"type": "string", "description": "City name"},\
"units": {\
"type": "string",\
"enum": ["celsius", "fahrenheit"],\
"default": "celsius"\
}\
},\
"required": ["city"]\
}\
}\
]
Agentic Loop
Copy
from openai import OpenAI
import json
client = OpenAI(
base_url="https://api.parasail.io/v1",
api_key="<PARASAIL_API_KEY>"
)
tools = [...] # as defined above
def handle_tool_call(name, arguments):
"""Your application logic — call real APIs, databases, etc."""
args = json.loads(arguments)
if name == "get_weather":
return json.dumps({"city": args["city"], "temperature": 22, "condition": "sunny"})
return json.dumps({"error": "unknown function"})
# Initial request
response = client.responses.create(
model="parasail-kimi-k25-elicit",
store=False,
tools=tools,
input=[{"role": "user", "content": "What's the weather in Tokyo?"}]
)
# Agentic loop — keep going until the model stops calling tools
while response.output:
tool_calls = [item for item in response.output if item.type == "function_call"]
if not tool_calls:
break # Model produced a final text response
# Build input for next turn: previous output + tool results
next_input = list(response.output)
for tool_call in tool_calls:
result = handle_tool_call(tool_call.name, tool_call.arguments)
next_input.append({
"type": "function_call_output",
"call_id": tool_call.call_id,
"output": result
})
response = client.responses.create(
model="parasail-kimi-k25-elicit",
store=False,
tools=tools,
input=next_input
)
# Print final response
print(response.output_text)
The model may call multiple tools in parallel within a single turn. Always provide results for every function_call before sending the next request.
Important Notes
Always set
store: false. Every request must include "store": false. Server-side response storage is not supported, and omitting this parameter will result in an error.No stateful chaining. The
previous_response_idfield is not supported. Manage conversation history client-side by passing the fullinputarray each turn.Same API key. Your existing Parasail API key works across all endpoints. No separate key is needed.
Model-specific controls. For DeepSeek, Qwen3.5, and GPT-OSS thinking and reasoning parameters, see model-specific notes.
Model availability. Not all models are available for the Responses API. Use the
/v1/modelsendpoint to check:
Copy
curl -s https://api.parasail.io/v1/models \
-H "Authorization: Bearer $PARASAIL_API_KEY"