Saltar para o conteúdo principal

Visão geral

Este endpoint fornece compatibilidade nativa com a Anthropic Messages API. Use isto para modelos Claude com recursos como pensamento estendido. Este endpoint mantém o contrato nativo da Anthropic. messages deve ser um array de mensagens user / assistant, system fica no campo de nível superior system, e max_tokens é obrigatório. Se o payload usar papéis da OpenAI como system, developer ou tool dentro de messages, envie para /v1/chat/completions.
URL base para o SDK da Anthropic: https://api.tokenlab.sh (sem o sufixo /v1)

Cabeçalhos da requisição

x-api-key
string
obrigatório
Sua chave de API da TokenLab. Alternativa ao token Bearer.
anthropic-version
string
obrigatório
Versão da API da Anthropic. Use 2023-06-01.

Corpo da requisição

model
string
obrigatório
ID do modelo Claude (ex.: claude-sonnet-4-6 ou claude-opus-4-6).
messages
array
obrigatório
Array de objetos de mensagem com role e content.
max_tokens
integer
obrigatório
Máximo de tokens a gerar.
system
string
Prompt de sistema (separado do array de mensagens).
temperature
number
padrão:"1"
Temperatura de sampling (0-1).
stream
boolean
padrão:"false"
Habilita respostas em streaming.
thinking
object
Configuração de pensamento estendido (Claude Opus 4.5).
  • type (string): "enabled" para habilitar
  • budget_tokens (integer): Orçamento de tokens para pensamento
tools
array
Ferramentas disponíveis para o modelo.
tool_choice
object
Como o modelo deve usar ferramentas. Opções: auto, any, tool (ferramenta específica).
top_p
number
Parâmetro de nucleus sampling. Use temperatura ou top_p, não ambos.
top_k
integer
Faz sampling apenas das K principais opções para cada token.
stop_sequences
array
Sequências de parada personalizadas que farão o modelo parar de gerar.
metadata
object
Metadados para anexar à requisição para fins de rastreamento.

Resposta

id
string
Identificador único da mensagem.
type
string
Sempre message.
role
string
Sempre assistant.
content
array
Array de blocos de conteúdo (text, thinking, tool_use).
model
string
Modelo usado.
stop_reason
string
Motivo pelo qual a geração parou (end_turn, max_tokens, tool_use).
usage
object
Uso de tokens com input_tokens e output_tokens.
curl -X POST "https://api.tokenlab.sh/v1/messages" \
  -H "x-api-key: sk-your-api-key" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-6",
    "max_tokens": 1024,
    "system": "You are a helpful assistant.",
    "messages": [
      {"role": "user", "content": "Hello, Claude!"}
    ]
  }'
from anthropic import Anthropic

client = Anthropic(
    api_key="sk-your-api-key",
    base_url="https://api.tokenlab.sh"
)

message = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    system="You are a helpful assistant.",
    messages=[
        {"role": "user", "content": "Hello, Claude!"}
    ]
)

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

const client = new Anthropic({
  apiKey: 'sk-your-api-key',
  baseURL: 'https://api.tokenlab.sh'
});

const message = await client.messages.create({
  model: 'claude-sonnet-4-6',
  max_tokens: 1024,
  system: 'You are a helpful assistant.',
  messages: [
    { role: 'user', content: 'Hello, Claude!' }
  ]
});

console.log(message.content[0].text);
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "net/http"
)

func main() {
    payload := map[string]interface{}{
        "model":      "claude-sonnet-4-6",
        "max_tokens": 1024,
        "system":     "You are a helpful assistant.",
        "messages": []map[string]string{
            {"role": "user", "content": "Hello, Claude!"},
        },
    }

    jsonData, _ := json.Marshal(payload)
    req, _ := http.NewRequest("POST", "https://api.tokenlab.sh/v1/messages", bytes.NewBuffer(jsonData))
    req.Header.Set("x-api-key", "sk-your-api-key")
    req.Header.Set("anthropic-version", "2023-06-01")
    req.Header.Set("Content-Type", "application/json")

    client := &http.Client{}
    resp, _ := client.Do(req)
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
<?php
$payload = [
    'model' => 'claude-sonnet-4-6',
    'max_tokens' => 1024,
    'system' => 'You are a helpful assistant.',
    'messages' => [
        ['role' => 'user', 'content' => 'Hello, Claude!']
    ]
];

$ch = curl_init('https://api.tokenlab.sh/v1/messages');

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [
        'x-api-key: sk-your-api-key',
        'anthropic-version: 2023-06-01',
        'Content-Type: application/json'
    ],
    CURLOPT_POSTFIELDS => json_encode($payload)
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
echo $data['content'][0]['text'];
{
  "id": "msg_abc123",
  "type": "message",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "Hello! How can I help you today?"
    }
  ],
  "model": "claude-sonnet-4-6",
  "stop_reason": "end_turn",
  "usage": {
    "input_tokens": 15,
    "output_tokens": 10
  }
}

Exemplo de Entrada de Visão

Para modelos Claude com suporte a visão, coloque imagens dentro de messages[].content como blocos de imagem estruturados.
{
  "model": "claude-sonnet-4-6",
  "max_tokens": 1024,
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Please describe this image."
        },
        {
          "type": "image",
          "source": {
            "type": "url",
            "url": "https://example.com/demo.jpg"
          }
        }
      ]
    }
  ]
}
{
  "model": "claude-sonnet-4-6",
  "max_tokens": 1024,
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Please describe this image."
        },
        {
          "type": "image",
          "source": {
            "type": "base64",
            "media_type": "image/jpeg",
            "data": "/9j/4AAQSkZJRgABAQ..."
          }
        }
      ]
    }
  ]
}

Exemplo de pensamento estendido

message = client.messages.create(
    model="claude-opus-4-6",
    max_tokens=16000,
    thinking={
        "type": "enabled",
        "budget_tokens": 10000
    },
    messages=[{"role": "user", "content": "Solve this math problem..."}]
)

for block in message.content:
    if block.type == "thinking":
        print(f"Thinking: {block.thinking}")
    elif block.type == "text":
        print(f"Response: {block.text}")

Anthropic Message Batches

O TokenLab agora expõe o fluxo nativo de Anthropic Message Batches junto com /v1/messages. Rotas disponíveis:
  • POST /v1/messages/batches
  • GET /v1/messages/batches
  • GET /v1/messages/batches/:message_batch_id
  • GET /v1/messages/batches/:message_batch_id/results
  • POST /v1/messages/batches/:message_batch_id/cancel
  • DELETE /v1/messages/batches/:message_batch_id
Notas operacionais:
  • Use a mesma chave de API do TokenLab junto com os cabeçalhos nativos da Anthropic.
  • Se os itens do batch fizerem referência a file_id, inclua também anthropic-beta: files-api-2025-04-14.
  • Os batch jobs mantêm o formato nativo de requisição/resposta da Anthropic, enquanto o TokenLab acompanha internamente o ciclo de liquidação.