LLM Tools

7 endpoints that apply Gemini LLMs to common text intelligence tasks — all via a simple REST call with no LLM SDK required. Supported models: gemini-2.0-flash, gemini-2.0-flash-lite, gemini-1.5-flash.

Endpoint Purpose
POST /v1/llm-extract Extract structured data from text via JSON Schema
POST /v1/llm-classify Classify text into one or more categories
POST /v1/llm-summarize Summarize text (paragraph, bullets, or one-line)
POST /v1/llm-sentiment Detect sentiment and emotional tone
POST /v1/llm-translate Translate text to any language
POST /v1/llm-rewrite Rewrite text in a different tone or style
POST /v1/llm-entities Extract named entities (persons, orgs, locations, dates)

REST API Examples

Extract structured data with JSON Schema

curl -X POST "https://devtools.toolkitapi.io/v1/llm-extract" \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Invoice #1042 from Acme Corp. Total: $4,250. Due: July 15, 2024",
    "schema": {
      "type": "object",
      "properties": {
        "invoice_number": {"type": "string"},
        "vendor": {"type": "string"},
        "total": {"type": "number"}
      }
    }
  }'
const resp = await fetch("https://devtools.toolkitapi.io/v1/llm-extract", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    text: "Invoice #1042 from Acme Corp. Total: $4,250",
    schema: {
      type: "object",
      properties: {
        invoice_number: { type: "string" },
        vendor: { type: "string" },
        total: { type: "number" },
      },
    },
  }),
});
const data = await resp.json();
console.log(data.data);
// { invoice_number: "1042", vendor: "Acme Corp", total: 4250 }
Response
{
  "data": {
    "invoice_number": "1042",
    "vendor": "Acme Corp",
    "total": 4250.00
  },
  "model": "gemini-2.0-flash",
  "tokens_used": 128,
  "query_time_ms": 843.2
}

Classify text

curl -X POST "https://devtools.toolkitapi.io/v1/llm-classify" \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text": "My order arrived damaged and support hasn't responded", "categories": ["billing", "shipping", "product_quality", "customer_support"]}'
const resp = await fetch("https://devtools.toolkitapi.io/v1/llm-classify", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    text: "My order arrived damaged",
    categories: ["billing", "shipping", "product_quality", "customer_support"],
  }),
});
const data = await resp.json();
console.log(data.category); // "product_quality"

Summarize text

curl -X POST "https://devtools.toolkitapi.io/v1/llm-summarize" \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text": "A long article about..." , "max_length": 100, "style": "bullets"}'
const resp = await fetch("https://devtools.toolkitapi.io/v1/llm-summarize", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    text: "Long text to summarize...",
    max_length: 100,
    style: "bullets",
  }),
});
const data = await resp.json();
console.log(data.summary);

Detect sentiment

curl -X POST "https://devtools.toolkitapi.io/v1/llm-sentiment" \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text": "Absolutely love the new update, it fixed everything I was struggling with!"}'
const resp = await fetch("https://devtools.toolkitapi.io/v1/llm-sentiment", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({ text: "Love the new update!" }),
});
const data = await resp.json();
console.log(`${data.sentiment} (confidence: ${data.confidence})`);

Translate text

curl -X POST "https://devtools.toolkitapi.io/v1/llm-translate" \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text": "Hello, how are you?", "target_language": "Spanish", "tone": "casual"}'
const resp = await fetch("https://devtools.toolkitapi.io/v1/llm-translate", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    text: "Hello, how are you?",
    target_language: "Spanish",
    tone: "casual",
  }),
});
const data = await resp.json();
console.log(data.translated_text);

LLM common parameters

Parameter Type Default Description
text string required Input text for the LLM to process
model string gemini-2.0-flash One of: gemini-2.0-flash, gemini-2.0-flash-lite, gemini-1.5-flash
temperature number varies 0.0–1.0. Lower = more deterministic. Defaults: 0.1 (extract/classify/sentiment), 0.3 (summarize/translate), 0.5 (rewrite)

Python SDK Examples

Extract structured data from text

Use llm-extract when you need to pull specific fields out of unstructured text and get back a typed JSON object.

from toolkitapi import DevTools

invoice_text = """
Invoice #1042 from Acme Corp dated 15 June 2024.
Total amount due: $4,250.00
Due date: July 15, 2024
Contact: [email protected]
"""

schema = {
    "type": "object",
    "properties": {
        "invoice_number": {"type": "string"},
        "vendor": {"type": "string"},
        "total": {"type": "number"},
        "due_date": {"type": "string"},
        "contact_email": {"type": "string"},
    },
}

with DevTools(api_key="tk_...") as dt:
    result = dt.llm_extract(invoice_text, schema=schema)
    print(result["data"])
    # {
    #   "invoice_number": "1042",
    #   "vendor": "Acme Corp",
    #   "total": 4250.00,
    #   "due_date": "2024-07-15",
    #   "contact_email": "[email protected]"
    # }

Classify text into categories

from toolkitapi import DevTools

with DevTools(api_key="tk_...") as dt:
    result = dt.llm_classify(
        text="My order arrived damaged and customer support hasn't responded in 3 days.",
        categories=["billing", "shipping", "product_quality", "customer_support", "returns"],
    )
    print(result["category"])     # "customer_support"
    print(result["confidence"])   # 0.91

    # Multi-label: allow multiple matching categories
    result = dt.llm_classify(
        text="The package was crushed and the invoice was wrong.",
        categories=["billing", "shipping", "product_quality", "customer_support"],
        multi_label=True,
    )
    print(result["categories"])   # ["product_quality", "billing"]

Summarize text

from toolkitapi import DevTools

article = """
Artificial intelligence is transforming industries at an unprecedented pace.
From healthcare diagnostics to financial modelling, AI systems are now capable
of performing tasks that previously required years of human expertise...
[...long article text...]
"""

with DevTools(api_key="tk_...") as dt:
    # Paragraph summary
    result = dt.llm_summarize(article, style="paragraph", max_length=80)
    print(result["summary"])

    # Bullet points
    result = dt.llm_summarize(article, style="bullets", max_length=100)
    print(result["summary"])

    # One-liner
    result = dt.llm_summarize(article, style="one_line")
    print(result["summary"])

Detect sentiment and emotions

from toolkitapi import DevTools

reviews = [
    "Absolutely love this product! Best purchase I've made all year.",
    "It's okay, nothing special. Works as described but feels cheap.",
    "Terrible quality. Broke after two days. Complete waste of money.",
]

with DevTools(api_key="tk_...") as dt:
    for review in reviews:
        result = dt.llm_sentiment(review)
        print(result["sentiment"])     # "positive" / "neutral" / "negative"
        print(result["score"])         # -1.0 to 1.0
        print(result["emotions"])      # {"joy": 0.8, "anger": 0.0, ...}

Translate text

from toolkitapi import DevTools

with DevTools(api_key="tk_...") as dt:
    # Translate to Spanish (formal tone)
    result = dt.llm_translate(
        text="Welcome to our platform. Please review our terms and conditions.",
        target_language="Spanish",
        tone="formal",
    )
    print(result["translated"])
    print(result["detected_language"])   # "en"

    # Translate to Japanese (auto-detect source)
    result = dt.llm_translate(
        text="Hello! How are you doing today?",
        target_language="Japanese",
    )
    print(result["translated"])

Rewrite text in a different tone

from toolkitapi import DevTools

original = "We regret to inform you that your request has been denied due to insufficient documentation."

with DevTools(api_key="tk_...") as dt:
    # Make it friendlier
    result = dt.llm_rewrite(original, tone="friendly")
    print(result["rewritten"])

    # Make it more concise
    result = dt.llm_rewrite(original, tone="concise")
    print(result["rewritten"])

    # Custom instructions
    result = dt.llm_rewrite(
        original,
        instructions="Rewrite as a short SMS message under 160 characters.",
    )
    print(result["rewritten"])

Extract named entities

from toolkitapi import DevTools

text = """
On Monday, Apple CEO Tim Cook met with European Commission President
Ursula von der Leyen in Brussels to discuss AI regulation proposals.
The meeting lasted approximately two hours.
"""

with DevTools(api_key="tk_...") as dt:
    # All entity types
    result = dt.llm_entities(text)
    print(result["entities"])
    # [
    #   {"text": "Apple", "type": "organization", "start": ...},
    #   {"text": "Tim Cook", "type": "person", ...},
    #   {"text": "Brussels", "type": "location", ...},
    #   ...
    # ]

    # Specific entity types only
    result = dt.llm_entities(text, entity_types=["person", "organization"])
    print(result["entities"])

Choosing a Model

All LLM endpoints accept an optional model parameter:

Model Speed Quality Best for
gemini-2.0-flash-lite Fastest Good High-volume classification, simple extraction
gemini-2.0-flash Fast Better Most tasks — default choice
gemini-1.5-flash Moderate High Complex extraction, nuanced summarization
with DevTools(api_key="tk_...") as dt:
    result = dt.llm_summarize(
        long_doc,
        style="bullets",
        model="gemini-1.5-flash",   # use higher quality for important content
    )

Tip

For structured extraction pipelines, use llm-extract with a well-defined JSON Schema. The more specific your schema, the more reliable the output. Combine with json-schema-validate to verify the result before using it downstream.