> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kynva.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Create text animation

> Render animated text layers with various effects including typewriter, wave, bounce, and custom keyframes. Supports emotion presets for mood-driven animation.



## OpenAPI

````yaml /openapi.yaml post /api/v1/animations/text
openapi: 3.0.0
info:
  title: Kynva Public API
  description: >

    # Kynva Public API v4.0


    The stateless contract API: everything flows through

    `POST /api/v1/facade/generate` with a `RenderForgeRequestV1` body.


    ## Entry Points


    ### Sync preview

    ```

    POST /generate { operation: "preview" } → 200 with rendered outputs

    ```


    ### Async render

    ```

    POST /generate { operation: "render" } → 202 + job → poll GET
    /render-jobs/{id} or subscribe to webhooks

    ```


    ### Signed image URLs (the OG-image primitive)

    ```

    POST /api/v1/generate/sign → signed GET URLs → 302 to immutable rendered
    PNGs

    ```


    ## Core Principle

    Deterministic by construction: the same request, engine version, and seed

    produce byte-identical output.


    ## API Versioning

    Include `X-API-Version: 2026-01-01` in all requests.


    ## Authentication

    Include `Authorization: Bearer <token>` in all requests (signed image

    GET URLs authenticate by signature instead).


    ## Idempotency

    Include `Idempotency-Key: <uuid>` for all POST/PATCH mutations.


    ## Rate Limiting

    Tiered limits per endpoint category (see documentation).
  version: 4.0.0
  contact:
    name: Kynva Support
    url: https://github.com/fredadun/renderforge
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
servers:
  - url: https://api.kynva.ai
    description: Production
  - url: https://renderforge-production-838f.up.railway.app
    description: Production (direct, until api.kynva.ai DNS lands)
  - url: http://localhost:3000
    description: Development
security:
  - bearerAuth: []
tags:
  - name: Brands
    description: Brand management
  - name: BrandKits
    description: Brand kit version management
  - name: Assets
    description: Asset upload and management
  - name: Drafts
    description: Draft creation and workflow
  - name: Decisions
    description: Decision records and explainability
  - name: Render Jobs
    description: Async render job management
  - name: Webhooks
    description: Webhook configuration and DLQ
  - name: Render Now
    description: Single-call convenience endpoint
  - name: Templates (Advanced)
    description: Template selection and listing
  - name: Validation (Advanced)
    description: Stateless validation
  - name: Compile (Advanced)
    description: Stateless compilation
  - name: Licenses (Advanced)
    description: License checking
  - name: Spec Render (Advanced)
    description: Direct spec preview/render
  - name: Reference
    description: Reference data (export profiles, API versions)
  - name: System
    description: Health checks and system info
  - name: Images
    description: Generate images from templates
  - name: Templates
    description: Manage reusable templates
  - name: Health
    description: Service health and status
paths:
  /api/v1/animations/text:
    post:
      tags:
        - Animation
      summary: Create text animation
      description: >-
        Render animated text layers with various effects including typewriter,
        wave, bounce, and custom keyframes. Supports emotion presets for
        mood-driven animation.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - templateId
                - textAnimations
              properties:
                templateId:
                  type: string
                  description: ID of the template to animate
                emotionPreset:
                  type: string
                  enum:
                    - urgent
                    - calm
                    - playful
                    - dramatic
                    - rebellious
                    - luxurious
                    - nostalgic
                    - chaotic
                  description: >-
                    Emotion preset to apply (sets animation style, timing, and
                    effects). Overridable by explicit animation settings.
                textAnimations:
                  type: array
                  minItems: 1
                  maxItems: 20
                  items:
                    type: object
                    required:
                      - layer
                      - animation
                    properties:
                      layer:
                        type: string
                        description: Name of the text layer to animate
                      animation:
                        type: object
                        required:
                          - type
                          - duration
                        properties:
                          type:
                            type: string
                            enum:
                              - typewriter
                              - fadeInWord
                              - fadeInChar
                              - reveal
                              - unblur
                              - bounce
                              - wave
                              - shake
                              - pulse
                              - float
                              - swing
                              - followPath
                              - scaleWithBeat
                              - spiral
                              - explode
                              - assemble
                              - glitch
                              - stagger
                              - scalePunch
                              - elastic
                              - rotate3D
                              - handwritten
                              - particle
                              - splitReveal
                              - flipIn
                              - dropIn
                              - keyframes
                            description: Animation type
                          trigger:
                            type: string
                            enum:
                              - start
                              - delay
                              - sequence
                            default: start
                          delay:
                            type: number
                            minimum: 0
                            default: 0
                            description: Delay in milliseconds
                          duration:
                            type: number
                            minimum: 100
                            maximum: 30000
                            description: Duration in milliseconds
                          easing:
                            type: string
                            enum:
                              - linear
                              - ease
                              - ease-in
                              - ease-out
                              - ease-in-out
                              - cubic-bezier
                            default: ease-out
                          repeat:
                            oneOf:
                              - type: number
                                minimum: 1
                              - type: string
                                enum:
                                  - infinite
                            description: Number of times to repeat or "infinite"
                          direction:
                            type: string
                            enum:
                              - normal
                              - reverse
                              - alternate
                              - alternate-reverse
                          options:
                            type: object
                            description: >-
                              Type-specific options (typingSpeed, amplitude,
                              keyframes, etc.)
                modifications:
                  type: array
                  description: Layer modifications to apply
                variables:
                  type: object
                  description: >-
                    Variables for template interpolation (e.g., { headline: "My
                    Title" } replaces {{headline}})
                stylePreset:
                  type: string
                  description: Style preset ID to apply creativity effects
                totalDuration:
                  type: number
                  minimum: 100
                  maximum: 60000
                  description: >-
                    Total animation duration in ms (auto-calculated if not
                    provided)
                fps:
                  type: number
                  minimum: 5
                  maximum: 60
                  default: 30
                format:
                  type: string
                  enum:
                    - gif
                    - mp4
                  default: gif
        required: true
      responses:
        '200':
          description: Text animation created successfully
          content:
            application/json:
              schema:
                description: Text animation created successfully
                type: object
                properties:
                  success:
                    type: boolean
                  data:
                    type: object
                    properties:
                      url:
                        type: string
                      width:
                        type: number
                      height:
                        type: number
                      duration:
                        type: number
                      frameCount:
                        type: number
                      format:
                        type: string
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: >-
        Your Kynva API key (kyn_live_xxx or kyn_test_xxx; legacy rf_ keys remain
        valid)

````