Permalink
Fetching contributors…
Cannot retrieve contributors at this time
2470 lines (1762 sloc) 57.6 KB
FORMAT: 1A
HOST: https://connection.keboola.com/
# Keboola Connection Management API
The Keboola Connection Management API covers all tasks required for managing projects, as well as some super admin features
for controlling and monitoring Keboola Connection.
## Projects Management
* Create, modify and delete maintainers, organizations and projects
* Move projects between organizations
* Define project limits
* Provision Redshift and other Storage backends
* Access project management activity log
## Projects Monitoring
* Monitoring of projects over organizations and maintainers
## Super User Control and Monitoring
* UI release and deployment
* Components management
* Storage and Syrup jobs monitoring (will be provided by Syrup utilizing new tokens for authorization)
* Final project delete
* Workers start/shutdown, etc.
## Authentication
The API supports authentication by a personal access token, which can be retrieved in [Account Settings](https://connection.keboola.com/admin/account/change-password) in Keboola Connection.
An access token is tied to an administrator and its permissions are derived from their permissions. When the administrator is disabled or deleted, all their tokens become invalid too.
`$ curl -H "X-KBC-ManageApiToken: USER_TOKEN" https://connection.keboola.com/management/tokens/verify`
## Token Types
There are the following types of tokens:
| Name | Tied to User | Token string is available only on create | Description |
| ------------- | ------------- | ------------------- | ----- |
| user | Yes | Yes |Full access to maintainers, organizations and projects. Access is limited only to resources which are available for the token user.|
| super | No | Yes | KBC management. Limited scopes can be specified `super_ui_deploy`, `super_monitoring`, ... |
## Token Verification [GET /manage/tokens/verify]
+ Request
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
{
"id": 234,
"user" : {
"id": 416,
"name": "Martin Halamíček"
},
"created": "2014-11-11T08:40:51.620Z",
"type": "admin",
"scopes": [],
"access": {
"projects": [234, 23, 234],
"organizations": [23],
"maintainers": [1]
}
}
```
# Group Maintainers
## Maintainers [/manage/maintainers]
### Create a maintainer [POST]
Creates a new maintainer. The user associated with the token will become an admin of the maintainer.
+ Attributes
+ name:Example (required) - Maintainer name
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 201
[Maintainer][]
### List maintainers [GET]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```
[
{
"id": 123,
"name": "Keboola CZ",
"created": "2014-11-11T08:40:51.620Z",
"defaultConnectionMysqlId": 234,
"defaultConnectionRedshiftId": 232,
"defaultConnectionSnowflakeId": 242,
"organizations": [
{
"id": 234,
"name": "Development",
"projects": []
},
{
"id": 235,
"name": "POC",
"projects": []
}
]
},
{
"id": 124,
"name": "abc",
"crated": "2014-11-11T08:40:51.620Z",
"defaultConnectionMysqlId": 234,
"defaultConnectionRedshiftId": 232,
"defaultConnectionSnowflakeId": 242,
"organizations": [
{
"id": 234,
"name": "Development",
"projects": []
},
{
"id": 235,
"name": "POC",
"projects": []
}
]
}
]
```
## Maintainer [/manage/maintainers/{maintainer_id}]
A maintainer object has the following attributes:
+ name
+ created
+ organizations - array of organization objects
+ Parameters
+ maintainer_id: 1 (required, integer)
+ Model (application/json)
```js
{
"id": 123,
"created": "2014-11-11T08:40:51.620Z",
"url": "/questions/1",
"defaultConnectionMysqlId": 234,
"defaultConnectionRedshiftId": 232,
"defaultConnectionSnowflakeId": 242,
"zendeskUrl": "https://some.url.com",
"organizations": [
{
"id": 234,
"name": "Development",
"projects": []
},
{
"id": 235,
"name": "POC",
"projects": []
}
]
}
```
### Retrieve a maintainer [GET]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200
[Maintainer][]
### Update a maintainer [PATCH]
A partial update of a maintainer
+ Attributes
+ name:Example - Maintainer name
+ defaultConnectionRedshiftId:234 (optional) - Default Redshift Connection ID
+ defaultConnectionSnowflakeId:324 (optional) - Default Snowflake Connection ID
+ zendeskUrl:https://keboola.zendesk.com (optional)
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200
[Maintainer][]
### Delete a maintainer [DELETE]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 204
## Maintainer Users [/manage/maintainers/{maintainer_id}/users]
+ Parameters
+ maintainer_id: 1 (required, number) - ID of the maintainer
### List users [GET]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
[
{
"id": 23423,
"name": "Martin Halamicek",
"email": "martin@keboola.com"
}
]
```
## Add a User [POST]
Either `id` or `email` of a user must be set. If the email is not associated with a user, a new account is created and an invitation is sent.
+ Attributes
+ id:7234 - User ID
+ email:martin@keboola.com - User email
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 204
## Remove a user [DELETE /manage/maintainers/{maintainer_id}/users/{user_id}]
+ Parameters
+ maintainer_id: 1 (required, number) - ID of the maintainer
+ user_id: 1 (required, int) - User ID
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 204
# Group Organizations
## Organization [/manage/organizations/{organization_id}]
An organization object has the following attributes:
+ name
+ created
+ allowAutoJoin
+ projects - an array of project objects
+ Parameters
+ organization_id: 1 (required, number) - ID of the organization in form of an integer
+ Model (application/json)
```js
{
"id": 123,
"name": "sample org",
"created": "2014-11-11T08:40:51.620Z",
"projects": [
{
"id": 123,
"name": "Demo",
"created": "2014-11-11T08:40:51.620Z"
}
]
}
```
### Retrieve an organization [GET]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200
```js
{
"id": 123,
"name": "sample org",
"created": "2015-10-02T11:03:44+0200",
"allowAutoJoin": true,
"projects": [
{
"id": 123,
"name": "Demo",
"created": "2014-11-11T08:40:51.620Z"
}
]
}
```
### Update an organization [PATCH]
Partial update of an organization
+ Attributes
+ name:POC - Organization name
+ maintainerId - Assign the organization to another maintainer.
+ allowAutoJoin - Set whether superAdmins need approval to join the organization's projects (default `true`).
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200
```js
{
"id": 123,
"name": "POC",
"created": "2015-10-02T11:03:44+0200",
"allowAutoJoin": true,
"projects": [
{
"id": 123,
"name": "Demo",
"created": "2014-11-11T08:40:51.620Z"
}
]
}
```
### Delete an organization [DELETE]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 204
## Maintainer Organizations Collection [/manage/maintainers/{maintainer_id}/organizations]
+ Parameters
+ maintainer_id: 1 (required, number) - ID of the parent maintainer. The created organization will be assigned to this maintainer.
### Create an organization [POST]
Creates a new organization.
+ Attributes
+ name:POC - Organization name
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 201
[Organization][]
### List maintainer's organizations [GET]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200
[Organization][]
## Organization Users [/manage/organizations/{organization_id}/users]
+ Parameters
+ organization_id: 1 (required, number) - ID of the organization
### List users [GET]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
[
{
"id": 23423,
"name": "Martin Halamicek",
"email": "martin@keboola.com"
}
]
```
## Add a User [POST]
Either `id` or `email` of a user must be set. If the email is not associated with a user, a new account is created and an invitation is sent.
+ Attributes
+ id:7234 - User ID
+ email:martin@keboola.com - User email
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 204
## Remove a user [DELETE /manage/organizations/{organization_id}/users/{user_id}]
+ Parameters
+ organization_id: 1 (required, number) - ID of the organization
+ user_id: 1 (required, int) - User ID
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 204
# Group Projects
## Project [/manage/projects/{project_id}]
+ Model (application/json)
```js
{
"id": 4088,
"name": "Martinšík",
"description": "My new project"
"type": "production",
"region": "us-east-1",
"created": "2017-12-11T09:02:13+0100",
"expires": null,
"features": [],
"dataSizeBytes": 22691704832,
"rowsCount": 4295727047,
"hasMysql": false,
"hasRedshift": false,
"hasSnowflake": true,
"defaultBackend": "snowflake",
"hasTryModeOn": "0",
"limits": {
"components.jobsParallelism": {
"name": "components.jobsParallelism",
"value": 10
},
"goodData.dataSizeBytes": {
"name": "goodData.dataSizeBytes",
"value": 1000000000
},
"goodData.demoTokenEnabled": {
"name": "goodData.demoTokenEnabled",
"value": 1
},
"goodData.prodTokenEnabled": {
"name": "goodData.prodTokenEnabled",
"value": 0
},
"goodData.usersCount": {
"name": "goodData.usersCount",
"value": 30
},
"kbc.adminsCount": {
"name": "kbc.adminsCount",
"value": 10
},
"kbc.extractorsCount": {
"name": "kbc.extractorsCount",
"value": 0
},
"kbc.monthlyProjectPowerLimit": {
"name": "kbc.monthlyProjectPowerLimit",
"value": 50
},
"kbc.writersCount": {
"name": "kbc.writersCount",
"value": 0
},
"orchestrations.count": {
"name": "orchestrations.count",
"value": 10
},
"storage.dataSizeBytes": {
"name": "storage.dataSizeBytes",
"value": 50000000000
},
"storage.jobsParallelism": {
"name": "storage.jobsParallelism",
"value": 10
}
},
"metrics": {
"kbc.adminsCount": {
"name": "kbc.adminsCount",
"value": 1
},
"orchestrations.count": {
"name": "orchestrations.count",
"value": 1
},
"storage.dataSizeBytes": {
"name": "storage.dataSizeBytes",
"value": 22691704832
},
"storage.rowsCount": {
"name": "storage.rowsCount",
"value": 4295727047
}
},
"isDisabled": false,
"billedMonthlyPrice": null,
"dataRetentionTimeInDays": 7,
"organization": {
"id": 5,
"name": "Martinovo",
"created": "2013-12-31T11:22:33+0100",
"allowAutoJoin": true
},
"fileStorage": {
"id": 2,
"awsKey": "AKIAJ2N244XSWYVVYVLQ",
"region": "us-east-1",
"filesBucket": "kbc-sapi-files",
"owner": "keboola",
"isDefault": true,
"created": "",
"creator": {
"id": 0,
"name": null
}
},
"backends": {
"snowflake": {
"id": 353,
"host": "keboola.snowflakecomputing.com",
"region": "us-east-1"
}
}
}
```
### Project detail [GET]
Returns a project with associated limits and metrics.
* limits - These are limits assigned to a project (number of admins, number of orchestrations, parallelization).
* metrics - Latest values of the monitored project metrics
+ Parameters
+ project_id (required, int) - Project ID
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200
[Project][]
### Update a project [PUT]
+ Attributes
+ name: Test - Rename project
+ description: My new project
+ defaultBackend: Snowflake - Change project default backend type
+ type:demo - Change project type (demo, production, poc, ...) - allowed only for a super admin
+ expirationDays: 7 - Change project expiration - allowed only for a super admin
+ billedMonthlyPrice: 2000 - Change project monthly fee - allowed only for a super admin
+ dataRetentionTimeInDays: 20 - (Snowflake only) Change the data retention period for this project - allowed only for a super admin
+ Parameters
+ project_id (required, int) - Project ID
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200
[Project][]
### Delete a project [DELETE]
A project will not be physically deleted. It'll only be inaccessible and hidden.
+ Parameters
+ project_id (required, int) - Project ID
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 204
## Add a Project [/manage/organizations/{organization_id}/projects]
A project will be created from a default template which defines its limits.
+ Parameters
+ organization_id (required, int) - Organization ID; projects have to be created in an organization.
### Add a project [POST]
+ Attributes
+ name: My Demo (required) - Project name
+ description: My new project
+ type: demo (required) - One of `production`, `poc`, `demo`; default is `production`
+ defaultBackend: snowflake - Project default backend `snowflake` or `redshift`; default is `snowflake`
+ dataRetentionTimeInDays: 7 - Data retention in days for Time Travel
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 201
[Project][]
## Move Project to Another Organization [/manage/projects/{project_id}/organizations]
+ Parameters
+ project_id (required, int) - Project ID
### Move a project [POST]
+ Attributes
+ organizationId: 523 (required) - ID of destination organization
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200
[Project][]
## Assign Project Storage Backend [/manage/projects/{project_id}/storage-backend]
This action can be performed only by a super admin.
One backend connection of each type (Snowflake, Redshift) can be assigned to a project.
Connection type is automatically detected from the passed connection identifier.
+ Parameters
+ project_id (required, int) - Project ID
### Assign project Storage backend [POST]
+ Attributes
+ storageBackendId: 32 (required) - ID of Storage backend
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200
[Project][]
## Remove Project Storage Backend [/manage/projects/{project_id}/storage-backend/{storage_backend_id}]
This action can be performed only by a super admin.
A Storage backend type is automatically detected from its ID. Only backends without any buckets associated with them can be removed.
+ Parameters
+ project_id (required, int) - Project ID
+ storage_backend_id (required, int) - Storage backend ID; must be one of Storage backends assigned to the project.
### Remove project Storage backend [DELETE]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200
[Project][]
## Assign Project File Storage [/manage/projects/{project_id}/file-storage]
This action can be performed only by a super admin.
+ Parameters
+ project_id (required, int) - Project ID
### Assign project file Storage [POST]
+ Attributes
+ fileStorageId: 32 (required) - ID of file Storage
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200
[Project][]
## Project Limits [/manage/projects/{project_id}/limits]
Changing project limits is allowed only for a super admin.
+ Parameters
+ project_id (required, int) - Project ID
### Set project limits [POST]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Body
```js
{
"limits": [
{
"name": "goodData.usersCount",
"value": 23
}
]
}
```
+ Response 200
[Project][]
## Project Invitations [/manage/projects/{project_id}/invitations]
+ Parameters
+ project_id (required, int) - Project ID
### List invitations [GET]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200
```js
[
{
"id": 112,
"created": "2018-07-10T10:45:11+0200",
"expires": null,
"reason": "",
"user": {
"id": 124,
"name": "test user 2",
"email": "spam@keboola.com"
},
"creator": {
"id": 123,
"name": "test user",
"email": "martin@keboola.com"
}
},
{
"id": 113,
"created": "2018-07-10T10:50:00+0200",
"expires": "2018-07-12T10:50:00+0200",
"reason": "Help with Restbox configuration",
"user": {
"id": 125,
"name": "test user 3",
"email": "spam@keboola.com"
},
"creator": {
"id": 123,
"name": "test user",
"email": "martin@keboola.com"
}
}
]
```
### Invite a user to a project [POST]
Only members of the project or its organization are allowed to invite new users to the project.
An optional expiration (seconds) and reason for joining can be added to the request.
+ Attributes
+ email: martin@keboola.com (string, required) - Email of an invited user
+ expirationSeconds: 3600 (number) - After how many seconds the invitation and membership of a user will expire
+ reason: Help with component configuration (string) - Reason for inviting user
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 201
```js
{
"id": 113,
"created": "2018-07-10T10:50:00+0200",
"expires": "2018-07-10T11:50:00+0200",
"reason": "Help with component configuration",
"user": {
"id": 125,
"name": "test user 3",
"email": "spam@keboola.com"
},
"creator": {
"id": 123,
"name": "test user",
"email": "martin@keboola.com"
}
}
```
## Manage User Invitation [/manage/projects/{project_id}/invitations/{invitation_id}]
+ Parameters
+ project_id (required, int) - Project ID
+ invitation_id (required, int) - User ID
### Invitation detail [GET]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200
```js
{
"id": 113,
"created": "2018-07-10T10:50:00+0200",
"expires": "2018-07-10T11:50:00+0200",
"reason": "Help with component configuration",
"user": {
"id": 125,
"name": "test user 3",
"email": "spam@keboola.com"
},
"creator": {
"id": 123,
"name": "test user",
"email": "martin@keboola.com"
}
}
### Cancel a invitation [DELETE]
Only members of the project or its organization are allowed to cancel project invitation.
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 204
## Project Users [/manage/projects/{project_id}/users]
+ Parameters
+ project_id (required, int) - Project ID
### List users [GET]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200
```js
[
{
"id": 123,
"name": "test user",
"email": "martin@keboola.com",
"features": [],
"expires": null,
"created": "2016-02-29T08:01:13+0200",
"reason": "",
"status": "active",
"invitor": {
"id": 124,
"name": "test user 2",
"email": "spam@keboola.com"
},
"approver": null
},
{
"id": 124,
"name": "test user 2",
"email": "spam@keboola.com",
"features": [],
"expires": "2016-03-22T15:01:13+0200",
"created": "2016-02-22T15:01:13+0200",
"reason": "temporary test",
"status": "active",
"invitor": null,
"approver": {
"id": 1,
"name": "admin 1",
"email": "dev@keboola.com"
}
}
]
```
### Add a user to a project [POST]
Only members of the project or its organization are allowed to add new users to the project.
An optional expiration (seconds) and reason for joining can be added to the request.
+ Attributes
+ email: martin@keboola.com (required) - Email of an invited user
+ expirationSeconds: 3600 (number) - After how many seconds the membership of a user will expire
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 204
## Delete User From Project [/manage/projects/{project_id}/users/{user_id}]
+ Parameters
+ project_id (required, int) - Project ID
+ user_id (required, int) - User ID
### Delete a user from a project [DELETE]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 204
## Join Project [/manage/projects/{project_id}/join-project]
+ Parameters
+ project_id (required, int) - Project ID
### Join a project [POST]
If the project's organization allows autojoin (`allowAutoJoin` attribute is se to `true`), all members of the organization, its maintainers and superadmins are allowed to join the project. Otherwise only members of the organization can join the project.
An optional expiration (in seconds) and reason for joining can be added to the request.
+ Attributes
+ reason: temporary test (string) - Reason for joining the project
+ expirationSeconds: 3600 (number) - The number of seconds until the user's membership expires
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 204
## Request Access [/manage/projects/{project_id}/request-access]
+ Parameters
+ project_id (required, int) - Project ID
### Request access to a project [POST]
Create a join request to the project. All join requests have to be approved by a project member.
An optional expiration (in seconds) and reason for joining can be added to the request.
+ Attributes
+ reason: temporary test (string) - Reason for joining the project
+ expirationSeconds: 3600 (number) - The number of seconds until the user's membership expires
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 201
```js
{
"id": 124,
"created": "2016-02-22T15:01:13+0200",
"expires": "2016-03-22T15:01:13+0200",
"reason": "temporary test",
"project": {
"id": 324,
"name": "Main project"
}
}
```
## Project Join Requests [/manage/projects/{project_id}/join-requests]
+ Parameters
+ project_id (required, int) - Project ID
### List join requests [GET]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200
```js
[
{
"id": 1234,
"created": "2016-02-22T15:01:13+0200",
"expires": "2016-03-22T15:01:13+0200",
"reason": "temporary test",
"user": {
"id": 1,
"name": "admin 1",
"email": "dev@keboola.com"
}
},
{
"id": 1235,
"created": "2016-02-30T11:50:13+0200",
"expires": null,
"reason": "",
"user": {
"id": 124,
"name": "test user 2",
"email": "spam@keboola.com"
}
}
]
```
## Manage Join Requests [/manage/projects/{project_id}/join-requests/{join_request_id}]
+ Parameters
+ project_id (required, int) - Project ID
+ join_request_id (required, int) - Join Request ID
### Join request detail [GET]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200
```js
{
"id": 1235,
"created": "2016-02-30T11:50:13+0200",
"expires": null,
"reason": "",
"user": {
"id": 124,
"name": "test user 2",
"email": "spam@keboola.com"
}
}
```
### Approve join request [PUT]
Only members of the project can approve join requests.
The user that submitted the join request will be added to the project.
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 202
### Reject join request [DELETE]
Only members of the project can reject join requests.
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 204
## Enable/Disable Project [/manage/projects/{project_id}/disabled]
+ Parameters
+ project_id (required, int) - Project ID
### Change project disabled status [POST]
+ Attributes
+ isDisabled: true (boolean) - Enable or disable project
+ disableReason: Project maintenance - Why the project is disabled
+ estimatedEndTime: +1 hour - When the project will be enabled
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200
[Project][]
## Create Storage Token in Project [/manage/projects/{project_id}/tokens]
+ Parameters
+ project_id (required, int) - Project ID
### Create Storage token [POST]
+ Attributes
+ description: Test Token (required) - Token description
+ canManageBuckets: true (boolean) - Token has full permissions on tabular storage
+ canManageTokens: true (boolean) - Token has permission to create tokens in project
+ canReadAllFileUploads: true (boolean) - Token has full permissions to files staging
+ expiresIn: 60 (number) - Token lifetime
+ bucketPermissions (object)
- in.c-main: read
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 201
```js
{
"id": 3846,
"token": "TOKEN_VALUE",
"created":"2013-03-28T13:31:50+0100",
"description":"martin@keboola.com",
"isMasterToken":true,
"canManageBuckets":true,
"canManageTokens":true,
"canReadAllFileUploads":true,
"expires":null,
"isExpired":false,
"isDisabled":false,
"dailyCapacity":0,
"bucketPermissions": {}
}
```
# Group Deleted Projects
Operations on deleted projects are allowed only for a super admin.
## Deleted Project Detail [/manage/deleted-projects/{project_id}]
### Deleted project detail [GET]
+ Parameters
+ project_id (required, int) - Deleted project ID
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
{
"id": 101,
"name": "test project",
"description": "My new project"
"type": "production",
"region": "eu-west-1",
"created": "2017-02-15T14:25:15+0100",
"expires": null,
"features": [],
"dataSizeBytes": 49152,
"rowsCount": 200,
"hasMysql": false,
"hasRedshift": false,
"hasSnowflake": true,
"defaultBackend": "snowflake",
"hasTryModeOn": "0",
"limits": {},
"metrics": {},
"isDisabled": false,
"billedMonthlyPrice": null,
"dataRetentionTimeInDays": 1,
"isPurged": false,
"isDeleted": true,
"deletedTime": "2018-02-11T14:25:15+0100",
"purgedTime": null
}
```
## Purge Deleted Project [/manage/deleted-projects/{project_id}/purge]
### Purge deleted project [POST]
Enqueues the command that fully deletes a project and returns its execution ID for monitoring.
+ Parameters
+ project_id (required, int) - Deleted project ID
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Attributes
+ ignoreBackendErrors: `false` (boolean) - Ignore all errors from the backend, e.g. deleted Redshift cluster. `false` is default.
+ Response 200 (application/json)
+ Attributes(CommandExecuteResponse)
## List Deleted Projects [/manage/deleted-projects]
### List deleted projects [GET]
Listing deleted projects is allowed only for a super admin.
#### Projects filtering
Projects can be filtered by various filters:
* *organizationId* - organization ID
* *name* - name of the project
#### Projects pagination
* *limit* - number of returned projects; default value: 100
* *offset* - pagination offset
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
[
{
"id": 101,
"name": "test project",
"description": "My new project"
"type": "production",
"region": "eu-west-1",
"created": "2017-02-15T14:25:15+0100",
"expires": null,
"features": [],
"dataSizeBytes": 49152,
"rowsCount": 200,
"hasMysql": false,
"hasRedshift": false,
"hasSnowflake": true,
"defaultBackend": "snowflake",
"hasTryModeOn": "0",
"limits": {},
"metrics": {},
"isDisabled": false,
"billedMonthlyPrice": null,
"dataRetentionTimeInDays": 7,
"isPurged": false,
"isDeleted": true,
"deletedTime": "2018-02-11T14:25:15+0100",
"purgedTime": null,
"organization": {
"id": 1,
"name": "Keboola Tests",
"created": "",
"allowAutoJoin": true
}
},
{
"id": 104,
"name": "another test project",
"description": "My new project"
"type": "production",
"region": "eu-west-1",
"created": "2017-02-15T14:25:15+0100",
"expires": null,
"features": [],
"dataSizeBytes": 49152,
"rowsCount": 200,
"hasMysql": false,
"hasRedshift": false,
"hasSnowflake": true,
"defaultBackend": "snowflake",
"hasTryModeOn": "0",
"limits": {},
"metrics": {},
"isDisabled": false,
"billedMonthlyPrice": null,
"dataRetentionTimeInDays": 7,
"isPurged": false,
"isDeleted": true,
"deletedTime": "2018-02-11T14:25:15+0100",
"purgedTime": null,
"organization": {
"id": 1,
"name": "Keboola Tests",
"created": "",
"allowAutoJoin": true
}
}
]
```
## Cancel Project Deletion [/manage/deleted-projects/{project_id}{?expirationDays}]
### Cancel project deletion [DELETE]
Cancelling project deletion is allowed only for a super admin.
If the project has set expiration, the expiration is reset on the project renewal.
You can also specify new expiration by `expirationDays` parameter.
+ Parameters
+ project_id (required, int) - Project ID
+ expirationDays (optional, number) - Project expiration in days
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 204
# Group Users
Users can be managed only by a super admin.
## Manage User [/manage/users/{user_id_or_email}]
### User detail [GET]
+ Parameters
+ user_id_or_email (required) - User ID or email
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
{
"id": 2,
"name": "Martin",
"email": "spelling@keboola.com",
"features": [
"inline-manual"
],
"mfaEnabled": true,
"canAccessLogs": true,
"isSuperAdmin": true
}
```
### Update a user [PUT]
+ Parameters
+ user_id_or_email (required) - User ID or email
+ Attributes
+ name: Martin - User name
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
{
"id": 2,
"name": "Martin",
"email": "spelling@keboola.com",
"features": [
"inline-manual"
],
"mfaEnabled": true,
"canAccessLogs": true,
"isSuperAdmin": true
}
```
## Disable MFA for User [DELETE /manage/users/{user_id_or_email}/mfa]
+ Parameters
+ user_id_or_email (required) - User ID or email
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 204
## Remove super admin privilege from User [DELETE /manage/users/{user_id_or_email}/super-admin]
+ Parameters
+ user_id_or_email (required) - User ID or email
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
{
"id": 2,
"name": "Corrected Spelling",
"email": "spelling@keboola.com",
"features": [
"inline-manual"
],
"mfaEnabled": true,
"canAccessLogs": false,
"isSuperAdmin": false
}
```
# Group Notifications
List, read and create notifications.
Notifications can be created only by a super admin.
There are three types of notifications so far:
- `common` - basic notification for all users in a project
- `limit` - notifies project users that some metric of their plan is over quota
- `global` - notifies all KBC users about global events
## Notifications [/manage/notifications]
### List notifications [GET]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
[
{
"id": "fba2d2de-cb43-11e5-8080-800019c0d40a",
"type": "common",
"created": "2016-02-04T13:34:14.966755",
"isRead": false,
"isSeen": true,
"title": "Maintenance Announcement",
"message": "There will be maintenance on this project sometime in the future",
"project": {
"id": "6208",
"name": "My Project"
}
},
{
"id": "fae2ad7e-cb43-11e5-8080-800019c0d40a",
"type": "limit",
"created": "2016-02-04T13:34:13.707507",
"isRead": false,
"isSeen": true,
"title": "Your project is over quota!",
"message": "Limit kbc.storageSizeBytes has been crossed",
"payload": {
"limit": "kbc.storageSizeBytes"
},
"project": {
"id": "6208",
"name": "My test"
}
}
]
```
### Create notification [POST]
+ Attributes
+ type: common (required) - Type of notification, one of [common | limit | global]
+ projectId: 234 - Required for `common` and `limit` type, ignored for `global`
+ title: First Notification (required) - Short title of notification
+ message: Some text - Long message, supports markdown
+ payload (object) - Optional JSON payload, for type `limit` set to `{"limit": "kbc.limitNameHere"}
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 201 (application/json)
```js
{
"id": "497bda6a-cb57-11e5-8080-800144cef8df",
"actor": "Project:1234",
"type": "common",
"created": "2016-02-04T15:52:26.011505",
"title": "Maintenance Announcement",
"message": "There will be maintenance on this project sometime in the future"
}
```
### Mark notification as read [PUT]
You can specify either IDs of notifications which should be marked as read, or you can set `allRead` to mark
all notifications as read.
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Body
```js
{
"read": [
"497bda6a-cb57-11e5-8080-800144cef8df",
"fae2ad7e-cb43-11e5-8080-800019c0d40a"
],
"allRead": true
}
```
+ Response 200 (application/json)
```js
{
"status": "ok"
} ```
# Group My Account
## Projects Join Requests [/manage/current-user/projects-join-requests]
### List my join requests [GET]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
[
{
"id": 124,
"created": "2016-02-22T15:01:13+0200",
"expires": "2016-03-22T15:01:13+0200",
"reason": "temporary test",
"project": {
"id": 324,
"name": "Main project"
}
},
{
"id": 127,
"crated": "2014-11-11T08:40:51.620Z",
"expires": null,
"reason": "",
"project": {
"id": 423,
"name": "Development"
}
}
]
```
## Project Join Request [/manage/current-user/projects-join-requests/{join_request_id}]
+ Parameters
+ join_request_id: 1 (required, integer)
### Join request detail [GET]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200
```js
{
"id": 124,
"created": "2016-02-22T15:01:13+0200",
"expires": "2016-03-22T15:01:13+0200",
"reason": "temporary test",
"project": {
"id": 324,
"name": "Main project"
}
}
```
### Cancel a join request [DELETE]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 204
## Projects Invitations [/manage/current-user/projects-invitations]
### List invitations [GET]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
[
{
"id": 113,
"created": "2018-07-10T11:13:00+0200",
"expires": null,
"reason": "",
"project": {
"id": 7,
"name": "Martinovo"
},
"creator": {
"id": 2,
"name": "Martin Halamicek",
"email": "martin@keboola.com"
}
}
]
```
## Manage Invitation [/manage/current-user/projects-invitations/{invitation_id}]
### Invitation detail [GET]
+ Parameters
+ invitation_id (number, required) - Invitation ID
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
{
"id": 113,
"created": "2018-07-10T11:13:00+0200",
"expires": null,
"reason": "",
"project": {
"id": 7,
"name": "Martinovo"
},
"creator": {
"id": 2,
"name": "Martin Halamicek",
"email": "martin@keboola.com"
}
}
```
### Accept a invitation [PUT]
Invitation will be accepted and current user will be added to the project.
+ Parameters
+ invitation_id (number, required) - Invitation ID
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 202
### Decline a invitation [DELETE]
+ Parameters
+ invitation_id (number, required) - Invitation ID
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 204
# Group SUPER - Features
## Features [/manage/features?type={type}]
### Retrieve all features [GET]
Gets all features. To filter only the features with a specific type,
add the `type` parameter to your query.
+ Parameters
+ type: admin (string) - Type of features you want to filter
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
[
{
"id": 1,
"name": "show-new-design",
"type": "admin",
"description": "Users with this feature will see new UI",
"created": "2016-04-28T15:24:51.620Z",
}
]
```
### Retrieve one feature [GET /manage/features/{id}]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
{
"id": 1,
"name": "show-new-design",
"type": "admin",
"description": "Users with this feature will see new UI",
"created": "2016-04-28T15:24:51.620Z",
}
```
### Retrieve feature projects [GET /manage/features/{id}/projects]
Gets the projects with the specified feature assigned.
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
[
{
"id": 771,
"name": "Test project"
}
]
```
### Retrieve feature users [GET /manage/features/{id}/admins]
Gets the users with the specified feature assigned.
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
[
{
"id": 1,
"name": "Test user",
"email": "test@example.com"
}
]
```
### Create a feature [POST]
To create a new feature, provide the following parameters as JSON in the request body:
+ Attributes
+ name: show-new-design (required) - Feature name
+ type: admin, project (enum) (required) - Feature type
+ description: Users with this feature will see new UI (required) - Short description of the feature
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 201 (application/json)
```js
{
"id": 1,
"name": "show-new-design",
"type": "admin",
"description": "Users with this feature will see new UI",
"created": "2016-04-28T15:24:51.620Z",
}
```
### Delete a feature [DELETE /manage/features/{id}]
+ Parameters
+ id: 1 (required, number) - ID of the feature to delete
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 204
## Project Features [/manage/projects/{project_id}/features]
### Add a project feature [POST]
Project features can be assigned only by a super admin.
*Note: Features have to exist before they can be added to a project.*
+ Parameters
+ project_id (required, int) - Project ID
+ Attributes
+ feature: show-new-design (required) - Feature name
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
{
"id":259,
"name":"New Project",
"features":["new-orchestrator","es-events"],
"redshift": {
"connectionId":309,
"databaseName":"sapi_258"
}
"organization": {
"id": 3432
},
"limits": {
"goodData.usersCount": {
"name": "goodData.usersCount",
"value": 23
}
}
}
```
### Remove a project feature [DELETE /manage/projects/{project_id}/features/{feature_name}]
Project features can be removed only by a super admin.
+ Parameters
+ project_id (required, int) - Project ID
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 204
## User Features [/manage/users/{user_id_or_email}/features]
### Add a user feature [POST /manage/users/{user_id_or_email}/features]
*Note: Features have to exist before they can be added to a user.*
+ Parameters
+ user_id_or_email (required) - User ID or email
+ Attributes
+ feature: show-new-design (required) - Feature name
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
{
"id": 2,
"name": "Martin Halamicek",
"email": "martin@keboola.com",
"features": [
"inline-manual"
]
}
```
### Remove a user feature [DELETE /manage/users/{user_id_or_email}/features/{feature}]
+ Parameters
+ user_id_or_email (required) - User ID or email
+ feature (required) - Feature name
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
{
"id": 2,
"name": "Martin Halamicek",
"email": "martin@keboola.com",
"features": [
"inline-manual"
]
}
```
## Project Template Features [/manage/project-templates/{template}/features]
These features will be added to a project on project creation.
### List features [GET /manage/project-templates/{template}/features]
Lists features assigned to a project template.
+ Parameters
+ template (required) - StringId of project template
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
[
{
"id": 52,
"name": "test-feature",
"type": "project",
"description": "project template test feature",
"created": "2018-04-12T21:46:37+0200"
}
]
```
### Add a feature [POST /manage/project-templates/{template}/features]
*Note: Features have to exist before they can be added to a project template and have to be of the type `project`.*
+ Parameters
+ template (required) - StringId of project template
+ Attributes
+ feature: show-new-design (required) - Feature name
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 201
### Remove a feature [DELETE /manage/project-templates/{template}/features/{feature}]
Removes a feature assigned to a project template.
+ Parameters
+ template (required) - StringId of project template
+ feature (required) - Feature name
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 204
# Group SUPER - File Storage Management
Management of file storages. A file storage is represented by the AWS S3 bucket with associated AWS IAM credentials
with full access to this bucket and access to the AWS STS service.
At least one file storage has to be registered for one supported region.
## File Storage Collection [/manage/file-storage]
### Create new Storage [POST]
New S3 file Storage will be registered. Provided AWS credentials are verified and required permissions are validated.
The Storage region is automatically detected.
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Attributes(FileStorageRequest)
+ Response 201 (application/json)
+ Attributes(FileStorage)
### List storages [GET]
+ Response 200 (application/json)
+ Attributes (array[FileStorage])
## Region Default File Storage [/manage/file-storage/{file_storage_id}/default]
Each region should have associated one default Storage, which is used for every new project in the region.
Only storage owned by **keboola** can be set as default.
+ Parameters
+ file_storage_id (required) - File Storage ID
### Set Storage as default [POST]
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 201 (application/json)
+ Attributes(FileStorage)
## Data Structures
### FileStorageBase
+ awsKey: SFASDF (required)
+ filesBucket: `kbc-sapi-files` (required)
+ region: `us-east-1` (required)
+ owner: keboola (required) - Associated AWS account owner
### FileStorage(FileStorageBase)
+ id: 123 (required)
+ isDefault: false
## FileStorageRequest(FileStorageBase)
+ awsSecret: xxxx (required)
# Group SUPER - Storage Backends Management
Storage backends power Keboola Connection buckets and the main tabular data storage.
Currently supported backends are:
- Redshift
- Snowflake
## Storage Backend Collection [/manage/storage-backend]
### Create a new backend [POST]
#### Redshift
Credentials with superuser access to the database must be provided for Redshift.
#### Snowflake
Credentials and storage warehouse are required. You can generate a user, role and warehouse with the following queries:
```
CREATE ROLE "KEBOOLA_STORAGE";
GRANT CREATE DATABASE ON ACCOUNT TO ROLE "KEBOOLA_STORAGE";
GRANT CREATE ROLE ON ACCOUNT TO ROLE "KEBOOLA_STORAGE" WITH GRANT OPTION;
GRANT CREATE USER ON ACCOUNT TO ROLE "KEBOOLA_STORAGE" WITH GRANT OPTION;
CREATE WAREHOUSE "YOUR_WAREHOUSE" WITH WAREHOUSE_SIZE = 'XSMALL' WAREHOUSE_TYPE = 'STANDARD' AUTO_SUSPEND = 3600 AUTO_RESUME = TRUE;
GRANT USAGE ON WAREHOUSE "YOUR_WAREHOUSE" TO ROLE "KEBOOLA_STORAGE" WITH GRANT OPTION;
CREATE USER "KEBOOLA_STORAGE"
PASSWORD = "YOUR_PASSWORD"
DEFAULT_ROLE = "KEBOOLA_STORAGE";
GRANT ROLE "KEBOOLA_STORAGE" TO USER "KEBOOLA_STORAGE";
GRANT ROLE "KEBOOLA_STORAGE" TO ROLE SYSADMIN;
```
According to the previous example, the parameters for creating Storage will be:
- `user` - `KEBOOLA_STORAGE`
- `warehouse` - `YOUR_WAREHOUSE`
- `password` - `YOUR_PASSWORD`
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Attributes(StorageBackendCreate)
+ Response 201 (application/json)
+ Attributes(StorageBackend)
### List backends [GET]
+ Response 200 (application/json)
+ Attributes (array[StorageBackend])
## Data Structures
### StorageBackendCreate
+ backend: Snowflake (required) - can be Redshift or Snowflake
+ host: `sapi-37-demo.cmizbsfmzc6w.us-east-1.redshift.amazonaws.com` (required)
+ warehouse: `production` - required only for Snowflake
+ username: keboola (required)
+ password: 1234 (required)
+ region: `us-east-1` (required)
+ owner: keboola (required) - associated AWS account owner
## StorageBackend
+ id: 123 (required)
+ backend: redshift (required)
+ host: sapi-37-demo.cmizbsfmzc6w.us-east-1.redshift.amazonaws.com (required)
+ username: keboola (required)
+ password: 1234 (required)
+ owner: keboola (required)
# Group SUPER - Commands
## Run Command [POST /manage/commands]
Executes a Keboola Connection CLI command asynchronously. The command is enqueued to the commands queue, `commandExecutionId` is returned.
You can use this ID to search the command output in Papertrail logs.
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Attributes(CommandExecute)
+ Response 201 (application/json)
+ Attributes(CommandExecuteResponse)
## Data Structures
### CommandExecute
+ command: `storage:workers\-list` (required) - command to execute
+ parameters: `--help`, 23 (array[string]) - command parameters
## CommandExecuteResponse
+ commandExecutionId: `123\-abcd` (required) - execution ID; this ID is appended to all logs provided by the command
# Group SUPER - UI Management
## List Applications [GET /manage/ui-apps]
Returns active applications. This resource doesn't require authentication.
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
[
{
"id": "kbc.manageApps",
"name": "kbc.manageApps",
"version": "0.0.3-33-ga6bc947",
"basePath": "https:\/\/kbc-uis.s3.amazonaws.com\/kbc.manageApps\/0.0.3-33-ga6bc947\/",
"scripts": [
"https:\/\/kbc-uis.s3.amazonaws.com\/kbc.manageApps\/0.0.3-33-ga6bc947\/scripts\/libs.js",
"https:\/\/kbc-uis.s3.amazonaws.com\/kbc.manageApps\/0.0.3-33-ga6bc947\/scripts\/scripts.js"
],
"styles": [
"https:\/\/kbc-uis.s3.amazonaws.com\/kbc.manageApps\/0.0.3-33-ga6bc947\/styles\/libs.css",
"https:\/\/kbc-uis.s3.amazonaws.com\/kbc.manageApps\/0.0.3-33-ga6bc947\/styles\/select2.png"
]
}
]
```
## Get Application Detail [GET /manage/ui-apps/{app_id}]
Retrieves an application detail with all its versions.
+ Parameters
+ app_id (required, id) - Application ID
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
[
{
"id":"41",
"stringId":"kbc",
"name":"kbc",
"created":"2015-02-12 11:10:09",
"versions":[
{
"id":1646,
"created":"2015-08-17 17:43:37",
"version":"0.1.21-17-g3cae4c0",
"isActive":true,
"buildUrl":""
}
]
}
]
```
## Activate/Deactivate Application Version [PATCH /manage/ui-apps-versions/{version_id}]
+ Attributes
+ isActive: true (required, boolean) - Active state of a version. Only one version of the app can be active, the previous active version will be disabled.
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
{
"id":1646,
"created":"2015-08-17 17:43:37",
"version":"0.1.21-17-g3cae4c0",
"isActive":true,
"buildUrl":""
}
```
## Register New Application/Version [POST /manage/ui-apps?{manifest_url,activate}]
+ Parameters
+ manifest_url (required, string) - URL of manifest describing UI build
+ activate (optional, int) - Activate version after registration
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 201 (application/json)
```js
{
"app": {
"id":"41",
"stringId":"kbc",
"name":"kbc",
"created":"2015-02-12 11:10:09"
},
"verion": {
"id":1646,
"created":"2015-08-17 17:43:37",
"version":"0.1.21-17-g3cae4c0",
"isActive":true
}
}
```
# Group Syrup API Integration
This is an example of an API call returning all running worker processes and their state. This resource is accessible for tokens of the type `super` with `super_monitoring` scope.
`Super` tokens can be created only by super admins.
## Authentication
Syrup API will receive a management token in its header and will use it to call the `Verify token` API call.
Details about the token will be returned, scopes associated to the token are present in the response.
If the scope is `super_monitoring` and the token type is `super`, Syrup will return the workers in the response, otherwise `403` is returned.
# Get Workers [GET /queue/workers]
Endpoint should be: https://syrup.keboola.com/queue/workers
This API resource can be used, for example, by Hubot script for listing running workers.
+ Request (application/json)
+ Headers
X-KBC-ManageApiToken: your_token
+ Response 200 (application/json)
```js
[
{
"id": 1,
"host": "kbc-vpc-syrup-tapi-worker-a-01",
"queue": "tapi",
"instance": "1",
"pid": 2516,
"lastChanged": "2015-08-12 11:59:04",
"status": "processing",
"jobId": 234234,
"project": {
"id": 234,
"name": "Shared Config"
}
},
{
"id": 1,
"host": "kbc-vpc-syrup-tapi-worker-a-01",
"queue": "tapi",
"instance": "1",
"pid": 2516,
"lastChanged": "2015-08-12 11:59:04",
"status"": "idle"
},
]
````