PHPackages                             sensiolabs-de/storyblok-api - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. sensiolabs-de/storyblok-api

Abandoned → [storyblok/php-content-api-client](/?search=storyblok%2Fphp-content-api-client)Library[API Development](/categories/api)

sensiolabs-de/storyblok-api
===========================

API for Storyblok

3.5.0(1y ago)626.3k1[1 PRs](https://github.com/sensiolabs-de/storyblok-api/pulls)1MITPHPPHP &gt;=8.3CI passing

Since May 10Pushed 1y ago2 watchersCompare

[ Source](https://github.com/sensiolabs-de/storyblok-api)[ Packagist](https://packagist.org/packages/sensiolabs-de/storyblok-api)[ RSS](/packages/sensiolabs-de-storyblok-api/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (17)Versions (43)Used By (1)

storyblok-api
=============

[](#storyblok-api)

BranchPHPCode Coverage`master`[![PHP](https://github.com/sensiolabs-de/storyblok-api/actions/workflows/ci.yaml/badge.svg)](https://github.com/sensiolabs-de/storyblok-api/actions/workflows/ci.yaml)[![codecov](https://camo.githubusercontent.com/1342c3121b39647ebc5c3a2ccb08e32d78c5cfaefb385e8306c39951b215a2a4/68747470733a2f2f636f6465636f762e696f2f67682f73656e73696f6c6162732d64652f73746f7279626c6f6b2d6170692f67726170682f62616467652e7376673f746f6b656e3d384b344633334c535746)](https://codecov.io/gh/sensiolabs-de/storyblok-api)Symfony
-------

[](#symfony)

Use the symfony bundle [sensiolabs-de/storyblok-bundle](https://github.com/sensiolabs-de/storyblok-bundle) to integrate this library into your Symfony application.

Usage
-----

[](#usage)

### Installation

[](#installation)

```
composer require sensiolabs-de/storyblok-api
```

### Setup

[](#setup)

```
use SensioLabs\Storyblok\Api\StoryblokClient;

$client = new StoryblokClient(
    baseUri: 'https://api.storyblok.com',
    token: '***********',
    timeout: 10 // optional
);

// you can now request any endpoint which needs authentication
$client->request('GET', '/api/something', $options);
```

Spaces
------

[](#spaces)

In your code you should type-hint to `SensioLabs\Storyblok\Api\SpacesApiInterface`

### Get the current space

[](#get-the-current-space)

Returns the space associated with the current token.

```
use SensioLabs\Storyblok\Api\SpacesApi;
use SensioLabs\Storyblok\Api\StoryblokClient;

$client = new StoryblokClient(/* ... */);
$spacesApi = new SpacesApi($client);

$response = $spacesApi->me();
```

Stories
-------

[](#stories)

In your code you should type-hint to `SensioLabs\Storyblok\Api\StoriesApiInterface`

### Get all available stories

[](#get-all-available-stories)

```
use SensioLabs\Storyblok\Api\StoriesApi;
use SensioLabs\Storyblok\Api\StoryblokClient;

$client = new StoryblokClient(/* ... */);

$storiesApi = new StoriesApi($client);
$response = $storiesApi->all(locale: 'de');
```

### Fetch by Version (`draft`, `published`)

[](#fetch-by-version-draft-published)

#### Global

[](#global)

```
use SensioLabs\Storyblok\Api\StoriesApi;
use SensioLabs\Storyblok\Api\StoryblokClient;
use SensioLabs\Storyblok\Api\Domain\Value\Dto\Version;

$client = new StoryblokClient(/* ... */);

$storiesApi = new StoriesApi($client, Version::Draft);
$response = $storiesApi->bySlug(
    locale: 'de',
    slug: '/my-story/',
);
```

#### Method Call

[](#method-call)

```
use SensioLabs\Storyblok\Api\StoriesApi;
use SensioLabs\Storyblok\Api\StoryblokClient;
use SensioLabs\Storyblok\Api\Domain\Value\Dto\Version;

$client = new StoryblokClient(/* ... */);

$storiesApi = new StoriesApi($client, Version::Published);
$response = $storiesApi->bySlug(
    locale: 'de',
    slug: '/my-story/',
    version: Version::Draft, // This overrides the global "version"
);
```

### Pagination

[](#pagination)

```
use SensioLabs\Storyblok\Api\StoriesApi;
use SensioLabs\Storyblok\Api\StoryblokClient;
use SensioLabs\Storyblok\Api\Domain\Value\Dto\Pagination;

$client = new StoryblokClient(/* ... */);

$storiesApi = new StoriesApi($client);
$response = $storiesApi->all(
    locale: 'de',
    pagination: new Pagination(page: 1, perPage: 30)
);
```

#### Sorting

[](#sorting)

```
use SensioLabs\Storyblok\Api\StoriesApi;
use SensioLabs\Storyblok\Api\StoryblokClient;
use SensioLabs\Storyblok\Api\Domain\Value\Dto\SortBy;
use SensioLabs\Storyblok\Api\Domain\Value\Dto\Direction;

$client = new StoryblokClient(/* ... */);

$storiesApi = new StoriesApi($client);
$response = $storiesApi->all(
    locale: 'de',
    sortBy: new SortBy(field: 'title', direction: Direction::Desc)
);
```

#### Filtering

[](#filtering)

```
use SensioLabs\Storyblok\Api\StoriesApi;
use SensioLabs\Storyblok\Api\StoryblokClient;
use SensioLabs\Storyblok\Api\Domain\Value\Filter\FilterCollection;
use SensioLabs\Storyblok\Api\Domain\Value\Dto\Direction;
use SensioLabs\Storyblok\Api\Domain\Value\Filter\Filters\InFilter;

$client = new StoryblokClient(/* ... */);

$storiesApi = new StoriesApi($client);
$response = $storiesApi->all(
    locale: 'de',
    filters: new FilterCollection([
        new InFilter(field: 'single_reference_field', value: 'f2fdb571-a265-4d8a-b7c5-7050d23c2383')
    ])
);
```

#### Available filters

[](#available-filters)

[AllInArrayFilter.php](src/Domain/Value/Filter/Filters/AllInArrayFilter.php)

Example:

```
use SensioLabs\Storyblok\Api\Domain\Value\Filter\Filters\AllInArrayFilter;

new AllInArrayFilter(field: 'tags', value: ['foo', 'bar', 'baz']);
```

[AnyInArrayFilter.php](src/Domain/Value/Filter/Filters/AnyInArrayFilter.php)

Example:

```
use SensioLabs\Storyblok\Api\Domain\Value\Filter\Filters\AnyInArrayFilter;

new AnyInArrayFilter(field: 'tags', value: ['foo', 'bar', 'baz']);
```

[GreaterThanDateFilter.php](src/Domain/Value/Filter/Filters/GreaterThanDateFilter.php)

Example:

```
use SensioLabs\Storyblok\Api\Domain\Value\Filter\Filters\GreaterThanDateFilter;

new GreaterThanDateFilter(field: 'created_at', value: new \DateTimeImmutable());
```

[LessThanDateFilter.php](src/Domain/Value/Filter/Filters/LessThanDateFilter.php)

Example:

```
use SensioLabs\Storyblok\Api\Domain\Value\Filter\Filters\LessThanDateFilter;

new LessThanDateFilter(field: 'created_at', value: new \DateTimeImmutable());
```

[GreaterThanFloatFilter.php](src/Domain/Value/Filter/Filters/GreaterThanFloatFilter.php)

Example:

```
use SensioLabs\Storyblok\Api\Domain\Value\Filter\Filters\GreaterThanFloatFilter;

new GreaterThanFloatFilter(field: 'price', value: 39.99);
```

[LessThanFloatFilter.php](src/Domain/Value/Filter/Filters/LessThanFloatFilter.php)

Example:

```
use SensioLabs\Storyblok\Api\Domain\Value\Filter\Filters\LessThanFloatFilter;

new LessThanFloatFilter(field: 'price', value: 199.99);
```

[GreaterThanIntFilter.php](src/Domain/Value/Filter/Filters/GreaterThanIntFilter.php)

Example:

```
use SensioLabs\Storyblok\Api\Domain\Value\Filter\Filters\GreaterThanIntFilter;

new GreaterThanIntFilter(field: 'stock', value: 0);
```

[LessThanIntFilter.php](src/Domain/Value/Filter/Filters/LessThanIntFilter.php)

Example:

```
use SensioLabs\Storyblok\Api\Domain\Value\Filter\Filters\LessThanIntFilter;

new LessThanIntFilter(field: 'stock', value: 100);
```

[InFilter.php](src/Domain/Value/Filter/Filters/InFilter.php)

Example:

```
use SensioLabs\Storyblok\Api\Domain\Value\Filter\Filters\InFilter;

new InFilter(field: 'text', value: 'Hello World!');
// or
new InFilter(field: 'text', value: ['Hello Symfony!', 'Hello SensioLabs!']);
```

[NotInFilter.php](src/Domain/Value/Filter/Filters/NotInFilter.php)

Example:

```
use SensioLabs\Storyblok\Api\Domain\Value\Filter\Filters\NotInFilter;

new NotInFilter(field: 'text', value: 'Hello World!');
// or
new NotInFilter(field: 'text', value: ['Bye Symfony!', 'Bye SensioLabs!']);
```

[IsFilter.php](src/Domain/Value/Filter/Filters/IsFilter.php)

Example:

```
use SensioLabs\Storyblok\Api\Domain\Value\Filter\Filters\IsFilter;

// You can use one of the following constants:
// IsFilter::EMPTY_ARRAY
// IsFilter::NOT_EMPTY_ARRAY
// IsFilter::EMPTY
// IsFilter::NOT_EMPTY
// IsFilter::TRUE
// IsFilter::FALSE
// IsFilter::NULL
// IsFilter::NOT_NULL

new IsFilter(field: 'text', value: IsFilter::EMPTY);
```

[LikeFilter.php](src/Domain/Value/Filter/Filters/LikeFilter.php)

Example:

```
use SensioLabs\Storyblok\Api\Domain\Value\Filter\Filters\LikeFilter;

new LikeFilter(field: 'description', value: '*I love Symfony*');
```

[NotLikeFilter.php](src/Domain/Value/Filter/Filters/NotLikeFilter.php)

Example:

```
use SensioLabs\Storyblok\Api\Domain\Value\Filter\Filters\NotLikeFilter;

new NotLikeFilter(field: 'description', value: '*Text*');
```

[OrFilter.php](src/Domain/Value/Filter/Filters/OrFilter.php)

Example:

```
use SensioLabs\Storyblok\Api\Domain\Value\Filter\Filters\OrFilter;
use SensioLabs\Storyblok\Api\Domain\Value\Filter\Filters\LikeFilter;
use SensioLabs\Storyblok\Api\Domain\Value\Filter\Filters\NotLikeFilter;

new OrFilter(
    new LikeFilter(field: 'text', value: 'Yes!*'),
    new LikeFilter(field: 'text', value: 'Maybe!*'),
    // ...
);
```

### Get all available stories by Content Type (`string`)

[](#get-all-available-stories-by-content-type-string)

```
use SensioLabs\Storyblok\Api\StoriesApi;
use SensioLabs\Storyblok\Api\StoryblokClient;

$client = new StoryblokClient(/* ... */);

$storiesApi = new StoriesApi($client);
$response = $storiesApi->allByContentType('custom_content_type', locale: 'de');
```

### Get by uuid (`SensioLabs\Storyblok\Api\Domain\Value\Uuid`)

[](#get-by-uuid-sensiolabsstoryblokapidomainvalueuuid)

```
use SensioLabs\Storyblok\Api\StoriesApi;
use SensioLabs\Storyblok\Api\StoryblokClient;
use SensioLabs\Storyblok\Api\Domain\Value\Uuid;

$uuid = new Uuid(/** ... */);

$client = new StoryblokClient(/* ... */);

$storiesApi = new StoriesApi($client);
$response = $storiesApi->byUuid($uuid, locale: 'de');
```

### Get by slug (`string`)

[](#get-by-slug-string)

```
use SensioLabs\Storyblok\Api\StoriesApi;
use SensioLabs\Storyblok\Api\StoryblokClient;

$client = new StoryblokClient(/* ... */);

$storiesApi = new StoriesApi($client);
$response = $storiesApi->bySlug('folder/slug', locale: 'de');
```

### Get by id (`SensioLabs\Storyblok\Api\Domain\Value\Id`)

[](#get-by-id-sensiolabsstoryblokapidomainvalueid)

```
use SensioLabs\Storyblok\Api\StoriesApi;
use SensioLabs\Storyblok\Api\StoryblokClient;
use SensioLabs\Storyblok\Api\Domain\Value\Id;

$id = new Id(/** ... */);

$client = new StoryblokClient(/* ... */);

$storiesApi = new StoriesApi($client);
$response = $storiesApi->byId($id, locale: 'de');
```

Links
-----

[](#links)

In your code you should type-hint to `SensioLabs\Storyblok\Api\LinksApiInterface`

### Get all available links

[](#get-all-available-links)

```
use SensioLabs\Storyblok\Api\LinksApi;
use SensioLabs\Storyblok\Api\StoryblokClient;

$client = new StoryblokClient(/* ... */);

$linksApi = new LinksApi($client);
$response = $linksApi->all();
```

### Pagination

[](#pagination-1)

```
use SensioLabs\Storyblok\Api\LinksApi;
use SensioLabs\Storyblok\Api\StoryblokClient;
use SensioLabs\Storyblok\Api\Domain\Value\Dto\Pagination;

$client = new StoryblokClient(/* ... */);

$linksApi = new LinksApi($client);
$response = $linksApi->all(
    pagination: new Pagination(page: 1, perPage: 1000)
);
```

### Get by parent (`SensioLabs\Storyblok\Api\Domain\Value\Id`)

[](#get-by-parent-sensiolabsstoryblokapidomainvalueid)

```
use SensioLabs\Storyblok\Api\LinksApi;
use SensioLabs\Storyblok\Api\StoryblokClient;
use SensioLabs\Storyblok\Api\Domain\Value\Id;

$id = new Id(/** ... */);

$client = new StoryblokClient(/* ... */);

$linksApi = new LinksApi($client);
$response = $linksApi->byParent($id);
```

### Get all root links

[](#get-all-root-links)

```
use SensioLabs\Storyblok\Api\LinksApi;
use SensioLabs\Storyblok\Api\StoryblokClient;

$client = new StoryblokClient(/* ... */);

$linksApi = new LinksApi($client);
$response = $linksApi->roots($id);
```

Datasource
----------

[](#datasource)

In your code you should type-hint to `SensioLabs\Storyblok\Api\DatasourceApiInterface`

### Get by name (`string`)

[](#get-by-name-string)

```
use SensioLabs\Storyblok\Api\DatasourceApi;
use SensioLabs\Storyblok\Api\StoryblokClient;

$client = new StoryblokClient(/* ... */);

$api = new DatasourceApi($client);
$response = $api->byName('tags'); // returns SensioLabs\Storyblok\Api\Domain\Value\Datasource
```

If it has more than one dimension, you can get the entries by

```
use SensioLabs\Storyblok\Api\DatasourceApi;
use SensioLabs\Storyblok\Api\StoryblokClient;
use SensioLabs\Storyblok\Api\Domain\Value\Datasource\Dimension;

$client = new StoryblokClient(/* ... */);

$api = new DatasourceApi($client);
$response = $api->byName('tags', new Dimension('de')); // returns SensioLabs\Storyblok\Api\Domain\Value\Datasource
```

Tags
----

[](#tags)

In your code you should type-hint to `SensioLabs\Storyblok\Api\TagsApiInterface`

### Get all available tags

[](#get-all-available-tags)

```
use SensioLabs\Storyblok\Api\TagsApi;
use SensioLabs\Storyblok\Api\StoryblokClient;

$client = new StoryblokClient(/* ... */);

$api = new TagsApi($client);
$response = $api->all(); // returns SensioLabs\Storyblok\Api\Response\TagsResponse
```

Assets
------

[](#assets)

To use the assets API you have to configure the Assets client.

```
use SensioLabs\Storyblok\Api\StoryblokClient;
use SensioLabs\Storyblok\Api\AssetsApi;

$client = new StoryblokClient(
    baseUri: 'https://api.storyblok.com',
    token: 'assets-api-token',
    timeout: 10 // optional
);

$assetsApi = new AssetsApi($assetsClient);
$assetsApi->get('filename.png')
```

### DX Enhancement through Abstract Collections

[](#dx-enhancement-through-abstract-collections)

To improve developer experience (DX), especially when working with content types like stories, the following abstract class is provided to manage collections of specific content types. This class simplifies data handling and ensures type safety while dealing with large amounts of content from Storyblok.

#### Abstract ContentTypeCollection Class

[](#abstract-contenttypecollection-class)

The ContentTypeCollection class provides a structured way to work with Storyblok content types. It makes managing pagination, filtering, and sorting more intuitive and reusable, saving time and reducing boilerplate code.

```
