{
  "openapi": "3.0.0",
  "info": {
    "title": "Salamoonder API",
    "description": "Captcha solving API",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://salamoonder.com/api",
      "description": "Salamoonder API server"
    }
  ],
  "paths": {
    "/createTask": {
      "post": {
        "summary": "Create captcha solving task",
        "description": "Creates a new captcha solving task and returns a task ID. This example uses KasadaCaptchaSolver but is not limited to this task.",
        "operationId": "createTask",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "api_key",
                  "task"
                ],
                "properties": {
                  "api_key": {
                    "type": "string",
                    "description": "Your Salamoonder API key",
                    "example": "sr-xxxx-xxxx-xxxx"
                  },
                  "task": {
                    "type": "object",
                    "description": "Task configuration. Structure varies by task type.",
                    "required": [
                      "type"
                    ],
                    "properties": {
                      "type": {
                        "type": "string",
                        "description": "The type of captcha task to solve"
                      }
                    },
                    "additionalProperties": true
                  }
                }
              },
              "examples": {
                "kasada": {
                  "summary": "Kasada Task",
                  "value": {
                    "api_key": "sr-xxxx-xxxx-xxxx",
                    "task": {
                      "type": "KasadaCaptchaSolver",
                      "pjs": "https://www.nike.com/149e9513-01fa-4fb0-aad4-566afd725d1b/2d206a39-8ed7-437e-a3be-862e0f06eea3/p.js",
                      "cdOnly": "true"
                    }
                  }
                },
                "reese84": {
                  "summary": "Incapsula Reese84",
                  "value": {
                    "api_key": "sr-xxxx-xxxx-xxxx",
                    "task": {
                      "type": "IncapsulaReese84Solver",
                      "website": "https://www.pokemoncenter.com/",
                      "submit_payload": true,
                      "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36"
                    }
                  }
                },
                "utmvc": {
                  "summary": "Incapsula UTMVC",
                  "value": {
                    "api_key": "sr-xxxx-xxxx-xxxx",
                    "task": {
                      "type": "IncapsulaUTMVCSolver",
                      "website": "https://group.accor.com/",
                      "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36"
                    }
                  }
                },
                "twitch_integrity": {
                  "summary": "Twitch Integrity",
                  "value": {
                    "api_key": "sr-xxxx-xxxx-xxxx",
                    "task": {
                      "type": "Twitch_PublicIntegrity",
                      "access_token": "your_twitch_oauth_token",
                      "device_id": "optional_device_id",
                      "client_id": "optional_client_id"
                    }
                  }
                },
                "twitch_scraper": {
                  "summary": "Twitch Scraper",
                  "value": {
                    "api_key": "sr-xxxx-xxxx-xxxx",
                    "task": {
                      "type": "Twitch_Scraper"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Task created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error_code": {
                      "type": "integer",
                      "description": "Error code (0 = success, 1 = error)",
                      "example": 0
                    },
                    "error_description": {
                      "type": "string",
                      "description": "Error description (empty on success)",
                      "example": ""
                    },
                    "taskId": {
                      "type": "string",
                      "description": "Unique task identifier",
                      "example": "118b941e-c035-4429-8ec3-18d5d19ccf9b"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error_code": {
                      "type": "integer",
                      "description": "Error code",
                      "example": 1
                    },
                    "error_description": {
                      "type": "string",
                      "description": "Error message"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/getTaskResult": {
      "post": {
        "summary": "Get task result",
        "description": "Retrieves the solution for a previously created task using its task ID. Poll this endpoint until status is 'ready'.",
        "operationId": "getTaskResult",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "api_key",
                  "taskId"
                ],
                "properties": {
                  "api_key": {
                    "type": "string",
                    "description": "Your Salamoonder API key",
                    "example": "sr-xxxx-xxxx-xxxx"
                  },
                  "taskId": {
                    "type": "string",
                    "description": "Task ID returned from createTask",
                    "example": "118b941e-c035-4429-8ec3-18d5d19ccf9b"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Task result retrieved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "errorId": {
                      "type": "integer",
                      "description": "Error ID (0 = success, 1 = error)",
                      "example": 0
                    },
                    "solution": {
                      "type": "object",
                      "description": "Solution data. Structure varies by task type. Contains the solved captcha tokens/headers.",
                      "additionalProperties": true
                    },
                    "status": {
                      "type": "string",
                      "description": "Task status. Poll until 'ready'.",
                      "enum": [
                        "ready",
                        "processing"
                      ],
                      "example": "ready"
                    }
                  }
                },
                "examples": {
                  "utmvc_ready": {
                    "summary": "UTMVC Solution Ready",
                    "value": {
                      "errorId": 0,
                      "solution": "<dict>",
                      "status": "ready"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error_code": {
                      "type": "integer",
                      "description": "Error code",
                      "example": 1
                    },
                    "error_description": {
                      "type": "string",
                      "description": "Error message",
                      "example": "Invalid taskId"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/getBalance": {
      "post": {
        "summary": "Get account balance",
        "description": "Retrieves your current account balance. This uses the createTask endpoint with type 'getBalance' and returns the wallet balance immediately.",
        "operationId": "getBalance",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "api_key",
                ],
                "properties": {
                  "api_key": {
                    "type": "string",
                    "description": "Your Salamoonder API key",
                    "example": "sr-xxxx-xxxx-xxxx"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Balance retrieved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error_code": {
                      "type": "integer",
                      "description": "Error code (0 = success, 1 = error)",
                      "example": 0
                    },
                    "error_description": {
                      "type": "string",
                      "description": "Error description (empty on success)",
                      "example": ""
                    },
                    "wallet": {
                      "type": "string",
                      "description": "Current account balance",
                      "example": "499.81070"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error_code": {
                      "type": "integer",
                      "description": "Error code",
                      "example": 1
                    },
                    "error_description": {
                      "type": "string",
                      "description": "Error message"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}