kutt/docs/api/api.js

633 lines
13 KiB
JavaScript
Raw Normal View History

2024-09-17 14:08:14 +03:30
const p = require("../../package.json");
module.exports = {
openapi: "3.0.0",
info: {
title: "Kutt.it",
description: "API reference for [http://kutt.it](http://kutt.it).\n",
version: p.version
},
servers: [
{
url: "https://kutt.it/api/v2"
}
],
tags: [
{
name: "health"
},
{
name: "links"
},
{
name: "domains"
},
{
name: "users"
}
],
paths: {
"/health": {
get: {
tags: ["health"],
summary: "API health",
responses: {
"200": {
description: "Health",
content: {
"text/html": {
example: "OK"
}
}
}
}
}
},
"/links": {
get: {
tags: ["links"],
description: "Get list of links",
parameters: [
{
name: "limit",
in: "query",
description: "Limit",
required: false,
style: "form",
explode: true,
schema: {
type: "number",
example: 10
}
},
{
name: "skip",
in: "query",
description: "Skip",
required: false,
style: "form",
explode: true,
schema: {
type: "number",
example: 0
}
},
{
name: "all",
in: "query",
description: "All links (ADMIN only)",
required: false,
style: "form",
explode: true,
schema: {
type: "boolean",
example: false
}
}
],
responses: {
"200": {
description: "List of links",
content: {
"application/json": {
schema: {
$ref: "#/components/schemas/inline_response_200"
}
}
}
}
},
security: [
{
APIKeyAuth: []
}
]
},
post: {
tags: ["links"],
description: "Create a short link",
requestBody: {
content: {
"application/json": {
schema: {
$ref: "#/components/schemas/body"
}
}
}
},
responses: {
"200": {
description: "Created link",
content: {
"application/json": {
schema: {
$ref: "#/components/schemas/Link"
}
}
}
}
},
security: [
{
APIKeyAuth: []
}
]
}
},
"/links/{id}": {
delete: {
tags: ["links"],
description: "Delete a link",
parameters: [
{
name: "id",
in: "path",
required: true,
style: "simple",
explode: false,
schema: {
type: "string",
format: "uuid"
}
}
],
responses: {
"200": {
description: "Deleted link successfully",
content: {
"application/json": {
schema: {
$ref: "#/components/schemas/inline_response_200_1"
}
}
}
}
},
security: [
{
APIKeyAuth: []
}
]
},
patch: {
tags: ["links"],
description: "Update a link",
parameters: [
{
name: "id",
in: "path",
required: true,
style: "simple",
explode: false,
schema: {
type: "string",
format: "uuid"
}
}
],
requestBody: {
content: {
"application/json": {
schema: {
$ref: "#/components/schemas/body_1"
}
}
}
},
responses: {
"200": {
description: "Updated link successfully",
content: {
"application/json": {
schema: {
$ref: "#/components/schemas/Link"
}
}
}
}
},
security: [
{
APIKeyAuth: []
}
]
}
},
"/links/{id}/stats": {
get: {
tags: ["links"],
description: "Get link stats",
parameters: [
{
name: "id",
in: "path",
required: true,
style: "simple",
explode: false,
schema: {
type: "string",
format: "uuid"
}
}
],
responses: {
"200": {
description: "Link stats",
content: {
"application/json": {
schema: {
$ref: "#/components/schemas/Stats"
}
}
}
}
},
security: [
{
APIKeyAuth: []
}
]
}
},
"/domains": {
post: {
tags: ["domains"],
description: "Create a domain",
requestBody: {
content: {
"application/json": {
schema: {
$ref: "#/components/schemas/body_2"
}
}
}
},
responses: {
"200": {
description: "Created domain",
content: {
"application/json": {
schema: {
$ref: "#/components/schemas/Domain"
}
}
}
}
},
security: [
{
APIKeyAuth: []
}
]
}
},
"/domains/{id}": {
delete: {
tags: ["domains"],
description: "Delete a domain",
parameters: [
{
name: "id",
in: "path",
required: true,
style: "simple",
explode: false,
schema: {
type: "string",
format: "uuid"
}
}
],
responses: {
"200": {
description: "Deleted domain successfully",
content: {
"application/json": {
schema: {
$ref: "#/components/schemas/inline_response_200_1"
}
}
}
}
},
security: [
{
APIKeyAuth: []
}
]
}
},
"/users": {
get: {
tags: ["users"],
description: "Get user info",
responses: {
"200": {
description: "User info",
content: {
"application/json": {
schema: {
$ref: "#/components/schemas/User"
}
}
}
}
},
security: [
{
APIKeyAuth: []
}
]
}
}
},
components: {
schemas: {
Link: {
type: "object",
properties: {
address: {
type: "string"
},
banned: {
type: "boolean",
default: false
},
created_at: {
type: "string",
format: "date-time"
},
id: {
type: "string",
format: "uuid"
},
link: {
type: "string"
},
password: {
type: "boolean",
default: false
},
target: {
type: "string"
},
description: {
type: "string"
},
updated_at: {
type: "string",
format: "date-time"
},
visit_count: {
type: "number"
}
}
},
Domain: {
type: "object",
properties: {
address: {
type: "string"
},
banned: {
type: "boolean",
default: false
},
created_at: {
type: "string",
format: "date-time"
},
id: {
type: "string",
format: "uuid"
},
homepage: {
type: "string"
},
updated_at: {
type: "string",
format: "date-time"
}
}
},
User: {
type: "object",
properties: {
apikey: {
type: "string"
},
email: {
type: "string"
},
domains: {
type: "array",
items: {
$ref: "#/components/schemas/Domain"
}
}
}
},
StatsItem: {
type: "object",
properties: {
stats: {
$ref: "#/components/schemas/StatsItem_stats"
},
views: {
type: "array",
items: {
type: "number"
}
}
}
},
Stats: {
type: "object",
properties: {
lastDay: {
$ref: "#/components/schemas/StatsItem"
},
lastMonth: {
$ref: "#/components/schemas/StatsItem"
},
lastWeek: {
$ref: "#/components/schemas/StatsItem"
},
lastYear: {
$ref: "#/components/schemas/StatsItem"
},
updatedAt: {
type: "string"
},
address: {
type: "string"
},
banned: {
type: "boolean",
default: false
},
created_at: {
type: "string",
format: "date-time"
},
id: {
type: "string",
format: "uuid"
},
link: {
type: "string"
},
password: {
type: "boolean",
default: false
},
target: {
type: "string"
},
updated_at: {
type: "string",
format: "date-time"
},
visit_count: {
type: "number"
}
}
},
inline_response_200: {
properties: {
limit: {
type: "number",
default: 10
},
skip: {
type: "number",
default: 0
},
total: {
type: "number",
default: 0
},
data: {
type: "array",
items: {
$ref: "#/components/schemas/Link"
}
}
}
},
body: {
required: ["target"],
properties: {
target: {
type: "string"
},
description: {
type: "string"
},
expire_in: {
type: "string",
example: "2 minutes/hours/days"
},
password: {
type: "string"
},
customurl: {
type: "string"
},
reuse: {
type: "boolean",
default: false
},
domain: {
type: "string"
}
}
},
inline_response_200_1: {
properties: {
message: {
type: "string"
}
}
},
body_1: {
required: ["target", "address"],
properties: {
target: {
type: "string"
},
address: {
type: "string"
},
description: {
type: "string"
},
expire_in: {
type: "string",
example: "2 minutes/hours/days"
}
}
},
body_2: {
required: ["address"],
properties: {
address: {
type: "string"
},
homepage: {
type: "string"
}
}
},
StatsItem_stats_browser: {
type: "object",
properties: {
name: {
type: "string"
},
value: {
type: "number"
}
}
},
StatsItem_stats: {
type: "object",
properties: {
browser: {
type: "array",
items: {
$ref: "#/components/schemas/StatsItem_stats_browser"
}
},
os: {
type: "array",
items: {
$ref: "#/components/schemas/StatsItem_stats_browser"
}
},
country: {
type: "array",
items: {
$ref: "#/components/schemas/StatsItem_stats_browser"
}
},
referrer: {
type: "array",
items: {
$ref: "#/components/schemas/StatsItem_stats_browser"
}
}
}
}
},
securitySchemes: {
APIKeyAuth: {
type: "apiKey",
name: "X-API-KEY",
in: "header"
}
}
}
};