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"
}
}
}
}