# Generate Multi-Format Animated GIFs

{% hint style="info" %}
This feature is available from the [**Pro**](https://www.abyssale.com/pricing) plan.
{% endhint %}

### Asynchronous Asset Generation Endpoint

`POST /async/banner-builder/{design_id}/generate`

### Generation Characteristics

* Supported Design Type: **Animated**
* Response: **Asynchronous**
* Enables batch generation of multiple assets
* Required Parameter: `image_file_type=gif`
* Retrieval methods:
  * [Webhooks](https://developers.abyssale.com/rest-api/generation/asynchronous-generation/..#webhook-configuration)
  * [Polling](https://developers.abyssale.com/rest-api/generation/asynchronous-generation/..#polling-configuration)

### Output File Types

Supported formats:

* Gif images

### Additional information

#### Output customisation

In addition to the supported image properties, a `gif` property can be set to customise the output gif. Here is the available option:

#### Frame Rate Configuration FPS (Frames Per Second)

* Property name : `fps`
* Default: 9 fps
* Range: 2-9 fps

#### Repeat&#x20;

{% hint style="info" %}
Duplicate frame removal generates a lighter file without compromising visual quality. This optimization technique reduces file size by eliminating redundant image data while preserving the GIF visual integrity.
{% endhint %}

* Property name : `repeat`
* Default: -1  The GIF will repeat **indefinitely.**
* Value `0`: Play only once.&#x20;
* Value of `1`: Play twice. And so on.

Configuration Example:

```json
"gif": {
 "fps": 8,
 "repeat": 3
}
```

### Sample request <a href="#sample-request" id="sample-request"></a>

​Do not forget to replace `{YOUR-API-KEY}` and `{design_id}`

{% tabs %}
{% tab title="cURL" %}

```
curl -X POST -H "x-api-key:{YOUR-API-KEY}" -H "Content-Type: application/json"  \
-d '{
  "callback_url": "https://webhook.mycompany.com/images",
  "image_file_type": "gif",
  "gif": {
    "max_fps": 9,
    "repeat": -1
  },
  "template_format_names": ["facebook-feed", "instagram-post", "iab-medium"],
  "elements": {
    "primary_text": {
        "payload": "New branding available.",
        "color": "#FF0000"
    }
  }
}' \
https://api.abyssale.com/async/banner-builder/{design_id}/generate
```

{% endtab %}

{% tab title="Javascript" %}

```javascript
const axios = require('axios');

const payload = {
  "callback_url": "https://webhook.mycompany.com/images",
  "image_file_type": "gif",
  "gif": {
    "max_fps": 9,
    "repeat": -1
  },
  "template_format_names": ["facebook-feed", "instagram-post", "iab-medium"],
  "elements": {
    "primary_text": {
        "payload": "New branding available.",
        "color": "#FF0000"
    }
  }
}

// Replace {id} by your template ID
axios.post("https://api.abyssale.com/async/banner-builder/{design_id}/generate", payload, {
    headers: {"x-api-key": "{YOUR-API-KEY}", "Content-Type": "application/json", "timeout": 30000}
  }).then(response => {
    console.log(response.data)
}j
```

{% endtab %}

{% tab title="Python" %}

```python
import json
import requests

image_generation_payload = {
  "callback_url": "https://webhook.mycompany.com/images",
  "image_file_type": "gif",
  "gif": {
    "max_fps": 9,
    "repeat": -1
  },
  "template_format_names": ["facebook-feed", "instagram-post", "iab-medium"],
  "elements": {
    "primary_text": {
        "payload": "New branding available.",
        "color": "#FF0000"
    }
  }
}

# Do not forget to replace {YOUR-API-KEY} and {template_id}
r = requests.post("https://api.abyssale.com/async/banner-builder/{design_id}/generate",
  headers={"x-api-key": "YOUR-API-KEY", "Content-Type": "application/json"},
  data=json.dumps(image_generation_payload),
  timeout=30
)
r.json()
```

{% endtab %}
{% endtabs %}

### Sample response <a href="#sample-response" id="sample-response"></a>

```
{
  "generation_request_id": "df75afa8-5a77-4e03-aeef-6d1b6dd0580a"
}
```
