PHPackages                             flownative/neos-canto - 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. flownative/neos-canto

ActiveNeos-package[API Development](/categories/api)

flownative/neos-canto
=====================

Neos integration for Canto

v0.6.0(10mo ago)15126[3 issues](https://github.com/flownative/neos-canto/issues)[2 PRs](https://github.com/flownative/neos-canto/pulls)MITPHPPHP ^8.0

Since Dec 8Pushed 10mo ago2 watchersCompare

[ Source](https://github.com/flownative/neos-canto)[ Packagist](https://packagist.org/packages/flownative/neos-canto)[ RSS](/packages/flownative-neos-canto/feed)WikiDiscussions main Synced today

READMEChangelog (10)Dependencies (5)Versions (27)Used By (0)

[![MIT license](https://camo.githubusercontent.com/4661abfe916186acde514558e7f040833cb63ba7098401a51ce339cbb2b4cf9e/687474703a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e2e737667)](http://opensource.org/licenses/MIT)[![Packagist](https://camo.githubusercontent.com/fd37358291efbdd2ffaa171196de1397f3d45705bb53d13c350fd5cbc9563442/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f666c6f776e61746976652f6e656f732d63616e746f2e737667)](https://packagist.org/packages/flownative/neos-canto)

Canto adaptor for Neos
======================

[](#canto-adaptor-for-neos)

This [Flow](https://flow.neos.io) package allows you to use assets (ie. pictures and other documents) stored in [Canto](https://www.canto.com/)in your Neos website as if these assets were native Neos assets.

About Canto
-----------

[](#about-canto)

Canto offers a extensive solutions for digital asset management. The software makes working with pictures, graphics and video files easier.

Key Features
------------

[](#key-features)

- seamless integration into the Neos media browser
- automatic import and clean up of media assets from Canto
- mapping of metadata from Canto to Neos

Installation
------------

[](#installation)

The Canto connector is installed as a regular Flow package via Composer. For your existing project, simply include `flownative/neos-canto` into the dependencies of your Flow or Neos distribution:

```
$ composer require flownative/neos-canto
```

### Enabling Canto API access

[](#enabling-canto-api-access)

1. In Canto go to Settings &gt; Configuration Options &gt; API &gt; API Keys
2. Click "Create API Key"
3. Fill in a name that helps you understand what the key is for
4. Fill in the "Redirect URL", using `https:///flownative-canto/authorization/finish`, using your own domain(!)
5. Note down "App ID", "App Secret" and "Website" of the new key

#### Allow client credentials mode for API key

[](#allow-client-credentials-mode-for-api-key)

To be able to use the Canto connection from the command line or to use the webhook feature described below, client credentials mode must be enabled.

1. In Canto go to Settings &gt; Configuration Options &gt; API &gt; API Keys
2. Edit the API key you use for the Neos integration
3. Enable "Support Client Credentials Mode" and click "Save"

### Configure the Canto connection

[](#configure-the-canto-connection)

You need to set the "App ID" and "App Secret" from the generated API key as well as the URLs you are using to access Canto (since they depend on your setup.)

The URLs are a base URI built using the "Website" value appended with `api/v1`and an URI used for authentication that uses the top-level domain of the "Website" in `https://oauth.canto.global/oauth/api/oauth2`.

Set those values using the environment variables

- `FLOWNATIVE_CANTO_OAUTH_APP_ID`
- `FLOWNATIVE_CANTO_OAUTH_APP_SECRET`
- `FLOWNATIVE_CANTO_API_BASE_URI`
- `FLOWNATIVE_CANTO_OAUTH_BASE_URI`

or directly in `Settings.yaml`

```
Neos:
  Media:
    assetSources:
      'flownative-canto':
        assetSourceOptions:
          appId: '1234567890abcdef'
          appSecret: '1234567890abcdef1234567890abcdef'
          apiBaseUri: 'https://acme.canto.global/api/v1'
```

and `Objects.yaml`

```
Flownative\Canto\Service\CantoOAuthClient:
  properties:
    baseUri:
      value: 'https://oauth.canto.global/oauth/api/oauth2'
```

Using the Canto asset source in Neos
------------------------------------

[](#using-the-canto-asset-source-in-neos)

In the Media module you should see two asset sources, one called "Neos" and one called "Canto". If you switch to the Canto asset source and are not yet (or no longer) logged in to Canto, you will be redirected to the Canto login and asked to authorize access for Neos. After a redirect back to Neos you can now browse/search Canto and use assets from it in Neos as usual.

### Custom Field mapping from Canto to Neos

[](#custom-field-mapping-from-canto-to-neos)

Canto offers "custom fields" to add arbitrary data to assets. Those can be mapped to asset collections and tags in Neos, to make them visible for the users.

The configuration for this looks like that:

```
Flownative:
  Canto:
    mapping:
      # map "Custom Fields" from Canto to Neos
      customFields:
        # Foo Bar Baz                    # the name in Canto, for readbility
        'meta_multichoice_0':            # the custom field id in Canto
          asAssetCollection: false       # map to an asset collection named after the field
          valuesAsTags: false            # map field values to Neos tags; if true
                                         # an asset is assigned a tag corresponding to
                                         # the value
          include: []                    # only include the listed field values as tags
          exclude: []                    # exclude the listed field values as tags
```

- The key used is the custom field identifier from Canto (not the name!)
- `asAssetCollection` set to `true` exposes the custom field as an asset collection named like the custom field.
- If `valuesAsTags` is set to `true`, each distinct value of the custom field is exposed as a tag in the asset collection and assets are grouped below the tag whose value they are assigned on the Canto side.
- With `include` you can specify which values to consider, if this is used, only those will be exposed on the Neos side.
- If only a few values should be excluded, `exclude` can be used. All values are exposed in Neos, except those listed here.

**Note:** Right now ths feature only makes sense if both `asAssetCollection` and `valuesAsTags` are set to `true`.

**Note:** The asset collections and tags must be created manually on the Neos side (for now.)

Change notification from Canto
------------------------------

[](#change-notification-from-canto)

The package provides webhooks that can be used to notify of changes in Canto.

When assets in Canto are modified, those hooks trigger the needed update on the Neos side.

- For *metadata updates* the changes are transferred to the imported asset, as far as the metadata is used in Neos.
- If *new versions* are added, those are imported and replace the existing asset in Neos.

### Enabling webhooks in Canto

[](#enabling-webhooks-in-canto)

1. In Canto go to Settings &gt; Configuration Options &gt; API &gt; Webhooks
2. Generate some random string for use as "Secure Token"
3. Configure webhooks for "Update Metadata", "Add New Version"
    1. Use the matching URL for each hook as shown below
    2. Chose JSON as "Content Type"
    3. Fill in the "Secure Token"
    4. Click "Add"

EventWebhook URL (path)Update Metadata/flownative-canto/webhook/updateAdd New Version/flownative-canto/webhook/addNote: The webhook URL must be prefixed with the publicly accessible hostname of your Neos instance, and HTTPS should be used to secure the secure token!

### Configure secure token in Neos

[](#configure-secure-token-in-neos)

Set the "Secure Token" value using the environment variable

- `FLOWNATIVE_CANTO_WEBHOOK_TOKEN`

or directly in `Settings.yaml`

```
Flownative:
  Canto:
    webhook:
      token: 'some-random-string-of-your-choice'
```

### Cleaning up unused assets

[](#cleaning-up-unused-assets)

Whenever a Canto asset is used in Neos, the media file will be copied automatically to the internal Neos asset storage. As long as this media is used somewhere on the website, Neos will flag this asset as being in use. When an asset is not used anymore, the binary data and the corresponding metadata can be removed from the internal storage. While this does not happen automatically, it can be easily automated by a recurring task, such as a cron-job.

In order to clean up unused assets, simply run the following command as often as you like:

```
./flow media:removeunused --asset-source flownative-canto
```

If you'd rather like to invoke this command through a cron-job, you can add two additional flags which make this command non-interactive:

```
./flow media:removeunused --quiet --assume-yes --asset-source flownative-canto
```

Credits and license
-------------------

[](#credits-and-license)

This plugin was sponsored by [Paessler](https://www.paessler.com/) and its initial version was developed by Robert Lemke and Karsten Dambekalns of [Flownative](https://www.flownative.com).

See LICENSE for license details.

###  Health Score

34

—

LowBetter than 77% of packages

Maintenance34

Infrequent updates — may be unmaintained

Popularity18

Limited adoption so far

Community16

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 79.4% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~72 days

Recently: every ~255 days

Total

24

Last Release

319d ago

PHP version history (2 changes)v0.2.0PHP ^7.4

v0.5.0PHP ^8.0

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/10280881?v=4)[Flownative](/maintainers/flownative)[@flownative](https://github.com/flownative)

---

Top Contributors

[![kdambekalns](https://avatars.githubusercontent.com/u/95873?v=4)](https://github.com/kdambekalns "kdambekalns (108 commits)")[![pKallert](https://avatars.githubusercontent.com/u/91674611?v=4)](https://github.com/pKallert "pKallert (15 commits)")[![markusguenther](https://avatars.githubusercontent.com/u/1014126?v=4)](https://github.com/markusguenther "markusguenther (10 commits)")[![robertlemke](https://avatars.githubusercontent.com/u/95582?v=4)](https://github.com/robertlemke "robertlemke (2 commits)")[![MiauzGenau](https://avatars.githubusercontent.com/u/46249106?v=4)](https://github.com/MiauzGenau "MiauzGenau (1 commits)")

---

Tags

asset-managementhacktoberfestneoscms

### Embed Badge

![Health badge](/badges/flownative-neos-canto/health.svg)

```
[![Health](https://phpackages.com/badges/flownative-neos-canto/health.svg)](https://phpackages.com/packages/flownative-neos-canto)
```

###  Alternatives

[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.4k5.6M647](/packages/sylius-sylius)[tencentcloud/tencentcloud-sdk-php

TencentCloudApi php sdk

3731.2M42](/packages/tencentcloud-tencentcloud-sdk-php)[neos/neos

An open source Content Application Platform based on Flow. A set of core Content Management features is resting within a larger context that allows you to build a perfectly customized experience for your users.

116989.0k671](/packages/neos-neos)[convertkit/convertkitapi

Kit PHP SDK for the Kit API

2167.1k1](/packages/convertkit-convertkitapi)[mapado/rest-client-sdk

Rest Client SDK for hydra API

1125.9k2](/packages/mapado-rest-client-sdk)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
