{
  "openapi": "3.0.3",
  "info": {
    "title": "Musael Public Tools API",
    "version": "1.0.0",
    "description": "Deterministic name generators for writers. No AI calls, private workspace access or manuscripts.\n\nOfficial website: [Musael](https://musael.com).\n\nNo API key. Per client: burst 10, refill 30/minute. Shared service capacity: burst 20, refill 10/second; at most 8 in flight. Honor Retry-After on HTTP 429/503. POST JSON: maximum 2048 bytes. No automatic retries. Dates are sent in POST bodies, never URL parameters.",
    "contact": {
      "name": "Musael",
      "url": "https://musael.com"
    }
  },
  "servers": [
    {
      "url": "https://musael.com"
    }
  ],
  "security": [],
  "externalDocs": {
    "description": "Usage and limits",
    "url": "https://github.com/Lucernel/public-apis/blob/main/docs/musael.md"
  },
  "paths": {
    "/api/public/v1/names": {
      "get": {
        "operationId": "names",
        "summary": "Seeded name generator",
        "description": "Generate up to 20 names using one of 24 deterministic generators, without AI or account access.",
        "responses": {
          "200": {
            "description": "Computed result.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "version": {
                      "type": "string",
                      "enum": [
                        "1"
                      ]
                    },
                    "kind": {
                      "type": "string",
                      "enum": [
                        "fantasy",
                        "fantasy-last",
                        "elf",
                        "dwarf",
                        "dragon",
                        "kingdom",
                        "town",
                        "village",
                        "tavern",
                        "wizard",
                        "orc",
                        "city",
                        "guild",
                        "ship",
                        "sword",
                        "spell",
                        "god",
                        "demon",
                        "vampire",
                        "pirate",
                        "knight",
                        "sci-fi-planet",
                        "alien",
                        "starship"
                      ]
                    },
                    "seed": {
                      "type": "integer"
                    },
                    "names": {
                      "type": "array",
                      "minItems": 1,
                      "maxItems": 20,
                      "items": {
                        "type": "string"
                      }
                    },
                    "source": {
                      "type": "string",
                      "format": "uri"
                    }
                  },
                  "required": [
                    "version",
                    "kind",
                    "seed",
                    "names",
                    "source"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Request rejected; inspect the HTTP status and error.code.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before a later attempt (429/503).",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Request rejected; inspect the HTTP status and error.code.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before a later attempt (429/503).",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "408": {
            "description": "Request rejected; inspect the HTTP status and error.code.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before a later attempt (429/503).",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "413": {
            "description": "Request rejected; inspect the HTTP status and error.code.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before a later attempt (429/503).",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "414": {
            "description": "Request rejected; inspect the HTTP status and error.code.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before a later attempt (429/503).",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "Request rejected; inspect the HTTP status and error.code.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before a later attempt (429/503).",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Request rejected; inspect the HTTP status and error.code.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before a later attempt (429/503).",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Request rejected; inspect the HTTP status and error.code.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before a later attempt (429/503).",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Request rejected; inspect the HTTP status and error.code.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before a later attempt (429/503).",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string"
                        },
                        "message": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "fantasy",
                "fantasy-last",
                "elf",
                "dwarf",
                "dragon",
                "kingdom",
                "town",
                "village",
                "tavern",
                "wizard",
                "orc",
                "city",
                "guild",
                "ship",
                "sword",
                "spell",
                "god",
                "demon",
                "vampire",
                "pirate",
                "knight",
                "sci-fi-planet",
                "alien",
                "starship"
              ],
              "default": "fantasy"
            }
          },
          {
            "name": "seed",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 999999,
              "default": 1
            }
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 10
            }
          }
        ]
      }
    }
  }
}
