curl https://aireiter.com/api/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5-20250929",
"messages": [
{"role": "user", "content": "こんにちは、世界"}
]
}'
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://aireiter.com/api/v1"
)
response = client.chat.completions.create(
model="claude-sonnet-4-5-20250929",
messages=[
{"role": "user", "content": "こんにちは、世界"}
]
)
print(response.choices[0].message.content)
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: process.env.API_KEY,
baseURL: 'https://aireiter.com/api/v1'
});
const response = await client.chat.completions.create({
model: 'claude-sonnet-4-5-20250929',
messages: [
{ role: 'user', content: 'こんにちは、世界' }
]
});
console.log(response.choices[0].message.content);
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"os"
)
func main() {
url := "https://aireiter.com/api/v1/chat/completions"
payload := map[string]interface{}{
"model": "claude-sonnet-4-5-20250929",
"messages": []map[string]string{
{"role": "user", "content": "こんにちは、世界"},
},
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer "+os.Getenv("API_KEY"))
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://aireiter.com/api/v1/chat/completions";
String apiKey = System.getenv("API_KEY");
String payload = """
{
"model": "claude-sonnet-4-5-20250929",
"messages": [
{"role": "user", "content": "こんにちは、世界"}
]
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer " + apiKey)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$url = "https://aireiter.com/api/v1/chat/completions";
$apiKey = getenv('API_KEY');
$payload = [
"model" => "claude-sonnet-4-5-20250929",
"messages" => [
["role" => "user", "content" => "こんにちは、世界"]
]
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer " . $apiKey,
"Content-Type: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
require 'net/http'
require 'json'
require 'uri'
url = URI("https://aireiter.com/api/v1/chat/completions")
api_key = ENV['API_KEY']
payload = {
model: "claude-sonnet-4-5-20250929",
messages: [{ role: "user", content: "こんにちは、世界" }]
}
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer #{api_key}"
request["Content-Type"] = "application/json"
request.body = payload.to_json
puts http.request(request).body
import Foundation
let url = URL(string: "https://aireiter.com/api/v1/chat/completions")!
let apiKey = ProcessInfo.processInfo.environment["API_KEY"] ?? ""
let payload: [String: Any] = [
"model": "claude-sonnet-4-5-20250929",
"messages": [["role": "user", "content": "こんにちは、世界"]]
]
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer \(apiKey)", 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;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var url = "https://aireiter.com/api/v1/chat/completions";
var apiKey = Environment.GetEnvironmentVariable("API_KEY");
var payload = @"{
""model"": ""claude-sonnet-4-5-20250929"",
""messages"": [
{""role"": ""user"", ""content"": ""こんにちは、世界""}
]
}";
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var content = new StringContent(payload, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, content);
Console.WriteLine(await response.Content.ReadAsStringAsync());
}
}
#include <stdio.h>
#include <curl/curl.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
CURL *curl;
const char *api_key = getenv("API_KEY");
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if (curl) {
const char *payload =
"{\"model\":\"claude-sonnet-4-5-20250929\","
"\"messages\":[{\"role\":\"user\",\"content\":\"こんにちは、世界\"}]}";
char auth_header[256];
snprintf(auth_header, sizeof(auth_header), "Authorization: Bearer %s", api_key);
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, auth_header);
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, "https://aireiter.com/api/v1/chat/completions");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_perform(curl);
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;
void main() async {
final url = Uri.parse('https://aireiter.com/api/v1/chat/completions');
final apiKey = Platform.environment['API_KEY']!;
final response = await http.post(
url,
headers: {
'Authorization': 'Bearer $apiKey',
'Content-Type': 'application/json',
},
body: jsonEncode({
'model': 'claude-sonnet-4-5-20250929',
'messages': [{'role': 'user', 'content': 'こんにちは、世界'}],
}),
);
print(response.body);
}
library(httr)
library(jsonlite)
url <- "https://aireiter.com/api/v1/chat/completions"
api_key <- Sys.getenv("API_KEY")
response <- POST(
url,
add_headers(
`Authorization` = paste("Bearer", api_key),
`Content-Type` = "application/json"
),
body = toJSON(list(
model = "claude-sonnet-4-5-20250929",
messages = list(list(role = "user", content = "こんにちは、世界"))
), auto_unbox = TRUE),
encode = "raw"
)
cat(content(response, "text"))
{
"id": "chatcmpl-9vKqnMf3Ax8ZpRdTw2LsYe7b",
"object": "chat.completion",
"created": 1741680000,
"model": "claude-sonnet-4-5-20250929",
"task_id": "task_abc123",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "こんにちは!何かお手伝いできることはありますか?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 12,
"completion_tokens": 15,
"total_tokens": 27
}
}
{
"id": "chatcmpl-9vKqnMf3Ax8ZpRdTw2LsYe7b",
"object": "chat.completion",
"created": 1741680000,
"model": "claude-sonnet-4-5-20250929",
"task_id": "task_abc123",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_01A09q90qw90lq917835lq9",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"city\": \"北京\"}"
}
}
]
},
"finish_reason": "tool_calls"
}
],
"usage": {
"prompt_tokens": 85,
"completion_tokens": 22,
"total_tokens": 107
}
}
{
"error": {
"message": "messages は必須で空ではいけません",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
{
"error": {
"message": "無効なAPIキーです",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
{
"error": {
"message": "クレジットが不足しています",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
{
"error": {
"message": "モデル 'xxx' が見つかりません",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
{
"error": {
"message": "すべてのプロバイダーが失敗しました",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
OpenAI Chat Completions API
OpenAI チャット補完API
- OpenAI Chat Completions API フォーマットと完全互換
- 複数ターンの対話、ツール呼び出し、構造化出力、ストリーミングレスポンスに対応
- OpenAI SDK の
baseURLを直接置き換え可能で、他のコードの修正は不要
POST
/
api
/
v1
/
chat
/
completions
curl https://aireiter.com/api/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5-20250929",
"messages": [
{"role": "user", "content": "こんにちは、世界"}
]
}'
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://aireiter.com/api/v1"
)
response = client.chat.completions.create(
model="claude-sonnet-4-5-20250929",
messages=[
{"role": "user", "content": "こんにちは、世界"}
]
)
print(response.choices[0].message.content)
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: process.env.API_KEY,
baseURL: 'https://aireiter.com/api/v1'
});
const response = await client.chat.completions.create({
model: 'claude-sonnet-4-5-20250929',
messages: [
{ role: 'user', content: 'こんにちは、世界' }
]
});
console.log(response.choices[0].message.content);
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"os"
)
func main() {
url := "https://aireiter.com/api/v1/chat/completions"
payload := map[string]interface{}{
"model": "claude-sonnet-4-5-20250929",
"messages": []map[string]string{
{"role": "user", "content": "こんにちは、世界"},
},
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer "+os.Getenv("API_KEY"))
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://aireiter.com/api/v1/chat/completions";
String apiKey = System.getenv("API_KEY");
String payload = """
{
"model": "claude-sonnet-4-5-20250929",
"messages": [
{"role": "user", "content": "こんにちは、世界"}
]
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer " + apiKey)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$url = "https://aireiter.com/api/v1/chat/completions";
$apiKey = getenv('API_KEY');
$payload = [
"model" => "claude-sonnet-4-5-20250929",
"messages" => [
["role" => "user", "content" => "こんにちは、世界"]
]
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer " . $apiKey,
"Content-Type: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
require 'net/http'
require 'json'
require 'uri'
url = URI("https://aireiter.com/api/v1/chat/completions")
api_key = ENV['API_KEY']
payload = {
model: "claude-sonnet-4-5-20250929",
messages: [{ role: "user", content: "こんにちは、世界" }]
}
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer #{api_key}"
request["Content-Type"] = "application/json"
request.body = payload.to_json
puts http.request(request).body
import Foundation
let url = URL(string: "https://aireiter.com/api/v1/chat/completions")!
let apiKey = ProcessInfo.processInfo.environment["API_KEY"] ?? ""
let payload: [String: Any] = [
"model": "claude-sonnet-4-5-20250929",
"messages": [["role": "user", "content": "こんにちは、世界"]]
]
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer \(apiKey)", 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;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var url = "https://aireiter.com/api/v1/chat/completions";
var apiKey = Environment.GetEnvironmentVariable("API_KEY");
var payload = @"{
""model"": ""claude-sonnet-4-5-20250929"",
""messages"": [
{""role"": ""user"", ""content"": ""こんにちは、世界""}
]
}";
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var content = new StringContent(payload, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, content);
Console.WriteLine(await response.Content.ReadAsStringAsync());
}
}
#include <stdio.h>
#include <curl/curl.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
CURL *curl;
const char *api_key = getenv("API_KEY");
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if (curl) {
const char *payload =
"{\"model\":\"claude-sonnet-4-5-20250929\","
"\"messages\":[{\"role\":\"user\",\"content\":\"こんにちは、世界\"}]}";
char auth_header[256];
snprintf(auth_header, sizeof(auth_header), "Authorization: Bearer %s", api_key);
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, auth_header);
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, "https://aireiter.com/api/v1/chat/completions");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_perform(curl);
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;
void main() async {
final url = Uri.parse('https://aireiter.com/api/v1/chat/completions');
final apiKey = Platform.environment['API_KEY']!;
final response = await http.post(
url,
headers: {
'Authorization': 'Bearer $apiKey',
'Content-Type': 'application/json',
},
body: jsonEncode({
'model': 'claude-sonnet-4-5-20250929',
'messages': [{'role': 'user', 'content': 'こんにちは、世界'}],
}),
);
print(response.body);
}
library(httr)
library(jsonlite)
url <- "https://aireiter.com/api/v1/chat/completions"
api_key <- Sys.getenv("API_KEY")
response <- POST(
url,
add_headers(
`Authorization` = paste("Bearer", api_key),
`Content-Type` = "application/json"
),
body = toJSON(list(
model = "claude-sonnet-4-5-20250929",
messages = list(list(role = "user", content = "こんにちは、世界"))
), auto_unbox = TRUE),
encode = "raw"
)
cat(content(response, "text"))
{
"id": "chatcmpl-9vKqnMf3Ax8ZpRdTw2LsYe7b",
"object": "chat.completion",
"created": 1741680000,
"model": "claude-sonnet-4-5-20250929",
"task_id": "task_abc123",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "こんにちは!何かお手伝いできることはありますか?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 12,
"completion_tokens": 15,
"total_tokens": 27
}
}
{
"id": "chatcmpl-9vKqnMf3Ax8ZpRdTw2LsYe7b",
"object": "chat.completion",
"created": 1741680000,
"model": "claude-sonnet-4-5-20250929",
"task_id": "task_abc123",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_01A09q90qw90lq917835lq9",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"city\": \"北京\"}"
}
}
]
},
"finish_reason": "tool_calls"
}
],
"usage": {
"prompt_tokens": 85,
"completion_tokens": 22,
"total_tokens": 107
}
}
{
"error": {
"message": "messages は必須で空ではいけません",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
{
"error": {
"message": "無効なAPIキーです",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
{
"error": {
"message": "クレジットが不足しています",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
{
"error": {
"message": "モデル 'xxx' が見つかりません",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
{
"error": {
"message": "すべてのプロバイダーが失敗しました",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
Authorizations
string
必須
Body
string
必須
モデル名OpenAI 互換モデル(ツール呼び出しに推奨):
gpt-4o-mini— 軽量で高速、頻繁かつ単純なタスクに最適gpt-4o— バランスの取れた性能とコストで総合推奨gpt-5.2— 高性能版、ツール呼び出しを完全にサポート- その他のモデルは
GET /api/v1/modelsを参照してください
claude-haiku-4-5-20251001— 軽量で高速claude-sonnet-4-5-20250929— 総合推奨claude-sonnet-4-6— Sonnet 新バージョンclaude-opus-4-5-20251101— フラグシップ推論モデルclaude-opus-4-6— Opus 新バージョン、最高性能
GET /api/v1/models をご覧くださいarray
必須
メッセージリストモデルはメッセージ履歴に基づいて次の応答を生成します。各メッセージに
プレーンテキストメッセージ:マルチターン対話:マルチターンツール呼び出し:
role と content を含みます。表示 フィールド説明
表示 フィールド説明
[{"role": "user", "content": "こんにちは"}]
[
{"role": "system", "content": "あなたは専門のコードレビュアーです。"},
{"role": "user", "content": "このコードをチェックしてください"},
{"role": "assistant", "content": "分析します..."},
{"role": "user", "content": "パフォーマンスの問題はありますか?"}
]
[
{"role": "user", "content": "今日の北京の天気は?"},
{
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_001",
"type": "function",
"function": {"name": "get_weather", "arguments": "{\"city\": \"北京\"}"}
}
]
},
{
"role": "tool",
"tool_call_id": "call_001",
"content": "北京:25°C、晴れ"
}
]
integer
最大出力トークン数最大生成トークン数を制御します。モデルは上限に達する前に自然に終了する可能性があります。最小値:
1。
デフォルトは無制限(モデルのコンテキストウィンドウ制限を受けます)。integer
最大出力トークン数(
max_tokens の新名称)max_tokens と完全に同等で、どちらか一方を指定すればよく、max_tokens が優先されます。boolean
ストリーム出力の有効化
true に設定すると、SSE(Server-Sent Events)を通じてリアルタイムにストリーミングで返されます。デフォルトは true。非ストリーミング応答が必要な場合は明示的に "stream": false を指定してください。false の場合は、生成完了後に一括で完全な応答を返します。number
温度、範囲
0–2- 低い値(例:
0.2) — 出力がより確定的で保守的 - 高い値(例:
0.8) — 出力がよりランダムでクリエイティブ
1.0。top_p と併用は推奨されません。number
nucleusサンプリングパラメータ、範囲
0–1累積確率が top_p に達するまでのトークン集合からサンプリングします。デフォルトは 1.0。
temperature と同時使用は推奨されません。number
頻度ペナルティ、範囲
-2.0–2.0正の値は既生成テキスト内のトークンの頻度に応じてペナルティをかけ、繰り返し表現の確率を減少させます。デフォルトは 0。number
存在ペナルティ、範囲
-2.0–2.0正の値は既に出現したトークンにペナルティをかけ、モデルに新しいトピックを探索させます。デフォルトは 0。integer
ランダムシード設定すると、同じシードと同じリクエストパラメータで可能な限り決定的な出力を生成し、結果の再現性を高めます。
string | array
停止シーケンスこれらの文字列(もしくは配列内のいずれか)に遭遇すると直ちに生成を停止します。最大4つまで設定可能。
{"stop": ["\n\nUser:", "###END###"]}
array
ツール定義リストモデルが呼び出せる関数ツールを定義します。各ツールは名前、説明、パラメータのJSON Schemaを含みます。
{
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "指定都市の現在の天気を取得する",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "都市名、例:北京"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["city"]
}
}
}
]
}
string | object
ツール選択ポリシー
"auto"— モデルがツール呼び出しの可否を自動判断(デフォルト)"required"— モデルが必ず特定ツールを呼び出す"none"— ツールの呼び出しを禁止{"type": "function", "function": {"name": "get_weather"}}— 特定ツールを強制呼び出し
{"tool_choice": "required"}
boolean
並列ツール呼び出しの許可
false の場合は1回に1つのツールのみ呼び出します。デフォルトは true (並列呼び出し許可)。object
応答フォーマットモデルの出力フォーマットを制御します。
JSONオブジェクトモード:JSON Schemaモード:
表示 フィールド説明
表示 フィールド説明
{"response_format": {"type": "json_object"}}
{
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "analysis_result",
"strict": true,
"schema": {
"type": "object",
"properties": {
"summary": {"type": "string"},
"score": {"type": "number"},
"tags": {"type": "array", "items": {"type": "string"}}
},
"required": ["summary", "score", "tags"]
}
}
}
}
string
推論強度推論対応モデル(例:
gpt-5.2 以上)向けに推論の深さを制御します。"low"— 高速推論でトークン節約"medium"— バランスの取れた推論"high"— 深い推論で精度向上、トークン消費は多め
Response
string
補完の一意識別子例:
"chatcmpl-9vKqnMf3Ax8ZpRdTw2LsYe7b"string
オブジェクトタイプで、固定値は
"chat.completion"(非ストリーミング)または "chat.completion.chunk"(ストリーミング)integer
作成日時、Unixタイムスタンプ(秒)
string
リクエスト時に指定したモデル名
string
請求タスクID(プロジェクトの拡張フィールド)、今回の呼び出しにおけるポイント消費記録の追跡に使用
array
生成結果の配列(常に1件のみ)
表示 フィールド説明
表示 フィールド説明
integer
結果のインデックス、固定値
0object
非ストリーミングレスポンスにおける完全なメッセージオブジェクト
role— 固定値"assistant"content— テキスト内容(ツール呼び出し時はnull)tool_calls— ツール呼び出しのリスト(ツール呼び出しがある場合に存在)
object
ストリーミングレスポンスにおける増分内容
- 最初のフレーム:
{"role": "assistant"} - テキストフレーム:
{"content": "..."} - ツール呼び出しフレーム:
{"tool_calls": [{"index": 0, "id": "...", "type": "function", "function": {"name": "...", "arguments": ""}}]} - 終了フレーム:
{}
string
停止理由
"stop"— 自然終了"length"—max_tokens上限に達した"tool_calls"— モデルがツール呼び出しを要求"content_filter"— コンテンツフィルタ
object
curl https://aireiter.com/api/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5-20250929",
"messages": [
{"role": "user", "content": "こんにちは、世界"}
]
}'
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://aireiter.com/api/v1"
)
response = client.chat.completions.create(
model="claude-sonnet-4-5-20250929",
messages=[
{"role": "user", "content": "こんにちは、世界"}
]
)
print(response.choices[0].message.content)
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: process.env.API_KEY,
baseURL: 'https://aireiter.com/api/v1'
});
const response = await client.chat.completions.create({
model: 'claude-sonnet-4-5-20250929',
messages: [
{ role: 'user', content: 'こんにちは、世界' }
]
});
console.log(response.choices[0].message.content);
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"os"
)
func main() {
url := "https://aireiter.com/api/v1/chat/completions"
payload := map[string]interface{}{
"model": "claude-sonnet-4-5-20250929",
"messages": []map[string]string{
{"role": "user", "content": "こんにちは、世界"},
},
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer "+os.Getenv("API_KEY"))
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://aireiter.com/api/v1/chat/completions";
String apiKey = System.getenv("API_KEY");
String payload = """
{
"model": "claude-sonnet-4-5-20250929",
"messages": [
{"role": "user", "content": "こんにちは、世界"}
]
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer " + apiKey)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$url = "https://aireiter.com/api/v1/chat/completions";
$apiKey = getenv('API_KEY');
$payload = [
"model" => "claude-sonnet-4-5-20250929",
"messages" => [
["role" => "user", "content" => "こんにちは、世界"]
]
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer " . $apiKey,
"Content-Type: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
require 'net/http'
require 'json'
require 'uri'
url = URI("https://aireiter.com/api/v1/chat/completions")
api_key = ENV['API_KEY']
payload = {
model: "claude-sonnet-4-5-20250929",
messages: [{ role: "user", content: "こんにちは、世界" }]
}
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer #{api_key}"
request["Content-Type"] = "application/json"
request.body = payload.to_json
puts http.request(request).body
import Foundation
let url = URL(string: "https://aireiter.com/api/v1/chat/completions")!
let apiKey = ProcessInfo.processInfo.environment["API_KEY"] ?? ""
let payload: [String: Any] = [
"model": "claude-sonnet-4-5-20250929",
"messages": [["role": "user", "content": "こんにちは、世界"]]
]
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer \(apiKey)", 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;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var url = "https://aireiter.com/api/v1/chat/completions";
var apiKey = Environment.GetEnvironmentVariable("API_KEY");
var payload = @"{
""model"": ""claude-sonnet-4-5-20250929"",
""messages"": [
{""role"": ""user"", ""content"": ""こんにちは、世界""}
]
}";
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var content = new StringContent(payload, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, content);
Console.WriteLine(await response.Content.ReadAsStringAsync());
}
}
#include <stdio.h>
#include <curl/curl.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
CURL *curl;
const char *api_key = getenv("API_KEY");
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if (curl) {
const char *payload =
"{\"model\":\"claude-sonnet-4-5-20250929\","
"\"messages\":[{\"role\":\"user\",\"content\":\"こんにちは、世界\"}]}";
char auth_header[256];
snprintf(auth_header, sizeof(auth_header), "Authorization: Bearer %s", api_key);
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, auth_header);
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, "https://aireiter.com/api/v1/chat/completions");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_perform(curl);
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;
void main() async {
final url = Uri.parse('https://aireiter.com/api/v1/chat/completions');
final apiKey = Platform.environment['API_KEY']!;
final response = await http.post(
url,
headers: {
'Authorization': 'Bearer $apiKey',
'Content-Type': 'application/json',
},
body: jsonEncode({
'model': 'claude-sonnet-4-5-20250929',
'messages': [{'role': 'user', 'content': 'こんにちは、世界'}],
}),
);
print(response.body);
}
library(httr)
library(jsonlite)
url <- "https://aireiter.com/api/v1/chat/completions"
api_key <- Sys.getenv("API_KEY")
response <- POST(
url,
add_headers(
`Authorization` = paste("Bearer", api_key),
`Content-Type` = "application/json"
),
body = toJSON(list(
model = "claude-sonnet-4-5-20250929",
messages = list(list(role = "user", content = "こんにちは、世界"))
), auto_unbox = TRUE),
encode = "raw"
)
cat(content(response, "text"))
{
"id": "chatcmpl-9vKqnMf3Ax8ZpRdTw2LsYe7b",
"object": "chat.completion",
"created": 1741680000,
"model": "claude-sonnet-4-5-20250929",
"task_id": "task_abc123",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "こんにちは!何かお手伝いできることはありますか?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 12,
"completion_tokens": 15,
"total_tokens": 27
}
}
{
"id": "chatcmpl-9vKqnMf3Ax8ZpRdTw2LsYe7b",
"object": "chat.completion",
"created": 1741680000,
"model": "claude-sonnet-4-5-20250929",
"task_id": "task_abc123",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_01A09q90qw90lq917835lq9",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"city\": \"北京\"}"
}
}
]
},
"finish_reason": "tool_calls"
}
],
"usage": {
"prompt_tokens": 85,
"completion_tokens": 22,
"total_tokens": 107
}
}
{
"error": {
"message": "messages は必須で空ではいけません",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
{
"error": {
"message": "無効なAPIキーです",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
{
"error": {
"message": "クレジットが不足しています",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
{
"error": {
"message": "モデル 'xxx' が見つかりません",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
{
"error": {
"message": "すべてのプロバイダーが失敗しました",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
使用例
基本的な対話
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://aireiter.com/api/v1"
)
response = client.chat.completions.create(
model="claude-sonnet-4-5-20250929",
messages=[
{"role": "user", "content": "Pythonでクイックソートを実装する"}
]
)
print(response.choices[0].message.content)
システムプロンプト + 複数ターンの対話
response = client.chat.completions.create(
model="claude-sonnet-4-5-20250929",
messages=[
{"role": "system", "content": "あなたは経験豊富なPython開発者で、コードレビューとパフォーマンス最適化に長けています。"},
{"role": "user", "content": "GILとは何ですか?"},
{"role": "assistant", "content": "GIL(グローバルインタプリタロック)は..."},
{"role": "user", "content": "どうすればGILを回避して真の並列処理が可能ですか?"}
],
temperature=0.3
)
ストリーミングレスポンス
stream = client.chat.completions.create(
model="claude-sonnet-4-5-20250929",
messages=[{"role": "user", "content": "量子計算に関する技術ブログを書いてください"}],
stream=True
)
for chunk in stream:
delta = chunk.choices[0].delta
if delta.content:
print(delta.content, end="", flush=True)
ツール呼び出し(完全な複数ターンプロセス)
import json
tools = [
{
"type": "function",
"function": {
"name": "get_stock_price",
"description": "株式のリアルタイム価格を取得する",
"parameters": {
"type": "object",
"properties": {
"ticker": {"type": "string", "description": "銘柄コード、例:AAPL"}
},
"required": ["ticker"]
}
}
}
]
messages = [{"role": "user", "content": "テスラの株価はいくらですか?"}]
# 第1ラウンド:モデルがツール呼び出しを決定
response = client.chat.completions.create(
model="claude-sonnet-4-5-20250929",
messages=messages,
tools=tools
)
# ツール呼び出しの処理
if response.choices[0].finish_reason == "tool_calls":
tool_call = response.choices[0].message.tool_calls[0]
# ツール実行(ビジネスロジック)
tool_result = {"price": 245.80, "currency": "USD"}
# 第2ラウンド:結果をモデルに返す
messages += [
response.choices[0].message,
{
"role": "tool",
"tool_call_id": tool_call.id,
"content": json.dumps(tool_result)
}
]
final = client.chat.completions.create(
model="claude-sonnet-4-5-20250929",
messages=messages,
tools=tools
)
print(final.choices[0].message.content)
構造化出力(JSON Schema)
response = client.chat.completions.create(
model="claude-sonnet-4-5-20250929",
messages=[
{"role": "user", "content": "以下の製品レビューの感情分析をしてください:'このヘッドフォンは音質が優れているが、バッテリー持ちは普通だ'"}
],
response_format={
"type": "json_schema",
"json_schema": {
"name": "sentiment_analysis",
"strict": True,
"schema": {
"type": "object",
"properties": {
"sentiment": {"type": "string", "enum": ["positive", "negative", "mixed"]},
"score": {"type": "number", "description": "感情スコア -1.0 から 1.0"},
"highlights": {"type": "array", "items": {"type": "string"}}
},
"required": ["sentiment", "score", "highlights"]
}
}
}
)
result = json.loads(response.choices[0].message.content)
print(result)
# {"sentiment": "mixed", "score": 0.2, "highlights": ["音質が優れている", "バッテリー持ちは普通"]}
サンプリングパラメータの制御
# 創造的な文章作成:高温度 + 頻度ペナルティ
response = client.chat.completions.create(
model="claude-sonnet-4-5-20250929",
messages=[{"role": "user", "content": "秋についての現代詩を書いてください"}],
temperature=0.9,
frequency_penalty=0.5,
presence_penalty=0.3
)
# 正確な出力:低温度 + 固定シード
response = client.chat.completions.create(
model="claude-sonnet-4-5-20250929",
messages=[{"role": "user", "content": "1234 × 5678 の計算結果"}],
temperature=0.0,
seed=42
)
ストリーミングレスポンスイベントフォーマット
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","created":1741680000,"model":"claude-sonnet-4-5-20250929","task_id":"task_abc123","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","created":1741680000,"model":"claude-sonnet-4-5-20250929","choices":[{"index":0,"delta":{"content":"こんにちは"},"finish_reason":null}]}
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","created":1741680000,"model":"claude-sonnet-4-5-20250929","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]}
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","created":1741680000,"model":"claude-sonnet-4-5-20250929","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":12,"completion_tokens":5,"total_tokens":17}}
data: [DONE]
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","created":1741680000,"model":"claude-sonnet-4-5-20250929","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"id":"call_abc","type":"function","function":{"name":"get_weather","arguments":""}}]},"finish_reason":null}]}
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","created":1741680000,"model":"claude-sonnet-4-5-20250929","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"city\""}}]},"finish_reason":null}]}
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","created":1741680000,"model":"claude-sonnet-4-5-20250929","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":": \"北京\"}"}}]},"finish_reason":null}]}
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","created":1741680000,"model":"claude-sonnet-4-5-20250929","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":85,"completion_tokens":22,"total_tokens":107}}
data: [DONE]
注意事項
-
認証方法:
Authorization: Bearer <api_key>形式のみサポートしており、OpenAI SDKを使用する場合は直接api_keyを設定してください。 -
デフォルトはストリーミング:
streamパラメータはデフォルトでtrueです。非ストリーミングレスポンスが必要な場合は、明示的に"stream": falseを渡してください。 -
ポイント不足:残高が足りない場合は HTTP
402を返し、チャージ後に再試行してください。 -
stop と停止シーケンス:
stopパラメータは現時点で有効ではなく、バックエンドのプロバイダがこの機能をサポートしていません。パラメータを渡してもエラーにならず、指定されたシーケンスで生成が停止することもありません。 -
response_format 注意点:現行のバックエンドプロバイダによる
response_formatのサポートは限定的です——json_objectモードではモデルが純粋な JSON ではなく Markdown のコードブロックを出力する可能性があり、json_schemaモードではスキーマの制約が守られない場合があります。構造化出力が必要な場合は、プロンプト内で明確にフォーマットを指定することを推奨します。 -
ツールパラメータ:
parametersフィールドは有効な JSON Schema である必要があり、required配列が必須のパラメータを決定します。 -
モデル選択のおすすめ:
- Haiku — 高頻度の簡単な質問応答、最もコストが低い
- Sonnet — コード生成やドキュメント処理、総合的におすすめ
- Opus — 複雑な推論や長文分析、最も高い性能
-thinkingシリーズ — 数学的証明や論理的導出など深い思考が必要なシナリオ
⌘I