// Package docs Code generated by swaggo/swag. DO NOT EDIT
package docs

import "github.com/swaggo/swag"

const docTemplate = `{
    "schemes": {{ marshal .Schemes }},
    "swagger": "2.0",
    "info": {
        "description": "{{escape .Description}}",
        "title": "{{.Title}}",
        "contact": {
            "name": "support@httpsms.com",
            "email": "support@httpsms.com"
        },
        "license": {
            "name": "AGPL-3.0",
            "url": "https://raw.githubusercontent.com/NdoleStudio/http-sms-manager/main/LICENSE"
        },
        "version": "{{.Version}}"
    },
    "host": "{{.Host}}",
    "basePath": "{{.BasePath}}",
    "paths": {
        "/billing/usage": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Get the summary of sent and received messages for a user in the current month",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Billing"
                ],
                "summary": "Get Billing Usage.",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.BillingUsageResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/billing/usage-history": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Get billing usage records of sent and received messages for a user in the past. It will be sorted by timestamp in descending order.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Billing"
                ],
                "summary": "Get billing usage history.",
                "parameters": [
                    {
                        "minimum": 0,
                        "type": "integer",
                        "description": "number of heartbeats to skip",
                        "name": "skip",
                        "in": "query"
                    },
                    {
                        "maximum": 100,
                        "minimum": 1,
                        "type": "integer",
                        "description": "number of heartbeats to return",
                        "name": "limit",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.BillingUsagesResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/bulk-messages": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Fetches the last 10 bulk message order summaries for the authenticated user showing counts per status.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "BulkSMS"
                ],
                "summary": "List bulk message orders",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.BulkMessagesResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Sends bulk SMS messages to multiple users based on our [CSV template](https://httpsms.com/templates/httpsms-bulk.csv) or our [Excel template](https://httpsms.com/templates/httpsms-bulk.xlsx).",
                "consumes": [
                    "multipart/form-data"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "BulkSMS"
                ],
                "summary": "Store bulk SMS file",
                "parameters": [
                    {
                        "type": "file",
                        "description": "The Excel or CSV file containing the messages to be sent.",
                        "name": "document",
                        "in": "formData",
                        "required": true
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/responses.NoContent"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/discord-integrations": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Get the discord integrations of a user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "DiscordIntegration"
                ],
                "summary": "Get discord integrations of a user",
                "parameters": [
                    {
                        "minimum": 0,
                        "type": "integer",
                        "description": "number of discord integrations to skip",
                        "name": "skip",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "filter discord integrations containing query",
                        "name": "query",
                        "in": "query"
                    },
                    {
                        "maximum": 20,
                        "minimum": 1,
                        "type": "integer",
                        "description": "number of discord integrations to return",
                        "name": "limit",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.DiscordsResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Store a discord integration for the authenticated user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "DiscordIntegration"
                ],
                "summary": "Store discord integration",
                "parameters": [
                    {
                        "description": "Payload of the discord integration request",
                        "name": "payload",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/requests.DiscordStore"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/responses.DiscordResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/discord-integrations/{discordID}": {
            "put": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Update a discord integration for the currently authenticated user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "DiscordIntegration"
                ],
                "summary": "Update a discord integration",
                "parameters": [
                    {
                        "type": "string",
                        "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
                        "description": "ID of the discord integration",
                        "name": "discordID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Payload of discord integration to update",
                        "name": "payload",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/requests.DiscordUpdate"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.DiscordResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Delete a discord integration for a user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Webhooks"
                ],
                "summary": "Delete discord integration",
                "parameters": [
                    {
                        "type": "string",
                        "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
                        "description": "ID of the discord integration",
                        "name": "discordID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content",
                        "schema": {
                            "$ref": "#/definitions/responses.NoContent"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/discord/event": {
            "post": {
                "description": "Publish a discord event to the registered listeners",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Discord"
                ],
                "summary": "Consume a discord event",
                "responses": {
                    "204": {
                        "description": "No Content",
                        "schema": {
                            "$ref": "#/definitions/responses.NoContent"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/heartbeats": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Get the last time a phone number requested for outstanding messages. It will be sorted by timestamp in descending order.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Heartbeats"
                ],
                "summary": "Get heartbeats of an owner phone number",
                "parameters": [
                    {
                        "type": "string",
                        "default": "+18005550199",
                        "description": "the owner's phone number",
                        "name": "owner",
                        "in": "query",
                        "required": true
                    },
                    {
                        "minimum": 0,
                        "type": "integer",
                        "description": "number of heartbeats to skip",
                        "name": "skip",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "filter containing query",
                        "name": "query",
                        "in": "query"
                    },
                    {
                        "maximum": 20,
                        "minimum": 1,
                        "type": "integer",
                        "description": "number of heartbeats to return",
                        "name": "limit",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.HeartbeatsResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Store the heartbeat to make notify that a phone number is still active",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Heartbeats"
                ],
                "summary": "Register heartbeat of an owner phone number",
                "parameters": [
                    {
                        "description": "Payload of the heartbeat request",
                        "name": "payload",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/requests.HeartbeatStore"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.HeartbeatResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/integration/3cx/messages": {
            "post": {
                "description": "Sends an SMS message from the 3CX platform",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "3CXIntegration"
                ],
                "summary": "Sends a 3CX SMS message",
                "responses": {
                    "204": {
                        "description": "No Content",
                        "schema": {
                            "$ref": "#/definitions/responses.NoContent"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/message-threads": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Get list of contacts which a phone number has communicated with (threads). It will be sorted by timestamp in descending order.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "MessageThreads"
                ],
                "summary": "Get message threads for a phone number",
                "parameters": [
                    {
                        "type": "string",
                        "default": "+18005550199",
                        "description": "owner phone number",
                        "name": "owner",
                        "in": "query",
                        "required": true
                    },
                    {
                        "minimum": 0,
                        "type": "integer",
                        "description": "number of messages to skip",
                        "name": "skip",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "filter message threads containing query",
                        "name": "query",
                        "in": "query"
                    },
                    {
                        "maximum": 20,
                        "minimum": 1,
                        "type": "integer",
                        "description": "number of messages to return",
                        "name": "limit",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.MessageThreadsResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/message-threads/{messageThreadID}": {
            "put": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Updates the details of a message thread",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "MessageThreads"
                ],
                "summary": "Update a message thread",
                "parameters": [
                    {
                        "type": "string",
                        "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
                        "description": "ID of the message thread",
                        "name": "messageThreadID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Payload of message thread details to update",
                        "name": "payload",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/requests.MessageThreadUpdate"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.PhoneResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Delete a message thread from the database and also deletes all the messages in the thread.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "MessageThreads"
                ],
                "summary": "Delete a message thread from the database.",
                "parameters": [
                    {
                        "type": "string",
                        "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
                        "description": "ID of the message thread",
                        "name": "messageThreadID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content",
                        "schema": {
                            "$ref": "#/definitions/responses.NoContent"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/responses.NotFound"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/messages": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Get list of messages which are sent between 2 phone numbers. It will be sorted by timestamp in descending order.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Messages"
                ],
                "summary": "Get messages which are sent between 2 phone numbers",
                "parameters": [
                    {
                        "type": "string",
                        "default": "+18005550199",
                        "description": "the owner's phone number",
                        "name": "owner",
                        "in": "query",
                        "required": true
                    },
                    {
                        "type": "string",
                        "default": "+18005550100",
                        "description": "the contact's phone number",
                        "name": "contact",
                        "in": "query",
                        "required": true
                    },
                    {
                        "minimum": 0,
                        "type": "integer",
                        "description": "number of messages to skip",
                        "name": "skip",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "filter messages containing query",
                        "name": "query",
                        "in": "query"
                    },
                    {
                        "maximum": 20,
                        "minimum": 1,
                        "type": "integer",
                        "description": "number of messages to return",
                        "name": "limit",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.MessagesResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/messages/bulk-send": {
            "post": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Add bulk SMS messages to be sent by the android phone",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Messages"
                ],
                "summary": "Send bulk SMS messages",
                "parameters": [
                    {
                        "description": "Bulk send message request payload",
                        "name": "payload",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/requests.MessageBulkSend"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/responses.MessagesResponse"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/messages/calls/missed": {
            "post": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "This endpoint is called by the httpSMS android app to register a missed call event on the mobile phone.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Messages"
                ],
                "summary": "Register a missed call event on the mobile phone",
                "parameters": [
                    {
                        "description": "Payload of the missed call event.",
                        "name": "payload",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/requests.MessageCallMissed"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.MessageResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/responses.NotFound"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/messages/outstanding": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Get an outstanding message to be sent by an android phone",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Messages"
                ],
                "summary": "Get an outstanding message",
                "parameters": [
                    {
                        "type": "string",
                        "default": "32343a19-da5e-4b1b-a767-3298a73703cb",
                        "description": "The ID of the message",
                        "name": "message_id",
                        "in": "query",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.MessageResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/messages/receive": {
            "post": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Add a new message received from a mobile phone",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Messages"
                ],
                "summary": "Receive a new SMS message from a mobile phone",
                "parameters": [
                    {
                        "description": "Received message request payload",
                        "name": "payload",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/requests.MessageReceive"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.MessageResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/messages/search": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "This returns the list of all messages based on the filter criteria including missed calls",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Messages"
                ],
                "summary": "Search all messages of a user",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Cloudflare turnstile token https://www.cloudflare.com/en-gb/application-services/products/turnstile/",
                        "name": "token",
                        "in": "header",
                        "required": true
                    },
                    {
                        "type": "string",
                        "default": "+18005550199,+18005550100",
                        "description": "the owner's phone numbers",
                        "name": "owners",
                        "in": "query",
                        "required": true
                    },
                    {
                        "minimum": 0,
                        "type": "integer",
                        "description": "number of messages to skip",
                        "name": "skip",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "filter messages containing query",
                        "name": "query",
                        "in": "query"
                    },
                    {
                        "maximum": 200,
                        "minimum": 1,
                        "type": "integer",
                        "description": "number of messages to return",
                        "name": "limit",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.MessagesResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/messages/send": {
            "post": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Add a new SMS message to be sent by your Android phone",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Messages"
                ],
                "summary": "Send an SMS message",
                "parameters": [
                    {
                        "description": "Send message request payload",
                        "name": "payload",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/requests.MessageSend"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.MessageResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/messages/{messageID}": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Get a message from the database by the message ID.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Messages"
                ],
                "summary": "Get a message from the database.",
                "parameters": [
                    {
                        "type": "string",
                        "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
                        "description": "ID of the message",
                        "name": "messageID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content",
                        "schema": {
                            "$ref": "#/definitions/responses.MessageResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/responses.NotFound"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Delete a message from the database and removes the message content from the list of threads.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Messages"
                ],
                "summary": "Delete a message from the database.",
                "parameters": [
                    {
                        "type": "string",
                        "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
                        "description": "ID of the message",
                        "name": "messageID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content",
                        "schema": {
                            "$ref": "#/definitions/responses.NoContent"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/responses.NotFound"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/messages/{messageID}/events": {
            "post": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Use this endpoint to send events for a message when it is failed, sent or delivered by the mobile phone.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Messages"
                ],
                "summary": "Upsert an event for a message on the mobile phone",
                "parameters": [
                    {
                        "type": "string",
                        "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
                        "description": "ID of the message",
                        "name": "messageID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Payload of the event emitted.",
                        "name": "payload",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/requests.MessageEvent"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.MessageResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/responses.NotFound"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/phone-api-keys": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Get list phone API keys which a user has registered on the httpSMS application",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "PhoneAPIKeys"
                ],
                "summary": "Get the phone API keys of a user",
                "parameters": [
                    {
                        "minimum": 0,
                        "type": "integer",
                        "description": "number of phone api keys to skip",
                        "name": "skip",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "filter phone api keys with name containing query",
                        "name": "query",
                        "in": "query"
                    },
                    {
                        "maximum": 100,
                        "minimum": 1,
                        "type": "integer",
                        "description": "number of phone api keys to return",
                        "name": "limit",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.PhoneAPIKeysResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Creates a new phone API key which can be used to log in to the httpSMS app on your Android phone",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "PhoneAPIKeys"
                ],
                "summary": "Store phone API key",
                "parameters": [
                    {
                        "description": "Payload of new phone API key.",
                        "name": "payload",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/requests.PhoneAPIKeyStoreRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.PhoneAPIKeyResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "402": {
                        "description": "Payment Required",
                        "schema": {
                            "$ref": "#/definitions/responses.PaymentRequired"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/phone-api-keys/{phoneAPIKeyID}": {
            "delete": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Delete a phone API Key from the database and cannot be used for authentication anymore.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "PhoneAPIKeys"
                ],
                "summary": "Delete a phone API key from the database.",
                "parameters": [
                    {
                        "type": "string",
                        "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
                        "description": "ID of the phone API key",
                        "name": "phoneAPIKeyID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content",
                        "schema": {
                            "$ref": "#/definitions/responses.NoContent"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/responses.NotFound"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/phone-api-keys/{phoneAPIKeyID}/phones/{phoneID}": {
            "delete": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "You will need to login again to the httpSMS app on your Android phone with a new phone API key.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "PhoneAPIKeys"
                ],
                "summary": "Remove the association of a phone from the phone API key.",
                "parameters": [
                    {
                        "type": "string",
                        "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
                        "description": "ID of the phone API key",
                        "name": "phoneAPIKeyID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
                        "description": "ID of the phone",
                        "name": "phoneID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content",
                        "schema": {
                            "$ref": "#/definitions/responses.NoContent"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/responses.NotFound"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/phones": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Get list of phones which a user has registered on the http sms application",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Phones"
                ],
                "summary": "Get phones of a user",
                "parameters": [
                    {
                        "minimum": 0,
                        "type": "integer",
                        "description": "number of heartbeats to skip",
                        "name": "skip",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "filter phones containing query",
                        "name": "query",
                        "in": "query"
                    },
                    {
                        "maximum": 20,
                        "minimum": 1,
                        "type": "integer",
                        "description": "number of phones to return",
                        "name": "limit",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.PhonesResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Updates properties of a user's phone. If the phone with this number does not exist, a new one will be created. Think of this method like an 'upsert'",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Phones"
                ],
                "summary": "Upsert Phone",
                "parameters": [
                    {
                        "description": "Payload of new phone number.",
                        "name": "payload",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/requests.PhoneUpsert"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.PhoneResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/phones/fcm-token": {
            "put": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Updates the FCM token of a phone. If the phone with this number does not exist, a new one will be created. Think of this method like an 'upsert'",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Phones"
                ],
                "summary": "Upserts the FCM token of a phone",
                "parameters": [
                    {
                        "description": "Payload of new FCM token.",
                        "name": "payload",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/requests.PhoneFCMToken"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.PhoneResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/phones/{phoneID}": {
            "delete": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Delete a phone that has been sored in the database",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Phones"
                ],
                "summary": "Delete Phone",
                "parameters": [
                    {
                        "type": "string",
                        "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
                        "description": "ID of the phone",
                        "name": "phoneID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content",
                        "schema": {
                            "$ref": "#/definitions/responses.NoContent"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/send-schedules": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "List all send schedules owned by the authenticated user.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "SendSchedules"
                ],
                "summary": "List send schedules",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.MessageSendSchedulesResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Create a new send schedule for the authenticated user.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "SendSchedules"
                ],
                "summary": "Create send schedule",
                "parameters": [
                    {
                        "description": "Payload of new send schedule.",
                        "name": "payload",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/requests.MessageSendScheduleStore"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/responses.MessageSendScheduleResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "402": {
                        "description": "Payment Required",
                        "schema": {
                            "$ref": "#/definitions/responses.PaymentRequired"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/send-schedules/{scheduleID}": {
            "put": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Update a send schedule owned by the authenticated user.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "SendSchedules"
                ],
                "summary": "Update send schedule",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Schedule ID",
                        "name": "scheduleID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Payload of updated send schedule.",
                        "name": "payload",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/requests.MessageSendScheduleStore"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.MessageSendScheduleResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/responses.NotFound"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Delete a send schedule owned by the authenticated user.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "SendSchedules"
                ],
                "summary": "Delete send schedule",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Schedule ID",
                        "name": "scheduleID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/responses.NotFound"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/users/me": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Get details of the currently authenticated user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Users"
                ],
                "summary": "Get current user",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.UserResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Updates the details of the currently authenticated user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Users"
                ],
                "summary": "Update a user",
                "parameters": [
                    {
                        "description": "Payload of user details to update",
                        "name": "payload",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/requests.UserUpdate"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.PhoneResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Deletes the currently authenticated user together with all their data.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Users"
                ],
                "summary": "Delete a user",
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/responses.NoContent"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/users/subscription": {
            "delete": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Cancel the subscription of the authenticated user.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Users"
                ],
                "summary": "Cancel the user's subscription",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.NoContent"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/users/subscription-update-url": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Fetches the subscription URL of the authenticated user.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Users"
                ],
                "summary": "Currently authenticated user subscription update URL",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.OkString"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/users/subscription/invoices/{subscriptionInvoiceID}": {
            "post": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Generates a new invoice PDF file for the given subscription payment with given parameters.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/pdf"
                ],
                "tags": [
                    "Users"
                ],
                "summary": "Generate a subscription payment invoice",
                "parameters": [
                    {
                        "description": "Generate subscription payment invoice parameters",
                        "name": "payload",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/requests.UserPaymentInvoice"
                        }
                    },
                    {
                        "type": "string",
                        "description": "ID of the subscription invoice to generate the PDF for",
                        "name": "subscriptionInvoiceID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "file"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/users/subscription/payments": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Subscription payments are generated throughout the lifecycle of a subscription, typically there is one at the time of purchase and then one for each renewal.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Users"
                ],
                "summary": "Get the last 10 subscription payments.",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.UserSubscriptionPaymentsResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/users/{userID}/api-keys": {
            "delete": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Rotate the user's API key in case the current API Key is compromised",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Users"
                ],
                "summary": "Rotate the user's API Key",
                "parameters": [
                    {
                        "type": "string",
                        "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
                        "description": "ID of the user to update",
                        "name": "userID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.UserResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/users/{userID}/notifications": {
            "put": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Update the email notification settings for a user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Users"
                ],
                "summary": "Update notification settings",
                "parameters": [
                    {
                        "type": "string",
                        "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
                        "description": "ID of the user to update",
                        "name": "userID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "User notification details to update",
                        "name": "payload",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/requests.UserNotificationUpdate"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.UserResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/v1/attachments/{userID}/{messageID}/{attachmentIndex}/{filename}": {
            "get": {
                "description": "Download an MMS attachment by its path components",
                "produces": [
                    "application/octet-stream"
                ],
                "tags": [
                    "Attachments"
                ],
                "summary": "Download a message attachment",
                "parameters": [
                    {
                        "type": "string",
                        "description": "User ID",
                        "name": "userID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Message ID",
                        "name": "messageID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Attachment index",
                        "name": "attachmentIndex",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Filename with extension",
                        "name": "filename",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "file"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/responses.NotFound"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/webhooks": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Get the webhooks of a user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Webhooks"
                ],
                "summary": "Get webhooks of a user",
                "parameters": [
                    {
                        "minimum": 0,
                        "type": "integer",
                        "description": "number of webhooks to skip",
                        "name": "skip",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "filter webhooks containing query",
                        "name": "query",
                        "in": "query"
                    },
                    {
                        "maximum": 20,
                        "minimum": 1,
                        "type": "integer",
                        "description": "number of webhooks to return",
                        "name": "limit",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.WebhooksResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Store a webhook for the authenticated user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Webhooks"
                ],
                "summary": "Store a webhook",
                "parameters": [
                    {
                        "description": "Payload of the webhook request",
                        "name": "payload",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/requests.WebhookStore"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.WebhookResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        },
        "/webhooks/{webhookID}": {
            "put": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Update a webhook for the currently authenticated user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Webhooks"
                ],
                "summary": "Update a webhook",
                "parameters": [
                    {
                        "type": "string",
                        "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
                        "description": "ID of the webhook",
                        "name": "webhookID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Payload of webhook details to update",
                        "name": "payload",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/requests.WebhookUpdate"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/responses.WebhookResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Delete a webhook for a user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Webhooks"
                ],
                "summary": "Delete webhook",
                "parameters": [
                    {
                        "type": "string",
                        "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
                        "description": "ID of the webhook",
                        "name": "webhookID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content",
                        "schema": {
                            "$ref": "#/definitions/responses.NoContent"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/responses.BadRequest"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/responses.Unauthorized"
                        }
                    },
                    "422": {
                        "description": "Unprocessable Entity",
                        "schema": {
                            "$ref": "#/definitions/responses.UnprocessableEntity"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/responses.InternalServerError"
                        }
                    }
                }
            }
        }
    },
    "definitions": {
        "entities.BillingUsage": {
            "type": "object",
            "required": [
                "created_at",
                "end_timestamp",
                "id",
                "received_messages",
                "sent_messages",
                "start_timestamp",
                "total_cost",
                "updated_at",
                "user_id"
            ],
            "properties": {
                "created_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:02.302718+03:00"
                },
                "end_timestamp": {
                    "type": "string",
                    "example": "2022-01-31T23:59:59+00:00"
                },
                "id": {
                    "type": "string",
                    "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
                },
                "received_messages": {
                    "type": "integer",
                    "example": 465
                },
                "sent_messages": {
                    "type": "integer",
                    "example": 321
                },
                "start_timestamp": {
                    "type": "string",
                    "example": "2022-01-01T00:00:00+00:00"
                },
                "total_cost": {
                    "type": "integer",
                    "example": 0
                },
                "updated_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:10.303278+03:00"
                },
                "user_id": {
                    "type": "string",
                    "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
                }
            }
        },
        "entities.BulkMessage": {
            "type": "object",
            "required": [
                "created_at",
                "delivered_count",
                "expired_count",
                "failed_count",
                "pending_count",
                "request_id",
                "scheduled_count",
                "sent_count",
                "total"
            ],
            "properties": {
                "created_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:02.302718+03:00"
                },
                "delivered_count": {
                    "type": "integer",
                    "example": 25
                },
                "expired_count": {
                    "type": "integer",
                    "example": 3
                },
                "failed_count": {
                    "type": "integer",
                    "example": 5
                },
                "pending_count": {
                    "type": "integer",
                    "example": 30
                },
                "request_id": {
                    "type": "string",
                    "example": "bulk-csv-a1B2c3D4e5"
                },
                "scheduled_count": {
                    "type": "integer",
                    "example": 50
                },
                "sent_count": {
                    "type": "integer",
                    "example": 40
                },
                "total": {
                    "type": "integer",
                    "example": 150
                }
            }
        },
        "entities.Discord": {
            "type": "object",
            "required": [
                "created_at",
                "id",
                "incoming_channel_id",
                "name",
                "server_id",
                "updated_at",
                "user_id"
            ],
            "properties": {
                "created_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:02.302718+03:00"
                },
                "id": {
                    "type": "string",
                    "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
                },
                "incoming_channel_id": {
                    "type": "string",
                    "example": "1095780203256627291"
                },
                "name": {
                    "type": "string",
                    "example": "Game Server"
                },
                "server_id": {
                    "type": "string",
                    "example": "1095778291488653372"
                },
                "updated_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:10.303278+03:00"
                },
                "user_id": {
                    "type": "string",
                    "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
                }
            }
        },
        "entities.Heartbeat": {
            "type": "object",
            "required": [
                "charging",
                "id",
                "owner",
                "timestamp",
                "user_id",
                "version"
            ],
            "properties": {
                "charging": {
                    "type": "boolean",
                    "example": true
                },
                "id": {
                    "type": "string",
                    "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
                },
                "owner": {
                    "type": "string",
                    "example": "+18005550199"
                },
                "timestamp": {
                    "type": "string",
                    "example": "2022-06-05T14:26:01.520828+03:00"
                },
                "user_id": {
                    "type": "string",
                    "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
                },
                "version": {
                    "type": "string",
                    "example": "344c10f"
                }
            }
        },
        "entities.Message": {
            "type": "object",
            "required": [
                "attachments",
                "contact",
                "content",
                "created_at",
                "encrypted",
                "id",
                "max_send_attempts",
                "order_timestamp",
                "owner",
                "request_received_at",
                "send_attempt_count",
                "sim",
                "status",
                "type",
                "updated_at",
                "user_id"
            ],
            "properties": {
                "attachments": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "example": [
                        "https://example.com/image.jpg",
                        "https://example.com/video.mp4"
                    ]
                },
                "contact": {
                    "type": "string",
                    "example": "+18005550100"
                },
                "content": {
                    "type": "string",
                    "example": "This is a sample text message"
                },
                "created_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:02.302718+03:00"
                },
                "delivered_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:09.527976+03:00"
                },
                "encrypted": {
                    "type": "boolean",
                    "example": false
                },
                "expired_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:09.527976+03:00"
                },
                "failed_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:09.527976+03:00"
                },
                "failure_reason": {
                    "type": "string",
                    "example": "UNKNOWN"
                },
                "id": {
                    "type": "string",
                    "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
                },
                "last_attempted_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:09.527976+03:00"
                },
                "max_send_attempts": {
                    "type": "integer",
                    "example": 1
                },
                "order_timestamp": {
                    "type": "string",
                    "example": "2022-06-05T14:26:09.527976+03:00"
                },
                "owner": {
                    "type": "string",
                    "example": "+18005550199"
                },
                "received_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:09.527976+03:00"
                },
                "request_id": {
                    "type": "string",
                    "example": "153554b5-ae44-44a0-8f4f-7bbac5657ad4"
                },
                "request_received_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:01.520828+03:00"
                },
                "scheduled_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:09.527976+03:00"
                },
                "scheduled_send_time": {
                    "type": "string",
                    "example": "2022-06-05T14:26:09.527976+03:00"
                },
                "send_attempt_count": {
                    "type": "integer",
                    "example": 0
                },
                "send_time": {
                    "description": "SendDuration is the number of nanoseconds from when the request was received until when the mobile phone send the message",
                    "type": "integer",
                    "example": 133414
                },
                "sent_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:09.527976+03:00"
                },
                "sim": {
                    "description": "SIM is the SIM card to use to send the message\n* SMS1: use the SIM card in slot 1\n* SMS2: use the SIM card in slot 2\n* DEFAULT: used the default communication SIM card",
                    "allOf": [
                        {
                            "$ref": "#/definitions/entities.SIM"
                        }
                    ],
                    "example": "DEFAULT"
                },
                "status": {
                    "type": "string",
                    "example": "pending"
                },
                "type": {
                    "type": "string",
                    "example": "mobile-terminated"
                },
                "updated_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:10.303278+03:00"
                },
                "user_id": {
                    "type": "string",
                    "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
                }
            }
        },
        "entities.MessageSendSchedule": {
            "type": "object",
            "required": [
                "created_at",
                "id",
                "name",
                "timezone",
                "updated_at",
                "user_id",
                "windows"
            ],
            "properties": {
                "created_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:02.302718+03:00"
                },
                "id": {
                    "type": "string",
                    "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
                },
                "name": {
                    "type": "string",
                    "example": "Business Hours"
                },
                "timezone": {
                    "type": "string",
                    "example": "Europe/Tallinn"
                },
                "updated_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:10.303278+03:00"
                },
                "user_id": {
                    "type": "string",
                    "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
                },
                "windows": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/entities.MessageSendScheduleWindow"
                    }
                }
            }
        },
        "entities.MessageSendScheduleWindow": {
            "type": "object",
            "required": [
                "day_of_week",
                "end_minute",
                "start_minute"
            ],
            "properties": {
                "day_of_week": {
                    "type": "integer",
                    "example": 1
                },
                "end_minute": {
                    "type": "integer",
                    "example": 1020
                },
                "start_minute": {
                    "type": "integer",
                    "example": 540
                }
            }
        },
        "entities.MessageThread": {
            "type": "object",
            "required": [
                "color",
                "contact",
                "created_at",
                "id",
                "is_archived",
                "last_message_content",
                "last_message_id",
                "order_timestamp",
                "owner",
                "status",
                "updated_at",
                "user_id"
            ],
            "properties": {
                "color": {
                    "type": "string",
                    "example": "indigo"
                },
                "contact": {
                    "type": "string",
                    "example": "+18005550100"
                },
                "created_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:09.527976+03:00"
                },
                "id": {
                    "type": "string",
                    "example": "32343a19-da5e-4b1b-a767-3298a73703ca"
                },
                "is_archived": {
                    "type": "boolean",
                    "example": false
                },
                "last_message_content": {
                    "type": "string",
                    "example": "This is a sample message content"
                },
                "last_message_id": {
                    "type": "string",
                    "example": "32343a19-da5e-4b1b-a767-3298a73703ca"
                },
                "order_timestamp": {
                    "type": "string",
                    "example": "2022-06-05T14:26:09.527976+03:00"
                },
                "owner": {
                    "type": "string",
                    "example": "+18005550199"
                },
                "status": {
                    "type": "string",
                    "example": "PENDING"
                },
                "updated_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:09.527976+03:00"
                },
                "user_id": {
                    "type": "string",
                    "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
                }
            }
        },
        "entities.Phone": {
            "type": "object",
            "required": [
                "created_at",
                "id",
                "max_send_attempts",
                "message_expiration_seconds",
                "messages_per_minute",
                "phone_number",
                "sim",
                "updated_at",
                "user_id"
            ],
            "properties": {
                "created_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:02.302718+03:00"
                },
                "fcm_token": {
                    "type": "string",
                    "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzd....."
                },
                "id": {
                    "type": "string",
                    "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
                },
                "max_send_attempts": {
                    "description": "MaxSendAttempts determines how many times to retry sending an SMS message",
                    "type": "integer",
                    "example": 2
                },
                "message_expiration_seconds": {
                    "description": "MessageExpirationSeconds is the duration in seconds after sending a message when it is considered to be expired.",
                    "type": "integer"
                },
                "message_send_schedule_id": {
                    "type": "string",
                    "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
                },
                "messages_per_minute": {
                    "type": "integer",
                    "example": 1
                },
                "missed_call_auto_reply": {
                    "type": "string",
                    "example": "This phone cannot receive calls. Please send an SMS instead."
                },
                "phone_number": {
                    "type": "string",
                    "example": "+18005550199"
                },
                "sim": {
                    "$ref": "#/definitions/entities.SIM"
                },
                "updated_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:10.303278+03:00"
                },
                "user_id": {
                    "type": "string",
                    "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
                }
            }
        },
        "entities.PhoneAPIKey": {
            "type": "object",
            "required": [
                "api_key",
                "created_at",
                "id",
                "name",
                "phone_ids",
                "phone_numbers",
                "updated_at",
                "user_email",
                "user_id"
            ],
            "properties": {
                "api_key": {
                    "type": "string",
                    "example": "pk_DGW8NwQp7mxKaSZ72Xq9v6xxxxx"
                },
                "created_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:02.302718+03:00"
                },
                "id": {
                    "type": "string",
                    "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
                },
                "name": {
                    "type": "string",
                    "example": "Business Phone Key"
                },
                "phone_ids": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "example": [
                        "32343a19-da5e-4b1b-a767-3298a73703cb",
                        "32343a19-da5e-4b1b-a767-3298a73703cc"
                    ]
                },
                "phone_numbers": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "example": [
                        "+18005550199",
                        "+18005550100"
                    ]
                },
                "updated_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:02.302718+03:00"
                },
                "user_email": {
                    "type": "string",
                    "example": "user@gmail.com"
                },
                "user_id": {
                    "type": "string",
                    "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
                }
            }
        },
        "entities.SIM": {
            "type": "string",
            "enum": [
                "SIM1",
                "SIM2"
            ],
            "x-enum-varnames": [
                "SIM1",
                "SIM2"
            ]
        },
        "entities.SubscriptionName": {
            "type": "string",
            "enum": [
                "free",
                "pro-monthly",
                "pro-yearly",
                "ultra-monthly",
                "ultra-yearly",
                "pro-lifetime",
                "20k-monthly",
                "100k-monthly",
                "50k-monthly",
                "200k-monthly",
                "20k-yearly"
            ],
            "x-enum-varnames": [
                "SubscriptionNameFree",
                "SubscriptionNameProMonthly",
                "SubscriptionNameProYearly",
                "SubscriptionNameUltraMonthly",
                "SubscriptionNameUltraYearly",
                "SubscriptionNameProLifetime",
                "SubscriptionName20KMonthly",
                "SubscriptionName100KMonthly",
                "SubscriptionName50KMonthly",
                "SubscriptionName200KMonthly",
                "SubscriptionName20KYearly"
            ]
        },
        "entities.User": {
            "type": "object",
            "required": [
                "api_key",
                "created_at",
                "email",
                "id",
                "notification_heartbeat_enabled",
                "notification_message_status_enabled",
                "notification_newsletter_enabled",
                "notification_webhook_enabled",
                "subscription_id",
                "subscription_name",
                "timezone",
                "updated_at"
            ],
            "properties": {
                "active_phone_id": {
                    "type": "string",
                    "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
                },
                "api_key": {
                    "type": "string",
                    "example": "x-api-key"
                },
                "created_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:02.302718+03:00"
                },
                "email": {
                    "type": "string",
                    "example": "name@email.com"
                },
                "id": {
                    "type": "string",
                    "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
                },
                "notification_heartbeat_enabled": {
                    "type": "boolean",
                    "example": true
                },
                "notification_message_status_enabled": {
                    "type": "boolean",
                    "example": true
                },
                "notification_newsletter_enabled": {
                    "type": "boolean",
                    "example": true
                },
                "notification_webhook_enabled": {
                    "type": "boolean",
                    "example": true
                },
                "subscription_ends_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:02.302718+03:00"
                },
                "subscription_id": {
                    "type": "string",
                    "example": "8f9c71b8-b84e-4417-8408-a62274f65a08"
                },
                "subscription_name": {
                    "allOf": [
                        {
                            "$ref": "#/definitions/entities.SubscriptionName"
                        }
                    ],
                    "example": "free"
                },
                "subscription_renews_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:02.302718+03:00"
                },
                "subscription_status": {
                    "type": "string",
                    "example": "on_trial"
                },
                "timezone": {
                    "type": "string",
                    "example": "Europe/Helsinki"
                },
                "updated_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:10.303278+03:00"
                }
            }
        },
        "entities.Webhook": {
            "type": "object",
            "required": [
                "created_at",
                "events",
                "id",
                "phone_numbers",
                "signing_key",
                "updated_at",
                "url",
                "user_id"
            ],
            "properties": {
                "created_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:02.302718+03:00"
                },
                "events": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "example": [
                        "message.phone.received"
                    ]
                },
                "id": {
                    "type": "string",
                    "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
                },
                "phone_numbers": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "example": [
                        "+18005550199",
                        "+18005550100"
                    ]
                },
                "signing_key": {
                    "type": "string",
                    "example": "DGW8NwQp7mxKaSZ72Xq9v67SLqSbWQvckzzmK8D6rvd7NywSEkdMJtuxKyEkYnCY"
                },
                "updated_at": {
                    "type": "string",
                    "example": "2022-06-05T14:26:10.303278+03:00"
                },
                "url": {
                    "type": "string",
                    "example": "https://example.com"
                },
                "user_id": {
                    "type": "string",
                    "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
                }
            }
        },
        "requests.DiscordStore": {
            "type": "object",
            "required": [
                "incoming_channel_id",
                "name",
                "server_id"
            ],
            "properties": {
                "incoming_channel_id": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "server_id": {
                    "type": "string"
                }
            }
        },
        "requests.DiscordUpdate": {
            "type": "object",
            "required": [
                "incoming_channel_id",
                "name",
                "server_id"
            ],
            "properties": {
                "incoming_channel_id": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "server_id": {
                    "type": "string"
                }
            }
        },
        "requests.HeartbeatStore": {
            "type": "object",
            "required": [
                "charging",
                "phone_numbers"
            ],
            "properties": {
                "charging": {
                    "type": "boolean"
                },
                "phone_numbers": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "requests.MessageAttachment": {
            "type": "object",
            "required": [
                "content",
                "content_type",
                "name"
            ],
            "properties": {
                "content": {
                    "description": "Content is the base64-encoded attachment data",
                    "type": "string",
                    "example": "base64data..."
                },
                "content_type": {
                    "description": "ContentType is the MIME type of the attachment",
                    "type": "string",
                    "example": "image/jpeg"
                },
                "name": {
                    "description": "Name is the original filename of the attachment",
                    "type": "string",
                    "example": "photo.jpg"
                }
            }
        },
        "requests.MessageBulkSend": {
            "type": "object",
            "required": [
                "content",
                "from",
                "to"
            ],
            "properties": {
                "attachments": {
                    "description": "Attachments are optional. When you provide a list of attachments, the message will be sent out as an MMS",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "content": {
                    "type": "string",
                    "example": "This is a sample text message"
                },
                "encrypted": {
                    "description": "Encrypted is used to determine if the content is end-to-end encrypted. Make sure to set the encryption key on the httpSMS mobile app",
                    "type": "boolean",
                    "example": false
                },
                "from": {
                    "type": "string",
                    "example": "+18005550199"
                },
                "request_id": {
                    "description": "RequestID is an optional parameter used to track a request from the client's perspective",
                    "type": "string",
                    "example": "153554b5-ae44-44a0-8f4f-7bbac5657ad4"
                },
                "to": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "example": [
                        "+18005550100",
                        "+18005550100"
                    ]
                }
            }
        },
        "requests.MessageCallMissed": {
            "type": "object",
            "required": [
                "from",
                "sim",
                "timestamp",
                "to"
            ],
            "properties": {
                "from": {
                    "type": "string",
                    "example": "+18005550199"
                },
                "sim": {
                    "type": "string",
                    "example": "SIM1"
                },
                "timestamp": {
                    "type": "string",
                    "example": "2022-06-05T14:26:09.527976+03:00"
                },
                "to": {
                    "type": "string",
                    "example": "+18005550100"
                }
            }
        },
        "requests.MessageEvent": {
            "type": "object",
            "required": [
                "event_name",
                "reason",
                "timestamp"
            ],
            "properties": {
                "event_name": {
                    "description": "EventName is the type of event\n* SENT: is emitted when a message is sent by the mobile phone\n* FAILED: is event is emitted when the message could not be sent by the mobile phone\n* DELIVERED: is event is emitted when a delivery report has been received by the mobile phone",
                    "type": "string",
                    "example": "SENT"
                },
                "reason": {
                    "description": "Reason is the exact error message in case the event is an error",
                    "type": "string"
                },
                "timestamp": {
                    "description": "Timestamp is the time when the event was emitted, Please send the timestamp in UTC with as much precision as possible",
                    "type": "string",
                    "example": "2022-06-05T14:26:09.527976+03:00"
                }
            }
        },
        "requests.MessageReceive": {
            "type": "object",
            "required": [
                "content",
                "encrypted",
                "from",
                "sim",
                "timestamp",
                "to"
            ],
            "properties": {
                "attachments": {
                    "description": "Attachments is the list of MMS attachments received with the message",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/requests.MessageAttachment"
                    }
                },
                "content": {
                    "type": "string",
                    "example": "This is a sample text message received on a phone"
                },
                "encrypted": {
                    "description": "Encrypted is used to determine if the content is end-to-end encrypted. Make sure to set the encryption key on the httpSMS mobile app",
                    "type": "boolean",
                    "example": false
                },
                "from": {
                    "type": "string",
                    "example": "+18005550199"
                },
                "sim": {
                    "description": "SIM card that received the message",
                    "allOf": [
                        {
                            "$ref": "#/definitions/entities.SIM"
                        }
                    ],
                    "example": "SIM1"
                },
                "timestamp": {
                    "description": "Timestamp is the time when the event was emitted, Please send the timestamp in UTC with as much precision as possible",
                    "type": "string",
                    "example": "2022-06-05T14:26:09.527976+03:00"
                },
                "to": {
                    "type": "string",
                    "example": "+18005550100"
                }
            }
        },
        "requests.MessageSend": {
            "type": "object",
            "required": [
                "content",
                "from",
                "to"
            ],
            "properties": {
                "attachments": {
                    "description": "Attachments are optional. When you provide a list of attachments, the message will be sent out as an MMS",
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "example": [
                        "https://example.com/image.jpg",
                        "https://example.com/video.mp4"
                    ]
                },
                "content": {
                    "type": "string",
                    "example": "This is a sample text message"
                },
                "encrypted": {
                    "description": "Encrypted is an optional parameter used to determine if the content is end-to-end encrypted. Make sure to set the encryption key on the httpSMS mobile app",
                    "type": "boolean",
                    "example": false
                },
                "from": {
                    "type": "string",
                    "example": "+18005550199"
                },
                "request_id": {
                    "description": "RequestID is an optional parameter used to track a request from the client's perspective",
                    "type": "string",
                    "example": "153554b5-ae44-44a0-8f4f-7bbac5657ad4"
                },
                "send_at": {
                    "description": "SendAt is an optional parameter used to schedule a message to be sent in the future. The time is considered to be in your profile's local timezone and you can queue messages for up to 20 days (480 hours) in the future.",
                    "type": "string",
                    "example": "2025-12-19T16:39:57-08:00"
                },
                "to": {
                    "type": "string",
                    "example": "+18005550100"
                }
            }
        },
        "requests.MessageSendScheduleStore": {
            "type": "object",
            "required": [
                "name",
                "timezone",
                "windows"
            ],
            "properties": {
                "name": {
                    "type": "string"
                },
                "timezone": {
                    "type": "string"
                },
                "windows": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/requests.MessageSendScheduleWindow"
                    }
                }
            }
        },
        "requests.MessageSendScheduleWindow": {
            "type": "object",
            "required": [
                "day_of_week",
                "end_minute",
                "start_minute"
            ],
            "properties": {
                "day_of_week": {
                    "type": "integer"
                },
                "end_minute": {
                    "type": "integer"
                },
                "start_minute": {
                    "type": "integer"
                }
            }
        },
        "requests.MessageThreadUpdate": {
            "type": "object",
            "required": [
                "is_archived"
            ],
            "properties": {
                "is_archived": {
                    "type": "boolean",
                    "example": true
                }
            }
        },
        "requests.PhoneAPIKeyStoreRequest": {
            "type": "object",
            "required": [
                "name"
            ],
            "properties": {
                "name": {
                    "type": "string",
                    "example": "My Phone API Key"
                }
            }
        },
        "requests.PhoneFCMToken": {
            "type": "object",
            "required": [
                "fcm_token",
                "phone_number",
                "sim"
            ],
            "properties": {
                "fcm_token": {
                    "type": "string",
                    "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzd....."
                },
                "phone_number": {
                    "type": "string",
                    "example": "[+18005550199]"
                },
                "sim": {
                    "description": "SIM is the SIM slot of the phone in case the phone has more than 1 SIM slot",
                    "type": "string",
                    "example": "SIM1"
                }
            }
        },
        "requests.PhoneUpsert": {
            "type": "object",
            "required": [
                "fcm_token",
                "max_send_attempts",
                "message_expiration_seconds",
                "messages_per_minute",
                "missed_call_auto_reply",
                "phone_number",
                "sim"
            ],
            "properties": {
                "fcm_token": {
                    "type": "string",
                    "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzd....."
                },
                "max_send_attempts": {
                    "description": "MaxSendAttempts is the number of attempts when sending an SMS message to handle the case where the phone is offline.",
                    "type": "integer",
                    "example": 2
                },
                "message_expiration_seconds": {
                    "description": "MessageExpirationSeconds is the duration in seconds after sending a message when it is considered to be expired.",
                    "type": "integer",
                    "example": 12345
                },
                "message_send_schedule_id": {
                    "type": "string",
                    "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
                },
                "messages_per_minute": {
                    "type": "integer",
                    "example": 1
                },
                "missed_call_auto_reply": {
                    "type": "string",
                    "example": "e.g. This phone cannot receive calls. Please send an SMS instead."
                },
                "phone_number": {
                    "type": "string",
                    "example": "+18005550199"
                },
                "sim": {
                    "description": "SIM is the SIM slot of the phone in case the phone has more than 1 SIM slot",
                    "type": "string",
                    "example": "SIM1"
                }
            }
        },
        "requests.UserNotificationUpdate": {
            "type": "object",
            "required": [
                "heartbeat_enabled",
                "message_status_enabled",
                "newsletter_enabled",
                "webhook_enabled"
            ],
            "properties": {
                "heartbeat_enabled": {
                    "type": "boolean",
                    "example": true
                },
                "message_status_enabled": {
                    "type": "boolean",
                    "example": true
                },
                "newsletter_enabled": {
                    "type": "boolean",
                    "example": true
                },
                "webhook_enabled": {
                    "type": "boolean",
                    "example": true
                }
            }
        },
        "requests.UserPaymentInvoice": {
            "type": "object",
            "required": [
                "address",
                "city",
                "country",
                "name",
                "notes",
                "state",
                "zip_code"
            ],
            "properties": {
                "address": {
                    "type": "string",
                    "example": "221B Baker Street, London"
                },
                "city": {
                    "type": "string",
                    "example": "Los Angeles"
                },
                "country": {
                    "type": "string",
                    "example": "US"
                },
                "name": {
                    "type": "string",
                    "example": "Acme Corp"
                },
                "notes": {
                    "type": "string",
                    "example": "Thank you for your business!"
                },
                "state": {
                    "type": "string",
                    "example": "CA"
                },
                "zip_code": {
                    "type": "string",
                    "example": "9800"
                }
            }
        },
        "requests.UserUpdate": {
            "type": "object",
            "required": [
                "active_phone_id",
                "timezone"
            ],
            "properties": {
                "active_phone_id": {
                    "type": "string",
                    "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
                },
                "timezone": {
                    "type": "string",
                    "example": "Europe/Helsinki"
                }
            }
        },
        "requests.WebhookStore": {
            "type": "object",
            "required": [
                "events",
                "phone_numbers",
                "signing_key",
                "url"
            ],
            "properties": {
                "events": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "phone_numbers": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "example": [
                        "+18005550100",
                        "+18005550100"
                    ]
                },
                "signing_key": {
                    "type": "string"
                },
                "url": {
                    "type": "string"
                }
            }
        },
        "requests.WebhookUpdate": {
            "type": "object",
            "required": [
                "events",
                "phone_numbers",
                "signing_key",
                "url"
            ],
            "properties": {
                "events": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "phone_numbers": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "example": [
                        "+18005550100",
                        "+18005550100"
                    ]
                },
                "signing_key": {
                    "type": "string"
                },
                "url": {
                    "type": "string"
                }
            }
        },
        "responses.BadRequest": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "type": "string",
                    "example": "The request body is not a valid JSON string"
                },
                "message": {
                    "type": "string",
                    "example": "The request isn't properly formed"
                },
                "status": {
                    "type": "string",
                    "example": "error"
                }
            }
        },
        "responses.BillingUsageResponse": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "$ref": "#/definitions/entities.BillingUsage"
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.BillingUsagesResponse": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/entities.BillingUsage"
                    }
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.BulkMessagesResponse": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/entities.BulkMessage"
                    }
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.DiscordResponse": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "$ref": "#/definitions/entities.Discord"
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.DiscordsResponse": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/entities.Discord"
                    }
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.HeartbeatResponse": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "$ref": "#/definitions/entities.Heartbeat"
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.HeartbeatsResponse": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/entities.Heartbeat"
                    }
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.InternalServerError": {
            "type": "object",
            "required": [
                "message",
                "status"
            ],
            "properties": {
                "message": {
                    "type": "string",
                    "example": "We ran into an internal error while handling the request."
                },
                "status": {
                    "type": "string",
                    "example": "error"
                }
            }
        },
        "responses.MessageResponse": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "$ref": "#/definitions/entities.Message"
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.MessageSendScheduleResponse": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "$ref": "#/definitions/entities.MessageSendSchedule"
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.MessageSendSchedulesResponse": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/entities.MessageSendSchedule"
                    }
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.MessageThreadsResponse": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/entities.MessageThread"
                    }
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.MessagesResponse": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/entities.Message"
                    }
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.NoContent": {
            "type": "object",
            "required": [
                "message",
                "status"
            ],
            "properties": {
                "message": {
                    "type": "string",
                    "example": "action performed successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.NotFound": {
            "type": "object",
            "required": [
                "message",
                "status"
            ],
            "properties": {
                "message": {
                    "type": "string",
                    "example": "cannot find message with ID [32343a19-da5e-4b1b-a767-3298a73703ca]"
                },
                "status": {
                    "type": "string",
                    "example": "error"
                }
            }
        },
        "responses.OkString": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "type": "string"
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.PaymentRequired": {
            "type": "object",
            "required": [
                "message",
                "status"
            ],
            "properties": {
                "message": {
                    "type": "string",
                    "example": "You have reached the maximum number of allowed resources. Please upgrade your plan."
                },
                "status": {
                    "type": "string",
                    "example": "error"
                }
            }
        },
        "responses.PhoneAPIKeyResponse": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "$ref": "#/definitions/entities.PhoneAPIKey"
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.PhoneAPIKeysResponse": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/entities.PhoneAPIKey"
                    }
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.PhoneResponse": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "$ref": "#/definitions/entities.Phone"
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.PhonesResponse": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/entities.Phone"
                    }
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.Unauthorized": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "type": "string",
                    "example": "Make sure your API key is set in the [X-API-Key] header in the request"
                },
                "message": {
                    "type": "string",
                    "example": "You are not authorized to carry out this request."
                },
                "status": {
                    "type": "string",
                    "example": "error"
                }
            }
        },
        "responses.UnprocessableEntity": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    }
                },
                "message": {
                    "type": "string",
                    "example": "validation errors while handling request"
                },
                "status": {
                    "type": "string",
                    "example": "error"
                }
            }
        },
        "responses.UserResponse": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "$ref": "#/definitions/entities.User"
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.UserSubscriptionPaymentsResponse": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "required": [
                            "attributes",
                            "id",
                            "type"
                        ],
                        "properties": {
                            "attributes": {
                                "type": "object",
                                "required": [
                                    "billing_reason",
                                    "card_brand",
                                    "card_last_four",
                                    "created_at",
                                    "currency",
                                    "currency_rate",
                                    "discount_total",
                                    "discount_total_formatted",
                                    "discount_total_usd",
                                    "refunded",
                                    "refunded_amount",
                                    "refunded_amount_formatted",
                                    "refunded_amount_usd",
                                    "refunded_at",
                                    "status",
                                    "status_formatted",
                                    "subtotal",
                                    "subtotal_formatted",
                                    "subtotal_usd",
                                    "tax",
                                    "tax_formatted",
                                    "tax_inclusive",
                                    "tax_usd",
                                    "total",
                                    "total_formatted",
                                    "total_usd",
                                    "updated_at"
                                ],
                                "properties": {
                                    "billing_reason": {
                                        "type": "string"
                                    },
                                    "card_brand": {
                                        "type": "string"
                                    },
                                    "card_last_four": {
                                        "type": "string"
                                    },
                                    "created_at": {
                                        "type": "string"
                                    },
                                    "currency": {
                                        "type": "string"
                                    },
                                    "currency_rate": {
                                        "type": "string"
                                    },
                                    "discount_total": {
                                        "type": "integer"
                                    },
                                    "discount_total_formatted": {
                                        "type": "string"
                                    },
                                    "discount_total_usd": {
                                        "type": "integer"
                                    },
                                    "refunded": {
                                        "type": "boolean"
                                    },
                                    "refunded_amount": {
                                        "type": "integer"
                                    },
                                    "refunded_amount_formatted": {
                                        "type": "string"
                                    },
                                    "refunded_amount_usd": {
                                        "type": "integer"
                                    },
                                    "refunded_at": {},
                                    "status": {
                                        "type": "string"
                                    },
                                    "status_formatted": {
                                        "type": "string"
                                    },
                                    "subtotal": {
                                        "type": "integer"
                                    },
                                    "subtotal_formatted": {
                                        "type": "string"
                                    },
                                    "subtotal_usd": {
                                        "type": "integer"
                                    },
                                    "tax": {
                                        "type": "integer"
                                    },
                                    "tax_formatted": {
                                        "type": "string"
                                    },
                                    "tax_inclusive": {
                                        "type": "boolean"
                                    },
                                    "tax_usd": {
                                        "type": "integer"
                                    },
                                    "total": {
                                        "type": "integer"
                                    },
                                    "total_formatted": {
                                        "type": "string"
                                    },
                                    "total_usd": {
                                        "type": "integer"
                                    },
                                    "updated_at": {
                                        "type": "string"
                                    }
                                }
                            },
                            "id": {
                                "type": "string"
                            },
                            "type": {
                                "type": "string"
                            }
                        }
                    }
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.WebhookResponse": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "$ref": "#/definitions/entities.Webhook"
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        },
        "responses.WebhooksResponse": {
            "type": "object",
            "required": [
                "data",
                "message",
                "status"
            ],
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/entities.Webhook"
                    }
                },
                "message": {
                    "type": "string",
                    "example": "Request handled successfully"
                },
                "status": {
                    "type": "string",
                    "example": "success"
                }
            }
        }
    },
    "securityDefinitions": {
        "ApiKeyAuth": {
            "type": "apiKey",
            "name": "x-api-Key",
            "in": "header"
        }
    }
}`

// SwaggerInfo holds exported Swagger Info so clients can modify it
var SwaggerInfo = &swag.Spec{
	Version:          "1.0",
	Host:             "api.httpsms.com",
	BasePath:         "/v1",
	Schemes:          []string{"https"},
	Title:            "httpSMS API Reference",
	Description:      "Use your Android phone to send and receive SMS messages via a simple programmable API with end-to-end encryption.",
	InfoInstanceName: "swagger",
	SwaggerTemplate:  docTemplate,
	LeftDelim:        "{{",
	RightDelim:       "}}",
}

func init() {
	swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo)
}
