basePath: / definitions: apierr.APIError: enum: - -1 - 0 - 1101 - 1102 - 1103 - 1104 - 1105 - 1106 - 1121 - 1151 - 1152 - 1153 - 1152 - 1161 - 1171 - 1201 - 1202 - 1203 - 1204 - 1205 - 1206 - 1207 - 1208 - 1209 - 1301 - 1302 - 1303 - 1304 - 1305 - 1306 - 1307 - 1311 - 1401 - 1501 - 1511 - 1512 - 2101 - 3001 - 3002 - 9901 - 9902 - 9903 - 9904 - 9905 type: integer x-enum-varnames: - UNDEFINED - NO_ERROR - MISSING_UID - MISSING_TOK - MISSING_TITLE - INVALID_PRIO - REQ_METHOD - INVALID_CLIENTTYPE - PAGETOKEN_ERROR - BINDFAIL_QUERY_PARAM - BINDFAIL_BODY_PARAM - BINDFAIL_URI_PARAM - BINDFAIL_HEADER_PARAM - INVALID_BODY_PARAM - INVALID_ENUM_VALUE - NO_TITLE - TITLE_TOO_LONG - CONTENT_TOO_LONG - USR_MSG_ID_TOO_LONG - TIMESTAMP_OUT_OF_RANGE - SENDERNAME_TOO_LONG - CHANNEL_TOO_LONG - CHANNEL_DESCRIPTION_TOO_LONG - CHANNEL_NAME_EMPTY - USER_NOT_FOUND - CLIENT_NOT_FOUND - CHANNEL_NOT_FOUND - SUBSCRIPTION_NOT_FOUND - MESSAGE_NOT_FOUND - SUBSCRIPTION_USER_MISMATCH - KEY_NOT_FOUND - USER_AUTH_FAILED - NO_DEVICE_LINKED - CHANNEL_ALREADY_EXISTS - CANNOT_SELFDELETE_KEY - CANNOT_SELFUPDATE_KEY - QUOTA_REACHED - FAILED_VERIFY_PRO_TOKEN - INVALID_PRO_TOKEN - FIREBASE_COM_FAILED - FIREBASE_COM_ERRORED - INTERNAL_EXCEPTION - PANIC - NOT_IMPLEMENTED ginresp.apiError: properties: errhighlight: type: integer error: type: integer message: type: string success: type: boolean type: object ginresp.compatAPIError: properties: errid: type: integer message: type: string success: type: boolean type: object handler.Ack.response: properties: message: type: string new_ack: type: integer prev_ack: type: integer success: type: boolean type: object handler.AddClient.body: properties: agent_model: type: string agent_version: type: string client_type: $ref: '#/definitions/models.ClientType' fcm_token: type: string name: type: string required: - agent_model - agent_version - client_type - fcm_token type: object handler.CreateChannel.body: properties: description: type: string name: type: string subscribe: type: boolean type: object handler.CreateSubscription.body: properties: channel_id: type: string channel_internal_name: type: string channel_owner_user_id: type: string type: object handler.CreateUser.body: properties: agent_model: type: string agent_version: type: string client_name: type: string client_type: $ref: '#/definitions/models.ClientType' fcm_token: type: string no_client: type: boolean pro_token: type: string username: type: string type: object handler.CreateUserKey.body: properties: all_channels: type: boolean channels: items: type: string type: array name: type: string permissions: type: string required: - name - permissions type: object handler.DatabaseTest.response: properties: libVersion: type: string libVersionNumber: type: integer sourceID: type: string success: type: boolean type: object handler.Expand.response: properties: data: $ref: '#/definitions/models.CompatMessage' message: type: string success: type: boolean type: object handler.Health.response: properties: status: type: string type: object handler.Info.response: properties: fcm_token_set: type: boolean is_pro: type: integer message: type: string quota: type: integer quota_max: type: integer success: type: boolean unack_count: type: integer user_id: type: integer user_key: type: string type: object handler.ListChannelMessages.response: properties: messages: items: $ref: '#/definitions/models.Message' type: array next_page_token: type: string page_size: type: integer type: object handler.ListChannelSubscriptions.response: properties: subscriptions: items: $ref: '#/definitions/models.Subscription' type: array type: object handler.ListChannels.response: properties: channels: items: $ref: '#/definitions/models.ChannelWithSubscription' type: array type: object handler.ListClients.response: properties: clients: items: $ref: '#/definitions/models.Client' type: array type: object handler.ListMessages.response: properties: messages: items: $ref: '#/definitions/models.Message' type: array next_page_token: type: string page_size: type: integer type: object handler.ListUserKeys.response: properties: keys: items: $ref: '#/definitions/models.KeyToken' type: array type: object handler.ListUserSubscriptions.response: properties: subscriptions: items: $ref: '#/definitions/models.Subscription' type: array type: object handler.Register.response: properties: is_pro: type: boolean message: type: string quota: type: integer quota_max: type: integer success: type: boolean user_id: type: integer user_key: type: string type: object handler.Requery.response: properties: count: type: integer data: items: $ref: '#/definitions/models.CompatMessage' type: array message: type: string success: type: boolean type: object handler.SendMessage.combined: properties: channel: example: test type: string content: example: This is a message type: string key: example: P3TNH8mvv14fm type: string msg_id: example: db8b0e6a-a08c-4646 type: string priority: enum: - 0 - 1 - 2 example: 1 type: integer sender_name: example: example-server type: string timestamp: example: 1669824037 type: number title: example: Hello World type: string user_id: example: "7725" type: string type: object handler.SendMessage.response: properties: errhighlight: type: integer error: $ref: '#/definitions/apierr.APIError' is_pro: type: boolean message: type: string messagecount: type: integer quota: type: integer quota_max: type: integer scn_msg_id: type: string success: type: boolean suppress_send: type: boolean type: object handler.Sleep.response: properties: duration: type: number end: type: string start: type: string type: object handler.Update.response: properties: is_pro: type: integer message: type: string quota: type: integer quota_max: type: integer success: type: boolean user_id: type: integer user_key: type: string type: object handler.UpdateSubscription.body: properties: confirmed: type: boolean type: object handler.UpdateUserKey.body: properties: all_channels: type: boolean channels: items: type: string type: array name: type: string permissions: type: string type: object handler.Upgrade.response: properties: is_pro: type: boolean message: type: string quota: type: integer quota_max: type: integer success: type: boolean user_id: type: integer type: object handler.UptimeKuma.body: properties: heartbeat: properties: localDateTime: type: string msg: type: string status: type: integer time: type: string timezone: type: string timezoneOffset: type: string type: object monitor: properties: name: type: string url: type: string type: object msg: type: string type: object handler.UptimeKuma.response: properties: message_id: type: string type: object handler.pingResponse: properties: info: $ref: '#/definitions/handler.pingResponseInfo' message: type: string type: object handler.pingResponseInfo: properties: addr: type: string headers: additionalProperties: items: type: string type: array type: object method: type: string request: type: string uri: type: string type: object models.ChannelPreview: properties: channel_id: type: string description_name: type: string display_name: type: string internal_name: type: string owner_user_id: type: string type: object models.ChannelWithSubscription: properties: channel_id: type: string description_name: type: string display_name: type: string internal_name: type: string messages_sent: type: integer owner_user_id: type: string subscribe_key: description: can be nil, depending on endpoint type: string subscription: $ref: '#/definitions/models.Subscription' timestamp_created: type: string timestamp_lastsent: type: string type: object models.Client: properties: agent_model: type: string agent_version: type: string client_id: type: string fcm_token: type: string name: type: string timestamp_created: type: string type: $ref: '#/definitions/models.ClientType' user_id: type: string type: object models.ClientType: enum: - ANDROID - IOS - LINUX - MACOS - WINDOWS type: string x-enum-varnames: - ClientTypeAndroid - ClientTypeIOS - ClientTypeLinux - ClientTypeMacOS - ClientTypeWindows models.CompatMessage: properties: body: type: string priority: type: integer scn_msg_id: type: integer timestamp: type: integer title: type: string trimmed: type: boolean usr_msg_id: type: string type: object models.KeyToken: properties: all_channels: type: boolean channels: items: type: string type: array keytoken_id: type: string messages_sent: type: integer name: type: string owner_user_id: type: string permissions: items: $ref: '#/definitions/models.TokenPerm' type: array timestamp_created: type: string timestamp_lastused: type: string token: type: string type: object models.KeyTokenPreview: properties: all_channels: type: boolean channels: items: type: string type: array keytoken_id: type: string name: type: string owner_user_id: type: string permissions: type: string type: object models.Message: properties: channel_id: type: string channel_internal_name: type: string content: type: string message_id: type: string priority: type: integer sender_ip: type: string sender_name: type: string sender_user_id: description: user that sent the message (this is also the owner of the channel that contains it) type: string timestamp: type: string title: type: string trimmed: type: boolean usr_message_id: type: string type: object models.Subscription: properties: channel_id: type: string channel_internal_name: type: string channel_owner_user_id: type: string confirmed: type: boolean subscriber_user_id: type: string subscription_id: type: string timestamp_created: type: string type: object models.TokenPerm: enum: - A - CR - CS - UR type: string x-enum-comments: PermAdmin: Edit userdata (+ includes all other permissions) PermChannelRead: Read messages PermChannelSend: Send messages PermUserRead: Read userdata x-enum-varnames: - PermAdmin - PermChannelRead - PermChannelSend - PermUserRead models.User: properties: default_channel: type: string default_priority: type: integer is_pro: type: boolean max_body_size: type: integer max_channel_description_length: type: integer max_channel_name_length: type: integer max_sender_name_length: type: integer max_title_length: type: integer max_user_message_id_length: type: integer messages_sent: type: integer quota_max: type: integer quota_remaining: type: integer quota_used: type: integer timestamp_created: type: string timestamp_lastread: type: string timestamp_lastsent: type: string user_id: type: string username: type: string type: object models.UserPreview: properties: user_id: type: string username: type: string type: object models.UserWithClientsAndKeys: properties: admin_key: type: string clients: items: $ref: '#/definitions/models.Client' type: array default_channel: type: string default_priority: type: integer is_pro: type: boolean max_body_size: type: integer max_channel_description_length: type: integer max_channel_name_length: type: integer max_sender_name_length: type: integer max_title_length: type: integer max_user_message_id_length: type: integer messages_sent: type: integer quota_max: type: integer quota_remaining: type: integer quota_used: type: integer read_key: type: string send_key: type: string timestamp_created: type: string timestamp_lastread: type: string timestamp_lastsent: type: string user_id: type: string username: type: string type: object host: simplecloudnotifier.de info: contact: {} description: API for SCN title: SimpleCloudNotifier API version: "2.0" paths: /: post: description: All parameter can be set via query-parameter or the json body. Only UserID, UserKey and Title are required parameters: - example: test in: query name: channel type: string - example: This is a message in: query name: content type: string - example: P3TNH8mvv14fm in: query name: key type: string - example: db8b0e6a-a08c-4646 in: query name: msg_id type: string - enum: - 0 - 1 - 2 example: 1 in: query name: priority type: integer - example: example-server in: query name: sender_name type: string - example: 1669824037 in: query name: timestamp type: number - example: Hello World in: query name: title type: string - example: "7725" in: query name: user_id type: string - description: ' ' in: body name: post_body schema: $ref: '#/definitions/handler.SendMessage.combined' - example: test in: formData name: channel type: string - example: This is a message in: formData name: content type: string - example: P3TNH8mvv14fm in: formData name: key type: string - example: db8b0e6a-a08c-4646 in: formData name: msg_id type: string - enum: - 0 - 1 - 2 example: 1 in: formData name: priority type: integer - example: example-server in: formData name: sender_name type: string - example: 1669824037 in: formData name: timestamp type: number - example: Hello World in: formData name: title type: string - example: "7725" in: formData name: user_id type: string responses: "200": description: OK schema: $ref: '#/definitions/handler.SendMessage.response' "400": description: Bad Request schema: $ref: '#/definitions/ginresp.apiError' "401": description: The user_id was not found or the user_key is wrong schema: $ref: '#/definitions/ginresp.apiError' "403": description: The user has exceeded its daily quota - wait 24 hours or upgrade your account schema: $ref: '#/definitions/ginresp.apiError' "500": description: An internal server error occurred - try again later schema: $ref: '#/definitions/ginresp.apiError' summary: Send a new message tags: - External /api/ack.php: get: deprecated: true operationId: compat-ack parameters: - description: the user_id in: query name: user_id required: true type: string - description: the user_key in: query name: user_key required: true type: string - description: the message id in: query name: scn_msg_id required: true type: string - description: the user_id in: formData name: user_id required: true type: string - description: the user_key in: formData name: user_key required: true type: string - description: the message id in: formData name: scn_msg_id required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/handler.Ack.response' default: description: "" schema: $ref: '#/definitions/ginresp.compatAPIError' summary: Acknowledge that a message was received tags: - API-v1 /api/db-test: post: operationId: api-common-dbtest responses: "200": description: OK schema: $ref: '#/definitions/handler.DatabaseTest.response' "500": description: Internal Server Error schema: $ref: '#/definitions/ginresp.apiError' summary: Check for a working database connection tags: - Common /api/expand.php: get: deprecated: true operationId: compat-expand parameters: - description: The user_id in: query name: user_id required: true type: string - description: The user_key in: query name: user_key required: true type: string - description: The message-id in: query name: scn_msg_id required: true type: string - description: The user_id in: formData name: user_id required: true type: string - description: The user_key in: formData name: user_key required: true type: string - description: The message-id in: formData name: scn_msg_id required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/handler.Expand.response' default: description: "" schema: $ref: '#/definitions/ginresp.compatAPIError' summary: Get a whole (potentially truncated) message tags: - API-v1 /api/health: get: operationId: api-common-health responses: "200": description: OK schema: $ref: '#/definitions/handler.Health.response' "500": description: Internal Server Error schema: $ref: '#/definitions/ginresp.apiError' summary: Server Health-checks tags: - Common /api/info.php: get: deprecated: true operationId: compat-info parameters: - description: the user_id in: query name: user_id required: true type: string - description: the user_key in: query name: user_key required: true type: string - description: the user_id in: formData name: user_id required: true type: string - description: the user_key in: formData name: user_key required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/handler.Info.response' default: description: "" schema: $ref: '#/definitions/ginresp.compatAPIError' summary: Get information about the current user tags: - API-v1 /api/ping: delete: responses: "200": description: OK schema: $ref: '#/definitions/handler.pingResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/ginresp.apiError' summary: Simple endpoint to test connection (any http method) tags: - Common get: responses: "200": description: OK schema: $ref: '#/definitions/handler.pingResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/ginresp.apiError' summary: Simple endpoint to test connection (any http method) tags: - Common patch: responses: "200": description: OK schema: $ref: '#/definitions/handler.pingResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/ginresp.apiError' summary: Simple endpoint to test connection (any http method) tags: - Common post: responses: "200": description: OK schema: $ref: '#/definitions/handler.pingResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/ginresp.apiError' summary: Simple endpoint to test connection (any http method) tags: - Common put: responses: "200": description: OK schema: $ref: '#/definitions/handler.pingResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/ginresp.apiError' summary: Simple endpoint to test connection (any http method) tags: - Common /api/register.php: get: deprecated: true operationId: compat-register parameters: - description: the (android) fcm token in: query name: fcm_token required: true type: string - description: if the user is a paid account enum: - "true" - "false" in: query name: pro required: true type: string - description: the (android) IAP token in: query name: pro_token required: true type: string - description: the (android) fcm token in: formData name: fcm_token required: true type: string - description: if the user is a paid account enum: - "true" - "false" in: formData name: pro required: true type: string - description: the (android) IAP token in: formData name: pro_token required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/handler.Register.response' default: description: "" schema: $ref: '#/definitions/ginresp.compatAPIError' summary: Register a new account tags: - API-v1 /api/requery.php: get: deprecated: true operationId: compat-requery parameters: - description: the user_id in: query name: user_id required: true type: string - description: the user_key in: query name: user_key required: true type: string - description: the user_id in: formData name: user_id required: true type: string - description: the user_key in: formData name: user_key required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/handler.Requery.response' default: description: "" schema: $ref: '#/definitions/ginresp.compatAPIError' summary: Return all not-acknowledged messages tags: - API-v1 /api/sleep/{secs}: post: operationId: api-common-sleep parameters: - description: sleep delay (in seconds) in: path name: secs required: true type: number responses: "200": description: OK schema: $ref: '#/definitions/handler.Sleep.response' "400": description: Bad Request schema: $ref: '#/definitions/ginresp.apiError' "500": description: Internal Server Error schema: $ref: '#/definitions/ginresp.apiError' summary: Return 200 after x seconds tags: - Common /api/update.php: get: deprecated: true operationId: compat-update parameters: - description: the user_id in: query name: user_id required: true type: string - description: the user_key in: query name: user_key required: true type: string - description: the (android) fcm token in: query name: fcm_token required: true type: string - description: the user_id in: formData name: user_id required: true type: string - description: the user_key in: formData name: user_key required: true type: string - description: the (android) fcm token in: formData name: fcm_token required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/handler.Update.response' default: description: "" schema: $ref: '#/definitions/ginresp.compatAPIError' summary: Set the fcm-token (android) tags: - API-v1 /api/upgrade.php: get: deprecated: true operationId: compat-upgrade parameters: - description: the user_id in: query name: user_id required: true type: string - description: the user_key in: query name: user_key required: true type: string - description: if the user is a paid account enum: - "true" - "false" in: query name: pro required: true type: string - description: the (android) IAP token in: query name: pro_token required: true type: string - description: the user_id in: formData name: user_id required: true type: string - description: the user_key in: formData name: user_key required: true type: string - description: if the user is a paid account enum: - "true" - "false" in: formData name: pro required: true type: string - description: the (android) IAP token in: formData name: pro_token required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/handler.Upgrade.response' default: description: "" schema: $ref: '#/definitions/ginresp.compatAPIError' summary: Upgrade a free account to a paid account tags: - API-v1 /api/v2/messages: get: description: |- The next_page_token is an opaque token, the special value "@start" (or empty-string) is the beginning and "@end" is the end Simply start the pagination without a next_page_token and get the next page by calling this endpoint with the returned next_page_token of the last query If there are no more entries the token "@end" will be returned By default we return long messages with a trimmed body, if trimmed=false is supplied we return full messages (this reduces the max page_size) operationId: api-messages-list parameters: - description: RFC3339 in: query name: after type: string - description: RFC3339 in: query name: before type: string - collectionFormat: csv in: query items: type: string name: channel type: array - collectionFormat: csv in: query items: type: string name: channel_id type: array - in: query name: filter type: string - in: query name: next_page_token type: string - in: query name: page_size type: integer - collectionFormat: csv in: query items: type: integer name: priority type: array - collectionFormat: csv in: query items: type: string name: sender type: array - in: query name: trimmed type: boolean - collectionFormat: csv in: query items: type: string name: used_key type: array responses: "200": description: OK schema: $ref: '#/definitions/handler.ListMessages.response' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: List all (subscribed) messages tags: - API-v2 /api/v2/messages/{mid}: delete: description: The user must own the message and request the resource with the ADMIN Key operationId: api-messages-delete parameters: - description: MessageID in: path name: mid required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/models.Message' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: message not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Delete a single message tags: - API-v2 get: description: |- The user must either own the message and request the resource with the READ or ADMIN Key Or the user must subscribe to the corresponding channel (and be confirmed) and request the resource with the READ or ADMIN Key The returned message is never trimmed operationId: api-messages-get parameters: - description: MessageID in: path name: mid required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/models.Message' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: message not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Get a single message (untrimmed) tags: - API-v2 /api/v2/preview/channels/{cid}: get: operationId: api-channels-get-preview parameters: - description: ChannelID in: path name: cid required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/models.ChannelPreview' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: channel not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Get a single channel (similar to api-channels-get, but can be called from anyone and only returns a subset of fields) tags: - API-v2 /api/v2/preview/keys/{kid}: get: operationId: api-tokenkeys-get-preview parameters: - description: TokenKeyID in: path name: kid required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/models.KeyTokenPreview' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: message not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Get a single key (similar to api-tokenkeys-get, but can be called from anyone and only returns a subset of fields) tags: - API-v2 /api/v2/preview/users/{uid}: get: operationId: api-user-get-preview parameters: - description: UserID in: path name: uid required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/models.UserPreview' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: user not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Get a user (similar to api-user-get, but can be called from anyone and only returns a subset of fields) tags: - API-v2 /api/v2/users: post: operationId: api-user-create parameters: - description: ' ' in: body name: post_body schema: $ref: '#/definitions/handler.CreateUser.body' responses: "200": description: OK schema: $ref: '#/definitions/models.UserWithClientsAndKeys' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Create a new user tags: - API-v2 /api/v2/users/{uid}: get: operationId: api-user-get parameters: - description: UserID in: path name: uid required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/models.User' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: user not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Get a user tags: - API-v2 patch: description: The body-values are optional, only send the ones you want to update operationId: api-user-update parameters: - description: UserID in: path name: uid required: true type: string - description: Change the username (send an empty string to clear it) in: body name: username schema: type: string - description: Send a verification of premium purchase in: body name: pro_token schema: type: string responses: "200": description: OK schema: $ref: '#/definitions/models.User' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: user not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: (Partially) update a user tags: - API-v2 /api/v2/users/{uid}/channels: get: description: |- The possible values for 'selector' are: - "owned" Return all channels of the user - "subscribed" Return all channels that the user is subscribing to - "all" Return channels that the user owns or is subscribing - "subscribed_any" Return all channels that the user is subscribing to (even unconfirmed) - "all_any" Return channels that the user owns or is subscribing (even unconfirmed) operationId: api-channels-list parameters: - description: UserID in: path name: uid required: true type: string - description: 'Filter channels (default: owned)' enum: - owned - subscribed - all - subscribed_any - all_any in: query name: selector type: string responses: "200": description: OK schema: $ref: '#/definitions/handler.ListChannels.response' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: List channels of a user (subscribed/owned/all) tags: - API-v2 post: operationId: api-channels-create parameters: - description: UserID in: path name: uid required: true type: string - description: ' ' in: body name: post_body schema: $ref: '#/definitions/handler.CreateChannel.body' responses: "200": description: OK schema: $ref: '#/definitions/models.ChannelWithSubscription' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "409": description: channel already exists schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Create a new (empty) channel tags: - API-v2 /api/v2/users/{uid}/channels/{cid}: get: operationId: api-channels-get parameters: - description: UserID in: path name: uid required: true type: string - description: ChannelID in: path name: cid required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/models.ChannelWithSubscription' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: channel not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Get a single channel tags: - API-v2 patch: operationId: api-channels-update parameters: - description: UserID in: path name: uid required: true type: string - description: ChannelID in: path name: cid required: true type: string - description: Send `true` to create a new subscribe_key in: body name: subscribe_key schema: type: string - description: Send `true` to create a new send_key in: body name: send_key schema: type: string - description: Change the cahnnel display-name (only chnages to lowercase/uppercase are allowed - internal_name must stay the same) in: body name: display_name schema: type: string responses: "200": description: OK schema: $ref: '#/definitions/models.ChannelWithSubscription' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: channel not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: (Partially) update a channel tags: - API-v2 /api/v2/users/{uid}/channels/{cid}/messages: get: description: |- The next_page_token is an opaque token, the special value "@start" (or empty-string) is the beginning and "@end" is the end Simply start the pagination without a next_page_token and get the next page by calling this endpoint with the returned next_page_token of the last query If there are no more entries the token "@end" will be returned By default we return long messages with a trimmed body, if trimmed=false is supplied we return full messages (this reduces the max page_size) operationId: api-channel-messages parameters: - in: query name: filter type: string - in: query name: next_page_token type: string - in: query name: page_size type: integer - in: query name: trimmed type: boolean - description: UserID in: path name: uid required: true type: string - description: ChannelID in: path name: cid required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/handler.ListChannelMessages.response' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: channel not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: List messages of a channel tags: - API-v2 /api/v2/users/{uid}/channels/{cid}/subscriptions: get: operationId: api-chan-subscriptions-list parameters: - description: UserID in: path name: uid required: true type: string - description: ChannelID in: path name: cid required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/handler.ListChannelSubscriptions.response' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: channel not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: List all subscriptions of a channel tags: - API-v2 /api/v2/users/{uid}/clients: get: operationId: api-clients-list parameters: - description: UserID in: path name: uid required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/handler.ListClients.response' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: List all clients tags: - API-v2 post: operationId: api-clients-create parameters: - description: UserID in: path name: uid required: true type: string - description: ' ' in: body name: post_body schema: $ref: '#/definitions/handler.AddClient.body' responses: "200": description: OK schema: $ref: '#/definitions/models.Client' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Add a new clients tags: - API-v2 /api/v2/users/{uid}/clients/{cid}: delete: operationId: api-clients-delete parameters: - description: UserID in: path name: uid required: true type: string - description: ClientID in: path name: cid required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/models.Client' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: client not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Delete a client tags: - API-v2 get: operationId: api-clients-get parameters: - description: UserID in: path name: uid required: true type: string - description: ClientID in: path name: cid required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/models.Client' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: client not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Get a single client tags: - API-v2 patch: description: The body-values are optional, only send the ones you want to update operationId: api-client-update parameters: - description: UserID in: path name: uid required: true type: string - description: ClientID in: path name: cid required: true type: string - description: Change the clientname (send an empty string to clear it) in: body name: clientname schema: type: string - description: Send a verification of premium purchase in: body name: pro_token schema: type: string responses: "200": description: OK schema: $ref: '#/definitions/models.Client' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: client is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: client not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: (Partially) update a client tags: - API-v2 /api/v2/users/{uid}/keys: get: description: The request must be done with an ADMIN key, the returned keys are without their token. operationId: api-tokenkeys-list parameters: - description: UserID in: path name: uid required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/handler.ListUserKeys.response' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: message not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: List keys of the user tags: - API-v2 post: operationId: api-tokenkeys-create parameters: - description: UserID in: path name: uid required: true type: string - description: ' ' in: body name: post_body schema: $ref: '#/definitions/handler.CreateUserKey.body' responses: "200": description: OK schema: $ref: '#/definitions/models.KeyToken' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: message not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Create a new key tags: - API-v2 /api/v2/users/{uid}/keys/{kid}: delete: description: Cannot be used to delete the key used in the request itself operationId: api-tokenkeys-delete parameters: - description: UserID in: path name: uid required: true type: string - description: TokenKeyID in: path name: kid required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/models.KeyToken' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: message not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Delete a key tags: - API-v2 get: description: The request must be done with an ADMIN key, the returned key does not include its token. operationId: api-tokenkeys-get parameters: - description: UserID in: path name: uid required: true type: string - description: TokenKeyID in: path name: kid required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/models.KeyToken' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: message not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Get a single key tags: - API-v2 patch: operationId: api-tokenkeys-update parameters: - description: UserID in: path name: uid required: true type: string - description: TokenKeyID in: path name: kid required: true type: string - description: ' ' in: body name: post_body schema: $ref: '#/definitions/handler.UpdateUserKey.body' responses: "200": description: OK schema: $ref: '#/definitions/models.KeyToken' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: message not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Update a key tags: - API-v2 /api/v2/users/{uid}/keys/current: get: description: Can be done with keys of any permission - the returned key does not include its token. operationId: api-tokenkeys-get-current parameters: - description: UserID in: path name: uid required: true type: string - description: TokenKeyID in: path name: kid required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/models.KeyToken' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: message not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Get the key currently used by this request tags: - API-v2 /api/v2/users/{uid}/subscriptions: get: description: |- The possible values for 'direction' are: - "outgoing" Subscriptions with the user as subscriber (= subscriptions he can use to read channels) - "incoming" Subscriptions to channels of this user (= incoming subscriptions and subscription requests) - "both" Combines "outgoing" and "incoming" (default) The possible values for 'confirmation' are: - "confirmed" Confirmed (active) subscriptions - "unconfirmed" Unconfirmed (pending) subscriptions - "all" Combines "confirmed" and "unconfirmed" (default) The possible values for 'external' are: - "true" Subscriptions with subscriber_user_id != channel_owner_user_id (subscriptions from other users) - "false" Subscriptions with subscriber_user_id == channel_owner_user_id (subscriptions from this user to his own channels) - "all" Combines "external" and "internal" (default) The `subscriber_user_id` parameter can be used to additionally filter the subscriber_user_id (return subscribtions from a specific user) The `channel_owner_user_id` parameter can be used to additionally filter the channel_owner_user_id (return subscribtions to a specific user) operationId: api-user-subscriptions-list parameters: - description: UserID in: path name: uid required: true type: string - description: 'Filter subscriptions (default: outgoing_all)' enum: - outgoing_all - outgoing_confirmed - outgoing_unconfirmed - incoming_all - incoming_confirmed - incoming_unconfirmed in: query name: selector required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/handler.ListUserSubscriptions.response' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: List all subscriptions of a user (incoming/owned) tags: - API-v2 post: description: Either [channel_owner_user_id, channel_internal_name] or [channel_id] must be supplied in the request body operationId: api-subscriptions-create parameters: - description: UserID in: path name: uid required: true type: string - in: query name: chan_subscribe_key type: string - description: ' ' in: body name: post_data schema: $ref: '#/definitions/handler.CreateSubscription.body' responses: "200": description: OK schema: $ref: '#/definitions/models.Subscription' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Create/Request a subscription tags: - API-v2 /api/v2/users/{uid}/subscriptions/{sid}: delete: operationId: api-subscriptions-delete parameters: - description: UserID in: path name: uid required: true type: string - description: SubscriptionID in: path name: sid required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/models.Subscription' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: subscription not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Cancel (delete) subscription tags: - API-v2 get: operationId: api-subscriptions-get parameters: - description: UserID in: path name: uid required: true type: string - description: SubscriptionID in: path name: sid required: true type: string responses: "200": description: OK schema: $ref: '#/definitions/models.Subscription' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: subscription not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Get a single subscription tags: - API-v2 patch: operationId: api-subscriptions-update parameters: - description: UserID in: path name: uid required: true type: string - description: SubscriptionID in: path name: sid required: true type: string - description: ' ' in: body name: post_data schema: $ref: '#/definitions/handler.UpdateSubscription.body' responses: "200": description: OK schema: $ref: '#/definitions/models.Subscription' "400": description: supplied values/parameters cannot be parsed / are invalid schema: $ref: '#/definitions/ginresp.apiError' "401": description: user is not authorized / has missing permissions schema: $ref: '#/definitions/ginresp.apiError' "404": description: subscription not found schema: $ref: '#/definitions/ginresp.apiError' "500": description: internal server error schema: $ref: '#/definitions/ginresp.apiError' summary: Update a subscription (e.g. confirm) tags: - API-v2 /external/v1/uptime-kuma: post: description: All parameter can be set via query-parameter or the json body. Only UserID, UserKey and Title are required parameters: - in: query name: channel type: string - in: query name: channel_down type: string - in: query name: channel_up type: string - example: P3TNH8mvv14fm in: query name: key type: string - in: query name: priority type: integer - in: query name: priority_down type: integer - in: query name: priority_up type: integer - in: query name: senderName type: string - example: "7725" in: query name: user_id type: string - description: ' ' in: body name: post_body schema: $ref: '#/definitions/handler.UptimeKuma.body' responses: "200": description: OK schema: $ref: '#/definitions/handler.UptimeKuma.response' "400": description: Bad Request schema: $ref: '#/definitions/ginresp.apiError' "401": description: The user_id was not found or the user_key is wrong schema: $ref: '#/definitions/ginresp.apiError' "403": description: The user has exceeded its daily quota - wait 24 hours or upgrade your account schema: $ref: '#/definitions/ginresp.apiError' "500": description: An internal server error occurred - try again later schema: $ref: '#/definitions/ginresp.apiError' summary: Send a new message tags: - External /send: post: description: All parameter can be set via query-parameter or the json body. Only UserID, UserKey and Title are required parameters: - example: test in: query name: channel type: string - example: This is a message in: query name: content type: string - example: P3TNH8mvv14fm in: query name: key type: string - example: db8b0e6a-a08c-4646 in: query name: msg_id type: string - enum: - 0 - 1 - 2 example: 1 in: query name: priority type: integer - example: example-server in: query name: sender_name type: string - example: 1669824037 in: query name: timestamp type: number - example: Hello World in: query name: title type: string - example: "7725" in: query name: user_id type: string - description: ' ' in: body name: post_body schema: $ref: '#/definitions/handler.SendMessage.combined' - example: test in: formData name: channel type: string - example: This is a message in: formData name: content type: string - example: P3TNH8mvv14fm in: formData name: key type: string - example: db8b0e6a-a08c-4646 in: formData name: msg_id type: string - enum: - 0 - 1 - 2 example: 1 in: formData name: priority type: integer - example: example-server in: formData name: sender_name type: string - example: 1669824037 in: formData name: timestamp type: number - example: Hello World in: formData name: title type: string - example: "7725" in: formData name: user_id type: string responses: "200": description: OK schema: $ref: '#/definitions/handler.SendMessage.response' "400": description: Bad Request schema: $ref: '#/definitions/ginresp.apiError' "401": description: The user_id was not found or the user_key is wrong schema: $ref: '#/definitions/ginresp.apiError' "403": description: The user has exceeded its daily quota - wait 24 hours or upgrade your account schema: $ref: '#/definitions/ginresp.apiError' "500": description: An internal server error occurred - try again later schema: $ref: '#/definitions/ginresp.apiError' summary: Send a new message tags: - External /send.php: post: deprecated: true description: All parameter can be set via query-parameter or form-data body. Only UserID, UserKey and Title are required parameters: - example: test in: query name: channel type: string - example: This is a message in: query name: content type: string - example: P3TNH8mvv14fm in: query name: key type: string - example: db8b0e6a-a08c-4646 in: query name: msg_id type: string - enum: - 0 - 1 - 2 example: 1 in: query name: priority type: integer - example: example-server in: query name: sender_name type: string - example: 1669824037 in: query name: timestamp type: number - example: Hello World in: query name: title type: string - example: "7725" in: query name: user_id type: string - example: test in: formData name: channel type: string - example: This is a message in: formData name: content type: string - example: P3TNH8mvv14fm in: formData name: key type: string - example: db8b0e6a-a08c-4646 in: formData name: msg_id type: string - enum: - 0 - 1 - 2 example: 1 in: formData name: priority type: integer - example: example-server in: formData name: sender_name type: string - example: 1669824037 in: formData name: timestamp type: number - example: Hello World in: formData name: title type: string - example: "7725" in: formData name: user_id type: string responses: "200": description: OK schema: $ref: '#/definitions/handler.SendMessage.response' "400": description: Bad Request schema: $ref: '#/definitions/ginresp.apiError' "401": description: Unauthorized schema: $ref: '#/definitions/ginresp.apiError' "403": description: Forbidden schema: $ref: '#/definitions/ginresp.apiError' "500": description: Internal Server Error schema: $ref: '#/definitions/ginresp.apiError' summary: Send a new message (compatibility) tags: - External swagger: "2.0" tags: - name: External - name: API-v1 - name: API-v2 - name: Common