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

# Video & Motion

> Generate MP4 videos and After Effects renders from sustainability data.

The Hey Chocolate API can generate server-rendered MP4 videos and drive After Effects templates with sustainability data for certificates, social sharing, and marketing materials.

## MP4 video generation

### Impact Certificate Video

```graphql theme={null}
mutation {
  renderVisualisation(input: {
    productId: "prod_abc123"
    format: MP4
    template: IMPACT_CERTIFICATE
    parameters: {
      resolution: "1920x1080"
      fps: 30
      duration: 10000
      branding: {
        logo: true
        primaryColor: "#F83B00"
      }
    }
  }) {
    url
    format
    fileSize
    duration
    expiresAt
  }
}
```

### Social Share Video

```graphql theme={null}
mutation {
  renderVisualisation(input: {
    productId: "prod_abc123"
    format: MP4
    template: SOCIAL_SHARE_VIDEO
    parameters: {
      resolution: "1080x1080"
      fps: 30
      duration: 15000
      platform: "instagram"
    }
  }) {
    url
    fileSize
    duration
  }
}
```

## After Effects integration

### Data-driven rendering

Push sustainability data into After Effects templates for automated video production:

```graphql theme={null}
mutation {
  renderVisualisation(input: {
    productId: "prod_abc123"
    format: AFTER_EFFECTS
    template: SOCIAL_SHARE_VIDEO
    parameters: {
      templateId: "ae_tmpl_impact_story"
      dataMapping: {
        productName: "{{product.name}}"
        co2Score: "{{product.impactScore.co2Equivalent}}"
        equivalency: "{{product.impactScore.equivalencies[0].description}}"
        savingsValue: "{{product.impactScore.equivalencies[0].value}}"
      }
    }
  }) {
    renderJobId
    status
    estimatedCompletion
    url
  }
}
```

### Checking render status

Video rendering is asynchronous. Poll for completion or use webhooks:

```graphql theme={null}
query {
  renderJob(id: "job_abc123") {
    id
    status
    progress
    url
    error
    completedAt
  }
}
```

**Render statuses:**

| Status      | Description                        |
| ----------- | ---------------------------------- |
| `QUEUED`    | Waiting to be processed            |
| `RENDERING` | Currently being rendered           |
| `COMPLETED` | Render finished, URL available     |
| `FAILED`    | Render failed, check `error` field |

Alternatively, subscribe to the `render.completed` webhook event.

## Available templates

| Template             | Resolutions          | Duration | Description                     |
| -------------------- | -------------------- | -------- | ------------------------------- |
| `IMPACT_CERTIFICATE` | 1920x1080            | 10s      | Animated impact certificate     |
| `SOCIAL_SHARE_VIDEO` | 1080x1080, 1080x1920 | 15s      | Social media-ready impact video |
| `PRODUCT_HIGHLIGHT`  | 1920x1080            | 20s      | Product sustainability showcase |
| `YEAR_IN_REVIEW`     | 1920x1080            | 30s      | Annual sustainability summary   |

## Rate limits

Video rendering is resource-intensive. Limits by tier:

| Tier           | Renders/day | Max resolution | Max duration |
| -------------- | ----------- | -------------- | ------------ |
| **Free**       | 10          | 1080p          | 15s          |
| **Growth**     | 500         | 1080p          | 30s          |
| **Enterprise** | 5,000+      | 4K             | 60s          |
