DeepClaude Logo

DeepClaude API Documentation

Integrate DeepClaude's powerful AI capabilities into your applications with a simple and flexible unified API.

Base URL

Managed API

Use our managed API endpoint for the quickest setup:

https://api.deepclaude.com/

Self-hosted

For self-hosted deployments, configure your endpoint in config.toml:

http://{host}:{port}/

Default Configuration:

  • host: 127.0.0.1
  • port: 3000

Authentication

The API requires authentication tokens for both DeepSeek and Anthropic services. Both tokens must be included in the request headers:

X-DeepSeek-API-Token

Your DeepSeek API authentication token

X-Anthropic-API-Token

Your Anthropic API authentication token

Error Handling

When an error occurs, the API returns an appropriate HTTP status code and a JSON response body with error details:

{
  "error": {
    "message": string,    // Human-readable error message
    "type": string,       // Error type identifier
    "param": string?,     // Optional parameter that caused the error
    "code": string?       // Optional error code
  }
}

Common Error Types

400bad_request

Invalid request parameters or format

400missing_header

Required API token header is missing

400invalid_system_prompt

System prompt provided in both root and messages

502deepseek_error

Error from DeepSeek API

502anthropic_error

Error from Anthropic API

500internal_error

Internal server error

Non-streaming API Usage

Make a single request and receive a complete response. This is ideal for simple queries where you don't need real-time updates.

curl -L -X POST 'https://api.deepclaude.com'
-H 'Content-Type: application/json'
-H 'Accept: application/json'
-H 'X-DeepSeek-API-Token: <YOUR_DEEPSEEK_API_TOKEN>'
-H 'X-Anthropic-API-Token: <YOUR_ANTHROPIC_API_TOKEN>'
-d '{
  "stream": false,
  "verbose": false,
  "messages": [
    {
      "content": "How many "r"s in the word "strawberry"?",
      "role": "user"
    }
  ],
  "deepseek_config": {
    "headers": {
      "Add-Custom-Header-To-DeepSeek-Call": "example"
    },
    "body": {
      "temperature": 0
    }
  },
  "anthropic_config": {
    "headers": {
      "Add-Custom-Header-To-Claude-Call": "example"
    },
    "body": {
      "temperature": 0
    }
  }
}'
{
  "created": "2025-01-26T01:46:54.654574Z",
  "content": [
    {
      "type": "text",
      "text": "<thinking>\nOkay, let's see. The user is asking how many times the letter "r" appears in the word "strawberry". Hmm, I need to make sure I spell the word correctly first. Strawberry. S-T-R-A-W-B-E-R-R-Y. Let me break it down letter by letter.\n\nStarting with the first letter: S. No r there. Then T. Still no. Third letter is R. That's one. Next is A. Then W. B, E. Now after E comes R, that's the second R. Then another R right after, so that's the third R. Finally Y. Wait, let me check again. Let me write the letters out with their positions:\n\n1. S\n2. T\n3. R\n4. A\n5. W\n6. B\n7. E\n8. R\n9. R\n10. Y\n\nWait, does strawberry have two R's after the E? Let me think. The correct spelling is S-T-R-A-W-B-E-R-R-Y. So after the E, there are two R's before the Y. So that's positions 8 and 9. So in total, the R's are at position 3, 8, and 9. That makes three R's. But wait, maybe I'm miscounting. Let me write the word again: strawberry. S-T-R-A-W-B-E-R-R-Y. So letters are S, T, R, A, W, B, E, R, R, Y. So indeed, three R's. But sometimes people might miss one. Let me confirm by another method. Maybe splitting the word into parts: "straw" and "berry". Straw has an R? Let's see: S-T-R-A-W. Yes, there's an R there. Then berry is B-E-R-R-Y. So berry has two R's. So straw (1 R) + berry (2 Rs) equals 3 R's total. Yep, that adds up. So the answer should be three.\n</thinking>"
    },
    {
      "type": "text",
      "text": "\n\nThere are 3 "r"s in the word "strawberry"."
    }
  ],
  "combined_usage": {
    "total_cost": "$0.003",
    "deepseek_usage": {
      "input_tokens": 18,
      "output_tokens": 491,
      "reasoning_tokens": 430,
      "cached_input_tokens": 0,
      "total_tokens": 509,
      "total_cost": "$0.001"
    },
    "anthropic_usage": {
      "input_tokens": 507,
      "output_tokens": 20,
      "cached_write_tokens": 0,
      "cached_read_tokens": 0,
      "total_tokens": 527,
      "total_cost": "$0.002"
    }
  }
}

Streaming API Usage

Receive responses in real-time as they're generated. Perfect for chat interfaces and live interactions.

The streaming functionality is powered by Server-sent Events (SSE), enabling efficient real-time data transmission from server to client. Learn more about SSE →

curl -L -X POST 'https://api.deepclaude.com'
-H 'Content-Type: application/json'
-H 'Accept: application/json'
-H 'X-DeepSeek-API-Token: <YOUR_DEEPSEEK_API_TOKEN>'
-H 'X-Anthropic-API-Token: <YOUR_ANTHROPIC_API_TOKEN>'
-d '{
  "stream": true,
  "verbose": false,
  "messages": [
    {
      "content": "How many "r"s in the word "strawberry"?",
      "role": "user"
    }
  ],
  "deepseek_config": {
    "headers": {
      "Add-Custom-Header-To-DeepSeek-Call": "example"
    },
    "body": {
      "temperature": 0
    }
  },
  "anthropic_config": {
    "headers": {
      "Add-Custom-Header-To-Claude-Call": "example"
    },
    "body": {
      "temperature": 0
    }
  }
}'
event: start
data: {"type":"start","created":"2025-01-26T01:54:59.529246Z"}

event: content
data: {"type":"content","content":[{"type":"text","text":"<thinking>
"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":"Okay"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":","}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" let"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":"'s"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" see"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":"."}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" The"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" user"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" is"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" asking"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" how"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" many"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" times"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" the"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" letter"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" ""}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":"r"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":"""}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" appears"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" in"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" the"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" word"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" ""}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":"st"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":"raw"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":"berry"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":""."}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" Al"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":"right"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":","}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" first"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":","}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" I"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" need"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" to"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" make"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" sure"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" I"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" spell"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" the"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" word"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" correctly"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":"."}]}

[... SSE events omitted for brevity ...]

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" Therefore"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":","}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" the"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" correct"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" answer"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" is"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":" "}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":"3"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":"."}]}

event: content
data: {"type":"content","content":[{"type":"text","text":"
</thinking>"}]}

event: content
data: {"type":"content","content":[]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":"
The word "strawberry" contains 3 "r"}]}

event: content
data: {"type":"content","content":[{"type":"text_delta","text":""s."}]}

event: done
data: {"type":"done"}

API Verbose Mode

Get detailed information about the API calls, including raw responses from both DeepSeek and Claude APIs.

curl -L -X POST 'https://api.deepclaude.com'
-H 'Content-Type: application/json'
-H 'Accept: application/json'
-H 'X-DeepSeek-API-Token: <YOUR_DEEPSEEK_API_TOKEN>'
-H 'X-Anthropic-API-Token: <YOUR_ANTHROPIC_API_TOKEN>'
-d '{
  "stream": false,
  "verbose": true,
  "messages": [
    {
      "content": "How many "r"s in the word "strawberry"?",
      "role": "user"
    }
  ],
  "deepseek_config": {
    "headers": {
      "Add-Custom-Header-To-DeepSeek-Call": "example"
    },
    "body": {
      "temperature": 0
    }
  },
  "anthropic_config": {
    "headers": {
      "Add-Custom-Header-To-Claude-Call": "example"
    },
    "body": {
      "temperature": 0
    }
  }
}'
{
  "created": "2025-01-26T01:50:47.209411Z",
  "content": [
    {
      "type": "text",
      "text": "<thinking>\nOkay, let's see. The user is asking how many times the letter "r" appears in the word "strawberry." Alright, first, I need to make sure I spell the word correctly. Strawberry. S-T-R-A-W-B-E-R-R-Y. Wait, let me break it down letter by letter to count the "r"s.\n\nStarting with the first letter: S. That's an S, no R there. Next is T. Still no R. Then R. Ah, that's the first R. So R is the third letter. Then A, W, B, E. So after R, we have A, W, B, E. None of those are Rs. Then after E comes R again. That's the second R. Then another R right after? Wait, let me check again. The word is strawberry. So after E, is it R-R? Let me write it out: S-T-R-A-W-B-E-R-R-Y. Yes, after the E, there are two Rs in a row. So that's two Rs there. Then Y at the end. So total Rs: the third letter is R, and then the 8th and 9th letters are R and R. Wait, let me count the positions to be sure.\n\nLet me list each letter with its position:\n\n1. S\n2. T\n3. R\n4. A\n5. W\n6. B\n7. E\n8. R\n9. R\n10. Y\n\nSo positions 3, 8, and 9. Wait, that's three Rs. Wait, but when I first thought, I had R at position 3, then two Rs at 8 and 9. So that's three Rs in total. But wait, I might be miscounting. Let me spell it again: S-T-R-A-W-B-E-R-R-Y. So after E, it's R-R-Y. So two Rs there. So total Rs would be the one at position 3 and then two more at positions 8 and 9. That makes three Rs. Wait, but I think the correct spelling is actually "strawberry" with two Rs. Let me check that again. Maybe I added an extra R by mistake. Let me think. The correct spelling is S-T-R-A-W-B-E-R-R-Y. So yes, two Rs after the E. So that's R at position 3 and then two Rs at positions 8 and 9. So total of three Rs. But wait, I'm confused because when I say the word out loud, "strawberry" is pronounced with a sort of double R sound? Or maybe not. Let me confirm the spelling. Strawberry is spelled S-T-R-A-W-B-E-R-R-Y. So yes, there are two Rs towards the end. So in total, three Rs? Wait, no. Let me count again. S (1), T (2), R (3), A (4), W (5), B (6), E (7), R (8), R (9), Y (10). So positions 3, 8, and 9. That's three Rs. But I think that's incorrect. Wait, maybe I'm miscounting. Let me check another way. Let's write the word out: s t r a w b e r r y. So after the 'e', there are two 'r's and then a 'y'. So that's two Rs at the end. Plus the R in the beginning. So that's three Rs. Hmm. But when I actually think about the word, I might have made a mistake here. Wait, maybe the correct spelling is S-T-R-A-W-B-E-R-Y. No, that's not right. Because "strawberry" does have two Rs. Let me verify. Yes, the correct spelling is indeed "strawberry" with two Rs: S-T-R-A-W-B-E-R-R-Y. So that's two Rs after the E. So total letters R: one at position 3, and two at positions 8 and 9. So three Rs in total. Wait, but that seems conflicting because when I look up the spelling, "strawberry" is spelled with two Rs, not three. Wait, no. Let me check again. S-T-R-A-W-B-E-R-R-Y. So the letters are S, T, R, A, W, B, E, R, R, Y. So that's 10 letters. The Rs are at positions 3, 8, and 9. So three Rs. But that can't be right because the standard spelling is "strawberry" with two Rs. Wait, maybe I added an extra R. Let me think again. The word is "strawberry". Let's break it down. The first part is "straw" (S-T-R-A-W), then "berry" (B-E-R-R-Y). So "berry" has two Rs. So in "strawberry", combining "straw" and "berry", so the Rs are in "straw" and "berry". Wait, "straw" is S-T-R-A-W, which has one R. Then "berry" is B-E-R-R-Y, which has two Rs. So combining them, it's S-T-R-A-W-B-E-R-R-Y. So total Rs: one from "straw" and two from "berry", totaling three Rs. Therefore, the answer should be three. But I'm a bit confused because I might have miscounted. Let me write the word and count manually: S, T, R, A, W, B, E, R, R, Y. Yes, that's three Rs. So the answer is three. But wait, when I actually write "strawberry", I think of it as S-T-R-A-W-B-E-R-R-Y, so yes, three Rs. But maybe the user is tricking me, or perhaps I'm overcomplicating. Let me confirm with another method. If I type "strawberry" and count the Rs: s(1), t(2), r(3), a(4), w(5), b(6), e(7), r(8), r(9), y(10). So three Rs at positions 3,8,9. Therefore, the answer is 3.\n</thinking>"
    },
    {
      "type": "text",
      "text": "\n\nThere are 3 "r"s in the word "strawberry"."
    }
  ],
  "deepseek_response": {
    "status": 200,
    "headers": {
      "connection": "keep-alive",
      "x-ds-trace-id": "<x-ds-trace-id>",
      "cf-cache-status": "DYNAMIC",
      "server": "cloudflare",
      "cf-ray": "<cf-ray>",
      "vary": "origin, access-control-request-method, access-control-request-headers",
      "strict-transport-security": "max-age=31536000; includeSubDomains; preload",
      "x-content-type-options": "nosniff", 
      "date": "Sun, 26 Jan 2025 01:50:17 GMT",
      "set-cookie": "<set-cookie>",
      "access-control-allow-credentials": "true",
      "transfer-encoding": "chunked",
      "content-type": "application/json"
    },
    "body": {
      "choices": [
        {
          "finish_reason": "stop",
          "index": 0,
          "logprobs": null,
          "message": {
            "content": "The word "strawberry" contains **3** instances of the letter "r". Here's the breakdown:\n\n1. **S-T-R** (position 3)  \n2. **B-E-R** (position 8)  \n3. **R-R-Y** (position 9)  \n\nSo, the total count of "r"s is **3**. 🍓",
            "reasoning_content": "Okay, let's see. The user is asking how many times the letter "r" appears in the word "strawberry." Alright, first, I need to make sure I spell the word correctly. Strawberry. S-T-R-A-W-B-E-R-R-Y. Wait, let me break it down letter by letter to count the "r"s.\n\nStarting with the first letter: S. That's an S, no R there. Next is T. Still no R. Then R. Ah, that's the first R. So R is the third letter. Then A, W, B, E. So after R, we have A, W, B, E. None of those are Rs. Then after E comes R again. That's the second R. Then another R right after? Wait, let me check again. The word is strawberry. So after E, is it R-R? Let me write it out: S-T-R-A-W-B-E-R-R-Y. Yes, after the E, there are two Rs in a row. So that's two Rs there. Then Y at the end. So total Rs: the third letter is R, and then the 8th and 9th letters are R and R. Wait, let me count the positions to be sure.\n\nLet me list each letter with its position:\n\n1. S\n2. T\n3. R\n4. A\n5. W\n6. B\n7. E\n8. R\n9. R\n10. Y\n\nSo positions 3, 8, and 9. Wait, that's three Rs. Wait, but when I first thought, I had R at position 3, then two Rs at 8 and 9. So that's three Rs in total. But wait, I might be miscounting. Let me spell it again: S-T-R-A-W-B-E-R-R-Y. So after E, it's R-R-Y. So two Rs there. So total Rs would be the one at position 3 and then two more at positions 8 and 9. That makes three Rs. Wait, but I think the correct spelling is actually "strawberry" with two Rs. Let me check that again. Maybe I added an extra R by mistake. Let me think. The correct spelling is S-T-R-A-W-B-E-R-R-Y. So yes, two Rs after the E. So that's R at position 3 and then two Rs at positions 8 and 9. So total of three Rs. But wait, I'm confused because when I say the word out loud, "strawberry" is pronounced with a sort of double R sound? Or maybe not. Let me confirm the spelling. Strawberry is spelled S-T-R-A-W-B-E-R-R-Y. So yes, there are two Rs towards the end. So in total, three Rs? Wait, no. Let me count again. S (1), T (2), R (3), A (4), W (5), B (6), E (7), R (8), R (9), Y (10). So positions 3, 8, and 9. That's three Rs. But I think that's incorrect. Wait, maybe I'm miscounting. Let me check another way. Let's write the word out: s t r a w b e r r y. So after the 'e', there are two 'r's and then a 'y'. So that's two Rs at the end. Plus the R in the beginning. So that's three Rs. Hmm. But when I actually think about the word, I might have made a mistake here. Wait, maybe the correct spelling is S-T-R-A-W-B-E-R-Y. No, that's not right. Because "strawberry" does have two Rs. Let me verify. Yes, the correct spelling is indeed "strawberry" with two Rs: S-T-R-A-W-B-E-R-R-Y. So that's two Rs after the E. So total letters R: one at position 3, and two at positions 8 and 9. So three Rs in total. Wait, but that seems conflicting because when I look up the spelling, "strawberry" is spelled with two Rs, not three. Wait, no. Let me check again. S-T-R-A-W-B-E-R-R-Y. So the letters are S, T, R, A, W, B, E, R, R, Y. So that's 10 letters. The Rs are at positions 3, 8, and 9. So three Rs. But that can't be right because the standard spelling is "strawberry" with two Rs. Wait, maybe I added an extra R. Let me think again. The word is "strawberry". Let's break it down. The first part is "straw" (S-T-R-A-W), then "berry" (B-E-R-R-Y). So "berry" has two Rs. So in "strawberry", combining "straw" and "berry", so the Rs are in "straw" and "berry". Wait, "straw" is S-T-R-A-W, which has one R. Then "berry" is B-E-R-R-Y, which has two Rs. So combining them, it's S-T-R-A-W-B-E-R-R-Y. So total Rs: one from "straw" and two from "berry", totaling three Rs. Therefore, the answer should be three. But I'm a bit confused because I might have miscounted. Let me write the word and count manually: S, T, R, A, W, B, E, R, R, Y. Yes, that's three Rs. So the answer is three. But wait, when I actually write "strawberry", I think of it as S-T-R-A-W-B-E-R-R-Y, so yes, three Rs. But maybe the user is tricking me, or perhaps I'm overcomplicating. Let me confirm with another method. If I type "strawberry" and count the Rs: s(1), t(2), r(3), a(4), w(5), b(6), e(7), r(8), r(9), y(10). So three Rs at positions 3,8,9. Therefore, the answer is 3.",
            "role": "assistant"
          }
        }
      ],
      "created": 1737856217,
      "id": "<id>",
      "model": "deepseek-reasoner",
      "object": "chat.completion",
      "system_fingerprint": "<system_fingerprint>",
      "usage": {
        "completion_tokens": 1423,
        "completion_tokens_details": { "reasoning_tokens": 1343 },
        "prompt_cache_hit_tokens": 0,
        "prompt_cache_miss_tokens": 18,
        "prompt_tokens": 18,
        "prompt_tokens_details": { "cached_tokens": 0 },
        "total_tokens": 1441
      }
    }
  },
  "anthropic_response": {
    "status": 200,
    "headers": {
      "anthropic-ratelimit-input-tokens-reset": "<anthropic-ratelimit-input-tokens-reset>",
      "anthropic-ratelimit-output-tokens-limit": "<anthropic-ratelimit-output-tokens-limit>",
      "anthropic-ratelimit-tokens-reset": "<anthropic-ratelimit-tokens-reset>",
      "content-type": "<content-type>",
      "via": "<via>",
      "anthropic-ratelimit-input-tokens-remaining": "<anthropic-ratelimit-input-tokens-remaining>",
      "anthropic-ratelimit-output-tokens-remaining": "<anthropic-ratelimit-output-tokens-remaining>",
      "anthropic-ratelimit-input-tokens-limit": "<anthropic-ratelimit-input-tokens-limit>",
      "anthropic-ratelimit-output-tokens-reset": "<anthropic-ratelimit-output-tokens-reset>",
      "connection": "<connection>",
      "anthropic-ratelimit-requests-reset": "<anthropic-ratelimit-requests-reset>",
      "anthropic-ratelimit-requests-limit": "<anthropic-ratelimit-requests-limit>",
      "anthropic-ratelimit-tokens-limit": "<anthropic-ratelimit-tokens-limit>",
      "cf-ray": "<cf-ray>",
      "date": "<date>",
      "server": "<server>",
      "cf-cache-status": "<cf-cache-status>",
      "content-length": "<content-length>",
      "anthropic-ratelimit-requests-remaining": "<anthropic-ratelimit-requests-remaining>",
      "anthropic-ratelimit-tokens-remaining": "<anthropic-ratelimit-tokens-remaining>",
      "request-id": "<request-id>",
      "x-robots-tag": "<x-robots-tag>"
    },
    "body": {
      "content": [
        {
          "text": "\n\nThere are 3 "r"s in the word "strawberry".",
          "type": "text"
        }
      ],
      "id": "<msg_id>",
      "model": "claude-3-5-sonnet-20241022",
      "role": "assistant",
      "stop_reason": "end_turn",
      "stop_sequence": null,
      "type": "message",
      "usage": {
        "cache_creation_input_tokens": 0,
        "cache_read_input_tokens": 0,
        "input_tokens": 1490,
        "output_tokens": 20
      }
    }
  },
  "combined_usage": {
    "total_cost": "$0.008",
    "deepseek_usage": {
      "input_tokens": 18,
      "output_tokens": 1423,
      "reasoning_tokens": 1343,
      "cached_input_tokens": 0,
      "total_tokens": 1441,
      "total_cost": "$0.003"
    },
    "anthropic_usage": {
      "input_tokens": 1490,
      "output_tokens": 20,
      "cached_write_tokens": 0,
      "cached_read_tokens": 0,
      "total_tokens": 1510,
      "total_cost": "$0.005"
    }
  }
}