Skip to main content
GiselleBot GiselleBot

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

Returns a success message for a valid JWT or self token.

Responses

200Connectivity confirmation object
message: string - Success message
401Authentication token missing or revoked ProblemJsonError
errors: array<object> (required)
  code: string - HTTP reason name (e.g. "NOT_FOUND").
  message: string - Human-readable error message.
403Authentication token invalid or unauthorized ProblemJsonError
errors: array<object> (required)
  code: string - HTTP reason name (e.g. "NOT_FOUND").
  message: string - Human-readable error message.

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

NameInTypeDescription
type queryobject
additionalProperties queryobject

Responses

403Missing 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.
408State token expired ProblemJsonError
errors: array<object> (required)
  code: string - HTTP reason name (e.g. "NOT_FOUND").
  message: string - Human-readable error message.
500Internal error ProblemJsonError
errors: array<object> (required)
  code: string - HTTP reason name (e.g. "NOT_FOUND").
  message: string - Human-readable error message.

Bots

Reverse proxy to linked bots

Returns the linked bots whose servers intersect the user's Discord guilds.

Responses

200Bots available to the user object
401User is unauthenticated ProblemJsonError
errors: array<object> (required)
  code: string - HTTP reason name (e.g. "NOT_FOUND").
  message: string - Human-readable error message.
500Internal 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.

Services

API-key service endpoints

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

200Prediction object (passthrough from the NSFWJS microservice) object
400Cache ID missing or invalid ProblemJsonError
errors: array<object> (required)
  code: string - HTTP reason name (e.g. "NOT_FOUND").
  message: string - Human-readable error message.
401API key was not supplied ProblemJsonError
errors: array<object> (required)
  code: string - HTTP reason name (e.g. "NOT_FOUND").
  message: string - Human-readable error message.
403API key not authorized ProblemJsonError
errors: array<object> (required)
  code: string - HTTP reason name (e.g. "NOT_FOUND").
  message: string - Human-readable error message.
404No cached image found ProblemJsonError
errors: array<object> (required)
  code: string - HTTP reason name (e.g. "NOT_FOUND").
  message: string - Human-readable error message.
500Internal error ProblemJsonError
errors: array<object> (required)
  code: string - HTTP reason name (e.g. "NOT_FOUND").
  message: string - Human-readable error message.

Webhooks

Inbound provider webhooks and fan-out

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

202Event accepted for asynchronous processing object
message: string - Always "EVENT_RECEIVED"
400Request body not found ProblemJsonError
errors: array<object> (required)
  code: string - HTTP reason name (e.g. "NOT_FOUND").
  message: string - Human-readable error message.
403Authorization token missing or invalid ProblemJsonError
errors: array<object> (required)
  code: string - HTTP reason name (e.g. "NOT_FOUND").
  message: string - Human-readable error message.

Static

Static data proxy

Proxies the static website data JSON from S3, refreshing the embedded timestamp fields. Unauthenticated.

Responses

200Static website data with an injected timestamp object
500Upstream 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

Returns the JWT-authenticated user's Discord profile, fetched from Discord with the user's stored OAuth token.

Responses

200Discord 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 locale
401User is unauthenticated ProblemJsonError
errors: array<object> (required)
  code: string - HTTP reason name (e.g. "NOT_FOUND").
  message: string - Human-readable error message.
403Invalid or unauthorized token ProblemJsonError
errors: array<object> (required)
  code: string - HTTP reason name (e.g. "NOT_FOUND").
  message: string - Human-readable error message.
500Internal 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

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

200Full 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)
401User is unauthenticated ProblemJsonError
errors: array<object> (required)
  code: string - HTTP reason name (e.g. "NOT_FOUND").
  message: string - Human-readable error message.
403issuetracker:config role required ProblemJsonError
errors: array<object> (required)
  code: string - HTTP reason name (e.g. "NOT_FOUND").
  message: string - Human-readable error message.
500Internal error ProblemJsonError
errors: array<object> (required)
  code: string - HTTP reason name (e.g. "NOT_FOUND").
  message: string - Human-readable error message.