curl -X POST https://aireiter.com/api/v1/responses \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5-20250929",
"input": "ユニコーンに関する一文の寝る前の物語を書いてください。",
"stream": true
}'
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://aireiter.com/api/v1"
)
response = client.responses.create(
model="claude-sonnet-4-5-20250929",
input="ユニコーンに関する一文の寝る前の物語を書いてください。"
)
print(response.output_text)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://aireiter.com/api/v1",
});
const response = await client.responses.create({
model: "claude-sonnet-4-5-20250929",
input: "ユニコーンに関する一文の寝る前の物語を書いてください。",
});
console.log(response.output_text);
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
payload := map[string]interface{}{
"model": "claude-sonnet-4-5-20250929",
"input": "ユニコーンに関する一文の寝る前の物語を書いてください。",
"stream": false,
}
body, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", "https://aireiter.com/api/v1/responses", bytes.NewBuffer(body))
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
}
import com.fasterxml.jackson.databind.ObjectMapper;
import java.net.URI;
import java.net.http.*;
import java.util.Map;
public class ResponsesExample {
public static void main(String[] args) throws Exception {
var payload = Map.of(
"model", "claude-sonnet-4-5-20250929",
"input", "ユニコーンに関する一文の寝る前の物語を書いてください。",
"stream", false
);
var body = new ObjectMapper().writeValueAsString(payload);
var request = HttpRequest.newBuilder()
.uri(URI.create("https://aireiter.com/api/v1/responses"))
.header("Authorization", "Bearer YOUR_API_KEY")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
var response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://aireiter.com/api/v1/responses', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
'Content-Type' => 'application/json',
],
'json' => [
'model' => 'claude-sonnet-4-5-20250929',
'input' => 'ユニコーンに関する一文の寝る前の物語を書いてください。',
'stream' => false,
],
]);
echo $response->getBody();
require 'net/http'
require 'json'
uri = URI('https://aireiter.com/api/v1/responses')
req = Net::HTTP::Post.new(uri, {
'Authorization' => 'Bearer YOUR_API_KEY',
'Content-Type' => 'application/json'
})
req.body = {
model: 'claude-sonnet-4-5-20250929',
input: 'ユニコーンに関する一文の寝る前の物語を書いてください。',
stream: false
}.to_json
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
puts res.body
import Foundation
let payload: [String: Any] = [
"model": "claude-sonnet-4-5-20250929",
"input": "ユニコーンに関する一文の寝る前の物語を書いてください。",
"stream": false
]
var request = URLRequest(url: URL(string: "https://aireiter.com/api/v1/responses")!)
request.httpMethod = "POST"
request.setValue("Bearer YOUR_API_KEY", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try! JSONSerialization.data(withJSONObject: payload)
URLSession.shared.dataTask(with: request) { data, _, _ in
if let data = data { print(String(data: data, encoding: .utf8)!) }
}.resume()
using System.Net.Http;
using System.Net.Http.Json;
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_API_KEY");
var response = await client.PostAsJsonAsync("https://aireiter.com/api/v1/responses", new {
model = "claude-sonnet-4-5-20250929",
input = "ユニコーンに関する一文の寝る前の物語を書いてください。",
stream = false
});
Console.WriteLine(await response.Content.ReadAsStringAsync());
#include <stdio.h>
#include <curl/curl.h>
int main() {
CURL *curl = curl_easy_init();
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer YOUR_API_KEY");
headers = curl_slist_append(headers, "Content-Type: application/json");
const char *data = "{\"model\":\"claude-sonnet-4-5-20250929\","
"\"input\":\"ユニコーンに関する一文の寝る前の物語を書いてください。\","
"\"stream\":false}";
curl_easy_setopt(curl, CURLOPT_URL, "https://aireiter.com/api/v1/responses");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
return 0;
}
import 'dart:convert';
import 'package:http/http.dart' as http;
void main() async {
final response = await http.post(
Uri.parse('https://aireiter.com/api/v1/responses'),
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: jsonEncode({
'model': 'claude-sonnet-4-5-20250929',
'input': 'ユニコーンに関する一文の寝る前の物語を書いてください。',
'stream': false,
}),
);
print(response.body);
}
library(httr)
library(jsonlite)
response <- POST(
"https://aireiter.com/api/v1/responses",
add_headers(
Authorization = "Bearer YOUR_API_KEY",
`Content-Type` = "application/json"
),
body = toJSON(list(
model = "claude-sonnet-4-5-20250929",
input = "ユニコーンに関する一文の寝る前の物語を書いてください。",
stream = FALSE
), auto_unbox = TRUE)
)
content(response, "text")
{
"id": "resp_AbCdEfGhIjKlMnOpQrSt0123",
"object": "response",
"created_at": 1742000000.123,
"status": "completed",
"model": "claude-sonnet-4-5-20250929",
"task_id": "task_xyz123",
"output": [
{
"id": "msg_AbCdEfGhIjKl0123",
"type": "message",
"role": "assistant",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "小さなユニコーンは月明かりの草原をつま先で歩き、輝く星屑の跡を残しながら、心地よい雲の家へ駆け戻りました。",
"annotations": []
}
]
}
],
"output_text": "小さなユニコーンは月明かりの草原をつま先で歩き、輝く星屑の跡を残しながら、心地よい雲の家へ駆け戻りました。",
"usage": {
"input_tokens": 20,
"output_tokens": 35,
"total_tokens": 55,
"output_tokens_details": {
"reasoning_tokens": 0
}
}
}
{
"id": "resp_AbCdEfGhIjKlMnOpQrSt0456",
"object": "response",
"created_at": 1742000100.456,
"status": "completed",
"model": "claude-sonnet-4-5-20250929",
"task_id": "task_abc456",
"output": [
{
"id": "fc_AbCdEfGhIjKl0456",
"type": "function_call",
"call_id": "call_AbCdEfGh",
"name": "get_weather",
"arguments": "{\"location\":\"サンフランシスコ\",\"unit\":\"celsius\"}"
}
],
"output_text": "",
"usage": {
"input_tokens": 80,
"output_tokens": 25,
"total_tokens": 105,
"output_tokens_details": {
"reasoning_tokens": 0
}
}
}
{
"id": "resp_AbCdEfGhIjKlMnOpQrSt0789",
"object": "response",
"created_at": 1742000200.789,
"status": "incomplete",
"model": "claude-sonnet-4-5-20250929",
"task_id": "task_def789",
"output": [
{
"id": "msg_AbCdEfGhIjKl0789",
"type": "message",
"role": "assistant",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "max_output_tokens により切断された非常に長い物語があります...",
"annotations": []
}
]
}
],
"output_text": "max_output_tokens により切断された非常に長い物語があります...",
"incomplete_details": {
"reason": "max_output_tokens"
},
"usage": {
"input_tokens": 15,
"output_tokens": 256,
"total_tokens": 271,
"output_tokens_details": {
"reasoning_tokens": 0
}
}
}
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "model は必須です"
}
}
{
"type": "error",
"error": {
"type": "authentication_error",
"message": "無効な API キーです"
}
}
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "クレジット不足です"
}
}
{
"type": "error",
"error": {
"type": "not_found_error",
"message": "モデル 'unknown-model' が見つかりません"
}
}
{
"type": "error",
"error": {
"type": "api_error",
"message": "すべてのプロバイダーが失敗しました"
}
}
OpenAI Responses API
OpenAI Responses API
- OpenAI Responses API プロトコルに対応し、テキスト対話、画像理解、ツール呼び出し、構造化出力と推論モードをサポート
- 主に Codex CLI および AI SDK などのツールで使用
POST
/
api
/
v1
/
responses
curl -X POST https://aireiter.com/api/v1/responses \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5-20250929",
"input": "ユニコーンに関する一文の寝る前の物語を書いてください。",
"stream": true
}'
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://aireiter.com/api/v1"
)
response = client.responses.create(
model="claude-sonnet-4-5-20250929",
input="ユニコーンに関する一文の寝る前の物語を書いてください。"
)
print(response.output_text)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://aireiter.com/api/v1",
});
const response = await client.responses.create({
model: "claude-sonnet-4-5-20250929",
input: "ユニコーンに関する一文の寝る前の物語を書いてください。",
});
console.log(response.output_text);
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
payload := map[string]interface{}{
"model": "claude-sonnet-4-5-20250929",
"input": "ユニコーンに関する一文の寝る前の物語を書いてください。",
"stream": false,
}
body, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", "https://aireiter.com/api/v1/responses", bytes.NewBuffer(body))
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
}
import com.fasterxml.jackson.databind.ObjectMapper;
import java.net.URI;
import java.net.http.*;
import java.util.Map;
public class ResponsesExample {
public static void main(String[] args) throws Exception {
var payload = Map.of(
"model", "claude-sonnet-4-5-20250929",
"input", "ユニコーンに関する一文の寝る前の物語を書いてください。",
"stream", false
);
var body = new ObjectMapper().writeValueAsString(payload);
var request = HttpRequest.newBuilder()
.uri(URI.create("https://aireiter.com/api/v1/responses"))
.header("Authorization", "Bearer YOUR_API_KEY")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
var response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://aireiter.com/api/v1/responses', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
'Content-Type' => 'application/json',
],
'json' => [
'model' => 'claude-sonnet-4-5-20250929',
'input' => 'ユニコーンに関する一文の寝る前の物語を書いてください。',
'stream' => false,
],
]);
echo $response->getBody();
require 'net/http'
require 'json'
uri = URI('https://aireiter.com/api/v1/responses')
req = Net::HTTP::Post.new(uri, {
'Authorization' => 'Bearer YOUR_API_KEY',
'Content-Type' => 'application/json'
})
req.body = {
model: 'claude-sonnet-4-5-20250929',
input: 'ユニコーンに関する一文の寝る前の物語を書いてください。',
stream: false
}.to_json
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
puts res.body
import Foundation
let payload: [String: Any] = [
"model": "claude-sonnet-4-5-20250929",
"input": "ユニコーンに関する一文の寝る前の物語を書いてください。",
"stream": false
]
var request = URLRequest(url: URL(string: "https://aireiter.com/api/v1/responses")!)
request.httpMethod = "POST"
request.setValue("Bearer YOUR_API_KEY", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try! JSONSerialization.data(withJSONObject: payload)
URLSession.shared.dataTask(with: request) { data, _, _ in
if let data = data { print(String(data: data, encoding: .utf8)!) }
}.resume()
using System.Net.Http;
using System.Net.Http.Json;
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_API_KEY");
var response = await client.PostAsJsonAsync("https://aireiter.com/api/v1/responses", new {
model = "claude-sonnet-4-5-20250929",
input = "ユニコーンに関する一文の寝る前の物語を書いてください。",
stream = false
});
Console.WriteLine(await response.Content.ReadAsStringAsync());
#include <stdio.h>
#include <curl/curl.h>
int main() {
CURL *curl = curl_easy_init();
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer YOUR_API_KEY");
headers = curl_slist_append(headers, "Content-Type: application/json");
const char *data = "{\"model\":\"claude-sonnet-4-5-20250929\","
"\"input\":\"ユニコーンに関する一文の寝る前の物語を書いてください。\","
"\"stream\":false}";
curl_easy_setopt(curl, CURLOPT_URL, "https://aireiter.com/api/v1/responses");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
return 0;
}
import 'dart:convert';
import 'package:http/http.dart' as http;
void main() async {
final response = await http.post(
Uri.parse('https://aireiter.com/api/v1/responses'),
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: jsonEncode({
'model': 'claude-sonnet-4-5-20250929',
'input': 'ユニコーンに関する一文の寝る前の物語を書いてください。',
'stream': false,
}),
);
print(response.body);
}
library(httr)
library(jsonlite)
response <- POST(
"https://aireiter.com/api/v1/responses",
add_headers(
Authorization = "Bearer YOUR_API_KEY",
`Content-Type` = "application/json"
),
body = toJSON(list(
model = "claude-sonnet-4-5-20250929",
input = "ユニコーンに関する一文の寝る前の物語を書いてください。",
stream = FALSE
), auto_unbox = TRUE)
)
content(response, "text")
{
"id": "resp_AbCdEfGhIjKlMnOpQrSt0123",
"object": "response",
"created_at": 1742000000.123,
"status": "completed",
"model": "claude-sonnet-4-5-20250929",
"task_id": "task_xyz123",
"output": [
{
"id": "msg_AbCdEfGhIjKl0123",
"type": "message",
"role": "assistant",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "小さなユニコーンは月明かりの草原をつま先で歩き、輝く星屑の跡を残しながら、心地よい雲の家へ駆け戻りました。",
"annotations": []
}
]
}
],
"output_text": "小さなユニコーンは月明かりの草原をつま先で歩き、輝く星屑の跡を残しながら、心地よい雲の家へ駆け戻りました。",
"usage": {
"input_tokens": 20,
"output_tokens": 35,
"total_tokens": 55,
"output_tokens_details": {
"reasoning_tokens": 0
}
}
}
{
"id": "resp_AbCdEfGhIjKlMnOpQrSt0456",
"object": "response",
"created_at": 1742000100.456,
"status": "completed",
"model": "claude-sonnet-4-5-20250929",
"task_id": "task_abc456",
"output": [
{
"id": "fc_AbCdEfGhIjKl0456",
"type": "function_call",
"call_id": "call_AbCdEfGh",
"name": "get_weather",
"arguments": "{\"location\":\"サンフランシスコ\",\"unit\":\"celsius\"}"
}
],
"output_text": "",
"usage": {
"input_tokens": 80,
"output_tokens": 25,
"total_tokens": 105,
"output_tokens_details": {
"reasoning_tokens": 0
}
}
}
{
"id": "resp_AbCdEfGhIjKlMnOpQrSt0789",
"object": "response",
"created_at": 1742000200.789,
"status": "incomplete",
"model": "claude-sonnet-4-5-20250929",
"task_id": "task_def789",
"output": [
{
"id": "msg_AbCdEfGhIjKl0789",
"type": "message",
"role": "assistant",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "max_output_tokens により切断された非常に長い物語があります...",
"annotations": []
}
]
}
],
"output_text": "max_output_tokens により切断された非常に長い物語があります...",
"incomplete_details": {
"reason": "max_output_tokens"
},
"usage": {
"input_tokens": 15,
"output_tokens": 256,
"total_tokens": 271,
"output_tokens_details": {
"reasoning_tokens": 0
}
}
}
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "model は必須です"
}
}
{
"type": "error",
"error": {
"type": "authentication_error",
"message": "無効な API キーです"
}
}
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "クレジット不足です"
}
}
{
"type": "error",
"error": {
"type": "not_found_error",
"message": "モデル 'unknown-model' が見つかりません"
}
}
{
"type": "error",
"error": {
"type": "api_error",
"message": "すべてのプロバイダーが失敗しました"
}
}
认证
string
必須
string
代替認証方式。
Authorization と併用不可。フォーマット:x-api-key: <api-key>リクエストボディパラメータ
string
必須
使用するモデル名。例:
gpt-4o、gpt-5.4、gpt-5.5など。完全なモデル一覧は GET /api/v1/models で取得可能です。array
必須
入力内容のリスト入力配列で、各入力項目は
role と content の2つのフィールドを含みます。多輪対話およびマルチモーダルコンテンツ(テキスト+画像)に対応しています。表示 詳細フィールド説明
表示 詳細フィールド説明
string
デフォルト:"user"
必須
メッセージのロール選択可能な値:
user(ユーザーメッセージ)、assistant(AI返信、多輪対話用)、system(システムプロンプト)array
必須
コンテンツ配列複数タイプのコンテンツブロックをサポートし、テキストと画像を含むことができます。
表示 コンテンツブロックのタイプ
表示 コンテンツブロックのタイプ
string
必須
コンテンツタイプ選択可能な値:
input_text: テキスト入力input_image: 画像入力
string
テキスト内容
type が input_text の場合に使用し、テキスト内容を記入しますstring
画像URL
type が input_image の場合に使用します以下の2つの形式をサポートします:1. 完全な画像URLアドレス- 公開アクセス可能な画像URL(http:// または https://)
- 例:
https://example.com/image.jpg
- 完全なData URI形式を使用する必要があります
- 形式:
data:image/{フォーマット};base64,{base64データ} - 対応フォーマット:jpeg、png、gif、webp
- 例:
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABg... - 注意:
data:image/jpeg;base64,のプレフィックスを含める必要があります
string
システムプロンプト。モデルの行動規範、役割、文脈を設定するために使用されます。メッセージ配列中の
role: "system" メッセージと同等です。boolean
デフォルト:"true"
ストリーミング出力を有効にするかどうか。
true(デフォルト):SSEイベントストリーム方式でトークン単位で返し、リアルタイム表示に適しますfalse:完全な応答を待って一括返却し、一括処理に適します
integer
生成される返信の最大トークン数。制限を超えるとレスポンスの
status が "incomplete"、incomplete_details.reason が "max_output_tokens" になります。number
サンプリング温度、範囲は
0 〜 2。値が高いほど出力がよりランダムに、値が低いほど決定的になります。temperature と top_p を同時に変更することは推奨されません。number
核サンプリング確率、範囲は
0 〜 1。モデルは累積確率が top_p に達するまでのトークンからのみサンプリングします。array
string | object
デフォルト:"auto"
ツール呼び出しポリシー:
"auto": モデルが自動的にツール呼び出しを判断します"none": ツール呼び出しを禁止します"required": 少なくとも1つのツール呼び出しを強制します{ "type": "function", "name": "function_name" }: 指定ツールの呼び出しを強制します
boolean
デフォルト:"true"
モデルが複数のツールを並行して呼び出すことを許可するか。
tools が提供されている場合に有効です。object
出力フォーマットの制御。
表示 text オブジェクト
表示 text オブジェクト
レスポンスフィールド
string
レスポンスの一意識別子、形式:
resp_ + 24文字のランダム文字列string
固定値
"response"number
レスポンス作成時間、Unixタイムスタンプ(秒、ミリ秒精度を含む)
string
レスポンスステータス:
"completed":正常に完了"incomplete":max_output_tokensによる早期終了"in_progress":ストリーミング出力中(ストリーミングイベントのみ)"failed":生成失敗
string
実際に使用されたモデル名
string
プラットフォーム拡張フィールド。この呼び出しの課金タスクID。照合および消費の照会に使用可能。注意:
- 非ストリーミング:
task_idはレスポンスJSONのトップレベルに直接存在 - ストリーミング:
task_idはresponse.created(最初のイベント)およびresponse.completed(最後のイベント)内のresponseオブジェクトにネストされており、元のSSEイベントから解析する必要がある。OpenAI SDK のストリーミングインターフェースはこのフィールドを自動的に公開しない
array
出力コンテンツの配列で、テキストメッセージとツール呼び出しの2タイプを含むことができる。
表示 messageタイプ
表示 messageタイプ
string
ショートカットフィールドで、
output[0].content[0].text と同等(テキストのみのシーン)。ツール呼び出しシーンでは空文字列。object
object | null
status が "incomplete" の場合は null ではない。表示 incomplete_details オブジェクト
表示 incomplete_details オブジェクト
string
切断理由。現在は
"max_output_tokens" のみcurl -X POST https://aireiter.com/api/v1/responses \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5-20250929",
"input": "ユニコーンに関する一文の寝る前の物語を書いてください。",
"stream": true
}'
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://aireiter.com/api/v1"
)
response = client.responses.create(
model="claude-sonnet-4-5-20250929",
input="ユニコーンに関する一文の寝る前の物語を書いてください。"
)
print(response.output_text)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://aireiter.com/api/v1",
});
const response = await client.responses.create({
model: "claude-sonnet-4-5-20250929",
input: "ユニコーンに関する一文の寝る前の物語を書いてください。",
});
console.log(response.output_text);
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
payload := map[string]interface{}{
"model": "claude-sonnet-4-5-20250929",
"input": "ユニコーンに関する一文の寝る前の物語を書いてください。",
"stream": false,
}
body, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", "https://aireiter.com/api/v1/responses", bytes.NewBuffer(body))
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
}
import com.fasterxml.jackson.databind.ObjectMapper;
import java.net.URI;
import java.net.http.*;
import java.util.Map;
public class ResponsesExample {
public static void main(String[] args) throws Exception {
var payload = Map.of(
"model", "claude-sonnet-4-5-20250929",
"input", "ユニコーンに関する一文の寝る前の物語を書いてください。",
"stream", false
);
var body = new ObjectMapper().writeValueAsString(payload);
var request = HttpRequest.newBuilder()
.uri(URI.create("https://aireiter.com/api/v1/responses"))
.header("Authorization", "Bearer YOUR_API_KEY")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
var response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://aireiter.com/api/v1/responses', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
'Content-Type' => 'application/json',
],
'json' => [
'model' => 'claude-sonnet-4-5-20250929',
'input' => 'ユニコーンに関する一文の寝る前の物語を書いてください。',
'stream' => false,
],
]);
echo $response->getBody();
require 'net/http'
require 'json'
uri = URI('https://aireiter.com/api/v1/responses')
req = Net::HTTP::Post.new(uri, {
'Authorization' => 'Bearer YOUR_API_KEY',
'Content-Type' => 'application/json'
})
req.body = {
model: 'claude-sonnet-4-5-20250929',
input: 'ユニコーンに関する一文の寝る前の物語を書いてください。',
stream: false
}.to_json
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
puts res.body
import Foundation
let payload: [String: Any] = [
"model": "claude-sonnet-4-5-20250929",
"input": "ユニコーンに関する一文の寝る前の物語を書いてください。",
"stream": false
]
var request = URLRequest(url: URL(string: "https://aireiter.com/api/v1/responses")!)
request.httpMethod = "POST"
request.setValue("Bearer YOUR_API_KEY", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try! JSONSerialization.data(withJSONObject: payload)
URLSession.shared.dataTask(with: request) { data, _, _ in
if let data = data { print(String(data: data, encoding: .utf8)!) }
}.resume()
using System.Net.Http;
using System.Net.Http.Json;
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_API_KEY");
var response = await client.PostAsJsonAsync("https://aireiter.com/api/v1/responses", new {
model = "claude-sonnet-4-5-20250929",
input = "ユニコーンに関する一文の寝る前の物語を書いてください。",
stream = false
});
Console.WriteLine(await response.Content.ReadAsStringAsync());
#include <stdio.h>
#include <curl/curl.h>
int main() {
CURL *curl = curl_easy_init();
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer YOUR_API_KEY");
headers = curl_slist_append(headers, "Content-Type: application/json");
const char *data = "{\"model\":\"claude-sonnet-4-5-20250929\","
"\"input\":\"ユニコーンに関する一文の寝る前の物語を書いてください。\","
"\"stream\":false}";
curl_easy_setopt(curl, CURLOPT_URL, "https://aireiter.com/api/v1/responses");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
return 0;
}
import 'dart:convert';
import 'package:http/http.dart' as http;
void main() async {
final response = await http.post(
Uri.parse('https://aireiter.com/api/v1/responses'),
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: jsonEncode({
'model': 'claude-sonnet-4-5-20250929',
'input': 'ユニコーンに関する一文の寝る前の物語を書いてください。',
'stream': false,
}),
);
print(response.body);
}
library(httr)
library(jsonlite)
response <- POST(
"https://aireiter.com/api/v1/responses",
add_headers(
Authorization = "Bearer YOUR_API_KEY",
`Content-Type` = "application/json"
),
body = toJSON(list(
model = "claude-sonnet-4-5-20250929",
input = "ユニコーンに関する一文の寝る前の物語を書いてください。",
stream = FALSE
), auto_unbox = TRUE)
)
content(response, "text")
{
"id": "resp_AbCdEfGhIjKlMnOpQrSt0123",
"object": "response",
"created_at": 1742000000.123,
"status": "completed",
"model": "claude-sonnet-4-5-20250929",
"task_id": "task_xyz123",
"output": [
{
"id": "msg_AbCdEfGhIjKl0123",
"type": "message",
"role": "assistant",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "小さなユニコーンは月明かりの草原をつま先で歩き、輝く星屑の跡を残しながら、心地よい雲の家へ駆け戻りました。",
"annotations": []
}
]
}
],
"output_text": "小さなユニコーンは月明かりの草原をつま先で歩き、輝く星屑の跡を残しながら、心地よい雲の家へ駆け戻りました。",
"usage": {
"input_tokens": 20,
"output_tokens": 35,
"total_tokens": 55,
"output_tokens_details": {
"reasoning_tokens": 0
}
}
}
{
"id": "resp_AbCdEfGhIjKlMnOpQrSt0456",
"object": "response",
"created_at": 1742000100.456,
"status": "completed",
"model": "claude-sonnet-4-5-20250929",
"task_id": "task_abc456",
"output": [
{
"id": "fc_AbCdEfGhIjKl0456",
"type": "function_call",
"call_id": "call_AbCdEfGh",
"name": "get_weather",
"arguments": "{\"location\":\"サンフランシスコ\",\"unit\":\"celsius\"}"
}
],
"output_text": "",
"usage": {
"input_tokens": 80,
"output_tokens": 25,
"total_tokens": 105,
"output_tokens_details": {
"reasoning_tokens": 0
}
}
}
{
"id": "resp_AbCdEfGhIjKlMnOpQrSt0789",
"object": "response",
"created_at": 1742000200.789,
"status": "incomplete",
"model": "claude-sonnet-4-5-20250929",
"task_id": "task_def789",
"output": [
{
"id": "msg_AbCdEfGhIjKl0789",
"type": "message",
"role": "assistant",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "max_output_tokens により切断された非常に長い物語があります...",
"annotations": []
}
]
}
],
"output_text": "max_output_tokens により切断された非常に長い物語があります...",
"incomplete_details": {
"reason": "max_output_tokens"
},
"usage": {
"input_tokens": 15,
"output_tokens": 256,
"total_tokens": 271,
"output_tokens_details": {
"reasoning_tokens": 0
}
}
}
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "model は必須です"
}
}
{
"type": "error",
"error": {
"type": "authentication_error",
"message": "無効な API キーです"
}
}
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "クレジット不足です"
}
}
{
"type": "error",
"error": {
"type": "not_found_error",
"message": "モデル 'unknown-model' が見つかりません"
}
}
{
"type": "error",
"error": {
"type": "api_error",
"message": "すべてのプロバイダーが失敗しました"
}
}
ストリームレスポンスイベント
stream: true の場合、インターフェースは text/event-stream 形式でSSEイベントストリームを返します。各イベントの形式は以下の通りです:
event: <event_type>
data: <JSON_payload>
sequence_number フィールド(0 からインクリメント)が含まれ、クライアントがイベントを順番に処理できるようにします。
task_idの取得:ストリームモードで課金タスクIDを取得するには、最初のresponse.createdイベントを監視し、event.response.task_idを読み取ってください。
イベントシーケンス(テキストレスポンス)
| 番号 | イベントタイプ | 説明 |
|---|---|---|
| 1 | response.created | レスポンスオブジェクトが作成され、status: "in_progress" |
| 2 | response.in_progress | レスポンス生成開始 |
| 3 | response.output_item.added | 出力メッセージアイテムが追加される |
| 4 | response.content_part.added | テキストコンテンツブロックが追加され、text: "" |
| 5 | response.output_text.delta | (繰り返し) トークン単位のテキスト増分 |
| 6 | response.output_text.done | テキストコンテンツの完了、完全なテキストを含む |
| 7 | response.content_part.done | コンテンツブロックの完了 |
| 8 | response.output_item.done | メッセージアイテムの完了 |
| 9 | response.completed | レスポンス完了、完全なレスポンスオブジェクトとusageを含む |
イベントシーケンス(ツール呼び出し)
| 番号 | イベントタイプ | 説明 |
|---|---|---|
| … | response.output_item.added | 関数呼び出しアイテムが追加される |
| … | response.function_call_arguments.delta | (繰り返し) 関数パラメータの増分 |
| … | response.function_call_arguments.done | 関数パラメータが完了 |
| … | response.output_item.done | 関数呼び出しアイテムの完了 |
| 最後 | response.completed | レスポンス完了 |
イベント例
{
"type": "response.created",
"sequence_number": 0,
"response": {
"id": "resp_AbCdEfGhIjKlMnOpQrSt0123",
"object": "response",
"created_at": 1742000000.123,
"status": "in_progress",
"model": "claude-sonnet-4-5-20250929",
"task_id": "task_xyz123",
"output": [],
"output_text": ""
}
}
{
"type": "response.output_text.delta",
"sequence_number": 5,
"item_id": "msg_AbCdEfGhIjKl0123",
"output_index": 0,
"content_index": 0,
"delta": "The little"
}
{
"type": "response.completed",
"sequence_number": 9,
"response": {
"id": "resp_AbCdEfGhIjKlMnOpQrSt0123",
"object": "response",
"created_at": 1742000000.123,
"status": "completed",
"model": "claude-sonnet-4-5-20250929",
"task_id": "task_xyz123",
"output": [
{
"id": "msg_AbCdEfGhIjKl0123",
"type": "message",
"role": "assistant",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "The little unicorn tiptoed through the moonlit meadow.",
"annotations": []
}
]
}
],
"output_text": "The little unicorn tiptoed through the moonlit meadow.",
"usage": {
"input_tokens": 20,
"output_tokens": 12,
"total_tokens": 32,
"output_tokens_details": { "reasoning_tokens": 0 }
}
}
}
{
"type": "response.function_call_arguments.delta",
"sequence_number": 7,
"output_index": 0,
"delta": "{\"location\":"
}
使用例
基本文字対話
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://aireiter.com/api/v1"
)
response = client.responses.create(
model="claude-sonnet-4-5-20250929",
instructions="You are a helpful coding assistant.",
input="Pythonで文字列を反転するにはどうすればよいですか?",
)
print(response.output_text)
画像理解
response = client.responses.create(
model="claude-sonnet-4-5-20250929",
input=[
{
"role": "user",
"content": [
{"type": "input_text", "text": "この画像には何が写っていますか?"},
{"type": "input_image", "image_url": {"url": "https://example.com/photo.jpg"}},
],
}
],
)
print(response.output_text)
ツール呼び出し
tools = [
{
"type": "function",
"name": "get_weather",
"description": "特定の場所の現在の天気を取得します",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "都市名"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
},
"required": ["location"],
},
}
]
response = client.responses.create(
model="gpt-5.2",
input="東京の天気はどうですか?",
tools=tools,
tool_choice="auto",
)
# ツール呼び出しがあるか確認
for item in response.output:
if item.type == "function_call":
print(f"Tool: {item.name}, Args: {item.arguments}")
構造化出力(JSON Schema)
import json
schema = {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"},
"hobbies": {"type": "array", "items": {"type": "string"}},
},
"required": ["name", "age", "hobbies"],
"additionalProperties": False,
}
response = client.responses.create(
model="claude-sonnet-4-5-20250929",
input="情報を抽出してください: アリスは30歳で、ハイキングと料理が好きです。",
text={
"format": {
"type": "json_schema",
"name": "person_info",
"strict": True,
"schema": schema,
}
},
)
data = json.loads(response.output_text)
print(data) # {"name": "Alice", "age": 30, "hobbies": ["hiking", "cooking"]}
推論モード
response = client.responses.create(
model="claude-3-7-sonnet-20250219", # 推論対応モデル
input="式を解いてください: x + y = 10 かつ x * y = 21 のとき、x と y は何ですか?",
reasoning={"effort": "high"},
)
print(response.output_text)
複数ターン対話
previous_response_id は現状機能せず、過去のメッセージは input で手動で連結する必要があります:
# 1ターン目
response1 = client.responses.create(
model="claude-sonnet-4-5-20250929",
input="私の名前はボブです。",
)
# 2ターン目:過去のメッセージを手動で連結
response2 = client.responses.create(
model="claude-sonnet-4-5-20250929",
input=[
{"role": "user", "content": "私の名前はボブです。"},
{"role": "assistant", "content": response1.output_text},
{"role": "user", "content": "私の名前は何ですか?"},
],
)
print(response2.output_text) # "あなたの名前はボブです。"
注意事項
-
デフォルトでストリーミング:
streamパラメータはデフォルトでtrueです。非ストリーミングのレスポンスが必要な場合は、明示的に"stream": falseを指定してください。 -
残高不足:残高が不足している場合は HTTP
402が返されます。チャージしてから再試行してください。 -
text.format のサポートは限定的:現在の基盤プロバイダーは構造化出力のサポートが限定されています。
json_objectモードではモデルが純粋な JSON ではなく Markdown コードブロックを返す可能性があり、json_schemaモードではスキーマ制約が遵守されない場合があります。構造化出力が必要な場合は、instructionsまたはinput内でフォーマットを明確に指定することをお勧めします。 -
ツールパラメータ:
parametersフィールドは有効な JSON Schema である必要があり、required配列が必須パラメータを決定します。
エラーコードの説明
| HTTP ステータスコード | error.type | 説明 |
|---|---|---|
| 400 | invalid_request_error | リクエストパラメータが無効(必須フィールドの欠如、JSON 解析失敗など) |
| 401 | authentication_error | API キーが無効または期限切れ |
| 402 | invalid_request_error | アカウントのポイント不足 |
| 404 | not_found_error | 指定されたモデルが存在しません |
| 502 | api_error | 上流の AI サービスプロバイダが全て利用不可 |
| 503 | api_error | 利用可能なサプライヤー構成なし |
⌘I