{
  "openapi": "3.1.0",
  "info": {
    "title": "Unbotlab Humanizer and Detector API",
    "version": "1.0.0",
    "description": "Pro includes 10,000 Humanizer API and 20,000 Detector API words monthly, separate from 50,000 website words. Purchased Humanizer packs cost $10/10,000; Detector packs $3/10,000. Purchased words never expire. Paid checkout coming soon."
  },
  "servers": [
    {
      "url": "https://unbotlab.com"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "ub_live_..."
      }
    }
  },
  "paths": {
    "/api/v1/humanize": {
      "post": {
        "operationId": "humanize",
        "summary": "Humanize 30\u2013650 words",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 128
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "text"
                ],
                "properties": {
                  "text": {
                    "type": "string",
                    "maxLength": 20000
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result, usage and balances"
          },
          "400": {
            "description": "Invalid text"
          },
          "401": {
            "description": "Invalid key"
          },
          "402": {
            "description": "Insufficient words"
          },
          "403": {
            "description": "Scope/access denied"
          },
          "409": {
            "description": "Request pending or conflicting idempotency key"
          },
          "429": {
            "description": "Rate limited"
          },
          "503": {
            "description": "Processing unavailable; reservation refunded"
          }
        }
      }
    },
    "/api/v1/detect": {
      "post": {
        "operationId": "detect",
        "summary": "Detect 20\u20131500 words",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 128
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "text"
                ],
                "properties": {
                  "text": {
                    "type": "string",
                    "maxLength": 20000
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result, usage and balances"
          },
          "400": {
            "description": "Invalid text"
          },
          "401": {
            "description": "Invalid key"
          },
          "402": {
            "description": "Insufficient words"
          },
          "403": {
            "description": "Scope/access denied"
          },
          "409": {
            "description": "Request pending or conflicting idempotency key"
          },
          "429": {
            "description": "Rate limited"
          },
          "503": {
            "description": "Processing unavailable; reservation refunded"
          }
        }
      }
    },
    "/api/v1/balance": {
      "get": {
        "operationId": "getBalance",
        "summary": "Read separate API balances",
        "responses": {
          "200": {
            "description": "Monthly and non-expiring prepaid balances"
          },
          "401": {
            "description": "Invalid API key"
          }
        }
      }
    }
  }
}