Skip to main content
POST
/
api
/
v1
/
themes
Create a theme
curl --request POST \
  --url https://quizquail.com/api/v1/themes \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "name": "Midnight Neon",
  "primaryColor": "#3B82F6",
  "secondaryColor": "#6366F1",
  "backgroundColor": "#0A0F1C",
  "textColor": "#F1F5F9",
  "accentColor": "#38BDF8",
  "fontFamily": "Inter",
  "backgroundImageUrl": "<string>",
  "isPublic": false,
  "soundPack": "default",
  "effects": {
    "backgroundImageOpacity": 0.4,
    "backgroundStyle": "blobs",
    "backgroundBlobCount": 3,
    "backgroundBlobOpacity": 0.24,
    "backgroundAnimationSpeed": 1,
    "backgroundGradientIntensity": 0.13,
    "backgroundVignetteIntensity": 0.7,
    "gradientAngle": 135,
    "gradientAnimation": true,
    "backgroundPattern": "none",
    "backgroundPatternOpacity": 0.12,
    "backgroundPatternScale": 1,
    "particleStyle": "none",
    "particleDensity": 0.3,
    "particleSpeed": 1,
    "particleColor": "theme",
    "optionCardVariant": "standard",
    "optionCardOpacity": 0.33,
    "optionStripeWidth": 4,
    "titleLetterSpacing": "-0.02em",
    "textStyle": "solid",
    "titleTextStyle": "solid",
    "textShadowStyle": "subtle",
    "optionFontWeight": 400,
    "frameStyle": "none",
    "frameColor": "#FFFFFF",
    "frameOpacity": 0.5,
    "introRingCount": 3,
    "introParticleCount": 8,
    "outroConfettiCount": 12,
    "outroBurstCount": 3,
    "celebrationStyle": "pulse",
    "celebrationIntensity": 0.7,
    "correctAnswerGlowSize": 30,
    "revealSuspenseFrames": 45,
    "revealDimIntensity": 0.3,
    "urgencyStyle": "vignette",
    "urgencyThreshold": 3,
    "urgencyColor": "#EF4444",
    "transitionStyle": "fade",
    "grainOverlay": "none",
    "grainStyle": "film",
    "audioReactive": false,
    "audioReactiveIntensity": 0.5,
    "audioReactiveBpm": 120
  }
}
'
{
  "data": {
    "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "name": "<string>",
    "primaryColor": "<string>",
    "secondaryColor": "<string>",
    "backgroundColor": "<string>",
    "textColor": "<string>",
    "accentColor": "<string>",
    "fontFamily": "<string>",
    "backgroundImageUrl": "<string>",
    "isPublic": true,
    "effects": {
      "backgroundImageOpacity": 0.4,
      "backgroundStyle": "blobs",
      "backgroundBlobCount": 3,
      "backgroundBlobOpacity": 0.24,
      "backgroundAnimationSpeed": 1,
      "backgroundGradientIntensity": 0.13,
      "backgroundVignetteIntensity": 0.7,
      "gradientAngle": 135,
      "gradientAnimation": true,
      "backgroundPattern": "none",
      "backgroundPatternOpacity": 0.12,
      "backgroundPatternScale": 1,
      "particleStyle": "none",
      "particleDensity": 0.3,
      "particleSpeed": 1,
      "particleColor": "theme",
      "optionCardVariant": "standard",
      "optionCardOpacity": 0.33,
      "optionStripeWidth": 4,
      "titleLetterSpacing": "-0.02em",
      "textStyle": "solid",
      "titleTextStyle": "solid",
      "textShadowStyle": "subtle",
      "optionFontWeight": 400,
      "frameStyle": "none",
      "frameColor": "#FFFFFF",
      "frameOpacity": 0.5,
      "introRingCount": 3,
      "introParticleCount": 8,
      "outroConfettiCount": 12,
      "outroBurstCount": 3,
      "celebrationStyle": "pulse",
      "celebrationIntensity": 0.7,
      "correctAnswerGlowSize": 30,
      "revealSuspenseFrames": 45,
      "revealDimIntensity": 0.3,
      "urgencyStyle": "vignette",
      "urgencyThreshold": 3,
      "urgencyColor": "#EF4444",
      "transitionStyle": "fade",
      "grainOverlay": "none",
      "grainStyle": "film",
      "audioReactive": false,
      "audioReactiveIntensity": 0.5,
      "audioReactiveBpm": 120
    },
    "userId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "createdAt": "2023-11-07T05:31:56Z",
    "updatedAt": "2023-11-07T05:31:56Z",
    "soundPack": "<unknown>"
  }
}

Authorizations

Authorization
string
header
required

API key authentication. Prefix your key with Bearer in the Authorization header.

Keys follow the format qq_... and can be scoped to specific permissions.

Body

application/json
name
string
required
Required string length: 1 - 100
Example:

"Midnight Neon"

primaryColor
string
default:#3B82F6
Pattern: ^#[0-9a-fA-F]{6}$
secondaryColor
string
default:#6366F1
Pattern: ^#[0-9a-fA-F]{6}$
backgroundColor
string
default:#0A0F1C
Pattern: ^#[0-9a-fA-F]{6}$
textColor
string
default:#F1F5F9
Pattern: ^#[0-9a-fA-F]{6}$
accentColor
string
default:#38BDF8
Pattern: ^#[0-9a-fA-F]{6}$
fontFamily
string
default:Inter
backgroundImageUrl
string<uri> | null
isPublic
boolean
default:false
soundPack
enum<string>
default:default
Available options:
default,
none
effects
object

Visual effects configuration — all 42 fields are optional with sensible defaults

Response

Created theme

data
object
required