# Storyblok

The Storyblok Integration step allows you to connect your AirOps workflows with your Storyblok spaces. This native integration provides comprehensive story, component, datasource, and folder management capabilities directly from your workflows.

## Overview

Storyblok is a headless CMS with a visual editor that enables teams to build and manage structured content for any digital channel. By connecting Storyblok to AirOps, you can automate content creation, publishing, and management across your Storyblok spaces.

## Authentication

Before using the Storyblok integration in your workflows, you must first connect your Storyblok account in the AirOps Settings:

1. Navigate to **Settings > Integrations**
2. Find the Storyblok section and click "Configure"
3. Enter your **Management Token** — a Personal Access Token generated in your Storyblok account under **My Account > Personal Access Tokens**. Required for write operations
4. Enter your **Access Token** — a Content Delivery API token found in your space under **Settings > Access Tokens**. Used for reading stories
5. Enter your **Space ID** — the numeric ID of your Storyblok space, found under **Settings > Space**
6. Optionally select a **Region** — the region of your Storyblok space: `eu` (default), `us`, `ca`, or `ap`

{% hint style="info" %}
Read operations (Get Story, List Stories) use the Content Delivery API token, while write operations (Create, Update, Delete, Publish) require the Management Token.
{% endhint %}

## Available Actions

### Story Management

* **Create Story** -- add a new story to a Storyblok space
* **Get Story** -- retrieve a single story by full slug or ID
* **List Stories** -- fetch multiple stories with optional filters
* **Update Story** -- modify an existing story's content or metadata
* **Publish Story** -- make a story publicly available
* **Unpublish Story** -- revert a published story to draft
* **Delete Story** -- permanently remove a story

### Components

* **Get Component** -- retrieve a single component by ID
* **List Components** -- fetch all components defined in the space

### Datasources

* **List Datasources** -- fetch all datasources in the space
* **List Datasource Entries** -- fetch entries for a specific datasource

### Folders

* **List Folders** -- fetch all folders in the space

## Action Parameters

### Create Story

1. **Name** (required) -- the display name of the story (e.g. `My Blog Post`)
2. **Slug** (required) -- the URL slug for the story (e.g. `my-blog-post`)
3. **Content** -- a JSON object of content fields matching the story's component schema (e.g. `{"component": "article", "title": "Hello"}`)
4. **Parent ID** -- the numeric ID of the parent folder to place the story in

### Get Story

1. **Full Slug or ID** (required) -- the full slug (e.g. `blog/my-post`) or numeric ID of the story to retrieve
2. **Version** -- which version to return: `published` (default) or `draft`

### List Stories

1. **Starts With** -- filter stories whose full slug starts with a given string (e.g. `blog/`)
2. **Version** -- which version to return: `published` (default) or `draft`
3. **Search Term** -- a search query to filter stories by name, slug, or content
4. **With Tag** -- filter stories that have a specific tag slug
5. **Sort By** -- field and direction to sort results (e.g. `name:asc`, `created_at:desc`)
6. **Per Page** -- the number of stories per page (default: `25`, max: `100`)
7. **Page** -- the page number for pagination (default: `1`)

### Update Story

1. **Story ID** (required) -- the numeric ID of the story to update
2. **Name** -- the display name of the story
3. **Slug** -- the URL slug for the story
4. **Content** -- a JSON object of content fields matching the story's component schema
5. **Parent ID** -- the numeric ID of the parent folder

### Publish Story

1. **Story ID** (required) -- the numeric ID of the story to publish

### Unpublish Story

1. **Story ID** (required) -- the numeric ID of the story to unpublish

### Delete Story

1. **Story ID** (required) -- the numeric ID of the story to delete

### Get Component

1. **Component ID** (required) -- the numeric ID of the component to retrieve

### List Components

No parameters required.

### List Datasources

1. **Per Page** -- the number of datasources per page (default: `25`, max: `100`)
2. **Page** -- the page number for pagination (default: `1`)

### List Datasource Entries

1. **Datasource ID** (required) -- the numeric ID of the datasource
2. **Per Page** -- the number of entries per page (default: `25`, max: `100`)
3. **Page** -- the page number for pagination (default: `1`)

### List Folders

1. **Per Page** -- the number of folders per page (default: `25`, max: `100`)
2. **Page** -- the page number for pagination (default: `1`)

## Common Use Cases

* Automatically creating and publishing blog stories from AI-generated content
* Updating story content in bulk based on workflow conditions
* Fetching stories by slug to enrich or rewrite existing content
* Building content pipelines that create stories in draft and publish after review
* Listing stories by tag or slug prefix to run audits or apply bulk transformations
* Retrieving component schemas to validate or generate structured content programmatically

{% hint style="info" %}
Note: Storyblok integration requires both a Management Token and a Content Delivery API token. Ensure both tokens have the appropriate permissions for the operations your workflows perform.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.airops.com/context/overview/integrations/storyblok.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
