{
  "openapi": "3.1.0",
  "info": {
    "title": "Random Generator Random API",
    "version": "1.0.0",
    "description": "A small, free random API using Web Crypto. No key required. CORS enabled.",
    "contact": {
      "email": "hello@random-generator.dev",
      "url": "https://random-generator.dev/api/"
    }
  },
  "servers": [
    {
      "url": "https://random-generator.dev"
    }
  ],
  "tags": [
    {
      "name": "random",
      "description": "Cryptographically secure random values"
    }
  ],
  "paths": {
    "/api/random": {
      "get": {
        "tags": [
          "random"
        ],
        "operationId": "generateRandom",
        "summary": "Generate cryptographically secure random values",
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "Result type.",
            "schema": {
              "type": "string",
              "enum": [
                "number",
                "digits",
                "letters",
                "symbols",
                "password",
                "uuid",
                "coin",
                "dice"
              ],
              "default": "number"
            }
          },
          {
            "name": "min",
            "in": "query",
            "description": "Minimum integer for type=number.",
            "schema": {
              "type": "integer",
              "default": 0
            }
          },
          {
            "name": "max",
            "in": "query",
            "description": "Maximum integer for type=number.",
            "schema": {
              "type": "integer",
              "default": 100
            }
          },
          {
            "name": "count",
            "in": "query",
            "description": "Number of values to return (1–100).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 1
            }
          },
          {
            "name": "unique",
            "in": "query",
            "description": "Sample without replacement (number and symbols).",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "length",
            "in": "query",
            "description": "String length for digits, letters, symbols, and passwords (1–256).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 256
            }
          },
          {
            "name": "case",
            "in": "query",
            "description": "Letter case for type=letters.",
            "schema": {
              "type": "string",
              "enum": [
                "lower",
                "upper",
                "mixed"
              ],
              "default": "mixed"
            }
          },
          {
            "name": "set",
            "in": "query",
            "description": "Symbol set for type=symbols.",
            "schema": {
              "type": "string",
              "enum": [
                "basic",
                "math",
                "currency",
                "arrows",
                "all"
              ],
              "default": "basic"
            }
          },
          {
            "name": "upper",
            "in": "query",
            "description": "Include uppercase letters in passwords.",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "lower",
            "in": "query",
            "description": "Include lowercase letters in passwords.",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "digits",
            "in": "query",
            "description": "Include digits in passwords.",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "symbols",
            "in": "query",
            "description": "Include symbols in passwords.",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "exclude_ambiguous",
            "in": "query",
            "description": "Exclude look-alike characters from passwords.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "sides",
            "in": "query",
            "description": "Die sides for type=dice.",
            "schema": {
              "type": "integer",
              "enum": [
                4,
                6,
                8,
                10,
                12,
                20,
                100
              ],
              "default": 6
            }
          },
          {
            "name": "modifier",
            "in": "query",
            "description": "Modifier added to dice totals.",
            "schema": {
              "type": "integer",
              "minimum": -1000,
              "maximum": 1000,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful result",
            "headers": {
              "Access-Control-Allow-Origin": {
                "schema": {
                  "type": "string"
                }
              },
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "ok",
                    "type",
                    "values"
                  ],
                  "properties": {
                    "ok": {
                      "type": "boolean"
                    },
                    "type": {
                      "type": "string"
                    },
                    "values": {
                      "type": "array",
                      "items": {
                        "oneOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "string"
                          }
                        ]
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "count": {
                          "type": "integer"
                        },
                        "source": {
                          "type": "string"
                        },
                        "generated_at": {
                          "type": "string",
                          "format": "date-time"
                        },
                        "sides": {
                          "type": "integer"
                        },
                        "modifier": {
                          "type": "integer"
                        },
                        "total": {
                          "type": "number"
                        }
                      }
                    }
                  }
                },
                "example": {
                  "ok": true,
                  "type": "number",
                  "values": [
                    42,
                    7,
                    91
                  ],
                  "meta": {
                    "count": 3,
                    "source": "crypto.getRandomValues",
                    "generated_at": "2026-11-04T10:15:30.000Z"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameter or unsupported type",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "ok": {
                      "const": false
                    },
                    "error": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "externalDocs": {
    "description": "API documentation",
    "url": "https://random-generator.dev/api/"
  }
}