{
  "openapi": "3.1.0",
  "info": {
    "title": "Plutus AI Public Funder Research API",
    "version": "1.0.0",
    "description": "Existing anonymous read-only REST endpoints. No credentials required. MCP JSON-RPC is separately discoverable at https://plutusai.net/mcp/funders via initialize and tools/list; do not send REST requests there. Private financing workflow documentation is not this public API. REST errors retain their existing error string or funder:null shapes."
  },
  "servers": [
    {
      "url": "https://otvaqzmpdfpsujyqcfeb.supabase.co/functions/v1/public-funder-directory"
    }
  ],
  "security": [],
  "externalDocs": {
    "description": "Authentication boundaries, MCP and public resources",
    "url": "https://plutusai.net/developers"
  },
  "paths": {
    "/": {
      "get": {
        "operationId": "getDirectoryMetadata",
        "summary": "Discover the anonymous directory transport and tool names",
        "description": "Discover the anonymous directory transport and tool names.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Public JSON response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "version": {
                      "type": "string"
                    },
                    "transport": {
                      "type": "string"
                    },
                    "authentication": {
                      "const": "none",
                      "type": "string"
                    },
                    "tools": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "required": [
                    "name",
                    "version",
                    "transport",
                    "authentication",
                    "tools"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "JSON error; no authentication required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "JSON error; no authentication required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Isolate-local burst limit exceeded; retry after 60 seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "JSON error; no authentication required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/funders": {
      "get": {
        "operationId": "searchFunders",
        "summary": "Search published company research",
        "description": "Search published company research. Unknown query parameters return 400. No applications or transactions.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "description": "Company name or natural-language research query.",
            "schema": {
              "type": "string",
              "maxLength": 300,
              "pattern": "^[^\\u0000-\\u001f]*$"
            }
          },
          {
            "name": "product",
            "in": "query",
            "description": "Product filter.",
            "schema": {
              "type": "string",
              "maxLength": 60,
              "pattern": "^[^\\u0000-\\u001f]*$"
            }
          },
          {
            "name": "state",
            "in": "query",
            "description": "Geographic coverage filter, not headquarters.",
            "schema": {
              "type": "string",
              "maxLength": 60,
              "pattern": "^[^\\u0000-\\u001f]*$"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Page size.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Result offset; publication changes can shift pages.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10000,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Public JSON response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "funders": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Funder"
                      }
                    },
                    "total": {
                      "type": "integer"
                    },
                    "limit": {
                      "type": "integer"
                    },
                    "offset": {
                      "type": "integer"
                    },
                    "next_offset": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "funders",
                    "total",
                    "limit",
                    "offset",
                    "next_offset"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "JSON error; no authentication required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "JSON error; no authentication required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Isolate-local burst limit exceeded; retry after 60 seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "JSON error; no authentication required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/funders/{id}": {
      "get": {
        "operationId": "getFunder",
        "summary": "Read published research by UUID or canonical slug",
        "description": "Read published research by UUID or canonical slug. Valid but absent identifiers return 404 with funder null.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Published UUID or canonical lowercase slug.",
            "schema": {
              "type": "string",
              "maxLength": 180,
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Public JSON response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "funder": {
                      "$ref": "#/components/schemas/Funder"
                    }
                  },
                  "required": [
                    "funder"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "JSON error; no authentication required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Absent profile returns funder:null; malformed identifier returns error.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "funder": {
                          "type": "null"
                        }
                      },
                      "required": [
                        "funder"
                      ]
                    },
                    {
                      "$ref": "#/components/schemas/Error"
                    }
                  ]
                }
              }
            }
          },
          "405": {
            "description": "JSON error; no authentication required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Isolate-local burst limit exceeded; retry after 60 seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "JSON error; no authentication required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/name-index": {
      "get": {
        "operationId": "getFunderNameIndex",
        "summary": "Read the complete published identity-only name index",
        "description": "Read the complete published identity-only name index.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Public JSON response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "funders": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          },
                          "slug": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "id",
                          "name",
                          "slug"
                        ]
                      }
                    },
                    "total": {
                      "type": "integer"
                    }
                  },
                  "required": [
                    "funders",
                    "total"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "JSON error; no authentication required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "JSON error; no authentication required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Isolate-local burst limit exceeded; retry after 60 seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "JSON error; no authentication required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/sitemap": {
      "get": {
        "operationId": "getFunderSitemap",
        "summary": "Read canonical public profile URLs as JSON, not XML",
        "description": "Read canonical public profile URLs as JSON, not XML.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Public JSON response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "funders": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "slug": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string",
                            "format": "uri"
                          }
                        },
                        "required": [
                          "slug",
                          "url"
                        ]
                      }
                    }
                  },
                  "required": [
                    "funders"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "JSON error; no authentication required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "JSON error; no authentication required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Isolate-local burst limit exceeded; retry after 60 seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "JSON error; no authentication required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string"
          }
        },
        "required": [
          "error"
        ]
      },
      "Funder": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "summary": {
            "type": [
              "string",
              "null"
            ]
          },
          "website": {
            "type": [
              "string",
              "null"
            ]
          },
          "products": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "headquarters": {
            "type": "object",
            "properties": {
              "city": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "state": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "city",
              "state"
            ]
          }
        },
        "required": [
          "id",
          "name"
        ],
        "description": "Published company research only. Additional published research fields may be returned; missing/null criteria mean unknown. Not private account data or a funding recommendation."
      }
    }
  }
}
