{
  "openapi": "3.1.0",
  "info": {
    "title": "ComposerWire",
    "version": "1",
    "summary": "Curated scoring opportunities for film, TV, and game composers",
    "description": "The composerwire.com site, read over GET. Every page has an HTML and a Markdown representation. There is no write access, no authentication and no data feed beyond the pages."
  },
  "servers": [
    {
      "url": "https://composerwire.com"
    }
  ],
  "externalDocs": {
    "url": "https://composerwire.com/api/"
  },
  "paths": {
    "/": {
      "get": {
        "summary": "The front page: the listings still within their stated window.",
        "description": "Send `Accept: text/markdown` for the Markdown copy of the page; anything else gets the HTML. Responses carry `Vary: Accept`. Page addresses end in a slash; without it the server redirects to the address with one.",
        "responses": {
          "200": {
            "description": "The page.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "headers": {
              "Link": {
                "description": "The API catalog (rel=\"api-catalog\"), this description (rel=\"service-desc\") and the page for people (rel=\"service-doc\").",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No such page. The not-found page is HTML whatever was asked for.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/archive/": {
      "get": {
        "summary": "Every issue on the site, newest first.",
        "description": "Send `Accept: text/markdown` for the Markdown copy of the page; anything else gets the HTML. Responses carry `Vary: Accept`. Page addresses end in a slash; without it the server redirects to the address with one.",
        "responses": {
          "200": {
            "description": "The page.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No such page. The not-found page is HTML whatever was asked for.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/about/": {
      "get": {
        "summary": "About ComposerWire.",
        "description": "Send `Accept: text/markdown` for the Markdown copy of the page; anything else gets the HTML. Responses carry `Vary: Accept`. Page addresses end in a slash; without it the server redirects to the address with one.",
        "responses": {
          "200": {
            "description": "The page.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No such page. The not-found page is HTML whatever was asked for.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/": {
      "get": {
        "summary": "This description, for people.",
        "description": "Send `Accept: text/markdown` for the Markdown copy of the page; anything else gets the HTML. Responses carry `Vary: Accept`. Page addresses end in a slash; without it the server redirects to the address with one.",
        "responses": {
          "200": {
            "description": "The page.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No such page. The not-found page is HTML whatever was asked for.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/issues/{number}/": {
      "get": {
        "summary": "One issue: its introduction and its listings by tier.",
        "description": "Send `Accept: text/markdown` for the Markdown copy of the page; anything else gets the HTML. Responses carry `Vary: Accept`. Page addresses end in a slash; without it the server redirects to the address with one.",
        "responses": {
          "200": {
            "description": "The page.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No such page. The not-found page is HTML whatever was asked for.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "number",
            "in": "path",
            "required": true,
            "description": "The issue number, at least three digits, as in 019.",
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{3,}$"
            }
          }
        ]
      }
    },
    "/listings/{slug}/": {
      "get": {
        "summary": "One listing's published write-up, status and date.",
        "description": "Send `Accept: text/markdown` for the Markdown copy of the page; anything else gets the HTML. Responses carry `Vary: Accept`. Page addresses end in a slash; without it the server redirects to the address with one.",
        "responses": {
          "200": {
            "description": "The page.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No such page. The not-found page is HTML whatever was asked for.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "The listing's slug, as given in the sitemap.",
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-z-]+$"
            }
          }
        ]
      }
    },
    "/sitemap.xml": {
      "get": {
        "summary": "Every page on the site.",
        "responses": {
          "200": {
            "description": "Every page on the site.",
            "content": {
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/robots.txt": {
      "get": {
        "summary": "Crawler rules, and a Content-Signal line saying how the content may be used.",
        "responses": {
          "200": {
            "description": "Crawler rules, and a Content-Signal line saying how the content may be used.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/api-catalog": {
      "get": {
        "summary": "This API catalog (RFC 9727), with a Link header naming it as rel=\"api-catalog\".",
        "responses": {
          "200": {
            "description": "This API catalog (RFC 9727), with a Link header naming it as rel=\"api-catalog\".",
            "content": {
              "application/linkset+json; profile=\"https://www.rfc-editor.org/info/rfc9727\"": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/openapi.json": {
      "get": {
        "summary": "This description.",
        "responses": {
          "200": {
            "description": "This description.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/auth.md": {
      "get": {
        "summary": "The auth.md file: no registration, no credentials, read anonymously.",
        "responses": {
          "200": {
            "description": "The auth.md file: no registration, no credentials, read anonymously.",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  }
}
