This page is the machine-readable reference for the gateway. The interactive endpoint list below is compiled from the gateway's OpenAPI spec at build time, so it always matches the deployed API and stays fully indexed for search alongside the rest of the docs. If you are building your own client, you can download the raw OpenAPI spec to generate typed SDKs, Postman collections, or any other tooling directly from the source of truth.
GiselleBot Edge Service - api-gateway v5.0.0
Public API gateway for cycloptux's bots: Discord OAuth2 + JWT authority, bot reverse proxy, service API.
Base URL: https://gateway.cycloptux.com
Health
Service health and liveness
Returns a success message for a valid JWT or self token.
Responses
| 200 | Connectivity confirmation object | |
| 401 | Authentication token missing or revoked ProblemJsonError | |
| 403 | Authentication token invalid or unauthorized ProblemJsonError | |
Auth
Discord OAuth2 login and JWT lifecycle
Exchanges the Discord authorization code, mints a gateway JWT, stores it under a temporary code and redirects to the original callback URL with that code.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| type | query | object | |
| additionalProperties | query | object |
Responses
| 403 | Missing code/state or Discord-side error ProblemJsonError | |
| 408 | State token expired ProblemJsonError | |
| 500 | Internal error ProblemJsonError | |
Bots
Reverse proxy to linked bots
Returns the linked bots whose servers intersect the user's Discord guilds.
Responses
| 200 | Bots available to the user object | |
| 401 | User is unauthenticated ProblemJsonError | |
| 500 | Internal error or Discord API failure ProblemJsonError | |
Discord API
Authenticated Discord user data, fetched with the caller's own OAuth session
Returns the JWT-authenticated user's Discord profile, fetched from Discord with the user's stored OAuth token.
Responses
| 200 | Discord user profile subset object | |
| 401 | User is unauthenticated ProblemJsonError | |
| 403 | Invalid or unauthorized token ProblemJsonError | |
| 500 | Internal error or Discord API failure ProblemJsonError | |
Services
API-key-authenticated endpoints for approved machine clients (short URL creation, image classification). A service API key is not self-serve - contact contact@discomm.cc to obtain one.
Fetches a previously cached NSFW prediction by its 24-hex cache ID via the NSFWJS microservice. Only usable for a cache_id your own service was already handed by a prior /nsfwjs/predict or /nsfwjs/cache response - a cache_id you were never given returns the same 404 as one that does not exist. Requires a valid service API key - this is not self-serve, contact contact@discomm.cc to obtain one.
Request Body (required)
cache_id: string - 24-hex MongoDB ObjectId of the cached prediction
nsfw_threshold: number - Optional custom NSFW threshold (0-1] Responses
| 200 | Prediction object (passthrough from the NSFWJS microservice) object | |
| 400 | Cache ID missing or invalid ProblemJsonError | |
| 401 | API key was not supplied ProblemJsonError | |
| 403 | API key not authorized ProblemJsonError | |
| 404 | No cached image found ProblemJsonError | |
| 500 | Internal error ProblemJsonError | |
Bot: API
Bot process liveness and shard-readiness probes
Always 200 while this process is up; the body reports whether all shards are ready. Unauthenticated (deploy health probe) - exempt from the /api auth gate.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
Responses
| 200 | Shard readiness state: ready is true only when every expected shard reports a fresh 10s heartbeat. object | |
| 401 | Reserved for schema consistency - this route is exempt from the auth gate and never actually returns 401 ProblemJsonError | |
| 500 | Unexpected internal error ProblemJsonError | |
Bot: Admin
Per-server admin module settings
Returns the per-channel auto-publish settings for every configured announcement channel.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string |
Responses
| 200 | Default Response object | |
| 400 | Validation failed ProblemJsonError | |
| 401 | Missing identity ProblemJsonError | |
| 403 | Not allowed ProblemJsonError | |
| 404 | Not found ProblemJsonError | |
| 500 | Unexpected error ProblemJsonError | |
Bot: Alarm
Per-server repeating and scheduled messages
Repeater and scheduled-message usage versus the server tier limits.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string |
Responses
| 200 | Default Response object | |
| 400 | Validation failed ProblemJsonError | |
| 401 | Missing identity ProblemJsonError | |
| 403 | Not allowed ProblemJsonError | |
| 404 | Not found ProblemJsonError | |
| 500 | Unexpected error ProblemJsonError | |
Bot: AutoModerator
Per-server automated moderation rules
Sets (or, with threshold: null, resets to default) the confidence threshold for flagging NSFW images.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string |
Request Body (required)
threshold: integer | null (required) Responses
| 200 | Default Response object | |
| 400 | Validation failed ProblemJsonError | |
| 401 | Missing identity ProblemJsonError | |
| 403 | Not allowed ProblemJsonError | |
| 404 | Not found ProblemJsonError | |
| 500 | Unexpected error ProblemJsonError | |
Bot: AzurLane
Per-server Azur Lane game feed module
Lists the Azur Lane server-status feed subscriptions configured for this server.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string |
Responses
| 200 | Feed list. object | |
| 400 | Request failed ProblemJsonError | |
| 401 | Missing or invalid authentication ProblemJsonError | |
| 500 | Unexpected internal error ProblemJsonError | |
Bot: CustomReactions
Per-server custom emoji-reaction triggers
Returns every custom reaction owned by this server, decrypted. Global reactions are never included.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string |
Responses
| 200 | Default Response object | |
| 400 | Validation failed ProblemJsonError | |
| 401 | Missing identity ProblemJsonError | |
| 403 | Not allowed ProblemJsonError | |
| 404 | Not found ProblemJsonError | |
| 500 | Unexpected error ProblemJsonError | |
Bot: EmojiSubmissions
Per-server emoji role submissions
Replaces the list of roles authorized to submit new emojis. Requires the Manage Emojis and Stickers permission.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string |
Request Body (required)
role_ids: array<string> (required) Responses
| 200 | Default Response object | |
| 400 | Validation failed ProblemJsonError | |
| 401 | Missing identity ProblemJsonError | |
| 403 | Not allowed ProblemJsonError | |
| 404 | Not found ProblemJsonError | |
| 500 | Unexpected error ProblemJsonError | |
Bot: Forms
Per-server forms module
Returns all form workflows for this server.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string |
Responses
| 200 | Default Response object | |
| 400 | application/problem+json error envelope: { errors: [ { code, message } ] }. ProblemJsonError | |
| 401 | application/problem+json error envelope: { errors: [ { code, message } ] }. ProblemJsonError | |
| 500 | application/problem+json error envelope: { errors: [ { code, message } ] }. ProblemJsonError | |
Bot: General
Discord profile lookups and misc dashboard-facing utilities
Returns a ready-to-use OAuth2 invite URL (with the bot's current permission set) plus the raw permissions bitfield, for a dashboard "Add to Server" button. Unauthenticated at the route level - no server or user context needed - but still subject to the gateway's standard authentication requirement like every other /api route (that gate has its own exemption list, and /invite is not on it).
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
Responses
| 200 | Invite URL and permissions. object | |
| 401 | Internal authorization token is invalid ProblemJsonError | |
| 500 | Unexpected error ProblemJsonError | |
Bot: Greets
Per-server join/leave/role-change greet messages
Channel and DM welcome message settings for members joining the server. Read-only: returns an in-memory default when unconfigured, without persisting anything.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string |
Responses
| 200 | Default Response object | |
| 400 | Validation failed ProblemJsonError | |
| 401 | Missing identity ProblemJsonError | |
| 403 | Not allowed ProblemJsonError | |
| 404 | Not found ProblemJsonError | |
| 500 | Unexpected error ProblemJsonError | |
Bot: Logs
Audit log retrieval
Returns paginated audit log entries, optionally filtered by module and time range. Requires the ViewAuditLog permission.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| module | query | string | Filter to a single module name. |
| start | query | string | ISO timestamp lower bound. |
| end | query | string | ISO timestamp upper bound. |
| page_size | query | string | Entries per page. |
| page | query | string | Page number. |
| serverId * | path | string |
Responses
| 200 | Paginated audit log entries. object | |
| 400 | Failed to fetch audit log entries ProblemJsonError | |
| 401 | Missing or invalid authentication ProblemJsonError | |
| 403 | User lacks the ViewAuditLog permission ProblemJsonError | |
| 500 | Unexpected internal error ProblemJsonError | |
Bot: MahjongSoul
Per-server Mahjong Soul game feed module
Lists the Mahjong Soul server-status feed subscriptions configured for this server.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string |
Responses
| 200 | Feed list. object | |
| 400 | Request failed ProblemJsonError | |
| 401 | Missing or invalid authentication ProblemJsonError | |
| 500 | Unexpected internal error ProblemJsonError | |
Bot: Moderation
Per-server moderation settings and rules
Returns the channel -> role assignments for a channel-scoped punishment kind (`channelban`, `channelmute`, `channelimageban`). Unlike `mute`/`imageban`, these roles are genuinely per-channel, so this is a list rather than a single roleId.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string | |
| kind * | path | string |
Responses
| 200 | Default Response array<object> | |
| 400 | Validation failed ProblemJsonError | |
| 401 | Missing identity ProblemJsonError | |
| 403 | Not allowed ProblemJsonError | |
| 404 | Not found ProblemJsonError | |
| 500 | Unexpected error ProblemJsonError | |
Bot: Permissions
Per-server dashboard module authorization
Returns every module available in this server with its current permission state.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string |
Responses
| 200 | Default Response object | |
| 400 | Validation failed ProblemJsonError | |
| 401 | Missing identity ProblemJsonError | |
| 403 | Not allowed ProblemJsonError | |
| 404 | Not found ProblemJsonError | |
| 500 | Unexpected error ProblemJsonError | |
Bot: RaidRoom
Per-server raid room settings
Returns the current raid room settings for this server.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string |
Responses
| 200 | Default Response object | |
| 400 | Validation failed ProblemJsonError | |
| 401 | Missing identity ProblemJsonError | |
| 403 | Not allowed ProblemJsonError | |
| 404 | Not found ProblemJsonError | |
| 500 | Unexpected error ProblemJsonError | |
Bot: Reddit
Per-server Reddit feed module
Lists the Reddit feed subscriptions configured for this server.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string |
Responses
| 200 | Feed list. object | |
| 400 | Request failed ProblemJsonError | |
| 401 | Missing or invalid authentication ProblemJsonError | |
| 404 | Resource not found ProblemJsonError | |
| 500 | Unexpected internal error ProblemJsonError | |
Bot: RSS
Per-server RSS feed module
Lists the RSS feed subscriptions configured for this server.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string |
Responses
| 200 | Feed list. object | |
| 400 | Request failed ProblemJsonError | |
| 401 | Missing or invalid authentication ProblemJsonError | |
| 404 | Resource not found ProblemJsonError | |
| 500 | Unexpected internal error ProblemJsonError | |
Bot: Send
Dashboard message composer
Sends a new message (content and/or embed) to a channel of this server via the bot.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string |
Request Body (required)
channel_id: string (required)
content: string | null (required)
embed: object | null (required) Responses
| 201 | Default Response object | |
| 400 | Validation failed ProblemJsonError | |
| 401 | Missing identity ProblemJsonError | |
| 403 | Not allowed ProblemJsonError | |
| 404 | Not found ProblemJsonError | |
| 429 | Rate limited ProblemJsonError | |
| 500 | Unexpected error ProblemJsonError | |
Bot: Social
Per-server leveling/EXP settings
Returns the no-EXP role and no-EXP channels configured on this server.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string |
Responses
| 200 | Default Response object | |
| 400 | Validation failed ProblemJsonError | |
| 401 | Missing identity ProblemJsonError | |
| 403 | Not allowed ProblemJsonError | |
| 404 | Not found ProblemJsonError | |
| 500 | Unexpected error ProblemJsonError | |
Bot: Tools
Per-server clock channels, member-count channels, URL shortener
Lists every clock channel configured for this server.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string |
Responses
| 200 | Default Response array<object> | |
| 400 | Validation failed ProblemJsonError | |
| 401 | Missing identity ProblemJsonError | |
| 403 | Not allowed ProblemJsonError | |
| 404 | Not found ProblemJsonError | |
| 500 | Unexpected error ProblemJsonError | |
Bot: Trivia
Per-server trivia games and templates
Returns every trivia category (built-in and custom) available to this server.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string |
Responses
| 200 | Default Response object | |
| 400 | Validation failed ProblemJsonError | |
| 401 | Missing identity ProblemJsonError | |
| 403 | Not allowed ProblemJsonError | |
| 404 | Not found ProblemJsonError | |
| 500 | Unexpected error ProblemJsonError | |
Bot: Twitch
Per-server Twitch notification module
Lists the Twitch notification feed subscriptions configured for this server.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string |
Responses
| 200 | Feed list. object | |
| 400 | Request failed ProblemJsonError | |
| 401 | Missing or invalid authentication ProblemJsonError | |
| 404 | Resource not found ProblemJsonError | |
| 500 | Unexpected internal error ProblemJsonError | |
Bot: Verification
Per-server member verification settings
Returns the current verification settings for this server.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string |
Responses
| 200 | Default Response object | |
| 400 | Validation failed ProblemJsonError | |
| 401 | Missing identity ProblemJsonError | |
| 403 | Not allowed ProblemJsonError | |
| 404 | Not found ProblemJsonError | |
| 500 | Unexpected error ProblemJsonError | |
Bot: Webhooks
Inbound webhook ingestion endpoints
Bot: YouTube
Per-server YouTube notification module
Lists the YouTube notification feed subscriptions configured for this server.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| botId * | path | string | The linked bot's Discord application client ID. |
| serverId * | path | string |
Responses
| 200 | Feed list. object | |
| 400 | Request failed ProblemJsonError | |
| 401 | Missing or invalid authentication ProblemJsonError | |
| 404 | Resource not found ProblemJsonError | |
| 500 | Unexpected internal error ProblemJsonError | |
Profile
Public (no login): works from any device. Confirms the pending address the token belongs to and returns it masked. Single-use, expires after 30 minutes, replaced by any newer request. Every failure returns the same 400 so the endpoint cannot be used to probe tokens.
Request Body (required)
token: string (required) Responses
| 200 | Confirmed. object | |
| 400 | Invalid, used, superseded or expired link ProblemJsonError | |
| 429 | Too many attempts from this address ProblemJsonError | |
| 500 | Internal error ProblemJsonError | |
Webhooks
Public endpoint for the SNS HTTPS subscription on the SES notification topic. Relays the message unchanged to us-email, which authenticates it (allowlisted topic, RSA signature from an SNS-hosted certificate, freshness) and then marks a permanently bounced or complaining address as rejected, or confirms the subscription. Not part of the dashboard API surface.
Request Body (required)
Type: string (required) Responses
| 200 | Handled (or intentionally ignored). object | |
| 400 | Malformed body ProblemJsonError | |
| 403 | Not a genuine SNS message from the configured topic ProblemJsonError | |
| 429 | Too many requests from this address ProblemJsonError | |
| 500 | Internal error ProblemJsonError | |
| 502 | us-email could not be reached ProblemJsonError | |