{
  "openapi": "3.1.0",
  "info": {
    "title": "ExoAPI",
    "version": "1.0.0",
    "description": "Universal API for developers - Geocoding, HTML rendering, barcode generation & more",
    "x-logo": {
      "url": "https://exoapi.dev/assets/exoapi-logo-square.svg",
      "altText": "ExoAPI logo"
    },
    "termsOfService": "https://exoapi.dev/terms-and-conditions",
    "contact": {
      "name": "ExoAPI",
      "email": "hello@exoapi.dev",
      "url": "https://exoapi.dev"
    },
    "x-jentic-source-url": "https://api.exoapi.dev/openapi.json"
  },
  "externalDocs": {
    "description": "Documentation",
    "url": "https://exoapi.dev/documentation"
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer"
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "servers": [
    {
      "url": "https://api.exoapi.dev"
    }
  ],
  "tags": [
    {
      "name": "Barcode generator",
      "description": "The easiest QR code & barcode generator API 🤳"
    },
    {
      "name": "Content moderation",
      "description": "Scale faster with AI-powered content moderation 🛡️✨"
    },
    {
      "name": "HTML renderer",
      "description": "The simplest HTML rendering API 📄✨"
    },
    {
      "name": "Reverse geocoding",
      "description": "Affordable reverse geocoding for businesses 🗺️📍"
    },
    {
      "name": "Unit converter",
      "description": "The simplest unit & currency conversion API"
    }
  ],
  "paths": {
    "/barcode-generator": {
      "post": {
        "tags": [
          "Barcode generator"
        ],
        "description": "Generate high quality QR code & barcode images in a matter of seconds",
        "operationId": "barcode-generator-post",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "auspost",
                      "azteccode",
                      "azteccodecompact",
                      "aztecrune",
                      "bc412",
                      "channelcode",
                      "codablockf",
                      "code11",
                      "code128",
                      "code16k",
                      "code2of5",
                      "code32",
                      "code39",
                      "code39ext",
                      "code49",
                      "code93",
                      "code93ext",
                      "codeone",
                      "coop2of5",
                      "daft",
                      "databarexpanded",
                      "databarexpandedcomposite",
                      "databarexpandedstacked",
                      "databarexpandedstackedcomposite",
                      "databarlimited",
                      "databarlimitedcomposite",
                      "databaromni",
                      "databaromnicomposite",
                      "databarstacked",
                      "databarstackedcomposite",
                      "databarstackedomni",
                      "databarstackedomnicomposite",
                      "databartruncated",
                      "databartruncatedcomposite",
                      "datalogic2of5",
                      "datamatrix",
                      "datamatrixrectangular",
                      "datamatrixrectangularextension",
                      "dotcode",
                      "ean13",
                      "ean13composite",
                      "ean14",
                      "ean2",
                      "ean5",
                      "ean8",
                      "ean8composite",
                      "flattermarken",
                      "gs1-128",
                      "gs1-128composite",
                      "gs1-cc",
                      "gs1datamatrix",
                      "gs1datamatrixrectangular",
                      "gs1northamericancoupon",
                      "gs1qrcode",
                      "hanxin",
                      "hibcazteccode",
                      "hibccodablockf",
                      "hibccode128",
                      "hibccode39",
                      "hibcdatamatrix",
                      "hibcdatamatrixrectangular",
                      "hibcmicropdf417",
                      "hibcpdf417",
                      "hibcqrcode",
                      "iata2of5",
                      "identcode",
                      "industrial2of5",
                      "interleaved2of5",
                      "isbn",
                      "ismn",
                      "issn",
                      "itf14",
                      "japanpost",
                      "kix",
                      "leitcode",
                      "mailmark",
                      "matrix2of5",
                      "maxicode",
                      "micropdf417",
                      "microqrcode",
                      "msi",
                      "onecode",
                      "pdf417",
                      "pdf417compact",
                      "pharmacode",
                      "pharmacode2",
                      "planet",
                      "plessey",
                      "posicode",
                      "postnet",
                      "pzn",
                      "qrcode",
                      "rationalizedCodabar",
                      "raw",
                      "royalmail",
                      "sscc18",
                      "symbol",
                      "telepen",
                      "telepennumeric",
                      "ultracode",
                      "upca",
                      "upcacomposite",
                      "upce",
                      "upcecomposite"
                    ],
                    "examples": [
                      "qrcode",
                      "code128",
                      "isbn"
                    ],
                    "default": "qrcode",
                    "description": "Type of code"
                  },
                  "value": {
                    "type": "string",
                    "examples": [
                      "1234567890"
                    ],
                    "description": "Content to encode into the code"
                  },
                  "format": {
                    "type": "string",
                    "enum": [
                      "png",
                      "svg"
                    ],
                    "default": "png",
                    "description": "Output image format"
                  },
                  "width": {
                    "type": "integer",
                    "examples": [
                      256
                    ],
                    "default": 256,
                    "description": "Width of the PNG code image"
                  },
                  "height": {
                    "type": "integer",
                    "examples": [
                      256
                    ],
                    "description": "Height of the PNG code image"
                  },
                  "showText": {
                    "type": "boolean",
                    "default": true,
                    "description": "Display human-readable text under barcodes"
                  },
                  "fitWidth": {
                    "type": "boolean",
                    "default": false,
                    "description": "Stretch barcodes to exactly fit the `width`. Due to the nature of barcodes, where every bar's width is a multiple of the narrowest bar, stretching may result in slightly blurry images, which are more difficult for devices to scan."
                  },
                  "foregroundColor": {
                    "type": "string",
                    "default": "#000000",
                    "description": "Barcode color (hexadecimal format)"
                  },
                  "backgroundColor": {
                    "type": "string",
                    "default": "#ffffff",
                    "description": "Image background color (hexadecimal format)"
                  }
                },
                "required": [
                  "type",
                  "value"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "🟢 200 OK",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              },
              "image/svg+xml": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "🟡 400 Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Bad request"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "Invalid or missing 'value' parameter"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "400"
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "🟡 401 Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Unauthorized"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "🔍 Authorization token not found"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "401"
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "🟡 403 Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Forbidden"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "Your trial period has ended"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "403"
                      ]
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "🟡 429 Too many requests",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Too many requests"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "Too many requests"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "429"
                      ]
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "🔴 500 Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Internal server error"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "Internal server error"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "500"
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/content-moderation": {
      "get": {
        "tags": [
          "Content moderation"
        ],
        "description": "Automatically detect unwanted content and enforce your moderation rules",
        "operationId": "content-moderation-get",
        "parameters": [
          {
            "in": "query",
            "name": "text",
            "schema": {
              "type": "string",
              "examples": [
                "I love this restaurant, the view isn't nice but the food is always great!"
              ],
              "description": "Text content to moderate (500 characters maximum)"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "🟢 200 OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "safetyScore": {
                      "type": "number",
                      "description": "Score between 0 and 1 expressing how safe the content is",
                      "examples": [
                        0.9
                      ]
                    },
                    "reason": {
                      "type": "string",
                      "description": "Short explanation of the text moderation analysis",
                      "examples": [
                        "Positive sentiment with a minor complaint about the view."
                      ]
                    },
                    "hateSpeechScore": {
                      "type": "number",
                      "description": "Probability between 0 and 1 of the text containing hate speech",
                      "examples": [
                        0.08
                      ]
                    },
                    "dangerousContentScore": {
                      "type": "number",
                      "description": "Probability between 0 and 1 of the text containing dangerous elements",
                      "examples": [
                        0.16
                      ]
                    },
                    "harassmentScore": {
                      "type": "number",
                      "description": "Probability between 0 and 1 of the text containing harassment",
                      "examples": [
                        0.14
                      ]
                    },
                    "sexuallyExplicitScore": {
                      "type": "number",
                      "description": "Probability between 0 and 1 of the text containing sexually explicit language",
                      "examples": [
                        0.11
                      ]
                    },
                    "spamScore": {
                      "type": "number",
                      "description": "Probability between 0 and 1 of the text containing spam or clikbait content",
                      "examples": [
                        0.07
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "🟡 401 Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Unauthorized"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "🔍 Authorization token not found"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "401"
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "🟡 403 Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Forbidden"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "Your trial period has ended"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "403"
                      ]
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "🟡 429 Too many requests",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Too many requests"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "Too many requests"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "429"
                      ]
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "🔴 500 Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Internal server error"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "Internal server error"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "500"
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/html-renderer": {
      "post": {
        "tags": [
          "HTML renderer"
        ],
        "description": "Generate high-quality PDF documents or images from HTML",
        "operationId": "html-renderer-post",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "html": {
                    "type": "string",
                    "examples": [
                      "<p>Hello world!<p>"
                    ],
                    "description": "HTML content to render"
                  },
                  "format": {
                    "type": "string",
                    "enum": [
                      "pdf",
                      "png"
                    ],
                    "description": "Output format",
                    "default": "pdf"
                  },
                  "title": {
                    "type": "string",
                    "description": "Title of the generated PDF document or PNG image",
                    "examples": [
                      "My document"
                    ]
                  },
                  "imageWidth": {
                    "type": "integer",
                    "description": "PNG image width (in pixels)",
                    "default": 512,
                    "examples": [
                      256
                    ]
                  },
                  "imageHeight": {
                    "type": "integer",
                    "description": "PNG image height (in pixels). In not specified, the height will automatically adapt to the content",
                    "examples": [
                      256
                    ]
                  },
                  "pageSize": {
                    "type": "string",
                    "description": "Default page size of the generated PDF document",
                    "enum": [
                      "letter",
                      "legal",
                      "tabloid",
                      "ledger",
                      "a0",
                      "a1",
                      "a2",
                      "a3",
                      "a4",
                      "a5",
                      "a6"
                    ],
                    "default": "a4"
                  },
                  "pageWidth": {
                    "type": "string",
                    "examples": [
                      "256",
                      "100px"
                    ],
                    "description": "Explicit PDF width (in px, mm, in or cm)"
                  },
                  "pageHeight": {
                    "type": "string",
                    "examples": [
                      "256",
                      "4.5cm"
                    ],
                    "description": "Explicit PDF height (in px, mm, in or cm)"
                  },
                  "margin": {
                    "type": "string",
                    "examples": [
                      "1in"
                    ],
                    "description": "PDF page margin (in px, mm, in or cm)",
                    "default": "0"
                  },
                  "marginLeft": {
                    "type": "string",
                    "examples": [
                      "25mm"
                    ],
                    "description": "PDF left margin (in px, mm, in or cm)"
                  },
                  "marginRight": {
                    "type": "string",
                    "examples": [
                      "25mm"
                    ],
                    "description": "PDF right margin (in px, mm, in or cm)"
                  },
                  "marginTop": {
                    "type": "string",
                    "examples": [
                      "4.5cm"
                    ],
                    "description": "PDF top margin (in px, mm, in or cm)"
                  },
                  "marginBottom": {
                    "type": "string",
                    "examples": [
                      "4.5cm"
                    ],
                    "description": "PDF bottom margin (in px, mm, in or cm)"
                  },
                  "landscape": {
                    "type": "boolean",
                    "description": "PDF document orientation",
                    "default": false
                  },
                  "css": {
                    "type": "string",
                    "description": "Custom CSS style content",
                    "examples": [
                      "body { background-color: yellow; }"
                    ]
                  },
                  "header": {
                    "type": "string",
                    "description": "HTML page header content. Use special CSS classes to inject parameters: \"date\", \"pageNumber\", \"totalPages\"",
                    "examples": [
                      "<div style=\"background:grey; width:100%; height:30px; font-size:20px\">Page <span class=\"pageNumber\"></span> of <span class=\"totalPages\"></span></div>"
                    ]
                  },
                  "footer": {
                    "type": "string",
                    "description": "HTML page footer content. Use special CSS classes to inject parameters: \"date\", \"pageNumber\", \"totalPages\"",
                    "examples": [
                      "<div style=\"background:grey; width:100%; height:30px; font-size:20px\">Page <span class=\"pageNumber\"></span> of <span class=\"totalPages\"></span></div>"
                    ]
                  }
                },
                "required": [
                  "html"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "🟢 200 OK",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              },
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "description": "🟡 401 Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Unauthorized"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "🔍 Authorization token not found"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "401"
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "🟡 403 Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Forbidden"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "Your trial period has ended"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "403"
                      ]
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "🟡 429 Too many requests",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Too many requests"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "Too many requests"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "429"
                      ]
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "🔴 500 Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Internal server error"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "Internal server error"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "500"
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/reverse-geocoding": {
      "get": {
        "tags": [
          "Reverse geocoding"
        ],
        "description": "Effortlessly convert GPS coordinates to human-readable addresses",
        "operationId": "reverse-geocoding-get",
        "parameters": [
          {
            "in": "query",
            "name": "lat",
            "schema": {
              "type": "number",
              "description": "Latitude",
              "examples": [
                51.5237498111111
              ]
            },
            "required": true
          },
          {
            "in": "query",
            "name": "lon",
            "schema": {
              "type": "number",
              "description": "Longitude",
              "examples": [
                -0.1585443
              ]
            },
            "required": true
          },
          {
            "in": "query",
            "name": "locale",
            "schema": {
              "type": "string",
              "description": "BCP 47 language/country code",
              "examples": [
                "en",
                "en-US",
                "fr-FR",
                "pt-BR"
              ]
            },
            "required": false
          }
        ],
        "responses": {
          "200": {
            "description": "🟢 200 OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "lat": {
                      "type": "number",
                      "description": "Latitude",
                      "examples": [
                        51.5237498111111
                      ]
                    },
                    "lon": {
                      "type": "number",
                      "description": "Longitude",
                      "examples": [
                        -0.1585443
                      ]
                    },
                    "address": {
                      "type": "string",
                      "description": "Formatted address according to locale parameter",
                      "examples": [
                        "221B Baker Street, London NW1 6XE, United Kingdom"
                      ]
                    },
                    "houseNumber": {
                      "type": "string",
                      "description": "House number",
                      "examples": [
                        "221B"
                      ]
                    },
                    "street": {
                      "type": "string",
                      "description": "Street name",
                      "examples": [
                        "Baker Street"
                      ]
                    },
                    "postalCode": {
                      "type": "string",
                      "description": "Postal code",
                      "examples": [
                        "NW1 6XE"
                      ]
                    },
                    "city": {
                      "type": "string",
                      "description": "City name",
                      "examples": [
                        "London"
                      ]
                    },
                    "region": {
                      "type": "string",
                      "description": "Region/state name",
                      "examples": [
                        "England"
                      ]
                    },
                    "regionCode": {
                      "type": "string",
                      "description": "ISO3166-2 region/state code",
                      "examples": [
                        "GB-ENG"
                      ]
                    },
                    "country": {
                      "type": "string",
                      "description": "Country name",
                      "examples": [
                        "United Kingdom"
                      ]
                    },
                    "countryCode": {
                      "type": "string",
                      "description": "ISO 3166-1 alpha-2 country code",
                      "examples": [
                        "GB"
                      ]
                    },
                    "countryCode3": {
                      "type": "string",
                      "description": "ISO3166-1 alpha3 country code",
                      "examples": [
                        "GBR"
                      ]
                    },
                    "currency": {
                      "type": "string",
                      "description": "ISO 4217 currency code, if available",
                      "examples": [
                        "GBP"
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "🟡 401 Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Unauthorized"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "🔍 Authorization token not found"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "401"
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "🟡 403 Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Forbidden"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "Your trial period has ended"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "403"
                      ]
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "🟡 429 Too many requests",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Too many requests"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "Too many requests"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "429"
                      ]
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "🔴 500 Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Internal server error"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "Internal server error"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "500"
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/unit-converter": {
      "get": {
        "tags": [
          "Unit converter"
        ],
        "description": "Quickly convert between all different kinds of measurement units",
        "operationId": "unit-converter-get",
        "parameters": [
          {
            "in": "query",
            "name": "from",
            "schema": {
              "type": "string",
              "enum": [
                "m/s2",
                "'",
                "''",
                "deg",
                "gon",
                "rad",
                "rad/s",
                "[acr_us]",
                "[sft_i]",
                "[sin_i]",
                "[smi_us]",
                "[syd_i]",
                "ar",
                "cm2",
                "har",
                "km2",
                "m2",
                "mm2",
                "AUD",
                "BGN",
                "BRL",
                "CAD",
                "CHF",
                "CNY",
                "CZK",
                "DKK",
                "EUR",
                "GBP",
                "HKD",
                "HUF",
                "IDR",
                "ILS",
                "INR",
                "ISK",
                "JPY",
                "KRW",
                "MXN",
                "MYR",
                "NOK",
                "NZD",
                "PHP",
                "PLN",
                "RON",
                "SEK",
                "SGD",
                "THB",
                "TRY",
                "USD",
                "ZAR",
                "F",
                "C",
                "S",
                "A",
                "V",
                "Ohm",
                "[Btu_IT]",
                "J",
                "kW.h",
                "MJ",
                "kW.h/100km",
                "m/J",
                "W.h/km",
                "N",
                "%",
                "bpm",
                "Hz",
                "rpm",
                "[mi_i]/[gal_br]",
                "L/100km",
                "m/m3",
                "lx",
                "H",
                "[ft_i]",
                "[in_i]",
                "[mi_i]",
                "[nmi_i]",
                "[yd_i]",
                "cm",
                "dm",
                "km",
                "m",
                "mm",
                "g/km",
                "kg/m",
                "lm",
                "Wb",
                "T",
                "[lb_av]",
                "g",
                "kg",
                "t",
                "[HP_e]",
                "[HP_m]",
                "[HP_s]",
                "[HP]",
                "kW",
                "W",
                "Pa",
                "Bq",
                "[kn_i]",
                "km/h",
                "m/s",
                "[degF]",
                "Cel",
                "K",
                "a",
                "d",
                "h",
                "min",
                "mo",
                "s",
                "wk",
                "N.m",
                "[gal_br]",
                "[pk_br]",
                "L",
                "m3"
              ],
              "examples": [
                "km",
                "L/100km",
                "rad/s"
              ],
              "description": "Source unit"
            },
            "required": true
          },
          {
            "in": "query",
            "name": "to",
            "schema": {
              "type": "string",
              "enum": [
                "m/s2",
                "'",
                "''",
                "deg",
                "gon",
                "rad",
                "rad/s",
                "[acr_us]",
                "[sft_i]",
                "[sin_i]",
                "[smi_us]",
                "[syd_i]",
                "ar",
                "cm2",
                "har",
                "km2",
                "m2",
                "mm2",
                "AUD",
                "BGN",
                "BRL",
                "CAD",
                "CHF",
                "CNY",
                "CZK",
                "DKK",
                "EUR",
                "GBP",
                "HKD",
                "HUF",
                "IDR",
                "ILS",
                "INR",
                "ISK",
                "JPY",
                "KRW",
                "MXN",
                "MYR",
                "NOK",
                "NZD",
                "PHP",
                "PLN",
                "RON",
                "SEK",
                "SGD",
                "THB",
                "TRY",
                "USD",
                "ZAR",
                "F",
                "C",
                "S",
                "A",
                "V",
                "Ohm",
                "[Btu_IT]",
                "J",
                "kW.h",
                "MJ",
                "kW.h/100km",
                "m/J",
                "W.h/km",
                "N",
                "%",
                "bpm",
                "Hz",
                "rpm",
                "[mi_i]/[gal_br]",
                "L/100km",
                "m/m3",
                "lx",
                "H",
                "[ft_i]",
                "[in_i]",
                "[mi_i]",
                "[nmi_i]",
                "[yd_i]",
                "cm",
                "dm",
                "km",
                "m",
                "mm",
                "g/km",
                "kg/m",
                "lm",
                "Wb",
                "T",
                "[lb_av]",
                "g",
                "kg",
                "t",
                "[HP_e]",
                "[HP_m]",
                "[HP_s]",
                "[HP]",
                "kW",
                "W",
                "Pa",
                "Bq",
                "[kn_i]",
                "km/h",
                "m/s",
                "[degF]",
                "Cel",
                "K",
                "a",
                "d",
                "h",
                "min",
                "mo",
                "s",
                "wk",
                "N.m",
                "[gal_br]",
                "[pk_br]",
                "L",
                "m3"
              ],
              "examples": [
                "km",
                "L/100km",
                "rad/s"
              ],
              "description": "Target unit"
            },
            "required": true
          },
          {
            "in": "query",
            "name": "value",
            "schema": {
              "type": "number",
              "examples": [
                123.45
              ],
              "description": "Value to convert"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "🟢 200 OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "acceleration",
                        "angle",
                        "angularVelocity",
                        "area",
                        "currency",
                        "electricCapacitance",
                        "electricCharge",
                        "electricConductance",
                        "electricCurrent",
                        "electricPotential",
                        "electricResistance",
                        "energy",
                        "energyEfficiency",
                        "force",
                        "fraction",
                        "frequency",
                        "fuelEfficiency",
                        "illuminance",
                        "inductance",
                        "length",
                        "linearMassDensity",
                        "luminousFlux",
                        "magneticFlux",
                        "magneticFluxDensity",
                        "mass",
                        "power",
                        "pressure",
                        "radioactivity",
                        "speed",
                        "temperature",
                        "time",
                        "torque",
                        "volume"
                      ]
                    },
                    "from": {
                      "type": "string",
                      "enum": [
                        "m/s2",
                        "'",
                        "''",
                        "deg",
                        "gon",
                        "rad",
                        "rad/s",
                        "[acr_us]",
                        "[sft_i]",
                        "[sin_i]",
                        "[smi_us]",
                        "[syd_i]",
                        "ar",
                        "cm2",
                        "har",
                        "km2",
                        "m2",
                        "mm2",
                        "AUD",
                        "BGN",
                        "BRL",
                        "CAD",
                        "CHF",
                        "CNY",
                        "CZK",
                        "DKK",
                        "EUR",
                        "GBP",
                        "HKD",
                        "HUF",
                        "IDR",
                        "ILS",
                        "INR",
                        "ISK",
                        "JPY",
                        "KRW",
                        "MXN",
                        "MYR",
                        "NOK",
                        "NZD",
                        "PHP",
                        "PLN",
                        "RON",
                        "SEK",
                        "SGD",
                        "THB",
                        "TRY",
                        "USD",
                        "ZAR",
                        "F",
                        "C",
                        "S",
                        "A",
                        "V",
                        "Ohm",
                        "[Btu_IT]",
                        "J",
                        "kW.h",
                        "MJ",
                        "kW.h/100km",
                        "m/J",
                        "W.h/km",
                        "N",
                        "%",
                        "bpm",
                        "Hz",
                        "rpm",
                        "[mi_i]/[gal_br]",
                        "L/100km",
                        "m/m3",
                        "lx",
                        "H",
                        "[ft_i]",
                        "[in_i]",
                        "[mi_i]",
                        "[nmi_i]",
                        "[yd_i]",
                        "cm",
                        "dm",
                        "km",
                        "m",
                        "mm",
                        "g/km",
                        "kg/m",
                        "lm",
                        "Wb",
                        "T",
                        "[lb_av]",
                        "g",
                        "kg",
                        "t",
                        "[HP_e]",
                        "[HP_m]",
                        "[HP_s]",
                        "[HP]",
                        "kW",
                        "W",
                        "Pa",
                        "Bq",
                        "[kn_i]",
                        "km/h",
                        "m/s",
                        "[degF]",
                        "Cel",
                        "K",
                        "a",
                        "d",
                        "h",
                        "min",
                        "mo",
                        "s",
                        "wk",
                        "N.m",
                        "[gal_br]",
                        "[pk_br]",
                        "L",
                        "m3"
                      ],
                      "examples": [
                        "km",
                        "L/100km",
                        "rad/s"
                      ],
                      "description": "Source unit"
                    },
                    "to": {
                      "type": "string",
                      "enum": [
                        "m/s2",
                        "'",
                        "''",
                        "deg",
                        "gon",
                        "rad",
                        "rad/s",
                        "[acr_us]",
                        "[sft_i]",
                        "[sin_i]",
                        "[smi_us]",
                        "[syd_i]",
                        "ar",
                        "cm2",
                        "har",
                        "km2",
                        "m2",
                        "mm2",
                        "AUD",
                        "BGN",
                        "BRL",
                        "CAD",
                        "CHF",
                        "CNY",
                        "CZK",
                        "DKK",
                        "EUR",
                        "GBP",
                        "HKD",
                        "HUF",
                        "IDR",
                        "ILS",
                        "INR",
                        "ISK",
                        "JPY",
                        "KRW",
                        "MXN",
                        "MYR",
                        "NOK",
                        "NZD",
                        "PHP",
                        "PLN",
                        "RON",
                        "SEK",
                        "SGD",
                        "THB",
                        "TRY",
                        "USD",
                        "ZAR",
                        "F",
                        "C",
                        "S",
                        "A",
                        "V",
                        "Ohm",
                        "[Btu_IT]",
                        "J",
                        "kW.h",
                        "MJ",
                        "kW.h/100km",
                        "m/J",
                        "W.h/km",
                        "N",
                        "%",
                        "bpm",
                        "Hz",
                        "rpm",
                        "[mi_i]/[gal_br]",
                        "L/100km",
                        "m/m3",
                        "lx",
                        "H",
                        "[ft_i]",
                        "[in_i]",
                        "[mi_i]",
                        "[nmi_i]",
                        "[yd_i]",
                        "cm",
                        "dm",
                        "km",
                        "m",
                        "mm",
                        "g/km",
                        "kg/m",
                        "lm",
                        "Wb",
                        "T",
                        "[lb_av]",
                        "g",
                        "kg",
                        "t",
                        "[HP_e]",
                        "[HP_m]",
                        "[HP_s]",
                        "[HP]",
                        "kW",
                        "W",
                        "Pa",
                        "Bq",
                        "[kn_i]",
                        "km/h",
                        "m/s",
                        "[degF]",
                        "Cel",
                        "K",
                        "a",
                        "d",
                        "h",
                        "min",
                        "mo",
                        "s",
                        "wk",
                        "N.m",
                        "[gal_br]",
                        "[pk_br]",
                        "L",
                        "m3"
                      ],
                      "examples": [
                        "km",
                        "L/100km",
                        "rad/s"
                      ],
                      "description": "Target unit"
                    },
                    "value": {
                      "type": "number",
                      "examples": [
                        123.45
                      ],
                      "description": "Value to convert"
                    },
                    "result": {
                      "type": "number",
                      "description": "Result of the conversion"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "🟡 400 Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Bad request"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "Unit type mismatch: length != temperature"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "400"
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "🟡 401 Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Unauthorized"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "🔍 Authorization token not found"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "401"
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "🟡 403 Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Forbidden"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "Your trial period has ended"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "403"
                      ]
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "🟡 429 Too many requests",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Too many requests"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "Too many requests"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "429"
                      ]
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "🔴 500 Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Error type",
                      "examples": [
                        "Internal server error"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Error description",
                      "examples": [
                        "Internal server error"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "description": "Status code",
                      "examples": [
                        "500"
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}