fastcrw-com Capabilities API

The capabilities API from fastcrw-com — 1 operation(s) for capabilities.

Operations 1

GET /v1/capabilities Server capability discovery #

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/fastcrw-com:fastcrw-com-capabilities-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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

fastcrw-com-capabilities-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: CRW REST Capabilities API
  version: 0.39.1
  description: Firecrawl-compatible web scraping, crawling, mapping, search, and extraction API. Hosted at https://api.fastcrw.com; self-host with `docker run -p 3000:3000 ghcr.io/fastcrw/crw:latest`.
  license:
    name: AGPL-3.0
    url: https://opensource.org/licenses/AGPL-3.0
  contact:
    url: https://github.com/fastcrw/crw
servers:
- url: https://api.fastcrw.com
  description: Hosted (requires Bearer token)
- url: http://localhost:3000
  description: Self-hosted (no auth by default)
security:
- bearerAuth: []
- {}
tags:
- name: Capabilities
paths:
  /v1/capabilities:
    get:
      tags:
      - Capabilities
      summary: Server capability discovery
      description: 'Returns what this opencore instance actually supports: LLM providers, output formats, search features, screenshot/renderer availability, document parsers and enforced limits. Every boolean is derived from the real build features and effective config — a capability is true only when the instance can perform it for a request that supplies no extra credentials. SaaS frontends call this on boot to validate a minimum capability set before sending traffic.'
      operationId: capabilities
      security:
      - bearerAuth: []
      - {}
      responses:
        '200':
          description: Capability report for this opencore instance
          content:
            application/json:
              schema:
                type: object
                required:
                - version
                - llm
                - formats
                - search
                - screenshot
                - renderers
                - extract
                - documents
                - limits
                properties:
                  version:
                    type: string
                    description: opencore semver string
                  llm:
                    type: object
                    required:
                    - providers
                    - supportsBaseUrl
                    - serverKeyConfigured
                    - maxConcurrency
                    properties:
                      providers:
                        type: array
                        items:
                          type: string
                        example:
                        - anthropic
                        - openai
                        - deepseek
                        - openai-compatible
                        - openai-responses
                        - azure
                      supportsBaseUrl:
                        type: boolean
                        description: 'The LLM dispatcher accepts a custom baseUrl, but only as part of a BYOK request: the per-request LLM config that carries it is only built when the request also supplies llmApiKey. Sending baseUrl without a key leaves the server''s own endpoint in force (the server never points its own key at a caller-chosen host). POST /v1/extract rejects baseUrl outright — configure [extraction.llm.base_url] server-side for that route. Build-invariant: no config turns this off.'
                      serverKeyConfigured:
                        type: boolean
                        description: True when a server-side LLM API key is present. False on BYOK-only deploys (CRW_DISABLE_SERVER_LLM_KEY=1), where a self-hosted instance still accepts a per-request llmApiKey. The managed cloud does not take a caller-supplied key.
                      maxConcurrency:
                        type: integer
                        description: Server-configured LLM fan-out cap; 0 when no server LLM config is present
                      requireByokHeader:
                        type: string
                        description: Header name required on LLM-touching requests; omitted when no header guard is configured
                  formats:
                    type: object
                    required:
                    - supported
                    - llmRequired
                    - changeTrackingModes
                    - changeTrackingModesLlmRequired
                    properties:
                      supported:
                        type: array
                        items:
                          type: string
                        example:
                        - markdown
                        - html
                        - rawHtml
                        - plainText
                        - links
                        - json
                        - summary
                        - changeTracking
                        - screenshot
                        description: Output formats this build/config can actually produce. `screenshot` is listed only when a screenshot-capable renderer (chrome / chrome_proxy / playwright) is compiled in and configured.
                      changeTrackingModes:
                        type: array
                        items:
                          type: string
                        example:
                        - gitDiff
                        - json
                      llmRequired:
                        type: array
                        items:
                          type: string
                        description: 'Formats that additionally need an LLM: a server key (llm.serverKeyConfigured) or a per-request llmApiKey. Requesting them without one is a hard error, never a silent downgrade. When llm.requireByokHeader is set the server key is NOT sufficient: the scrape and extract paths reject these formats unless the request carries llmApiKey.'
                        example:
                        - json
                        - summary
                      changeTrackingModesLlmRequired:
                        type: array
                        items:
                          type: string
                        description: Change-tracking modes that need an LLM. gitDiff is deterministic; json mode calls an LLM.
                        example:
                        - json
                  search:
                    type: object
                    required:
                    - supported
                    - answer
                    - summarizeResults
                    properties:
                      supported:
                        type: boolean
                        description: 'POST /v1/search is usable: [search].enabled and search.search_backend_url are set. Configured, not health-probed.'
                      answer:
                        type: boolean
                        description: Answer synthesis works WITHOUT a caller-supplied LLM key (search configured AND a server LLM key present). When false but supported is true, a self-hosted instance still answers a request that carries llmApiKey; the managed cloud does not take a caller-supplied key.
                      summarizeResults:
                        type: boolean
                        description: Same gate as answer.
                  screenshot:
                    type: object
                    required:
                    - supported
                    - fullPage
                    properties:
                      supported:
                        type: boolean
                        description: A screenshot-capable renderer (chrome / chrome_proxy / playwright) is compiled in AND configured. LightPanda and Camoufox cannot capture, so an instance with only those reports false and the scrape path fails closed on a screenshot request.
                      fullPage:
                        type: boolean
                        description: Full-page capture (screenshot@fullPage / screenshotFullPage). Same gate as supported.
                  renderers:
                    type: object
                    required:
                    - available
                    - mode
                    properties:
                      available:
                        type: array
                        items:
                          type: string
                        description: Renderer tiers this instance constructed, in fallback order, reflecting both the build features and the config. These are the values the per-request `renderer` pin accepts. Mostly JS tiers, plus the JS-less impersonated-http tier when that feature is built in.
                        example:
                        - lightpanda
                        - chrome
                      mode:
                        type: string
                        enum:
                        - auto
                        - none
                        - lightpanda
                        - chrome
                        - playwright
                        - camoufox
                        description: Effective [renderer].mode. Note chrome_proxy is a renderer TIER (it can appear in renderers.available) but not a mode.
                        example: auto
                      renderJsDefault:
                        type: boolean
                        description: Effective [renderer].render_js_default; omitted when unset (auto-detect).
                  extract:
                    type: object
                    required:
                    - supported
                    - maxUrls
                    - perFieldAttribution
                    properties:
                      supported:
                        type: boolean
                        description: 'POST /v1/extract works for a request that carries no credentials of its own. The route is ALWAYS mounted, but it needs an LLM: false means a server LLM key is absent, or llm.requireByokHeader is set (which makes the server key insufficient). false does NOT mean ''not implemented'' — a request carrying llmApiKey still extracts on a self-hosted instance.'
                      maxUrls:
                        type: integer
                        description: Max URLs accepted per extract request (crawler.max_extract_urls).
                      perFieldAttribution:
                        type: boolean
                        description: Per-field `basis` attribution. This build ships `basis`, so it reports true; the flag reflects build capability, not whether an LLM is configured.
                  documents:
                    type: object
                    required:
                    - parsers
                    - fileUpload
                    properties:
                      parsers:
                        type: array
                        items:
                          type: string
                        example:
                        - pdf
                      fileUpload:
                        type: object
                        required:
                        - supported
                        - endpoint
                        - maxBytes
                        - types
                        - ocr
                        properties:
                          supported:
                            type: boolean
                          endpoint:
                            type: string
                            description: 'Upload path to join onto your API base. /v2/parse is the one path served by every surface: the engine mounts it at the root and under /firecrawl, and the hosted API proxies /v1/* and /v2/* only.'
                            example: /v2/parse
                          maxBytes:
                            type: integer
                            description: The ENFORCED body cap ([document].max_upload_bytes, clamped by the hard ceiling) — the same value the body-limit layer applies.
                          types:
                            type: array
                            items:
                              type: string
                            example:
                            - application/pdf
                          ocr:
                            type: boolean
                  limits:
                    type: object
                    required:
                    - maxBatchUrls
                    - maxExtractUrls
                    - searchDefaultLimit
                    - searchMaxLimit
                    - maxUploadBytes
                    properties:
                      maxBatchUrls:
                        type: integer
                        description: Max URLs per batch-scrape submission (crawler.max_batch_urls).
                      maxExtractUrls:
                        type: integer
                        description: Max URLs per /v1/extract request (crawler.max_extract_urls).
                      searchDefaultLimit:
                        type: integer
                        description: Default /v1/search limit when the request omits it.
                      searchMaxLimit:
                        type: integer
                        description: Hard cap on the /v1/search limit.
                      maxUploadBytes:
                        type: integer
                        description: Enforced upload cap on the parse endpoint, in bytes.
                        example: 52428800
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key
      description: Hosted only. Get a key at https://fastcrw.com/register.