OpenAPI Specification


Relationship Graph

AutoBalter automatically parses the OpenAPI specification and determines relationships between APIs. This information is leveraged for all load-testing and fuzzing operations.

Raw Input

The Raw OpenAPI input can be synced with a Git repository or your CI/CD setup, or uploaded manually.

{
    "openapi": "3.0.1",
    "info": {
        "title": "Demo Forum",
        "description": "An API demo for a basic forum.",
        "version": "1.0.0",
        "termsOfService": "Coming soon",
        "license": {
            "name": "GNU GPLv3 ",
            "url": "https://spdx.org/licenses/GPL-3.0-or-later.html"
        }
    },
    "servers": [
        {
            "url": "https://beta.example.com/v1/api",
            "description": "The API beta server"
        }
    ],
    "paths": {
        "/users/login": {
            "post": {
                "tags": [
                    "Users"
                ],
                "description": "Login as a given user. Use either the `username` or `user_id`. Returns the API token for using authenticated APIs (such as creating a story or comment).",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UserLogin"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "user_id": {
                                            "type": "number"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/users/new": {
            "post": {
                "tags": [
                    "Users"
                ],
                "description": "Create a new user with the given `username` and `password`. Remember your credentials, as you will need them to login!",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/NewUser"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "user_id": {
                                            "type": "number"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/stories": {
            "get": {
                "tags": [
                    "Stories"
                ],
                "description": "List stories. Note: Currently only supports listing by newest.",
                "parameters": [
                    {
                        "name": "next_token",
                        "in": "path",
                        "description": "Optional next_token for fetching the next page of comments",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "stories": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Story"
                                            }
                                        },
                                        "next_token": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "tags": [
                    "Stories"
                ],
                "description": "Submit a new story to be viewed by others.",
                "security": [
                    { "BearerAuth": [] }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/NewStory"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "story_id": {
                                            "type": "number"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/stories/{story_id}": {
            "get": {
                "tags": [
                    "Stories"
                ],
                "description": "Get a specific story by story_id.",
                "parameters": [
                    {
                        "name": "story_id",
                        "in": "path",
                        "description": "ID of the story to get",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Story"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/stories/{story_id}/comments": {
            "post": {
                "tags": [
                    "Comments"
                ],
                "description": "Submit a comment to the story. This can either be a new top-level comment, or a response to another comment (set the parent_id in that case)",
                "security": [
                    { "BearerAuth": [] }
                ],
                "parameters": [
                    {
                        "name": "story_id",
                        "in": "path",
                        "description": "ID of the story to get",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/NewComment"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "comment_id": {
                                            "type": "number"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
    },
    "components": {
        "schemas": {
            "Story": {
                "required": [
                    "id", "author_id", "created_at", "title"
                ],
                "type": "object",
                "properties": {
                    "id": {
                        "type": "number"
                    },
                    "author_id": {
                        "type": "number"
                    },
                    "created_at": {
                        "type": "string"
                    },
                    "title": {
                        "type": "string"
                    },
                    "url": {
                        "type": "string",
                        "nullable": true
                    },
                    "text": {
                        "type": "string",
                        "nullable": true
                    }
                }
            },
            "Comment": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "number"
                    },
                    "author_id": {
                        "type": "number"
                    },
                    "created_at": {
                        "type": "string"
                    },
                    "text": {
                        "type": "string"
                    },
                    "parent_id": {
                        "type": "number",
                        "nullable": true
                    }
                }
            },
            "NewStory": {
                "type": "object",
                "required": [
                    "title"
                ],
                "properties": {
                    "title": {
                        "type": "string",
                        "example": "Some Title"
                    },
                    "url": {
                        "type": "string",
                        "nullable": true,
                        "example": "http://example.com"
                    },
                    "text": {
                        "type": "string",
                        "nullable": true,
                        "example": "Some body of text"
                    }
                }
            },
            "NewComment": {
                "type": "object",
                "required": [
                    "text"
                ],
                "properties": {
                    "text": {
                        "type": "string",
                        "example": "Here is an example comment!"
                    },
                    "parent_id": {
                        "type": "number",
                        "example": 23,
                        "nullable": true
                    }
                }
            },
            "NewUser": {
                "type": "object",
                "required": [
                    "username",
                    "password"
                ],
                "properties": {
                    "username": {
                        "type": "string"
                    },
                    "password": {
                        "type": "string"
                    }
                }
            },
            "UserLogin": {
                "type": "object",
                "required": [
                    "password",
                ],
                "properties": {
                    "username": {
                        "type": "string",
                        "nullable": true,
                        "example": "TestUser"
                    },
                    "user_id": {
                        "type": "number",
                        "nullable": true,
                        "example": null
                    },
                    "password": {
                        "type": "string",
                        "example": "im-a-password"
                    }
                }
            }
        },
        "securitySchemes": {
            "BearerAuth": {
                "type": "http",
                "description": "JWT Authorizations header using Bearer scheme.",
                "scheme": "bearer",
                "bearerFormat": "JWT"
            }
        }
    }
}