Skip to main content
POST
https://gptproto.com
/
v1
/
chat
/
completions
claude-sonnet-4-20250514-thinking (File Analysis)
curl --request POST \
  --url https://gptproto.com/v1/chat/completions

Authentication

  1. Sign up for a GPTProto account at https://gptproto.com
  2. Navigate to the API Keys section in your dashboard
  3. Generate a new API key (sk-xxxxx)
  4. Copy and securely store your API key For authentication details, please refer to the Authentication section.

Initiate Request

curl --location 'https://gptproto.com/v1/chat/completions' \
--header 'Authorization: GPTPROTO_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "model": "claude-sonnet-4-20250514-thinking",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Please analyze this PDF document and provide a summary of its content"
        },
        {
          "type": "file",
          "file": {
            "filename": "gptproto.pdf",
            "file_data": "https://tos.gptproto.com/resource/gptproto.pdf"
          }
        }
      ]
    }
  ],
  "max_tokens": 1000,
  "stream": false
}'

{
  "id": "chatcmpl-abc123",
  "object": "chat.completion",
  "created": 1699896916,
  "model": "claude-opus-4-6",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "# Document Analysis Summary\n\n## Key Information:\n- Document Type: Technical API Documentation\n- Total Pages: 35\n- Version: 2.0\n\n## Main Topics:\n1. **Authentication**: The API uses Bearer token authentication with API keys\n2. **Endpoints**: Contains 12 main API endpoints for different operations\n3. **Rate Limiting**: Implements tiered rate limiting based on subscription level\n4. **Error Handling**: Comprehensive error codes and handling strategies\n\n## Key Sections:\n\n### Getting Started\n- Quick start guide for new developers\n- Authentication setup instructions\n- First API call examples in multiple languages\n\n### API Reference\n- Detailed endpoint documentation\n- Request/response formats\n- Parameter descriptions and constraints\n\n### Best Practices\n- Recommended usage patterns\n- Performance optimization tips\n- Security considerations\n\n### Code Examples\n- Python, JavaScript, Go, and cURL examples\n- Common use case implementations\n- Error handling patterns\n\n## Important Notes:\n- All requests must include valid API key\n- Rate limits: 100 requests/minute for free tier, 1000/minute for premium\n- Support for both JSON and XML response formats\n- Webhook notifications available for asynchronous operations"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 3500,
    "completion_tokens": 285,
    "total_tokens": 3785
  }
}

Parameters

ParameterTypeRequiredDefaultDescription
modelstring✅ Yesclaude-opus-4-6The model to use for the request
messagesarray✅ Yes[{"role": "user", "content": "What's the weather in NYC?"}]Array of message objects for the conversation. Each message must have a role (user or assistant) and content.
toolsarray✅ Yes-Array of tool objects. For web search, must include the web_search tool configuration.
streamboolean❌ NofalseWhether to stream the response
temperaturenumber❌ No1.0Amount of randomness injected into the response. Ranges from 0.0 to 1.0
top_pnumber❌ No1.0Use nucleus sampling. Ranges from 0.0 to 1.0
max_tokensinteger❌ No-The maximum number of tokens to generate before stopping
stoparray❌ No-Custom text sequences that will cause the model to stop generating

Messages Array Structure

Each message object in the messages array should have the following structure:
FieldTypeRequiredDescription
rolestring✅ YesThe role of the message. Can be: user, assistant, or system
contentarray/string✅ YesThe content of the message

Content Array Structure (when content is an array)

FieldTypeRequiredExampleDescription
typestring✅ YestextThe type of content
textstring✅ Yes"What's the weather in NYC?"The text content when type is text

Tools Array Structure

For web search functionality, the tools array should contain a web search tool object:
FieldTypeRequiredExampleDescription
typestring✅ Yesweb_searchThe type of tool. Must be web_search for web search
max_usesinteger❌ No5Maximum number of times the web search tool can be used in a single request
allowed_domainsarray❌ No["example.com", "trusteddomain.org"]Only include search results from these domains
blocked_domainsarray❌ No["untrustedsource.com"]Never include search results from these domains

Max Uses

The max_uses parameter limits the number of searches performed. If Claude attempts more searches than allowed, the web search result will be an error with the max_uses_exceeded error code.

Domain Filtering

When using domain filters:
  • Domains should not include the HTTP/HTTPS scheme (use example.com instead of https://example.com)
  • Subdomains are automatically included (example.com covers docs.example.com)
  • Specific subdomains restrict results to only that subdomain (docs.example.com returns only results from that subdomain, not from example.com or api.example.com)
  • Subpaths are supported (example.com/blog)
  • You can use either allowed_domains or blocked_domains, but not both in the same request

Complete Tool Configuration Example

{
  "type": "web_search_20250305",
      "name": "web_search",
  "max_uses": 5,
  "allowed_domains": ["example.com", "trusteddomain.org"]
}

Error Codes

Common Error Codes

Error CodeError NameDescription
401UnauthorizedAPI key is missing or invalid
403ForbiddenYour API key doesn’t have permission to access this resource, or insufficient balance for the requested operation
429Too Many RequestsYou’ve exceeded your rate limit
500Internal server errorAn internal server error occurred
503Content policy violationContent blocked due to safety concerns (actual status code is 400)