Kantesti APIs on OpenRouter

Last updated:

Use Kantesti AI through OpenRouter's OpenAI-compatible chat completions API, with the same OpenRouter key you already use for other models.

Status

Kantesti AI has applied to OpenRouter's provider program. The models below go live on OpenRouter once the review is complete.

Models

Model IDWhat it returns
kantesti/blood-test-v12Every result with its reference range and evaluation, a clinical interpretation, a health score with disease-risk indicators, a body map and the biological blood age (PhenoAge).
kantesti/blood-test-extractEvery row exactly as printed (test name, result, unit, reference range) with the laboratory and patient details. No interpretation.

Quick start

Attach the report to the user message as a PDF (file part) or as page images (image_url parts) and call the model like any other OpenRouter model.

curl https://openrouter.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kantesti/blood-test-v12",
    "stream": true,
    "language": "en",
    "messages": [{
      "role": "user",
      "content": [
        {"type": "text", "text": "Interpret this blood test."},
        {"type": "file", "file": {"filename": "blood_test.pdf",
                                  "file_data": "data:application/pdf;base64,JVBERi0xLjQK..."}}
      ]
    }]
  }'
import base64
from openai import OpenAI

client = OpenAI(base_url="https://openrouter.ai/api/v1", api_key="YOUR_OPENROUTER_API_KEY")

with open("blood_test.pdf", "rb") as f:
    pdf = base64.b64encode(f.read()).decode()

response = client.chat.completions.create(
    model="kantesti/blood-test-v12",
    messages=[{"role": "user", "content": [
        {"type": "text", "text": "Interpret this blood test."},
        {"type": "file", "file": {"filename": "blood_test.pdf",
                                  "file_data": f"data:application/pdf;base64,{pdf}"}},
    ]}],
    extra_body={"language": "en"},
    timeout=600,
)
print(response.choices[0].message.content)

Input

  • PDF: one report per request, up to 20 MB, as a file content part (base64 data URL or https URL).
  • Images: up to 10 pages as PNG, JPEG or WebP image_url parts. Do not mix a PDF with images.
  • Language: set language to any of the 100 supported codes (default en).
  • JSON: set response_format to {"type": "json_object"} to receive the structured report instead of Markdown.

Output

The answer is a Markdown report (or JSON) from Kantesti AI, ending with a medical disclaimer. Results are for informational purposes only and do not replace professional medical advice.

Pricing and privacy

  • A flat price per request, shown on the model page on OpenRouter.
  • Zero data retention: uploaded files are deleted when the request ends, and no prompt, file or result is stored.
  • Your data is never used for training.

Response times

A report takes 1–4 minutes: the pipeline reads, checks and interprets every row. Use "stream": true; the connection stays open with keep-alive messages until the report arrives. Without streaming, set a client timeout of at least 10 minutes.

Direct API

Need trends, comparisons, nutrition plans, DNA or family health? These are available through the Kantesti REST API.