LLM Test

API Documentation

Detailed endpoint docs for LLM tool calls and reminder management.

Authentication required

All /api/v1/* endpoints require a shared token in the Authorization header.

Authorization: Bearer <TOOL_API_TOKEN>

Production base URL: https://llmtest.tools

export BASE_URL="https://llmtest.tools"
export TOOL_API_TOKEN="replace-with-your-token"

Tool Endpoints POST

POST /api/v1/tools/create_reminder

Creates a reminder with optional estimate/details.

Request body

{
  "title": "Check model output quality",
  "remind_at": "2026-04-24T17:00:00Z",
  "importance": "high",
  "time_estimate_minutes": 20,
  "details": "Compare responses across 3 model configs."
}

Required: title, remind_at
Optional: importance (low, normal, high), time_estimate_minutes, details

cURL

curl -X POST "$BASE_URL/api/v1/tools/create_reminder" \
  -H "Authorization: Bearer $TOOL_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Check model output quality",
    "remind_at": "2026-04-24T17:00:00Z",
    "importance": "high",
    "time_estimate_minutes": 20,
    "details": "Compare responses across 3 model configs."
  }'

Response (201)

{
  "id": 42,
  "title": "Check model output quality",
  "remind_at": "2026-04-24T17:00:00.000Z",
  "dismissed_at": null,
  "importance": "high",
  "time_estimate_minutes": 20,
  "created_at": "2026-04-23T18:10:42.321Z",
  "updated_at": "2026-04-23T18:10:42.321Z",
  "details": "Compare responses across 3 model configs.",
  "details_html": "<div class=\"trix-content\">...</div>",
  "due": false,
  "active": true
}
POST /api/v1/tools/get_weather

Resolves a location then returns a compact NWS forecast payload (US coverage).

Request body

{ "address": "Los Angeles, CA 90008" }
{ "zip": "90008" }

Provide at least one of address or zip.

cURL

curl -X POST "$BASE_URL/api/v1/tools/get_weather" \
  -H "Authorization: Bearer $TOOL_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "zip": "90008" }'

Response (200)

{
  "location": {
    "query": "90008",
    "resolved_address": "Los Angeles, CA, United States",
    "lat": 34.0116,
    "lng": -118.3411,
    "office": "LOX",
    "grid_x": 151,
    "grid_y": 44,
    "forecast_zone": "https://api.weather.gov/zones/forecast/CAZ368",
    "time_zone": "America/Los_Angeles"
  },
  "updated_at": "2026-04-23T17:50:00+00:00",
  "periods": [
    {
      "name": "Today",
      "start": "2026-04-23T09:00:00-07:00",
      "end": "2026-04-23T18:00:00-07:00",
      "is_daytime": true,
      "temperature": 74,
      "temperature_unit": "F",
      "wind": "5 to 10 mph W",
      "short_forecast": "Sunny",
      "detailed_forecast": "...",
      "precipitation_probability": 0
    }
  ]
}
POST /api/v1/tools/scrape_url

Fetches and cleans page content for LLM consumption. Includes SSRF and size guards.

Request body

{
  "url": "https://llmtest.tools/docs",
  "selector": "main",
  "max_chars": 4000
}

Required: url
Optional: selector, max_chars (default 8000)

cURL

curl -X POST "$BASE_URL/api/v1/tools/scrape_url" \
  -H "Authorization: Bearer $TOOL_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://llmtest.tools/docs",
    "selector": "main",
    "max_chars": 4000
  }'

Response (200)

{
  "url": "https://llmtest.tools/docs",
  "final_url": "https://llmtest.tools/docs",
  "status": 200,
  "content_type": "text/html; charset=UTF-8",
  "title": "API Documentation",
  "description": "Summary text...",
  "canonical": "https://llmtest.tools/docs",
  "headings": [
    { "level": 1, "text": "Main heading" },
    { "level": 2, "text": "Section heading" }
  ],
  "links": [
    { "text": "View all tool calls", "href": "https://llmtest.tools/tool_invocations" }
  ],
  "text": "Cleaned article content..."
}

Reminder Endpoints GET + POST

GET /api/v1/reminders

Lists reminders with filtering and limit controls.

Query params

filter=active|due|dismissed|all
limit=1..500 (default: 100)

cURL

curl -H "Authorization: Bearer $TOOL_API_TOKEN" \
  "$BASE_URL/api/v1/reminders?filter=active&limit=20"

Response (200)

{
  "reminders": [
    {
      "id": 42,
      "title": "Check model output quality",
      "remind_at": "2026-04-24T17:00:00.000Z",
      "dismissed_at": null,
      "importance": "high",
      "time_estimate_minutes": 20,
      "details": "Compare responses across 3 model configs.",
      "details_html": "<div class=\"trix-content\">...</div>",
      "due": false,
      "active": true
    }
  ],
  "count": 1
}
GET /api/v1/reminders/:id

Returns one reminder record.

curl -H "Authorization: Bearer $TOOL_API_TOKEN" \
  "$BASE_URL/api/v1/reminders/42"
POST /api/v1/reminders/:id/snooze

Moves remind_at forward. Defaults to 60 minutes if minutes is missing or invalid.

curl -X POST "$BASE_URL/api/v1/reminders/42/snooze" \
  -H "Authorization: Bearer $TOOL_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "minutes": 30 }'
POST /api/v1/reminders/:id/dismiss

Soft-deletes a reminder by setting dismissed_at.

curl -X POST "$BASE_URL/api/v1/reminders/42/dismiss" \
  -H "Authorization: Bearer $TOOL_API_TOKEN"

Common Errors JSON

{ "error": "Unauthorized" }                       # 401
{ "error": "Server missing TOOL_API_TOKEN; refusing to serve requests" } # 503
{ "error": "param is missing or the value is empty: url" }               # 422
{ "error": "Could not geocode '90008'", "code": "geocode_failed" }       # 422
{ "error": "Refusing to scrape private/loopback address: 127.0.0.1", "code": "blocked_address" } # 403