SimpleCloudNotifier/server/swagger/swagger.yaml

2004 lines
50 KiB
YAML
Raw Normal View History

2022-11-18 21:25:40 +01:00
basePath: /
2022-11-13 19:17:07 +01:00
definitions:
2022-11-18 21:25:40 +01:00
ginresp.apiError:
2022-11-13 19:17:07 +01:00
properties:
errhighlight:
type: integer
error:
type: integer
2022-11-20 03:06:08 +01:00
errorObj:
type: string
2022-11-13 19:17:07 +01:00
message:
type: string
success:
type: boolean
2022-11-20 03:06:08 +01:00
traceObj:
type: string
2022-11-13 19:17:07 +01:00
type: object
2022-11-20 01:28:32 +01:00
ginresp.compatAPIError:
properties:
errid:
type: integer
message:
type: string
success:
type: boolean
type: object
2022-11-13 19:17:07 +01:00
handler.Ack.response:
properties:
message:
type: string
new_ack:
type: integer
prev_ack:
type: integer
success:
2022-11-20 01:28:32 +01:00
type: boolean
2022-11-13 19:17:07 +01:00
type: object
2022-11-19 12:59:25 +01:00
handler.AddClient.body:
properties:
agent_model:
type: string
agent_version:
type: string
client_type:
type: string
fcm_token:
type: string
2022-11-20 03:06:08 +01:00
required:
- agent_model
- agent_version
- client_type
- fcm_token
2022-11-19 12:59:25 +01:00
type: object
2022-11-20 00:19:41 +01:00
handler.CreateSubscription.body:
properties:
channel:
type: string
channelOwnerUserID:
type: integer
2022-11-20 03:06:08 +01:00
required:
- channel
- channelOwnerUserID
2022-11-20 00:19:41 +01:00
type: object
2022-11-18 21:25:40 +01:00
handler.CreateUser.body:
properties:
2022-11-18 23:28:37 +01:00
agent_model:
2022-11-18 21:25:40 +01:00
type: string
2022-11-18 23:28:37 +01:00
agent_version:
2022-11-18 21:25:40 +01:00
type: string
2022-11-18 23:28:37 +01:00
client_type:
2022-11-18 21:25:40 +01:00
type: string
2022-11-18 23:28:37 +01:00
fcm_token:
2022-11-18 21:25:40 +01:00
type: string
no_client:
type: boolean
2022-11-18 23:28:37 +01:00
pro_token:
2022-11-18 21:25:40 +01:00
type: string
username:
type: string
type: object
2022-11-13 19:17:07 +01:00
handler.DatabaseTest.response:
properties:
libVersion:
type: string
libVersionNumber:
type: integer
sourceID:
type: string
success:
type: boolean
type: object
handler.Expand.response:
properties:
data:
2022-11-20 01:28:32 +01:00
$ref: '#/definitions/models.CompatMessage'
2022-11-13 19:17:07 +01:00
message:
type: string
success:
2022-11-20 01:28:32 +01:00
type: boolean
2022-11-13 19:17:07 +01:00
type: object
handler.Health.response:
properties:
status:
type: string
type: object
handler.Info.response:
properties:
fcm_token_set:
type: boolean
is_pro:
2022-11-20 01:28:32 +01:00
type: integer
2022-11-13 19:17:07 +01:00
message:
type: string
quota:
2022-11-20 01:28:32 +01:00
type: integer
2022-11-13 19:17:07 +01:00
quota_max:
2022-11-20 01:28:32 +01:00
type: integer
2022-11-13 19:17:07 +01:00
success:
2022-11-20 01:28:32 +01:00
type: boolean
2022-11-13 19:17:07 +01:00
unack_count:
type: integer
user_id:
2022-11-20 01:28:32 +01:00
type: integer
2022-11-13 19:17:07 +01:00
user_key:
type: string
type: object
2022-11-20 00:30:30 +01:00
handler.ListChannelMessages.response:
properties:
messages:
items:
$ref: '#/definitions/models.MessageJSON'
type: array
next_page_token:
type: string
page_size:
type: integer
type: object
2022-11-20 00:19:41 +01:00
handler.ListChannelSubscriptions.response:
properties:
subscriptions:
items:
$ref: '#/definitions/models.SubscriptionJSON'
type: array
type: object
handler.ListChannels.response:
properties:
channels:
items:
$ref: '#/definitions/models.ChannelJSON'
type: array
type: object
handler.ListClients.response:
2022-11-19 12:47:23 +01:00
properties:
clients:
items:
$ref: '#/definitions/models.ClientJSON'
type: array
type: object
2022-11-20 00:19:41 +01:00
handler.ListMessages.response:
properties:
messages:
items:
$ref: '#/definitions/models.MessageJSON'
type: array
next_page_token:
type: string
page_size:
type: integer
type: object
handler.ListUserSubscriptions.response:
properties:
subscriptions:
items:
$ref: '#/definitions/models.SubscriptionJSON'
type: array
type: object
2022-11-13 19:17:07 +01:00
handler.Register.response:
properties:
is_pro:
type: integer
2022-11-13 19:17:07 +01:00
message:
type: string
quota:
type: integer
2022-11-13 19:17:07 +01:00
quota_max:
type: integer
2022-11-13 19:17:07 +01:00
success:
type: boolean
2022-11-13 19:17:07 +01:00
user_id:
2022-11-20 01:28:32 +01:00
type: integer
2022-11-13 19:17:07 +01:00
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:
2022-11-20 01:28:32 +01:00
type: boolean
2022-11-13 19:17:07 +01:00
type: object
2022-11-19 15:13:47 +01:00
handler.SendMessage.body:
properties:
2022-11-20 21:15:06 +01:00
chan_key:
2022-11-20 00:19:41 +01:00
type: string
channel:
type: string
2022-11-20 03:06:08 +01:00
content:
2022-11-19 15:13:47 +01:00
type: string
2022-11-20 00:19:41 +01:00
msg_id:
type: string
2022-11-19 15:13:47 +01:00
priority:
type: integer
2022-11-20 00:19:41 +01:00
timestamp:
type: number
2022-11-20 03:06:08 +01:00
title:
type: string
2022-11-19 15:13:47 +01:00
user_id:
2022-11-20 00:19:41 +01:00
type: integer
2022-11-19 15:13:47 +01:00
user_key:
type: string
2022-11-20 00:19:41 +01:00
type: object
2022-11-23 20:21:49 +01:00
handler.Sleep.response:
properties:
duration:
type: number
end:
type: string
start:
type: string
type: object
2022-11-13 19:17:07 +01:00
handler.Update.response:
properties:
is_pro:
2022-11-20 01:28:32 +01:00
type: integer
2022-11-13 19:17:07 +01:00
message:
type: string
quota:
2022-11-20 01:28:32 +01:00
type: integer
2022-11-13 19:17:07 +01:00
quota_max:
2022-11-20 01:28:32 +01:00
type: integer
2022-11-13 19:17:07 +01:00
success:
2022-11-20 01:28:32 +01:00
type: boolean
2022-11-13 19:17:07 +01:00
user_id:
2022-11-20 01:28:32 +01:00
type: integer
2022-11-13 19:17:07 +01:00
user_key:
type: string
type: object
handler.Upgrade.response:
properties:
2022-11-20 01:28:32 +01:00
is_pro:
type: boolean
2022-11-13 19:17:07 +01:00
message:
type: string
2022-11-20 01:28:32 +01:00
quota:
type: integer
quota_max:
type: integer
2022-11-13 19:17:07 +01:00
success:
2022-11-20 01:28:32 +01:00
type: boolean
user_id:
type: integer
2022-11-13 19:17:07 +01:00
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
2022-11-20 03:06:08 +01:00
handler.sendMessageInternal.response:
properties:
errhighlight:
type: integer
error:
type: integer
is_pro:
type: boolean
message:
type: string
messagecount:
type: integer
quota:
type: integer
quota_max:
type: integer
scn_msg_id:
type: integer
success:
type: boolean
suppress_send:
type: boolean
type: object
2022-11-20 00:19:41 +01:00
models.ChannelJSON:
properties:
channel_id:
type: integer
messages_sent:
type: integer
name:
type: string
owner_user_id:
type: integer
send_key:
description: can be nil, depending on endpoint
type: string
2022-11-20 00:19:41 +01:00
subscribe_key:
2022-11-20 21:15:06 +01:00
description: can be nil, depending on endpoint
2022-11-20 00:19:41 +01:00
type: string
timestamp_created:
type: string
timestamp_last_sent:
type: string
type: object
2022-11-19 12:47:23 +01:00
models.ClientJSON:
properties:
agent_model:
type: string
agent_version:
type: string
client_id:
type: integer
fcm_token:
type: string
timestamp_created:
type: string
type:
type: string
user_id:
type: integer
type: object
2022-11-13 19:17:07 +01:00
models.CompatMessage:
properties:
body:
type: string
priority:
type: integer
scn_msg_id:
2022-11-20 01:28:32 +01:00
type: integer
2022-11-13 19:17:07 +01:00
timestamp:
type: integer
title:
type: string
2022-11-20 01:28:32 +01:00
trimmed:
type: boolean
2022-11-13 19:17:07 +01:00
usr_msg_id:
type: string
type: object
2022-11-20 00:19:41 +01:00
models.MessageJSON:
properties:
body:
type: string
channel_id:
type: integer
channel_name:
type: string
owner_user_id:
type: integer
priority:
type: integer
scn_message_id:
type: integer
sender_user_id:
type: integer
timestamp:
type: string
title:
type: string
trimmed:
type: boolean
usr_message_id:
type: string
type: object
models.SubscriptionJSON:
properties:
channel_id:
type: integer
channel_name:
type: string
channel_owner_user_id:
type: integer
confirmed:
type: boolean
subscriber_user_id:
type: integer
subscription_id:
type: integer
timestamp_created:
type: string
type: object
2022-11-18 21:25:40 +01:00
models.UserJSON:
properties:
admin_key:
type: string
2022-11-20 22:18:24 +01:00
default_channel:
type: string
2022-11-18 21:25:40 +01:00
is_pro:
type: boolean
messages_sent:
type: integer
2022-11-20 00:19:41 +01:00
quota_used:
2022-11-18 21:25:40 +01:00
type: integer
2022-11-20 00:19:41 +01:00
quota_used_day:
type: string
2022-11-18 21:25:40 +01:00
read_key:
type: string
send_key:
type: string
timestamp_created:
type: string
timestamp_last_read:
type: string
timestamp_last_sent:
type: string
user_id:
type: integer
username:
type: string
type: object
2022-11-24 12:53:27 +01:00
models.UserJSONWithClients:
properties:
admin_key:
type: string
clients:
items:
$ref: '#/definitions/models.ClientJSON'
type: array
default_channel:
type: string
is_pro:
type: boolean
messages_sent:
type: integer
quota_used:
type: integer
quota_used_day:
type: string
read_key:
type: string
send_key:
type: string
timestamp_created:
type: string
timestamp_last_read:
type: string
timestamp_last_sent:
type: string
user_id:
type: integer
username:
type: string
type: object
2022-11-13 19:17:07 +01:00
host: scn.blackforestbytes.com
info:
contact: {}
description: API for SCN
title: SimpleCloudNotifier API
version: "2.0"
paths:
2022-11-19 15:13:47 +01:00
/:
post:
2022-11-20 00:19:41 +01:00
description: All parameter can be set via query-parameter or the json body.
Only UserID, UserKey and Title are required
2022-11-19 15:13:47 +01:00
parameters:
- in: query
2022-11-20 00:19:41 +01:00
name: chanKey
type: string
- in: query
name: channel
2022-11-19 15:13:47 +01:00
type: string
- in: query
2022-11-20 00:19:41 +01:00
name: content
2022-11-19 15:13:47 +01:00
type: string
- in: query
name: priority
type: integer
- in: query
name: sendTimestamp
2022-11-20 00:19:41 +01:00
type: number
2022-11-19 15:13:47 +01:00
- in: query
2022-11-20 00:19:41 +01:00
name: title
2022-11-19 15:13:47 +01:00
type: string
- in: query
2022-11-20 00:19:41 +01:00
name: userID
type: integer
- in: query
name: userKey
2022-11-19 15:13:47 +01:00
type: string
- in: query
2022-11-20 00:19:41 +01:00
name: userMessageID
2022-11-19 15:13:47 +01:00
type: string
- description: ' '
in: body
name: post_body
schema:
$ref: '#/definitions/handler.SendMessage.body'
2022-11-20 21:15:06 +01:00
- in: formData
name: chan_key
type: string
- in: formData
name: channel
type: string
- in: formData
name: content
type: string
- in: formData
name: msg_id
type: string
- in: formData
name: priority
type: integer
- in: formData
name: timestamp
type: number
- in: formData
name: title
type: string
- in: formData
name: user_id
type: integer
- in: formData
name: user_key
type: string
2022-11-19 15:13:47 +01:00
responses:
"200":
description: OK
schema:
2022-11-20 03:06:08 +01:00
$ref: '#/definitions/handler.sendMessageInternal.response'
2022-11-19 15:13:47 +01:00
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
2022-11-21 22:52:44 +01:00
description: The user_id was not found or the user_key is wrong
2022-11-19 15:13:47 +01:00
schema:
$ref: '#/definitions/ginresp.apiError'
2022-11-20 00:19:41 +01:00
"403":
2022-11-21 22:52:44 +01:00
description: The user has exceeded its daily quota - wait 24 hours or upgrade
your account
2022-11-19 15:13:47 +01:00
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
2022-11-21 22:52:44 +01:00
description: An internal server error occurred - try again later
2022-11-19 15:13:47 +01:00
schema:
$ref: '#/definitions/ginresp.apiError'
summary: Send a new message
2022-11-23 19:32:23 +01:00
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/ginresp.compatAPIError'
summary: Acknowledge that a message was received
tags:
- API-v1
/api/db-test:
post:
2022-11-23 19:32:23 +01:00
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 wroking 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/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/ginresp.compatAPIError'
summary: Get information about the current user
tags:
- API-v1
/api/messages:
2022-11-20 00:19:41 +01:00
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:
- in: query
name: filter
type: string
- in: query
name: nextPageToken
type: string
- in: query
name: pageSize
type: integer
- in: query
name: trimmed
type: boolean
responses:
"200":
description: OK
schema:
$ref: '#/definitions/handler.ListMessages.response'
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: Not Found
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
summary: List all (subscribed) messages
2022-11-23 19:32:23 +01:00
tags:
- API-v2
2022-11-20 21:15:06 +01:00
post:
description: |-
This is similar to the main route `POST -> https://scn.blackfrestbytes.com/`
But this route can change in the future, for long-living scripts etc. it's better to use the normal POST route
operationId: api-messages-create
parameters:
- in: query
name: chan_key
type: string
- in: query
name: channel
type: string
- in: query
name: content
type: string
- in: query
name: msg_id
type: string
- in: query
name: priority
type: integer
- in: query
name: timestamp
type: number
- in: query
name: title
type: string
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.MessageJSON'
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: Not Found
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
summary: Create a new message
2022-11-23 19:32:23 +01:00
tags:
- API-v2
/api/messages/{mid}:
2022-11-23 22:12:47 +01:00
delete:
2022-11-20 00:19:41 +01:00
description: The user must own the message and request the resource with the
ADMIN Key
operationId: api-messages-delete
parameters:
- description: SCNMessageID
in: path
name: mid
required: true
type: integer
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.MessageJSON'
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: Not Found
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
summary: Delete a single message
2022-11-23 19:32:23 +01:00
tags:
- API-v2
2022-11-23 22:12:47 +01:00
patch:
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: SCNMessageID
in: path
name: mid
required: true
type: integer
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.MessageJSON'
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: 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
2022-11-23 19:32:23 +01:00
/api/ping:
delete:
2022-11-18 21:25:40 +01:00
responses:
"200":
description: OK
schema:
2022-11-23 19:32:23 +01:00
$ref: '#/definitions/handler.pingResponse'
2022-11-18 21:25:40 +01:00
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
2022-11-23 19:32:23 +01:00
summary: Simple endpoint to test connection (any http method)
tags:
- Common
2022-11-18 23:28:37 +01:00
get:
responses:
"200":
description: OK
schema:
2022-11-23 19:32:23 +01:00
$ref: '#/definitions/handler.pingResponse'
2022-11-18 23:28:37 +01:00
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
2022-11-23 19:32:23 +01:00
summary: Simple endpoint to test connection (any http method)
tags:
- Common
2022-11-18 23:28:37 +01:00
patch:
responses:
"200":
description: OK
schema:
2022-11-23 19:32:23 +01:00
$ref: '#/definitions/handler.pingResponse'
"500":
description: Internal Server Error
2022-11-18 23:28:37 +01:00
schema:
$ref: '#/definitions/ginresp.apiError'
2022-11-23 19:32:23 +01:00
summary: Simple endpoint to test connection (any http method)
tags:
- Common
post:
responses:
"200":
description: OK
2022-11-18 23:28:37 +01:00
schema:
2022-11-23 19:32:23 +01:00
$ref: '#/definitions/handler.pingResponse'
"500":
description: Internal Server Error
2022-11-18 23:28:37 +01:00
schema:
$ref: '#/definitions/ginresp.apiError'
2022-11-23 19:32:23 +01:00
summary: Simple endpoint to test connection (any http method)
tags:
- Common
put:
responses:
"200":
description: OK
schema:
$ref: '#/definitions/handler.pingResponse'
2022-11-18 23:28:37 +01:00
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
2022-11-23 19:32:23 +01:00
summary: Simple endpoint to test connection (any http method)
tags:
- Common
/api/register.php:
2022-11-20 00:19:41 +01:00
get:
2022-11-23 19:32:23 +01:00
deprecated: true
operationId: compat-register
2022-11-20 00:19:41 +01:00
parameters:
2022-11-23 19:32:23 +01:00
- description: the (android) fcm token
2022-11-20 21:15:06 +01:00
in: query
2022-11-23 19:32:23 +01:00
name: fcm_token
2022-11-20 21:15:06 +01:00
required: true
type: string
2022-11-23 19:32:23 +01:00
- 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:
2022-11-20 00:19:41 +01:00
"200":
description: OK
schema:
2022-11-23 19:32:23 +01:00
$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
2022-11-20 00:19:41 +01:00
schema:
2022-11-23 19:32:23 +01:00
$ref: '#/definitions/ginresp.compatAPIError'
summary: Return all not-acknowledged messages
tags:
- API-v1
2022-11-23 20:21:49 +01:00
/api/sleep/{secs}:
post:
operationId: api-common-sleep
2022-11-23 22:12:47 +01:00
parameters:
- description: sleep delay (in seconds)
in: path
name: secs
required: true
type: number
2022-11-23 20:21:49 +01:00
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
2022-11-23 19:32:23 +01:00
/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
2022-11-20 00:19:41 +01:00
schema:
2022-11-23 19:32:23 +01:00
$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/ginresp.compatAPIError'
summary: Upgrade a free account to a paid account
tags:
- API-v1
/api/users:
2022-11-23 19:32:23 +01:00
post:
operationId: api-user-create
parameters:
- description: ' '
in: body
name: post_body
schema:
$ref: '#/definitions/handler.CreateUser.body'
responses:
"200":
description: OK
schema:
2022-11-24 12:53:27 +01:00
$ref: '#/definitions/models.UserJSONWithClients'
2022-11-23 19:32:23 +01:00
"400":
description: Bad Request
2022-11-20 00:19:41 +01:00
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
2022-11-23 19:32:23 +01:00
summary: Create a new user
tags:
- API-v2
/api/users/{uid}:
2022-11-20 00:19:41 +01:00
get:
2022-11-23 19:32:23 +01:00
operationId: api-user-get
2022-11-20 00:19:41 +01:00
parameters:
- description: UserID
in: path
name: uid
required: true
type: integer
responses:
"200":
description: OK
schema:
2022-11-23 19:32:23 +01:00
$ref: '#/definitions/models.UserJSON'
2022-11-20 00:19:41 +01:00
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: Not Found
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
2022-11-23 19:32:23 +01:00
summary: Get a user
tags:
- API-v2
patch:
2022-11-23 19:32:23 +01:00
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: integer
2022-11-23 19:32:23 +01:00
- description: Change the username (send an empty string to clear it)
in: body
2022-11-23 19:32:23 +01:00
name: username
schema:
type: string
- description: Send a verification of permium purchase
in: body
name: pro_token
schema:
type: string
- description: Send `true` to create a new read_key
in: body
name: read_key
schema:
type: string
- description: Send `true` to create a new send_key
in: body
name: send_key
schema:
type: string
2022-11-23 19:32:23 +01:00
- description: Send `true` to create a new admin_key
in: body
name: admin_key
schema:
type: string
responses:
"200":
description: OK
schema:
2022-11-23 19:32:23 +01:00
$ref: '#/definitions/models.UserJSON'
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: Not Found
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
2022-11-23 19:32:23 +01:00
summary: (Partially) update a user
tags:
- API-v2
/api/users/{uid}/channels:
2022-11-20 00:30:30 +01:00
get:
description: |-
2022-11-23 19:32:23 +01:00
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
2022-11-20 00:30:30 +01:00
parameters:
2022-11-23 19:32:23 +01:00
- description: UserID
in: path
name: uid
required: true
2022-11-20 00:30:30 +01:00
type: integer
2022-11-23 19:32:23 +01:00
- description: 'Filter channels (default: owned)'
enum:
- owned
- subscribed
- all
- subscribed_any
- all_any
in: query
name: selector
required: true
type: string
responses:
"200":
description: OK
schema:
$ref: '#/definitions/handler.ListChannels.response'
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: Not Found
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
summary: List channels of a user (subscribed/owned)
tags:
- API-v2
/api/users/{uid}/channels/{cid}:
get:
operationId: api-channels-get
parameters:
- description: UserID
in: path
name: uid
required: true
type: integer
- description: ChannelID
in: path
name: cid
required: true
type: integer
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.ChannelJSON'
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: Not Found
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
summary: List all channels of a user
tags:
- API-v2
patch:
operationId: api-channels-update
parameters:
- description: UserID
in: path
name: uid
required: true
type: integer
- description: ChannelID
in: path
name: cid
required: true
type: integer
- 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
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.ChannelJSON'
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: 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/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: nextPageToken
type: string
- in: query
name: pageSize
type: integer
- in: query
name: trimmed
type: boolean
2022-11-23 22:12:47 +01:00
- description: UserID
in: path
name: uid
required: true
type: integer
- description: ChannelID
in: path
name: cid
required: true
type: integer
2022-11-20 00:30:30 +01:00
responses:
"200":
description: OK
schema:
$ref: '#/definitions/handler.ListChannelMessages.response'
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: Not Found
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
summary: List messages of a channel
2022-11-23 19:32:23 +01:00
tags:
- API-v2
/api/users/{uid}/channels/{cid}/subscriptions:
2022-11-20 00:19:41 +01:00
get:
operationId: api-chan-subscriptions-list
parameters:
- description: UserID
in: path
name: uid
required: true
type: integer
- description: ChannelID
in: path
name: cid
required: true
type: integer
responses:
"200":
description: OK
schema:
$ref: '#/definitions/handler.ListChannelSubscriptions.response'
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: Not Found
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
summary: List all subscriptions of a channel
2022-11-23 19:32:23 +01:00
tags:
- API-v2
/api/users/{uid}/clients:
2022-11-23 22:12:47 +01:00
delete:
operationId: api-clients-delete
parameters:
- description: UserID
in: path
name: uid
required: true
type: integer
- description: ClientID
in: path
name: cid
required: true
type: integer
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.ClientJSON'
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: Not Found
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
summary: Delete a client
tags:
- API-v2
2022-11-19 12:47:23 +01:00
get:
operationId: api-clients-list
parameters:
- description: UserID
in: path
name: uid
required: true
type: integer
responses:
"200":
description: OK
schema:
2022-11-20 00:19:41 +01:00
$ref: '#/definitions/handler.ListClients.response'
2022-11-19 12:47:23 +01:00
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: Not Found
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
summary: List all clients
2022-11-23 19:32:23 +01:00
tags:
- API-v2
2022-11-19 12:59:25 +01:00
post:
2022-11-23 22:12:47 +01:00
operationId: api-clients-create
2022-11-19 12:59:25 +01:00
parameters:
- description: UserID
in: path
name: uid
required: true
type: integer
2022-11-23 22:12:47 +01:00
- description: ' '
in: body
name: post_body
schema:
$ref: '#/definitions/handler.AddClient.body'
2022-11-19 12:59:25 +01:00
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.ClientJSON'
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: Not Found
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
2022-11-23 22:12:47 +01:00
summary: Add a new clients
2022-11-23 19:32:23 +01:00
tags:
- API-v2
/api/users/{uid}/clients/{cid}:
2022-11-19 12:50:41 +01:00
get:
operationId: api-clients-get
parameters:
- description: UserID
in: path
name: uid
required: true
type: integer
- description: ClientID
in: path
name: cid
required: true
type: integer
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.ClientJSON'
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: Not Found
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
2022-11-19 12:59:25 +01:00
summary: Get a single clients
2022-11-23 19:32:23 +01:00
tags:
- API-v2
/api/users/{uid}/subscriptions:
2022-11-20 00:19:41 +01:00
get:
operationId: api-user-subscriptions-list
parameters:
- description: UserID
in: path
name: uid
required: true
type: integer
responses:
"200":
description: OK
schema:
$ref: '#/definitions/handler.ListUserSubscriptions.response'
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: Not Found
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
summary: List all channels of a user
2022-11-23 19:32:23 +01:00
tags:
- API-v2
2022-11-20 00:19:41 +01:00
post:
operationId: api-subscriptions-create
parameters:
- description: UserID
in: path
name: uid
required: true
type: integer
- in: query
name: chanSubscribeKey
type: string
- description: ' '
in: body
name: post_data
schema:
$ref: '#/definitions/handler.CreateSubscription.body'
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.SubscriptionJSON'
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: Not Found
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
summary: Creare/Request a subscription
2022-11-23 19:32:23 +01:00
tags:
- API-v2
/api/users/{uid}/subscriptions/{sid}:
2022-11-20 00:19:41 +01:00
delete:
operationId: api-subscriptions-delete
parameters:
- description: UserID
in: path
name: uid
required: true
type: integer
- description: SubscriptionID
in: path
name: sid
required: true
type: integer
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.SubscriptionJSON'
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: Not Found
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
summary: Cancel (delete) subscription
2022-11-23 19:32:23 +01:00
tags:
- API-v2
2022-11-20 00:19:41 +01:00
get:
operationId: api-subscriptions-get
parameters:
- description: UserID
in: path
name: uid
required: true
type: integer
- description: SubscriptionID
in: path
name: sid
required: true
type: integer
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.SubscriptionJSON'
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: Not Found
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
summary: Get a single subscription
2022-11-23 19:32:23 +01:00
tags:
- API-v2
2022-11-20 00:19:41 +01:00
patch:
operationId: api-subscriptions-update
parameters:
- description: UserID
in: path
name: uid
required: true
type: integer
- description: SubscriptionID
in: path
name: sid
required: true
type: integer
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.SubscriptionJSON'
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/ginresp.apiError'
"404":
description: Not Found
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/ginresp.apiError'
summary: Update a subscription (e.g. confirm)
2022-11-23 19:32:23 +01:00
tags:
- API-v2
2022-11-19 15:13:47 +01:00
/send:
post:
2022-11-20 00:19:41 +01:00
description: All parameter can be set via query-parameter or the json body.
Only UserID, UserKey and Title are required
2022-11-19 15:13:47 +01:00
parameters:
- in: query
2022-11-20 00:19:41 +01:00
name: chanKey
2022-11-19 15:13:47 +01:00
type: string
- in: query
2022-11-20 00:19:41 +01:00
name: channel
type: string
- in: query
name: content
2022-11-19 15:13:47 +01:00
type: string
- in: query
name: priority
type: integer
- in: query
name: sendTimestamp
2022-11-20 00:19:41 +01:00
type: number
2022-11-19 15:13:47 +01:00
- in: query
2022-11-20 00:19:41 +01:00
name: title
2022-11-19 15:13:47 +01:00
type: string
- in: query
2022-11-20 00:19:41 +01:00
name: userID
type: integer
- in: query
name: userKey
2022-11-19 15:13:47 +01:00
type: string
- in: query
2022-11-20 00:19:41 +01:00
name: userMessageID
2022-11-19 15:13:47 +01:00
type: string
- description: ' '
in: body
name: post_body
schema:
$ref: '#/definitions/handler.SendMessage.body'
2022-11-20 21:15:06 +01:00
- in: formData
name: chan_key
type: string
- in: formData
name: channel
type: string
- in: formData
name: content
type: string
- in: formData
name: msg_id
type: string
- in: formData
name: priority
type: integer
- in: formData
name: timestamp
type: number
- in: formData
name: title
type: string
- in: formData
name: user_id
type: integer
- in: formData
name: user_key
type: string
2022-11-19 15:13:47 +01:00
responses:
"200":
description: OK
schema:
2022-11-20 03:06:08 +01:00
$ref: '#/definitions/handler.sendMessageInternal.response'
2022-11-19 15:13:47 +01:00
"400":
description: Bad Request
schema:
$ref: '#/definitions/ginresp.apiError'
"401":
2022-11-21 22:52:44 +01:00
description: The user_id was not found or the user_key is wrong
2022-11-19 15:13:47 +01:00
schema:
$ref: '#/definitions/ginresp.apiError'
2022-11-20 00:19:41 +01:00
"403":
2022-11-21 22:52:44 +01:00
description: The user has exceeded its daily quota - wait 24 hours or upgrade
your account
2022-11-19 15:13:47 +01:00
schema:
$ref: '#/definitions/ginresp.apiError'
"500":
2022-11-21 22:52:44 +01:00
description: An internal server error occurred - try again later
2022-11-19 15:13:47 +01:00
schema:
$ref: '#/definitions/ginresp.apiError'
summary: Send a new message
2022-11-23 19:32:23 +01:00
tags:
- External
2022-11-20 03:06:08 +01:00
/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:
- in: query
name: content
type: string
- in: query
name: priority
type: integer
- in: query
name: sendTimestamp
type: number
- in: query
name: title
type: string
- in: query
name: userID
type: integer
- in: query
name: userKey
type: string
- in: query
name: userMessageID
type: string
- in: formData
name: content
type: string
- in: formData
name: priority
type: integer
- in: formData
name: sendTimestamp
type: number
- in: formData
name: title
type: string
- in: formData
name: userID
type: integer
- in: formData
name: userKey
type: string
- in: formData
name: userMessageID
type: string
responses:
"200":
description: OK
schema:
$ref: '#/definitions/handler.sendMessageInternal.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)
2022-11-23 19:32:23 +01:00
tags:
- External
2022-11-13 19:17:07 +01:00
swagger: "2.0"
2022-11-23 19:32:23 +01:00
tags:
- name: Common
- name: External
- name: API-v1
- name: API-v2