FitLLM Agent API API

Will this local LLM fit this hardware? Auditable, architecture-aware memory estimates (MLA / sliding-window / hybrid-linear / MoE), with documented runtime/OS reserves. No auth, no key. Engine: MIT (github.com/click6067-ship-it/fitllm-engine) · data: CC0 (fitllm.run/data).

GitHub OpenAPI

Operations 2

GET /api/check Check whether an LLM fits on a GPU (incl. multi-GPU rigs) or Apple Silicon Mac #
GET /api/badge shields.io endpoint badge for a model×hardware verdict (live) #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/fitllm-run:fitllm-agent-api-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

fitllm-run-api-openapi.json Raw ↑
{
  "openapi": "3.0.3",
  "info": {
    "title": "FitLLM Agent API",
    "version": "1.0.0",
    "description": "Will this local LLM fit this hardware? Auditable, architecture-aware memory estimates (MLA / sliding-window / hybrid-linear / MoE), with documented runtime/OS reserves. No auth, no key. Engine: MIT (github.com/click6067-ship-it/fitllm-engine) · data: CC0 (fitllm.run/data).",
    "license": {
      "name": "MIT",
      "url": "https://github.com/click6067-ship-it/fitllm-engine/blob/master/LICENSE"
    },
    "x-mcp-server": "https://fitllm.run/api/mcp",
    "x-mcp-registry": "https://registry.modelcontextprotocol.io/v0.1/servers?search=run.fitllm%2Ffitllm"
  },
  "servers": [
    {
      "url": "https://fitllm.run"
    }
  ],
  "externalDocs": {
    "description": "Canonical agent workflow, status handling, and citation rules",
    "url": "https://fitllm.run/agent/answer-with-citation.md"
  },
  "paths": {
    "/api/check": {
      "get": {
        "operationId": "checkLlmFit",
        "summary": "Check whether an LLM fits on a GPU (incl. multi-GPU rigs) or Apple Silicon Mac",
        "parameters": [
          {
            "name": "model",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "LLM name, fuzzy — e.g. 'gemma 4 31b'"
          },
          {
            "name": "gpu",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "GPU name, fuzzy. Multi-GPU: join with + (e.g. '5090+3090'). Provide gpu OR ram."
          },
          {
            "name": "ram",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 8,
              "maximum": 2048
            },
            "description": "Apple Silicon unified memory (GB)"
          },
          {
            "name": "quant",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "GPU: Q4_K_M(default)/Q5_K_M/Q6_K/Q8_0/FP16 · Mac: 4|8(default)|16. Any other value is a 400 with the allowed list."
          },
          {
            "name": "ctx",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 16
            },
            "description": "Context tokens (default 8192, capped at the model's max). A non-integer, below 16 or above the model's max context is a 400."
          },
          {
            "name": "kv",
            "in": "query",
            "schema": {
              "type": "integer",
              "enum": [
                16,
                8,
                4
              ]
            },
            "description": "KV-cache bits (default 16). Any other value is a 400."
          },
          {
            "name": "env",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "windows-display",
                "linux-display",
                "linux-headless"
              ]
            },
            "description": "Discrete-GPU OS reserve per card: windows-display (default, 2 GB) · linux-display (1.2 GB) · linux-headless (0.6 GB). Not accepted for Macs or DGX Spark-class unified-memory systems (400)."
          },
          {
            "name": "count",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 8
            },
            "description": "Copies of gpu"
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "text",
                "md"
              ]
            },
            "description": "Default json; curl user-agents get text; md returns a citation block for both computed 200 results and numeric-null 422 statuses"
          }
        ],
        "responses": {
          "200": {
            "description": "Fit verdict with full memory breakdown, max context, receipt permalink, and a computed fix when it doesn't fit",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "verdict": {
                      "type": "string",
                      "enum": [
                        "yes",
                        "tight",
                        "no"
                      ]
                    },
                    "receipt": {
                      "type": "string",
                      "description": "Stable permalink for this verdict"
                    },
                    "model": {
                      "type": "string"
                    },
                    "hardware": {
                      "type": "string"
                    },
                    "env": {
                      "type": "string",
                      "enum": [
                        "windows-display",
                        "linux-display",
                        "linux-headless"
                      ],
                      "description": "Present for discrete GPUs — the OS reserve the verdict used"
                    },
                    "quant": {
                      "type": "string"
                    },
                    "kvBits": {
                      "type": "integer"
                    },
                    "ctx": {
                      "type": "integer"
                    },
                    "memory": {
                      "type": "object",
                      "properties": {
                        "usedGB": {
                          "type": "number"
                        },
                        "totalGB": {
                          "type": "number"
                        },
                        "freeGB": {
                          "type": "number"
                        },
                        "breakdown": {
                          "type": "object",
                          "properties": {
                            "weightsGB": {
                              "type": "number"
                            },
                            "kvCacheGB": {
                              "type": "number"
                            },
                            "overheadGB": {
                              "type": "number"
                            },
                            "reserveGB": {
                              "type": "number"
                            }
                          }
                        }
                      }
                    },
                    "maxContext": {
                      "type": "integer",
                      "description": "Same as contextLimits.recommendedMax (kept for compatibility)"
                    },
                    "contextLimits": {
                      "type": "object",
                      "description": "The two context numbers every FitLLM surface uses",
                      "properties": {
                        "recommendedMax": {
                          "type": "integer",
                          "description": "Longest context that still leaves the headroom (Mac 20% / GPU 5%)"
                        },
                        "hardLimit": {
                          "type": "integer",
                          "description": "Longest context that fits at all — beyond it the verdict is no"
                        },
                        "headroomPct": {
                          "type": "integer"
                        }
                      }
                    },
                    "fix": {
                      "type": "string",
                      "nullable": true,
                      "description": "Concrete actionable change when verdict is not 'yes' — relay verbatim"
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "Ambiguous model or GPU name — the query matched several catalog entries. The API returns the candidate list instead of picking one, because picking would silently answer about a different model than asked. Re-request with one exact name.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "candidates": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Exact catalog names that matched the ambiguous query."
                    }
                  }
                }
              }
            }
          },
          "422": {
            "description": "The exact model is identity-verified but its architecture is not modeled. No fit estimate was computed; cite statusUrl and pinned evidence instead.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "schemaVersion",
                    "status",
                    "model",
                    "verifiedRevision",
                    "verifiedAt",
                    "missingComponents",
                    "verdict",
                    "memory",
                    "usedGB",
                    "maxContext",
                    "message",
                    "statusUrl",
                    "evidence"
                  ],
                  "properties": {
                    "schemaVersion": {
                      "type": "string",
                      "enum": [
                        "fitllm.model-status.v1"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "unsupported_architecture"
                      ]
                    },
                    "model": {
                      "type": "string",
                      "enum": [
                        "Qwen/Qwen3.8-Flash-Next"
                      ]
                    },
                    "verifiedRevision": {
                      "type": "string",
                      "enum": [
                        "de4b8e4d43b917e7706784d8bb445c9af86a3540"
                      ]
                    },
                    "verifiedAt": {
                      "type": "string",
                      "format": "date"
                    },
                    "missingComponents": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "QSA_INDEXER",
                          "NGRAM_RESIDENCY",
                          "MTP_RESIDENCY",
                          "HC_ACTIVATION",
                          "MULTIMODAL_WORKLOAD"
                        ]
                      }
                    },
                    "verdict": {
                      "type": "string",
                      "nullable": true,
                      "enum": [
                        null
                      ]
                    },
                    "memory": {
                      "type": "object",
                      "nullable": true,
                      "enum": [
                        null
                      ]
                    },
                    "usedGB": {
                      "type": "number",
                      "nullable": true,
                      "enum": [
                        null
                      ]
                    },
                    "maxContext": {
                      "type": "integer",
                      "nullable": true,
                      "enum": [
                        null
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "statusUrl": {
                      "type": "string",
                      "format": "uri"
                    },
                    "evidence": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "kind",
                          "url"
                        ],
                        "properties": {
                          "kind": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string",
                            "format": "uri"
                          },
                          "sha256": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Unknown model/gpu — do not substitute a nearby model; request the exact ID"
          },
          "400": {
            "description": "A parameter is outside its allowed values (quant, ctx, kv, env, ram). The error names the allowed values — the API never silently substitutes a default for a value you sent.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/badge": {
      "get": {
        "operationId": "fitBadge",
        "summary": "shields.io endpoint badge for a model×hardware verdict (live)",
        "parameters": [
          {
            "name": "model",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "gpu",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ram",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "quant",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ctx",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "kv",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "env",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "windows-display",
                "linux-display",
                "linux-headless"
              ]
            },
            "description": "Discrete-GPU OS reserve (default windows-display). The badge label names it, e.g. 'RTX 4090 (Linux headless)'."
          }
        ],
        "responses": {
          "200": {
            "description": "shields.io endpoint schema JSON"
          }
        }
      }
    }
  }
}