メインコンテンツへスキップ
POST
/
messages
Create Anthropic message
curl --request POST \
  --url https://api-direct.dimilinks.com/messages \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "model": "claude-sonnet-5",
  "max_tokens": 1024,
  "messages": [
    {
      "content": "<string>"
    }
  ],
  "system": "<string>",
  "temperature": 123,
  "top_p": 123,
  "top_k": 123,
  "stop_sequences": [
    "<string>"
  ],
  "stream": false,
  "tools": [
    {}
  ],
  "tool_choice": {},
  "metadata": {},
  "thinking": {}
}
'
import requests

url = "https://api-direct.dimilinks.com/messages"

payload = {
"model": "claude-sonnet-5",
"max_tokens": 1024,
"messages": [{ "content": "<string>" }],
"system": "<string>",
"temperature": 123,
"top_p": 123,
"top_k": 123,
"stop_sequences": ["<string>"],
"stream": False,
"tools": [{}],
"tool_choice": {},
"metadata": {},
"thinking": {}
}
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: 'claude-sonnet-5',
max_tokens: 1024,
messages: [{content: '<string>'}],
system: '<string>',
temperature: 123,
top_p: 123,
top_k: 123,
stop_sequences: ['<string>'],
stream: false,
tools: [{}],
tool_choice: {},
metadata: {},
thinking: {}
})
};

fetch('https://api-direct.dimilinks.com/messages', 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-direct.dimilinks.com/messages",
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' => 'claude-sonnet-5',
'max_tokens' => 1024,
'messages' => [
[
'content' => '<string>'
]
],
'system' => '<string>',
'temperature' => 123,
'top_p' => 123,
'top_k' => 123,
'stop_sequences' => [
'<string>'
],
'stream' => false,
'tools' => [
[

]
],
'tool_choice' => [

],
'metadata' => [

],
'thinking' => [

]
]),
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-direct.dimilinks.com/messages"

payload := strings.NewReader("{\n \"model\": \"claude-sonnet-5\",\n \"max_tokens\": 1024,\n \"messages\": [\n {\n \"content\": \"<string>\"\n }\n ],\n \"system\": \"<string>\",\n \"temperature\": 123,\n \"top_p\": 123,\n \"top_k\": 123,\n \"stop_sequences\": [\n \"<string>\"\n ],\n \"stream\": false,\n \"tools\": [\n {}\n ],\n \"tool_choice\": {},\n \"metadata\": {},\n \"thinking\": {}\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-direct.dimilinks.com/messages")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"claude-sonnet-5\",\n \"max_tokens\": 1024,\n \"messages\": [\n {\n \"content\": \"<string>\"\n }\n ],\n \"system\": \"<string>\",\n \"temperature\": 123,\n \"top_p\": 123,\n \"top_k\": 123,\n \"stop_sequences\": [\n \"<string>\"\n ],\n \"stream\": false,\n \"tools\": [\n {}\n ],\n \"tool_choice\": {},\n \"metadata\": {},\n \"thinking\": {}\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api-direct.dimilinks.com/messages")

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\": \"claude-sonnet-5\",\n \"max_tokens\": 1024,\n \"messages\": [\n {\n \"content\": \"<string>\"\n }\n ],\n \"system\": \"<string>\",\n \"temperature\": 123,\n \"top_p\": 123,\n \"top_k\": 123,\n \"stop_sequences\": [\n \"<string>\"\n ],\n \"stream\": false,\n \"tools\": [\n {}\n ],\n \"tool_choice\": {},\n \"metadata\": {},\n \"thinking\": {}\n}"

response = http.request(request)
puts response.read_body
{
  "id": "msg_xxx",
  "type": "message",
  "role": "assistant",
  "model": "claude-sonnet-5",
  "content": [
    {
      "type": "text",
      "text": "<string>"
    }
  ],
  "stop_reason": "<string>",
  "stop_sequence": "<string>",
  "usage": {
    "input_tokens": 123,
    "output_tokens": 123
  }
}
{
"error": {
"message": "<string>",
"type": "invalid_request_error",
"code": "<string>"
}
}
{
"error": {
"message": "<string>",
"type": "invalid_request_error",
"code": "<string>"
}
}
{
"error": {
"message": "<string>",
"type": "invalid_request_error",
"code": "<string>"
}
}
{
"error": {
"message": "<string>",
"type": "invalid_request_error",
"code": "<string>"
}
}
すでに Anthropic 公式 SDK を使用している場合や、Claude ネイティブの system prompt、Tool Use、Prompt Caching などの機能を利用したい場合は、/v1/messages を直接呼び出すことを推奨します。Anthropic 公式プロトコルと同じ仕様です。
Anthropic ネイティブプロトコルでは専用ドメイン api-direct.dimilinks.com を使用します。OpenAI 互換エンドポイントの dimilinks.com/v1 とは base URL が異なりますが、同じキーを共用できます。

リクエスト URL

POST https://api-direct.dimilinks.com/v1/messages
Content-Type: application/json
Authorization: Bearer <DIMILINKS_API_KEY>
anthropic-version: 2023-06-01
anthropic-version ヘッダーは、Anthropic 公式ドキュメントと同様に明示的に指定することを推奨します。省略しても利用できますが、その場合はサーバーのデフォルトバージョンで解析されます。

基本的な例

curl "https://api-direct.dimilinks.com/v1/messages" \
  -H "Authorization: Bearer $DIMILINKS_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-5",
    "max_tokens": 1024,
    "system": "あなたは簡潔に答える日本語アシスタントです。",
    "messages": [
      {"role": "user", "content": "冥王星とは何か、一文で説明してください。"}
    ]
  }'
レスポンス(抜粋):
{
  "id": "msg_xxx",
  "type": "message",
  "role": "assistant",
  "model": "claude-sonnet-5",
  "content": [
    { "type": "text", "text": "冥王星は太陽系外縁部にある準惑星です。" }
  ],
  "stop_reason": "end_turn",
  "usage": {
    "input_tokens": 32,
    "output_tokens": 24
  }
}

ストリーミング出力

"stream": true を追加すると、サーバーは Anthropic ネイティブプロトコルに従って message_start / content_block_start / content_block_delta / content_block_stop / message_delta / message_stop イベントを順番に返します。
curl "https://api-direct.dimilinks.com/v1/messages" \
  -H "Authorization: Bearer $DIMILINKS_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -N \
  -d '{
    "model": "claude-opus-4-8",
    "max_tokens": 1024,
    "stream": true,
    "messages": [
      {"role": "user", "content": "雨の夜をテーマにした四行の短い詩を書いてください"}
    ]
  }'

パラメータ

パラメータ必須説明
modelstringはいClaude モデル ID。例:claude-opus-4-8claude-sonnet-5claude-haiku-4-5
max_tokensintegerはい1 回の出力で生成する token 数の上限。
messagesarrayはいメッセージ配列。roleuser / assistant に対応し、content には文字列または [{type:"text",...}] 形式のコンテンツブロックを指定できます。
systemstring | arrayいいえsystem prompt。文字列または [{type:"text",...}] 配列を指定できます。
temperaturenumberいいえサンプリング温度。0〜1。
top_pnumberいいえnucleus sampling の確率。0〜1。
top_kintegerいいえtop-k sampling。
stop_sequencesstring[]いいえ指定した文字列に一致すると生成を停止します。
streambooleanいいえtrue の場合、SSE ストリーミング出力を使用します。
toolsarrayいいえAnthropic ネイティブの Tool Use 定義。
tool_choiceobjectいいえ特定のツールを強制的に使用するかどうかを制御します。
metadataobjectいいえエンドユーザー識別子などのメタデータ。

Anthropic SDK での呼び出し

Python:
from anthropic import Anthropic

client = Anthropic(
    api_key="sk-...",
    base_url="https://api-direct.dimilinks.com/",
)

message = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "こんにちは"}],
)

print(message.content[0].text)
Node.js:
import Anthropic from '@anthropic-ai/sdk'

const client = new Anthropic({
  apiKey: process.env.DIMILINKS_API_KEY,
  baseURL: 'https://api-direct.dimilinks.com/',
})

const message = await client.messages.create({
  model: 'claude-opus-4-8',
  max_tokens: 1024,
  messages: [{ role: 'user', content: 'こんにちは' }],
})
Anthropic SDK の base_url には https://api-direct.dimilinks.com/ を指定してください。SDK が内部で /v1/messages を自動的に付加します。

Tool Use

curl "https://api-direct.dimilinks.com/v1/messages" \
  -H "Authorization: Bearer $DIMILINKS_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-5",
    "max_tokens": 1024,
    "tools": [
      {
        "name": "get_weather",
        "description": "指定した都市の現在の天気を取得する",
        "input_schema": {
          "type": "object",
          "properties": { "city": {"type": "string"} },
          "required": ["city"]
        }
      }
    ],
    "messages": [
      {"role": "user", "content": "東京の現在の天気を調べてください"}
    ]
  }'
モデルのレスポンスに content[].type === "tool_use" が含まれている場合は、ツールを実行し、その結果を role=usertool_result コンテンツブロックとして追加して対話を続けてください。

承認

Authorization
string
header
必須

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

ヘッダー

anthropic-version
string

Anthropic API version, e.g. 2023-06-01.

:

"2023-06-01"

ボディ

application/json
model
string
必須
:

"claude-sonnet-5"

max_tokens
integer
必須
:

1024

messages
object[]
必須
system
temperature
number
top_p
number
top_k
integer
stop_sequences
string[]
stream
boolean
デフォルト:false
tools
object[]
tool_choice
object
metadata
object
thinking
object

レスポンス

Anthropic message response. When stream is true the response is text/event-stream with Anthropic native events.

id
string
:

"msg_xxx"

type
string
:

"message"

role
string
:

"assistant"

model
string
:

"claude-sonnet-5"

content
object[]
stop_reason
string
stop_sequence
string
usage
object