{
  "openapi": "3.0.0",
  "info": {
    "title": "OpenAPI Search API",
    "description": "OpenAPI-Search combines multiple OpenAPIs in a fast, organized, and searchable interface.\n\nOpenAPIs are effectively closed if there isn't an accessible way to find and use them. Big commercial API directories such as https://rapidapi.com are currently dominating the search results and the # of APIs indexed, leading many developers to a non-open API gateway. Open Source is far behind.\n\nThe best OpenAPI directory as of yet is https://apis.guru but this doesn't even reach 10% of the amount of listed APIs and there is many room for improvement.\n\nThe vision of https://openapisearch.com is to make OpenAPIs truly open by making it accessible (easy to find what you're looking for) and improving listing quality.\n\n# Goals\n\nTargeted improvements compared to https://apis.guru:\n\n- Easy navigation for agents\n- Programmatic Registry\n- Improved Website\n\nWishlist:\n\n- E2E Testing of OpenAPIs\n- AI Crawler for API Discovery\n- AI Crawler to augment OpenAPI Metadata\n  - Adds authentication + scope info\n  - Adds useful links\n  - Adds reviews\n  - Adds pricing info, ratelimit info, etc\n\n## Non-goals\n\n- Create a docs reference website like [readme.com](https://readme.com) (there are many) - for this we're using stoplight now.\n- Add weird custom logic that is non-standard to the OpenAPI. Instead, I aim to create a layer on top of openapis to improve the implementation of the standard. I'll use [actionschema](https://actionschema.com) for this.",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://openapisearch.com",
      "description": "Production server"
    }
  ],
  "paths": {
    "/index.md": {
      "get": {
        "summary": "Get list of OpenAPI providers",
        "description": "Retrieves a markdown file containing IDs of OpenAPIs and their descriptions",
        "responses": {
          "200": {
            "description": "Successfully retrieved markdown index",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/redirect/{id}": {
      "get": {
        "summary": "Redirect to OpenAPI specification",
        "description": "Redirects to the OpenAPI specification for a given provider ID.\n\nProviderID can be one of:\n - a key from providers.json\n- a slug where an openapi can be found at https://{slug}.com/openapi.json\n- a slug including TLD where the OpenAPI can be found at https://{slug}/openapi.json\n- If the OpenAPI is at a different path, you can provide paths as double underscore (__), e.g. `/redirect/docs.socialdata.tools__openapi.yaml` would lead to https://docs.socialdata.tools/openapi.yaml",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Provider identifier.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "302": {
            "description": "Redirect to OpenAPI specification",
            "headers": {
              "Location": {
                "description": "URL of the OpenAPI specification",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "404": {
            "description": "Provider ID not found"
          }
        }
      }
    },
    "/providers.json": {
      "get": {
        "summary": "Get provider information",
        "description": "Retrieves a JSON containing accumulated registered OpenAPI providers and augmentations of their OpenAPIs for useful information for automation",
        "responses": {
          "200": {
            "description": "Successfully retrieved provider information",
            "content": {
              "application/json": {
                "schema": { "$ref": "providers.schema.json" }
              }
            }
          }
        }
      }
    }
  }
}
