asg-server/api/swagger.json
2024-03-18 21:25:16 +07:00

726 lines
25 KiB
JSON

{
"schemes": [
"https"
],
"swagger": "2.0",
"info": {
"description": "End-user authentication key",
"title": "SMS Gateway - API",
"contact": {
"name": "Aleksandr Soloshenko",
"email": "i@capcom.me"
},
"version": "1.0.0"
},
"host": "sms.capcom.me",
"basePath": "/api",
"paths": {
"/3rdparty/v1/device": {
"get": {
"security": [
{
"ApiAuth": []
}
],
"description": "Returns list of registered devices",
"produces": [
"application/json"
],
"tags": [
"User"
],
"summary": "List devices",
"responses": {
"200": {
"description": "Device list",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/smsgateway.Device"
}
}
},
"400": {
"description": "Invalid request",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
},
"500": {
"description": "Internal server error",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
}
}
}
},
"/3rdparty/v1/message": {
"get": {
"security": [
{
"ApiAuth": []
}
],
"description": "Returns message state by ID",
"produces": [
"application/json"
],
"tags": [
"User",
"Messages"
],
"summary": "Get message state",
"parameters": [
{
"type": "string",
"description": "Message ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "Message state",
"schema": {
"$ref": "#/definitions/smsgateway.MessageState"
}
},
"400": {
"description": "Invalid request",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
},
"500": {
"description": "Internal server error",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
}
}
},
"post": {
"security": [
{
"ApiAuth": []
}
],
"description": "Enqueues message for sending. If ID is not specified, it will be generated",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"User",
"Messages"
],
"summary": "Enqueue message",
"parameters": [
{
"type": "boolean",
"description": "Skip phone validation",
"name": "skipPhoneValidation",
"in": "query"
},
{
"description": "Send message request",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/smsgateway.Message"
}
}
],
"responses": {
"202": {
"description": "Message enqueued",
"schema": {
"$ref": "#/definitions/smsgateway.MessageState"
},
"headers": {
"Location": {
"type": "string",
"description": "Get message state URL"
}
}
},
"400": {
"description": "Invalid request",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
},
"500": {
"description": "Internal server error",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
}
}
}
},
"/mobile/v1/device": {
"post": {
"description": "Registers new device and returns credentials",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Device"
],
"summary": "Register device",
"parameters": [
{
"description": "Device registration request",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/smsgateway.MobileRegisterRequest"
}
}
],
"responses": {
"201": {
"description": "Device registered",
"schema": {
"$ref": "#/definitions/smsgateway.MobileRegisterResponse"
}
},
"400": {
"description": "Invalid request",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
},
"401": {
"description": "Unauthorized (private mode only)",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
},
"429": {
"description": "Too many requests",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
},
"500": {
"description": "Internal server error",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
}
}
},
"patch": {
"security": [
{
"MobileToken": []
}
],
"description": "Updates push token for device",
"consumes": [
"application/json"
],
"tags": [
"Device"
],
"summary": "Update device",
"parameters": [
{
"description": "Device update request",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/smsgateway.MobileUpdateRequest"
}
}
],
"responses": {
"204": {
"description": "Successfully updated"
},
"400": {
"description": "Invalid request",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
},
"403": {
"description": "Forbidden (wrong device ID)",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
},
"500": {
"description": "Internal server error",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
}
}
}
},
"/mobile/v1/message": {
"get": {
"security": [
{
"MobileToken": []
}
],
"description": "Returns list of pending messages",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Device",
"Messages"
],
"summary": "Get messages for sending",
"responses": {
"200": {
"description": "List of pending messages",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/smsgateway.Message"
}
}
},
"500": {
"description": "Internal server error",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
}
}
},
"patch": {
"security": [
{
"MobileToken": []
}
],
"description": "Updates message state",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Device",
"Messages"
],
"summary": "Update message state",
"parameters": [
{
"description": "New message state",
"name": "request",
"in": "body",
"required": true,
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/smsgateway.MessageState"
}
}
}
],
"responses": {
"204": {
"description": "Successfully updated"
},
"400": {
"description": "Invalid request",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
},
"500": {
"description": "Internal server error",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
}
}
}
},
"/upstream/v1/push": {
"post": {
"description": "Enqueues notifications for sending to devices",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Device",
"Upstream"
],
"summary": "Send push notifications",
"parameters": [
{
"description": "Push request",
"name": "request",
"in": "body",
"required": true,
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/smsgateway.PushNotification"
}
}
}
],
"responses": {
"202": {
"description": "Notification enqueued"
},
"400": {
"description": "Invalid request",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
},
"429": {
"description": "Too many requests",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
},
"500": {
"description": "Internal server error",
"schema": {
"$ref": "#/definitions/smsgateway.ErrorResponse"
}
}
}
}
}
},
"definitions": {
"smsgateway.Device": {
"type": "object",
"properties": {
"createdAt": {
"description": "Created at (read only)",
"type": "string",
"example": "2020-01-01T00:00:00Z"
},
"deletedAt": {
"description": "Deleted at (read only)",
"type": "string",
"example": "2020-01-01T00:00:00Z"
},
"id": {
"description": "ID",
"type": "string",
"example": "PyDmBQZZXYmyxMwED8Fzy"
},
"lastSeen": {
"description": "Last seen at (read only)",
"type": "string",
"example": "2020-01-01T00:00:00Z"
},
"name": {
"description": "Name",
"type": "string",
"example": "My Device"
},
"updatedAt": {
"description": "Updated at (read only)",
"type": "string",
"example": "2020-01-01T00:00:00Z"
}
}
},
"smsgateway.ErrorResponse": {
"type": "object",
"properties": {
"code": {
"description": "Error code",
"type": "integer"
},
"data": {
"description": "Error context"
},
"message": {
"description": "Error message",
"type": "string",
"example": "An error occurred"
}
}
},
"smsgateway.Message": {
"type": "object",
"required": [
"message",
"phoneNumbers"
],
"properties": {
"id": {
"description": "ID (if not set - will be generated)",
"type": "string",
"maxLength": 36,
"example": "PyDmBQZZXYmyxMwED8Fzy"
},
"isEncrypted": {
"description": "Is encrypted",
"type": "boolean",
"example": true
},
"message": {
"description": "Content",
"type": "string",
"maxLength": 65535,
"example": "Hello World!"
},
"phoneNumbers": {
"description": "Recipients (phone numbers)",
"type": "array",
"maxItems": 100,
"minItems": 1,
"items": {
"type": "string"
},
"example": [
"79990001234"
]
},
"simNumber": {
"description": "SIM card number (1-3)",
"type": "integer",
"maximum": 3,
"example": 1
},
"ttl": {
"description": "Time to live in seconds (conflicts with `validUntil`)",
"type": "integer",
"minimum": 5,
"example": 86400
},
"validUntil": {
"description": "Valid until (conflicts with `ttl`)",
"type": "string",
"example": "2020-01-01T00:00:00Z"
},
"withDeliveryReport": {
"description": "With delivery report",
"type": "boolean",
"example": true
}
}
},
"smsgateway.MessageState": {
"type": "object",
"required": [
"recipients",
"state"
],
"properties": {
"id": {
"description": "Message ID",
"type": "string",
"maxLength": 36,
"example": "PyDmBQZZXYmyxMwED8Fzy"
},
"isEncrypted": {
"description": "Encrypted",
"type": "boolean",
"example": false
},
"isHashed": {
"description": "Hashed",
"type": "boolean",
"example": false
},
"recipients": {
"description": "Recipients states",
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/definitions/smsgateway.RecipientState"
}
},
"state": {
"description": "State",
"allOf": [
{
"$ref": "#/definitions/smsgateway.ProcessState"
}
],
"example": "Pending"
}
}
},
"smsgateway.MobileRegisterRequest": {
"type": "object",
"properties": {
"name": {
"description": "Device name",
"type": "string",
"maxLength": 128,
"example": "Android Phone"
},
"pushToken": {
"description": "FCM token",
"type": "string",
"maxLength": 256,
"example": "gHz-T6NezDlOfllr7F-Be"
}
}
},
"smsgateway.MobileRegisterResponse": {
"type": "object",
"properties": {
"id": {
"description": "New device ID",
"type": "string",
"example": "QslD_GefqiYV6RQXdkM6V"
},
"login": {
"description": "User login",
"type": "string",
"example": "VQ4GII"
},
"password": {
"description": "User password",
"type": "string",
"example": "cp2pydvxd2zwpx"
},
"token": {
"description": "Device access token",
"type": "string",
"example": "bP0ZdK6rC6hCYZSjzmqhQ"
}
}
},
"smsgateway.MobileUpdateRequest": {
"type": "object",
"properties": {
"id": {
"description": "ID",
"type": "string",
"example": "QslD_GefqiYV6RQXdkM6V"
},
"pushToken": {
"description": "FCM token",
"type": "string",
"maxLength": 256,
"example": "gHz-T6NezDlOfllr7F-Be"
}
}
},
"smsgateway.ProcessState": {
"type": "string",
"enum": [
"Pending",
"Processed",
"Sent",
"Delivered",
"Failed"
],
"x-enum-comments": {
"MessageStateDelivered": "Delivered",
"MessageStateFailed": "Failed",
"MessageStatePending": "Pending",
"MessageStateProcessed": "Processed (received by device)",
"MessageStateSent": "Sent"
},
"x-enum-varnames": [
"MessageStatePending",
"MessageStateProcessed",
"MessageStateSent",
"MessageStateDelivered",
"MessageStateFailed"
]
},
"smsgateway.PushNotification": {
"type": "object",
"required": [
"token"
],
"properties": {
"token": {
"description": "Device FCM token",
"type": "string",
"example": "PyDmBQZZXYmyxMwED8Fzy"
}
}
},
"smsgateway.RecipientState": {
"type": "object",
"required": [
"phoneNumber",
"state"
],
"properties": {
"error": {
"description": "Error (for `Failed` state)",
"type": "string",
"example": "timeout"
},
"phoneNumber": {
"description": "Phone number or first 16 symbols of SHA256 hash",
"type": "string",
"maxLength": 128,
"minLength": 10,
"example": "79990001234"
},
"state": {
"description": "State",
"allOf": [
{
"$ref": "#/definitions/smsgateway.ProcessState"
}
],
"example": "Pending"
}
}
}
},
"securityDefinitions": {
"ApiAuth": {
"type": "basic"
},
"MobileToken": {
"description": "Mobile device token",
"type": "apiKey",
"name": "Authorization",
"in": "header"
}
}
}