openapi: 3.0.0 info: version: 0.1.0 title: mCaptcha/guard servers: - url: / paths: /api/v1/signup: post: summary: Registration endpoint operationId: registerUser tags: - user requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RegisterUser' example: username: 'testuser' password: 'mysuperlongandsecurepassword' email: 'testuser@example.com' responses: '200': description: Successful registration '400': description: >- Bad request: username contains profainity/blacklisted words or email not acceptable or password too long/short or duplicate username/password content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/Error' /api/v1/signin: post: summary: Login endpoint operationId: loginUser tags: - user - authentication requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/LoginUser' example: username: 'testuser' password: 'mysuperlongandsecurepassword' responses: '200': description: Successful authentication '401': description: 'authentication failed, wrong password' content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: username not found content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/Error' /api/v1/signout: post: security: - cookieAuth: [] summary: Signout endpoint operationId: signoutUser tags: - user - authentication responses: '200': description: OK /api/v1/account/delete: post: security: - cookieAuth: [] summary: Delete account operationId: deleteAccount tags: - user requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DeleteUser' example: password: 'mysuperlongandsecurepassword' responses: '200': description: OK '401': description: (cookie)authentication required or wrong password content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: username not found content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/Error' /api/v1/account/username/exists: post: summary: Check if username exists operationId: usernameExists tags: - user requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UserDetailCheck' example: val: 'testuser' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/UserDetailCheckRes' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/Error' /api/v1/account/email/exists: post: summary: Check if email exists operationId: emailExists tags: - user requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UserDetailCheck' example: val: 'testuser@example.com' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/UserDetailCheckRes' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/Error' /api/v1/meta/health: get: summary: Health check operationId: healthCheck tags: - meta - health responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Health' /api/v1/meta/build: get: summary: Get server binary build details operationId: buildDetails tags: - meta - build responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/BuildDetails' /api/v1/mcaptcha/domain/token/add: post: security: - cookieAuth: [] summary: Add token for registered domain operationId: addToken tags: - mcaptcha - domain - token requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MCaptchaID' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/MCaptchaDetails' '400': description: 'Bad request: Submited URI is not a URI or duplicate token name' content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: 'authentication failed' content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/Error' /api/v1/mcaptcha/domain/token/update: post: security: - cookieAuth: [] summary: Update token key operationId: updateTokenKey tags: - mcaptcha - domain - token requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MCaptchaID' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/MCaptchaDetails' '400': description: 'Bad request: Submited URI is not a URI or duplicate token name' content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: 'authentication failed' content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/Error' /api/v1/mcaptcha/domain/token/get: post: security: - cookieAuth: [] summary: Get token key operationId: getTokenKey tags: - mcaptcha - domain - token requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MCaptchaID' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/MCaptchaDetails' '400': description: 'Bad request: Submited URI is not a URI' content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: 'authentication failed' content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: token name not found content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/Error' /api/v1/mcaptcha/domain/token/delete: post: security: - cookieAuth: [] summary: Delete token from mcaptcha operationId: deleteToken tags: - mcaptcha - domain - token requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MCaptchaID' responses: '200': description: OK '401': description: 'authentication failed' content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/Error' /api/v1/mcaptcha/domain/token/levels/add: post: security: - cookieAuth: [] summary: Add levels to a token operationId: addTokenLevels tags: - mcaptcha - domain - token - levels requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AddLevels' responses: '200': description: OK '400': description: 'duplicate visitor count or difficulty_factor is zero or difficulty_factor decreases with increase in visitor count' content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: 'authentication failed' content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/Error' /api/v1/mcaptcha/domain/token/levels/update: post: security: - cookieAuth: [] summary: Update levels of a token operationId: updateTokenLevels tags: - mcaptcha - domain - token - levels requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AddLevels' responses: '200': description: OK '400': description: 'duplicate visitor count or difficulty_factor is zero or difficulty_factor decreases with increase in visitor count' content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: 'authentication failed' content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/Error' /api/v1/mcaptcha/domain/token/levels/delete: post: security: - cookieAuth: [] tags: - mcaptcha - domain - token - levels summary: Delete levels of a token operationId: deleteTokenLevels requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AddLevels' responses: '200': description: OK '401': description: (cookie)authentication required or wrong password content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/Error' /api/v1/mcaptcha/domain/token/levels/get: post: security: - cookieAuth: [] tags: - mcaptcha - domain - token - levels summary: Get levels of a token operationId: getTokenLevels requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AddLevels' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Levels' '401': description: (cookie)authentication required or wrong password content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/Error' /api/v1/mcaptcha/domain/token/token/get: post: security: - cookieAuth: [] tags: - mcaptcha - domain - token - levels - duration summary: Get duration of a token operationId: getTokenDuration requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GetDuration' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Duration' '401': description: (cookie)authentication required or wrong password content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/Error' /api/v1/mcaptcha/domain/token/token/update: post: security: - cookieAuth: [] tags: - mcaptcha - domain - token - levels - duration summary: update duration of a token operationId: updateTokenDuration requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateDuration' responses: '200': description: OK '400': description: 'Bad request: Duration must be greater than 0' '401': description: (cookie)authentication required or wrong password content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/Error' components: schemas: RegisterUser: type: object required: - username - password - email properties: username: type: string email: type: string password: type: string format: password LoginUser: type: object required: - username - password properties: username: type: string password: type: string format: password DeleteUser: type: object required: - password properties: password: type: string format: password Error: type: object required: - error properties: error: type: string User: type: object required: - id - name properties: id: type: integer format: int64 name: type: string UserDetailCheck: type: object required: - val properties: val: type: string Health: type: object required: - db properties: db: type: boolean UserDetailCheckRes: type: object required: - exists properties: val: type: boolean BuildDetails: type: object required: - version - git_commit_hash properties: version: type: string git_commit_hash: type: string AddDomain: type: object required: - name properties: name: type: string DomainVerificationChallenge: type: object required: - verification_challenge properties: verification_challenge: type: string MCaptchaID: type: object required: - name - domain properties: name: type: string domain: type: string MCaptchaDetails: type: object required: - name - key properties: name: type: string key: type: string Level: type: object required: - visitor_threshold - difficulty_factor properties: visitor_threshold: type: number minimum: 1 maximum: 2147483647 difficulty_factor: type: number minimum: 1 GetLevels: type: object required: - token properties: token: type: string Levels: type: array items: $ref: '#/components/schemas/Level' AddLevels: type: object required: - name - levels properties: name: type: string levels: type: array items: $ref: '#/components/schemas/Level' GetDuration: type: object required: - token properties: token: type: string Duration: type: object required: - duration properties: duration: type: number minimum: 1 maximum: 2147483647 UpdateDuration: type: object required: - duration - token_name properties: token_name: type: string duration: type: number minimum: 1 maximum: 2147483647 securitySchemes: cookieAuth: type: apiKey in: cookie name: Authorization