Konnectors¶
It is possible to manage konnectors applications from the stack. The source-code of the konnector is installed on the cozy and the user can manage its execution via our job system and the konnector worker.
Install a konnector¶
The manifest¶
An exhaustive manifest specification is available in the Cozy Apps Registry documentation
POST /konnectors/:slug¶
Install a konnector, ie download the files and put them in /konnectors/:slug
in the virtual file system of the user, create an io.cozy.konnectors
document,
register the permissions, etc.
This endpoint is asynchronous and returns a successful return as soon as the konnector installation has started, meaning we have successfully reached the manifest and started to fetch konnector source code.
To make this endpoint synchronous, use the header Accept: text/event-stream
.
This will make a eventsource stream sending the manifest and returning when the
konnector has been installed or failed.
Status codes¶
- 202 Accepted, when the konnector installation has been accepted.
- 400 Bad-Request, when the manifest of the konnector could not be processed (for instance, it is not valid JSON).
- 404 Not Found, when the manifest or the source of the konnector is not reachable.
- 422 Unprocessable Entity, when the sent data is invalid (for example, the slug is invalid or the Source parameter is not a proper or supported url)
Query-String¶
Parameter | Description |
---|---|
Source | URL from where the app can be downloaded (only for install) |
Request¶
POST /konnectors/bank101?Source=git://github.com/cozy/cozy-bank101.git HTTP/1.1 Accept: application/vnd.api+json
Response¶
HTTP/1.1 202 Accepted Content-Type: application/vnd.api+json
{ "data": [{ "id": "4cfbd8be-8968-11e6-9708-ef55b7c20863", "type": "io.cozy.konnectors", "meta": { "rev": "1-7a1f918147df94580c92b47275e4604a" }, "attributes": { "name": "bank101", "state": "installing", "slug": "bank101", ... }, "links": { "self": "/konnectors/bank101" } }] }
Note: it’s possible to choose a git branch by passing it in the fragment like this:
POST /konnectors/bank101-dev?Source=git://github.com/cozy/cozy-bank101.git%23dev HTTP/1.1
PUT /konnectors/:slug¶
Update a konnector source code with the specified slug name.
This endpoint is asynchronous and returns a successful return as soon as the konnector installation has started, meaning we have successfully reached the manifest and started to fetch konnector source code.
To make this endpoint synchronous, use the header Accept: text/event-stream
.
This will make a eventsource stream sending the manifest and returning when the
konnector has been updated or failed.
Request¶
PUT /konnectors/bank101 HTTP/1.1 Accept: application/vnd.api+json
Response¶
HTTP/1.1 202 Accepted Content-Type: application/vnd.api+json
{ "data": [{ "id": "4cfbd8be-8968-11e6-9708-ef55b7c20863", "type": "io.cozy.konnectors", "meta": { "rev": "1-7a1f918147df94580c92b47275e4604a" }, "attributes": { "name": "bank101", "state": "installing", "slug": "bank101", ... }, "links": { "self": "/konnectors/bank101" } }] }
Status codes¶
- 202 Accepted, when the konnector installation has been accepted.
- 400 Bad-Request, when the manifest of the konnector could not be processed (for instance, it is not valid JSON).
- 404 Not Found, when the konnector with the specified slug was not found or when the manifest or the source of the konnector is not reachable.
- 422 Unprocessable Entity, when the sent data is invalid (for example, the slug is invalid or the Source parameter is not a proper or supported url)
Advanced usage¶
Two optional query parameters are available for a konnector update:
- PermissionsAcked
: (defaults to true
)
- Tells that the user accepted the permissions/ToS. It is useful if there are
newer permissions or Terms Of Service and you want to be sure they were read
or accepted. If set to false
, the update will be blocked and the user will
be told that a new konnector version is available.\
> Note: PermissionsAcked
can be skipped. \
If an instance is in a context
configured with the parameter
permissions_skip_verification
sets to true
, permissions
verification will be ignored.
Source
(defaults to source url installation):- Use a different source to update this konnector (e.g. to install a
beta
ordev
konnector version)
- Use a different source to update this konnector (e.g. to install a
Examples:¶
- You have a trainline konnector on a
stable
channel, and you want to update it to a particularbeta
version:
PUT /konnectors/trainline?Source=https://<konnectors-repository>/trainline/1.0.0-beta HTTP/1.1 Accept: application/vnd.api+json
- You want to attempt the trainline konnector update, but prevent it if new permissions were added
PUT /konnectors/trainline?PermissionsAcked=false HTTP/1.1 Accept: application/vnd.api+json
You can combine these parameters to use a precise konnector version and stay on another channel (when permissions are different):
- Install a version (e.g.
1.0.0
). - Ask an update to
stable
channel withPermissionsAcked
tofalse
Source
will bestable
, and your version remains1.0.0
List installed konnectors¶
GET /konnectors/¶
Request¶
GET /konnectors/ HTTP/1.1 Accept: application/vnd.api+json
Response¶
HTTP/1.1 200 OK Content-Type: application/vnd.api+json
{ "data": [{ "id": "4cfbd8be-8968-11e6-9708-ef55b7c20863", "type": "io.cozy.konnectors", "meta": { "rev": "1-7a1f918147df94580c92b47275e4604a" }, "attributes": { "name": "bank101", "state": "installing", "slug": "bank101", ... }, "links": { "self": "/konnectors/bank101" } }], "links": {}, "meta": { "count": 1 } }
This endpoint is paginated, default limit is currently 100
.
Two flags are available to retreieve the other konnectors if there are more than
100
konnectors installed:
- limit
- start_key
: The first following doc ID of the next konnectors
The links
object contains a ǹext
generated-link for the next docs.
Request¶
GET /konnectors/?limit=50 HTTP/1.1 Accept: application/vnd.api+json
Response¶
HTTP/1.1 200 OK Content-Type: application/vnd.api+json
{ "data": [{ "id": "4cfbd8be-8968-11e6-9708-ef55b7c20863", "type": "io.cozy.konnectors", "meta": { "rev": "1-7a1f918147df94580c92b47275e4604a" }, "attributes": { "name": "bank101", "state": "installing", "slug": "bank101", ... }, "links": { "self": "/konnectors/bank101" } }, {...}], "links": { "next": "http://alice.example.com/konnectors/?limit=50&start_key=io.cozy.konnectors%2Ffookonnector" }, "meta": { "count": 50 } }
Get informations about a konnector¶
GET /konnectors/:slug¶
This route is used to retrieve informations about a konnector installed on the cozy. By calling this route, the konnector will be updated synchronously.
Request¶
GET /konnectors/pajemploi HTTP/1.1 Accept: application/vnd.api+json
Response¶
HTTP/1.1 200 OK Content-Type: application/vnd.api+json
{ "data": { "type": "io.cozy.konnectors", "id": "io.cozy.konnectors/pajemploi", "attributes": { "name": "Pajemploi", "editor": "Cozy", "icon": "icon.svg", "type": "konnector", "language": "node", ... }, "meta": { "rev": "8-1197cab1c9ecc89cef676567410cf7c5" }, "links": { "self": "/konnectors/pajemploi", "icon": "/konnectors/pajemploi/icon/1.5.2", "permissions": "/permissions/konnectors/pajemploi" } } }
Download the code of a konnector¶
This endpoint is used by the flagship app to download the code of a konnector, in order to install it on the user’s device.
GET /konnectors/:slug/download & GET /konnectors/:slug/download/:version¶
The first route will download a tarball of the source code of the latest installed version of the konnector. The second route will force a specific version of the konnector (and a 412 Precondition failed may be sent if the code of this specific version is not available).
Request¶
GET /konnectors/pajemploi/download/3.0.1 HTTP/1.1 Authorization: Bearer flagship-token Host: cozy.example.net
Response¶
HTTP/1.1 200 OK Content-Type: application/gzip
When the konnector has been installed from the registry, the stack will respond with a redirect to the registry. In that case, the downloaded tarball can be gzipped or not (the registry allows both). When the konnector is installed from another source, the stack will create a gzipped tarball and send it to the client.
Uninstall a konnector¶
DELETE /konnectors/:slug¶
Request¶
DELETE /konnectors/bank101 HTTP/1.1
Response¶
HTTP/1.1 204 No Content
Or, if the konnector has still some accounts configured:
HTTP/1.1 202 Accepted
In this case, the stack will accept the uninstall request, then it will clean the accounts (locally and remotely), and only after that, the konnector will be removed.
Add a trigger¶
POST /konnectors/:slug/trigger¶
This endpoint creates a @cron trigger for the given konnector. The manifest is used to generate the crontab.
Query-String¶
Parameter | Description |
---|---|
AccountID | The identifier of the io.cozy.accounts that will be used to run the konnector |
ExecNow | true if you want to run a job just after the trigger creation |
Request¶
POST /konnectors/pajemploi/trigger?AccountID=4eee63e069690139df83543d7eb8149c HTTP/1.1
Response¶
HTTP/1.1 201 Created Content-Type: application/vnd.api+json
{ "data": { "type": "io.cozy.triggers", "id": "8cfeef1069690139df84543d7eb8149c", "attributes": { "type": "@cron", "arguments": "0 9 3 * * 1", "worker": "konnector", "message": { "account": "4eee63e069690139df83543d7eb8149c", "konnector": "pajemploi" } }, "links": { "self": "/jobs/triggers/8cfeef1069690139df84543d7eb8149c" } } }
Send konnector logs to cozy-stack¶
POST /konnectors/:slug/logs¶
Send client-side logs to cozy-stack so they can be stored in the server’s logging system.
Status codes¶
- 204 No Content, when all the log lines have been processed.
- 400 Bad-Request, when the JSON body is invalid.
- 404 Not Found, when no konnectors with the given slug could be found.
- 422 Unprocessable Entity, when the sent data is invalid (for example, the slug is invalid or log level does not exist)
Request¶
POST /konnectors/pajemploi/logs HTTP/1.1 Accept: application/vnd.api+json
[ { "timestamp": "2022-10-27T17:13:37.293Z", "level": "info", "msg": "Connecting to remote site..." }, { "timestamp": "2022-10-27T17:13:38.382Z", "level": "error", "msg": "LOGIN_FAILED" } ]
Response¶
HTTP/1.1 204 No Content