{
    "openapi": "3.1.0",
    "info": {
        "title": "Tyler Willis — Intelligence API",
        "description": "Programmatic access to the intelligence datasets at tylerewillis.com/intelligence. Free read access, no key required for the public datasets. Paid tier and the leads dataset require an API key — request one at /intelligence/api.\n\nAttribution: data is licensed under CC-BY-4.0. Every response carries a _source block with the canonical URL and citation string — include the source URL when redistributing, quoting, or embedding in AI responses.",
        "version": "1.0.0",
        "contact": {
            "name": "Tyler Willis",
            "email": "tyler@tylerewillis.com",
            "url": "https://tylerewillis.com/intelligence/api"
        },
        "license": {
            "name": "CC-BY-4.0",
            "url": "https://creativecommons.org/licenses/by/4.0/"
        },
        "x-author": "Tyler Willis",
        "x-source": "tylerewillis.com/intelligence"
    },
    "servers": [
        {
            "url": "https://tylerewillis.com",
            "description": "Production"
        }
    ],
    "tags": [
        {
            "name": "Tools",
            "description": "Deep vendor intelligence on AI and automation tools — capabilities, pricing, integrations, traction, threat scoring."
        },
        {
            "name": "Benchmarks",
            "description": "Automation adoption + performance benchmarks segmented by industry, size, geography, and maturity."
        },
        {
            "name": "Playbooks",
            "description": "Automation workflow playbooks — required tools, ROI data, importable templates, failure modes."
        },
        {
            "name": "Case Studies",
            "description": "Before/after automation engagement data — hours saved, cost deltas, ROI multiples, payback periods."
        },
        {
            "name": "Market Landscape",
            "description": "Map of the AI automation space — tools, agencies, platforms, communities — with status, trajectory, and threat/opportunity scores."
        }
    ],
    "paths": {
        "/intelligence/api/tools.json": {
            "get": {
                "summary": "List tools",
                "description": "Deep vendor intelligence on AI and automation tools — capabilities, pricing, integrations, traction, threat scoring. Supports search and pagination.",
                "operationId": "list_tools",
                "tags": [
                    "Tools"
                ],
                "parameters": [
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text filter — matches anywhere in the row JSON.",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "Max items returned. Default 50, max 200.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 50,
                            "maximum": 200
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "description": "Pagination offset. Use the next_offset value from the previous response.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "List of tools",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ListResponse"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/intelligence/api/tools/{slug}.json": {
            "get": {
                "summary": "Get one Tool",
                "description": "Fetch a single entity by slug. Returns 404 if not found.",
                "operationId": "get_tools",
                "tags": [
                    "Tools"
                ],
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Entity payload",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "additionalProperties": true
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Slug not found",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/intelligence/api/benchmarks.json": {
            "get": {
                "summary": "List benchmarks",
                "description": "Automation adoption + performance benchmarks segmented by industry, size, geography, and maturity. Supports search and pagination.",
                "operationId": "list_benchmarks",
                "tags": [
                    "Benchmarks"
                ],
                "parameters": [
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text filter — matches anywhere in the row JSON.",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "Max items returned. Default 50, max 200.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 50,
                            "maximum": 200
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "description": "Pagination offset. Use the next_offset value from the previous response.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "List of benchmarks",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ListResponse"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/intelligence/api/benchmarks/{slug}.json": {
            "get": {
                "summary": "Get one Benchmark",
                "description": "Fetch a single entity by slug. Returns 404 if not found.",
                "operationId": "get_benchmarks",
                "tags": [
                    "Benchmarks"
                ],
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Entity payload",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "additionalProperties": true
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Slug not found",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/intelligence/api/playbooks.json": {
            "get": {
                "summary": "List playbooks",
                "description": "Automation workflow playbooks — required tools, ROI data, importable templates, failure modes. Supports search and pagination.",
                "operationId": "list_playbooks",
                "tags": [
                    "Playbooks"
                ],
                "parameters": [
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text filter — matches anywhere in the row JSON.",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "Max items returned. Default 50, max 200.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 50,
                            "maximum": 200
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "description": "Pagination offset. Use the next_offset value from the previous response.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "List of playbooks",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ListResponse"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/intelligence/api/playbooks/{slug}.json": {
            "get": {
                "summary": "Get one Playbook",
                "description": "Fetch a single entity by slug. Returns 404 if not found.",
                "operationId": "get_playbooks",
                "tags": [
                    "Playbooks"
                ],
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Entity payload",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "additionalProperties": true
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Slug not found",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/intelligence/api/case-studies.json": {
            "get": {
                "summary": "List case studies",
                "description": "Before/after automation engagement data — hours saved, cost deltas, ROI multiples, payback periods. Supports search and pagination.",
                "operationId": "list_case_studies",
                "tags": [
                    "Case Studies"
                ],
                "parameters": [
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text filter — matches anywhere in the row JSON.",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "Max items returned. Default 50, max 200.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 50,
                            "maximum": 200
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "description": "Pagination offset. Use the next_offset value from the previous response.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "List of case studies",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ListResponse"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/intelligence/api/case-studies/{slug}.json": {
            "get": {
                "summary": "Get one Case Studie",
                "description": "Fetch a single entity by slug. Returns 404 if not found.",
                "operationId": "get_case_studies",
                "tags": [
                    "Case Studies"
                ],
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Entity payload",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "additionalProperties": true
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Slug not found",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/intelligence/api/market.json": {
            "get": {
                "summary": "List market entities",
                "description": "Map of the AI automation space — tools, agencies, platforms, communities — with status, trajectory, and threat/opportunity scores. Supports search and pagination.",
                "operationId": "list_market",
                "tags": [
                    "Market Landscape"
                ],
                "parameters": [
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Free-text filter — matches anywhere in the row JSON.",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "Max items returned. Default 50, max 200.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 50,
                            "maximum": 200
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "description": "Pagination offset. Use the next_offset value from the previous response.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "List of market entities",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ListResponse"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/intelligence/api/market/{slug}.json": {
            "get": {
                "summary": "Get one Market Landscape",
                "description": "Fetch a single entity by slug. Returns 404 if not found.",
                "operationId": "get_market",
                "tags": [
                    "Market Landscape"
                ],
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Entity payload",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "additionalProperties": true
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Slug not found",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/intelligence/api/by-uuid/{uuid}.json": {
            "get": {
                "summary": "Resolve an entity by its stable UUID",
                "description": "Slugs are user-facing aliases that can be renamed. UUIDs are the never-changing external identifier. External systems should pin against UUID to survive slug changes. Returns the public payload plus _dataset (which of the five tables) and _web_url (current canonical page).",
                "operationId": "resolve_by_uuid",
                "tags": [
                    "Lookup"
                ],
                "parameters": [
                    {
                        "name": "uuid",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Entity payload + dataset marker",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "additionalProperties": true
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "UUID not found in any dataset",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/intelligence/api/search": {
            "get": {
                "summary": "Semantic search across datasets",
                "description": "Vector-similarity search using OpenAI text-embedding-3-small. Returns the closest entities by meaning, not by keyword. Each result includes a _score field (cosine similarity, 0..1).",
                "operationId": "semantic_search",
                "tags": [
                    "Search"
                ],
                "parameters": [
                    {
                        "name": "q",
                        "in": "query",
                        "required": true,
                        "description": "Natural-language query.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "dataset",
                        "in": "query",
                        "required": false,
                        "description": "Restrict to one dataset, or \"all\".",
                        "schema": {
                            "type": "string",
                            "default": "all",
                            "enum": [
                                "all",
                                "tools",
                                "benchmarks",
                                "playbooks",
                                "case-studies",
                                "market"
                            ]
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Max items per dataset. 1..50.",
                        "schema": {
                            "type": "integer",
                            "default": 10,
                            "maximum": 50
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Search results grouped by dataset",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "additionalProperties": true
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Missing or invalid query",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/intelligence/api/changes.json": {
            "get": {
                "summary": "Recent changes across all datasets",
                "description": "Unified change feed: new entities, price moves, status changes (acquisitions / shutdowns / pivots), trajectory shifts. Each entry includes change_type, significance, and a source URL when known.",
                "operationId": "recent_changes",
                "tags": [
                    "Changes"
                ],
                "parameters": [
                    {
                        "name": "since_days",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 30,
                            "maximum": 365
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 100,
                            "maximum": 500
                        }
                    },
                    {
                        "name": "min_significance",
                        "in": "query",
                        "required": false,
                        "description": "Only return changes at or above this level.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "low",
                                "medium",
                                "high",
                                "critical"
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Recent changes",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "additionalProperties": true
                                }
                            }
                        }
                    }
                }
            }
        },
        "/intelligence/changes.rss": {
            "get": {
                "summary": "Recent changes (RSS 2.0)",
                "description": "RSS 2.0 feed of recent changes at \"medium\" significance or higher. Subscribe in any feed reader, or use it as a poll-based update channel for downstream agents.",
                "operationId": "recent_changes_rss",
                "tags": [
                    "Changes"
                ],
                "responses": {
                    "200": {
                        "description": "RSS XML",
                        "content": {
                            "application/rss+xml": {
                                "schema": {
                                    "type": "string"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/intelligence/api/mcp": {
            "post": {
                "summary": "MCP JSON-RPC endpoint",
                "description": "Model Context Protocol server. Speaks JSON-RPC 2.0 over HTTP. Supported methods: initialize, resources/list, resources/read, tools/list, tools/call. See /intelligence/api for client setup.",
                "operationId": "mcp_rpc",
                "tags": [
                    "MCP"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "jsonrpc",
                                    "method"
                                ],
                                "properties": {
                                    "jsonrpc": {
                                        "type": "string",
                                        "enum": [
                                            "2.0"
                                        ]
                                    },
                                    "id": {
                                        "oneOf": [
                                            {
                                                "type": "string"
                                            },
                                            {
                                                "type": "integer"
                                            },
                                            {
                                                "type": "null"
                                            }
                                        ]
                                    },
                                    "method": {
                                        "type": "string"
                                    },
                                    "params": {
                                        "type": "object",
                                        "additionalProperties": true
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "JSON-RPC response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "Source": {
                "type": "object",
                "description": "Attribution block. Carry this with any redistribution or AI-response embedding.",
                "properties": {
                    "name": {
                        "type": "string"
                    },
                    "url": {
                        "type": "string",
                        "description": "Canonical URL for the entity or dataset."
                    },
                    "author": {
                        "type": "string"
                    },
                    "publisher": {
                        "type": "string"
                    },
                    "license": {
                        "type": "string"
                    },
                    "license_url": {
                        "type": "string"
                    },
                    "attribution_required": {
                        "type": "string"
                    },
                    "citation": {
                        "type": "string",
                        "description": "Ready-to-paste citation string."
                    },
                    "docs": {
                        "type": "string"
                    }
                }
            },
            "ListResponse": {
                "type": "object",
                "properties": {
                    "_source": {
                        "$ref": "#/components/schemas/Source"
                    },
                    "dataset": {
                        "type": "string"
                    },
                    "total": {
                        "type": "integer"
                    },
                    "limit": {
                        "type": "integer"
                    },
                    "offset": {
                        "type": "integer"
                    },
                    "returned": {
                        "type": "integer"
                    },
                    "next_offset": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "items": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "description": "Each item also carries a _source_url field with its canonical URL.",
                            "additionalProperties": true
                        }
                    },
                    "docs": {
                        "type": "string"
                    }
                }
            },
            "Error": {
                "type": "object",
                "properties": {
                    "error": {
                        "type": "string"
                    }
                }
            }
        }
    }
}