Skip to content
OperatorNest

Public tool API

Send a JSON request to calculate a result. These endpoints use the same methods as the public tools and return units, assumptions and source details.

Requests and results

No account or API key is required. Calculations do not call an AI model, save a plan, send an invite or execute a task. Send UTF-8 JSON with Content-Type: application/json. A request can contain at most 32,768 bytes. Successful responses include the normalized input, method, units, assumptions and provenance.

Discover endpoints through the API catalog or read the OpenAPI contract. The catalog uses the RFC 9727 linkset format.

ai api cost calculator

POST /api/tools/ai-api-cost-calculator. Use the public tool for editable controls and JSON export.

curl https://operatornest.com/api/tools/ai-api-cost-calculator \
  -H 'Content-Type: application/json' \
  --data '{"inputTokens":10000,"cachedInputTokens":5000,"outputTokens":2000,"requestsPerDay":100,"requestsPerMonth":3000,"modelIds":["anthropic/claude-opus-5-5"]}'

Token counts are whole numbers from 0 to 100,000,000 per request. Daily requests are 0–10,000,000; monthly requests are 0–100,000,000. Choose 1–20 unique model IDs. Cached input must not exceed total input. Read /api/models?subset=pricing for IDs in providerId/id form. Optional batchModelIds requests published discounts for selected models; absent discounts produce a field error. Each estimate reports USD per request, day and month. Missing rates return null. The response identifies the catalog snapshot date. Estimates exclude non-token charges.

Input schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "inputTokens": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100000000
    },
    "cachedInputTokens": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100000000
    },
    "outputTokens": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100000000
    },
    "requestsPerDay": {
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    },
    "requestsPerMonth": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100000000
    },
    "modelIds": {
      "type": "array",
      "minItems": 1,
      "maxItems": 20,
      "uniqueItems": true,
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200,
        "pattern": "\\S"
      }
    },
    "batchModelIds": {
      "type": "array",
      "minItems": 0,
      "maxItems": 20,
      "uniqueItems": true,
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200,
        "pattern": "\\S"
      },
      "description": "Optional model IDs using a published batch discount."
    }
  },
  "required": [
    "inputTokens",
    "cachedInputTokens",
    "outputTokens",
    "requestsPerDay",
    "requestsPerMonth",
    "modelIds"
  ]
}

meeting time zone planner

POST /api/tools/meeting-time-zone-planner. Use the public tool for editable controls and JSON export.

curl https://operatornest.com/api/tools/meeting-time-zone-planner \
  -H 'Content-Type: application/json' \
  --data '{"date":"2026-10-05","people":[{"name":"Sam","zone":"America/Los_Angeles"},{"name":"Priya","zone":"America/New_York"}]}'

Choose 2–8 people, names of 1–80 characters and valid IANA time zones. The date follows the first person’s zone. The tool checks real half-hour instants, including repeated or skipped hours at daylight saving changes, against 09:00–17:00 local workdays. It ranks 30-minute overlaps by distance from 13:00 at each slot’s midpoint. UTC start times and local labels accompany the best three slots and the full grid. Holidays and personal calendar availability are outside this calculation.

Input schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "date": {
      "type": "string",
      "format": "date",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Real date from 2000-01-01 to 2100-12-31."
    },
    "people": {
      "type": "array",
      "minItems": 2,
      "maxItems": 8,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "pattern": "\\S"
          },
          "zone": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "pattern": "\\S",
            "description": "An IANA time zone supported by Intl.DateTimeFormat, such as America/New_York."
          }
        },
        "required": [
          "name",
          "zone"
        ]
      }
    }
  },
  "required": [
    "date",
    "people"
  ]
}

recurring task planner

POST /api/tools/recurring-task-planner. Use the public tool for editable controls and JSON export.

curl https://operatornest.com/api/tools/recurring-task-planner \
  -H 'Content-Type: application/json' \
  --data '{"startDate":"2026-10-05","tasks":[{"title":"Investor update","frequency":"weekly","day":"MO","monthday":1,"minutes":35,"time":"09:00","owner":"delegate"}]}'

Choose 0–20 tasks. Titles have 1–80 characters; minutes per run are 1–1,440. Frequencies are weekly, biweekly or monthly. Supply a weekday code, a day of month from 1–28, a valid HH:mm time, and an owner decision of delegate, keep or decide. The start date anchors every two weeks. Monthly hours use 52/12 weekly runs, 26/12 biweekly runs and one monthly run. The response includes recurrence rules and a folded calendar file. Calendar times float in the importing calendar’s local time zone, so no UTC or daylight saving offset is imposed.

Input schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "startDate": {
      "type": "string",
      "format": "date",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Real date from 2000-01-01 to 2100-12-31."
    },
    "tasks": {
      "type": "array",
      "minItems": 0,
      "maxItems": 20,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "title": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "pattern": "\\S"
          },
          "frequency": {
            "type": "string",
            "enum": [
              "weekly",
              "biweekly",
              "monthly"
            ]
          },
          "day": {
            "type": "string",
            "enum": [
              "MO",
              "TU",
              "WE",
              "TH",
              "FR",
              "SA",
              "SU"
            ]
          },
          "monthday": {
            "type": "integer",
            "minimum": 1,
            "maximum": 28
          },
          "minutes": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1440
          },
          "time": {
            "type": "string",
            "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$"
          },
          "owner": {
            "type": "string",
            "enum": [
              "delegate",
              "keep",
              "decide"
            ]
          }
        },
        "required": [
          "title",
          "frequency",
          "day",
          "monthday",
          "minutes",
          "time",
          "owner"
        ]
      }
    }
  },
  "required": [
    "startDate",
    "tasks"
  ]
}

Dates and errors

Dates must be real calendar dates from 2000-01-01 through 2100-12-31. Unknown fields are rejected. Error responses use {"error":{"code":"invalid_input","message":"Cached tokens cannot exceed input tokens.","field":"cachedInputTokens"}}. Correct the named field and retry with your original values.

StatusMeaning
400Malformed UTF-8 JSON
413Body over 32,768 bytes
415Send application/json
422Input outside the documented bounds
405Use POST for calculations
500Calculation unavailable; retry later

Model catalog

GET /api/models returns a read-only snapshot with its source and update date. Optional filters are provider, q, type=decision|default|all and subset=pricing. Filters are case insensitive. No matches returns an empty model list. Invalid type or subset returns status 400 with an error string. Responses have an ETag and a one-hour shared cache policy. Send If-None-Match to receive a bodyless 304 when the snapshot matches.

Browser tool access

The three public pages register these calculations through WebMCP’s imperative API when the browser supports it. A tool call updates the visible inputs and results. Regular controls work without that browser feature. Browser support is experimental; registration and a completed calculation do not measure an autonomous agent’s task success.

Hand off your first task tonight.

Tell us your email and what you'd hand off first. We'll send your access details and help you set up your operator.