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 v2.2.0 Public API gateway for cycloptux's bots: Discord OAuth2 + JWT authority, bot reverse proxy, service API, inbound webhook fan-out.
Base URL: https://gateway.cycloptux.com
Health Service health and liveness
get /api/check Authenticated connectivity check Collapse Returns a success message for a valid JWT or self token.
Responses 200 Connectivity confirmation object message: string - Success message401 Authentication token missing or revoked ProblemJsonError errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.403 Authentication token invalid or unauthorized ProblemJsonError errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.
get /health Liveness probe Details
Auth Discord OAuth2 login and JWT lifecycle
get /auth/discord/callback Discord OAuth2 callback Collapse 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 errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.408 State token expired ProblemJsonError errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.500 Internal error ProblemJsonError errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.
get /auth/discord/login Start the Discord OAuth2 login flow Details
post /auth/discord/token Exchange a temporary code for a JWT Details
post /auth/discord/token/check Check a gateway JWT Details
post /auth/discord/token/refresh Refresh a gateway JWT Details
post /auth/discord/token/revoke Revoke a gateway JWT Details
Bots Reverse proxy to linked bots
get /api/v1/bots List bots available to the authenticated user Collapse 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 errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.500 Internal error or Discord API failure ProblemJsonError errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.
get /api/v1/bots/356831787445387285/{*} Proxy Get requests to the bot Details
post /api/v1/bots/356831787445387285/{*} Proxy Post requests to the bot Details
delete /api/v1/bots/356831787445387285/{*} Proxy Delete requests to the bot Details
patch /api/v1/bots/356831787445387285/{*} Proxy Patch requests to the bot Details
get /api/v1/bots/531757157142495242/{*} Proxy Get requests to the bot Details
post /api/v1/bots/531757157142495242/{*} Proxy Post requests to the bot Details
delete /api/v1/bots/531757157142495242/{*} Proxy Delete requests to the bot Details
patch /api/v1/bots/531757157142495242/{*} Proxy Patch requests to the bot Details
post /api/v1/bots/botwebhooks/356831787445387285/{*} Proxy POST requests to the bot webhook receiver Details
Services API-key service endpoints
post /api/v1/services/nsfwjs/cache Fetch a cached NSFW prediction Collapse Fetches a previously cached NSFW prediction by its 24-hex cache ID via the NSFWJS microservice. Requires a valid service API key.
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 errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.401 API key was not supplied ProblemJsonError errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.403 API key not authorized ProblemJsonError errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.404 No cached image found ProblemJsonError errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.500 Internal error ProblemJsonError errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.
post /api/v1/services/nsfwjs/predict Run NSFW prediction on an image URL Details
post /api/v1/services/shorturl/create Create a short URL Details
Webhooks Inbound provider webhooks and fan-out
post /webhooks/azurlane Receive a Azur Lane webhook event Collapse Receives Azur Lane server status events from us-azurlane. Verified via HMAC-SHA256 of the JSON body against the Authorization header. Responds 202 immediately; the broadcast to bots is asynchronous.
Request Body (required) (no properties documented) - object Responses 202 Event accepted for asynchronous processing object message: string - Always "EVENT_RECEIVED"400 Request body not found ProblemJsonError errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.403 Authorization token missing or invalid ProblemJsonError errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.
post /webhooks/mahjongsoul Receive a Mahjong Soul webhook event Details
post /webhooks/reddit Receive a Reddit webhook event Details
post /webhooks/rss Receive a RSS webhook event Details
post /webhooks/topgg Receive a Top.gg vote webhook Details
post /webhooks/twitch Receive a Twitch EventSub webhook Details
get /webhooks/youtube YouTube PubSubHubbub challenge-response Details
post /webhooks/youtube Receive a YouTube PubSubHubbub notification Details
Static Static data proxy
get /api/v1/static/website Fetch website static data Collapse Proxies the static website data JSON from S3, refreshing the embedded timestamp fields. Unauthenticated.
Responses 200 Static website data with an injected timestamp object 500 Upstream fetch or processing error ProblemJsonError errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.
Discord API get /api/v1/user Get the authenticated Discord user Collapse 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 username: string - Discord username
discriminator: string - Discord discriminator
id: string - Discord user ID
avatar: null | string - Avatar hash
locale: string - User locale401 User is unauthenticated ProblemJsonError errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.403 Invalid or unauthorized token ProblemJsonError errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.500 Internal error or Discord API failure ProblemJsonError errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.
Issue Tracker get /api/v1/issuetracker/config Get the full tracker configuration (issuetracker:config-only) Collapse Returns the curated runtime configuration: the bottom-up triage config (whether the error-ingestion path is enabled, which services intercept error events, dedup TTL, minimum severity to open, auto-publish) and the model routing config (flash/pro tier chains, tier cooldowns, pro-review confidence threshold, peak windows, vision model). Gated on the issuetracker:config role specifically - admin does not imply this.
Responses 200 Full tracker configuration (bottom-up + model). object config: object (required) - Bottom-up triage configuration.
enabled: boolean (required)
services: object (required)
bot: boolean
api-gateway: boolean
webhooks: boolean
discord-proxy: boolean
microservices: boolean
dedupTtlDays: number (required)
minSeverityToOpen: string (required)
autoOpen: boolean (required)
model: object (required) - Model routing configuration.
flashTiers: array<object> (required)
providerId: string
modelId: string
label: string
peakExempt: boolean
proTiers: array<object> (required)
providerId: string
modelId: string
label: string
peakExempt: boolean
visionTiers: array<object> (required)
providerId: string
modelId: string
label: string
peakExempt: boolean
tierBlockBaseMs: number (required)
tierBlockMaxMs: number (required)
proReviewConfidenceThreshold: number (required)
peakWindows: array<array<number>> (required)
visionWholeAnalysis: boolean (required)
analysisMode: string (required)401 User is unauthenticated ProblemJsonError errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.403 issuetracker:config role required ProblemJsonError errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.500 Internal error ProblemJsonError errors: array<object> (required)
code: string - HTTP reason name (e.g. "NOT_FOUND").
message: string - Human-readable error message.
put /api/v1/issuetracker/config Update the full tracker configuration (issuetracker:config-only) Details
get /api/v1/issuetracker/overview Issue tracker overview counts and DeepSeek peak/off-peak clock Details
get /api/v1/issuetracker/worker-status AI analysis worker availability Details