Skip navigation

Access and integrations

Access tokens and webhooks.

Access tokens

Create token

POST https://api.kinescope.io/v1/access-tokens

Creates a new access token for the workspace. Store the returned value — it is shown once.

Request body (json)
{
  "name": "token1",
  "scope": {
    "api": {
      "permissions": [
        "read",
        "write",
        "delete"
      ]
    },
    "upload": {
      "permissions": []
    }
  }
}

Create upload token to specific project

POST https://api.kinescope.io/v1/access-tokens

Creates an upload-only access token scoped to a single project.

Request body (json)
{
  "name": "token for upload to project",
  "scope": {
    "upload": {
      "entities": [
        {
          "id": "<UUID>",
          "permissions": [
            "read",
            "write",
            "delete"
          ]
        }
      ],
      "permissions": []
    }
  }
}
Responses
{
  "data": {
    "id": "9f8d2c31-4a6b-4e72-8d15-3b7c9e0a5f24",
    "name": "token for upload to project",
    "workspace_id": "4ba9dbbc-aec9-4e60-97ad-06a45bb7700d",
    "scope": {
      "upload": {
        "permissions": [],
        "entities": [
          {
            "id": "<UUID>",
            "permissions": [
              "read",
              "write",
              "delete"
            ]
          }
        ]
      }
    }
  }
}

Tokens list

GET https://api.kinescope.io/v1/access-tokens

Returns a list of access tokens. Results are paginated and can be filtered via query parameters.

Responses
{
  "meta": {
    "offset": 0,
    "limit": 10,
    "total": 16,
    "total_count": 0,
    "order": {
      "name": "asc"
    },
    "parent_id": null
  },
  "data": [
    {
      "id": "<UUID>",
      "name": "Koltin-Kinescope-Player",
      "workspace_id": "<UUID>",
      "scope": {
        "api": {
          "permissions": [
            "read",
            "write",
            "delete"
          ]
        }
      }
    },
    {
      "id": "<UUID>",
      "name": "Kotlin-Kinescope-Shorts",
      "workspace_id": "<UUID>",
      "scope": {
        "api": {
          "permissions": [
            "read",
            "write",
            "delete"
          ]
        }
      }
    },
    {
      "id": "<UUID>",
      "name": "Restream",
      "workspace_id": "<UUID>",
      "scope": {
        "api": {
          "permissions": [
            "read",
            "write",
            "delete"
          ]
        },
        "upload": {
          "permissions": []
        }
      }
    },
    {
      "id": "<UUID>",
      "name": "sadfasdf",
      "workspace_id": "<UUID>",
      "scope": {
        "api": {
          "permissions": [
            "read",
            "write",
            "delete"
          ]
        }
      }
    },
    {
      "id": "<UUID>",
      "name": "sdfsdfsdf",
      "workspace_id": "<UUID>",
      "scope": {
        "api": {
          "permissions": [
            "read",
            "write",
            "delete"
          ]
        },
        "upload": {
          "permissions": []
        }
      }
    },
    {
      "id": "<UUID>",
      "name": "Speak",
      "workspace_id": "<UUID>",
      "scope": {
        "api": {
          "permissions": [
            "read",
            "write",
            "delete"
          ]
        },
        "upload": {
          "permissions": []
        }
      }
    },
    {
      "id": "<UUID>",
      "name": "Speak LiveKit Test Token",
      "workspace_id": "<UUID>",
      "scope": {
        "api": {
          "permissions": [
            "read",
            "write",
            "delete"
          ]
        },
        "upload": {
          "permissions": []
        }
      }
    },
    {
      "id": "<UUID>",
      "name": "Speak Room",
      "workspace_id": "<UUID>",
      "scope": {
        "api": {
          "permissions": [
            "read",
            "write",
            "delete"
          ]
        },
        "upload": {
          "permissions": []
        }
      }
    },
    {
      "id": "<UUID>",
      "name": "Test MCP",
      "workspace_id": "<UUID>",
      "scope": {
        "api": {
          "permissions": [
            "read",
            "write",
            "delete"
          ]
        }
      }
    },
    {
      "id": "<UUID>",
      "name": "Upload integration",
      "workspace_id": "<UUID>",
      "scope": {
        "api": {
          "permissions": [
            "read",
            "write",
            "delete"
          ]
        },
        "upload": {
          "permissions": []
        }
      }
    }
  ]
}

Get token

GET https://api.kinescope.io/v1/access-tokens/:token_id

Retrieves the details of a single access token by its unique ID.

Responses
{
  "data": {
    "id": "<UUID>",
    "name": "Koltin-Kinescope-Player",
    "workspace_id": "<UUID>",
    "scope": {
      "api": {
        "permissions": [
          "read",
          "write",
          "delete"
        ]
      }
    }
  }
}
{
  "error": {
    "code": 400404,
    "message": "not found"
  }
}

Delete token

DELETE https://api.kinescope.io/v1/access-tokens/:token_id

Permanently deletes the access token. This action cannot be undone.

Webhooks

Outgoing webhooks notify your endpoint about events with videos, live streams and Speak calls. Thirteen events are sent: media.update.status for videos; live.created, live.connected, live.disconnected, live.finished, live.cancelled and live.enabled for live streams; speak.call.started, speak.call.finished, speak.participant.joined, speak.participant.left, speak.record.started and speak.record.finished for Speak.

A delivery is a plain POST with a JSON body. The only sender check is HTTP Basic auth with the login and password set on the subscription — deliveries are not signed, so treat the payload as a notification and re-read the object through the API. Your endpoint must answer with any 2xx; on any other response the delivery is repeated, but the number of attempts and the interval between them are not published. There is no delivery identifier, so deduplicate by the payload contents.

Retry policy, per internal data as of 2026-08-13 — not reproduced by us, confirm before relying on the numbers: the sender waits 10 seconds for a response; only 2xx counts as success; any other answer, including 4xx, is retried; the interval is about 15 seconds with no backoff, up to 50 attempts (roughly 12–13 minutes); deliveries to one URL are capped at 20 per second with bursts to 100; the order of deliveries is not guaranteed.

Create webhook

POST https://api.kinescope.io/v1/webhooks

Subscribes to one or more event types. The configured endpoint receives a plain POST with a JSON body when those events fire — deliveries are not signed, the only sender check is the HTTP Basic auth set here.

Request body (json)
{
  "name": "webhook1",
  "endpoint": "https://example.io/kinescope/webhook",
  "login": "",
  "password": "",
  "events": [
    "media.update.status"
  ]
}
Responses
{
  "data": {
    "id": "<UUID>",
    "name": "doc_test_webhook_1776899949",
    "endpoint": "https://example.com/kinescope-doc-test",
    "login": "",
    "password": "<REDACTED>",
    "events": [
      "media.update.status"
    ],
    "created_at": "2026-04-22T23:19:10.316926Z",
    "updated_at": null,
    "deleted_at": null
  }
}

List webhooks

GET https://api.kinescope.io/v1/webhooks

Returns a list of webhooks. Results are paginated and can be filtered via query parameters.

Responses
{
  "meta": {
    "pagination": {
      "page": 1,
      "per_page": 10,
      "total": 1
    },
    "order": {
      "name": "asc"
    }
  },
  "data": [
    {
      "id": "<UUID>",
      "name": "doc_test_webhook_1776899949",
      "endpoint": "https://example.com/kinescope-doc-test",
      "login": "",
      "password": "<REDACTED>",
      "events": [
        "media.update.status"
      ],
      "created_at": "2026-04-22T23:19:10.316926Z",
      "updated_at": null,
      "deleted_at": null
    }
  ]
}

Update webhook

PUT https://api.kinescope.io/v1/webhooks/:webhook_id

Updates the webhook (URL, HTTP Basic credentials, subscribed events).

Request body (json)
{
  "name": "webhook1_edit2",
  "endpoint": "https://example.io/kin/webhook",
  "login": "123",
  "password": "2222",
  "events": [
    "media.update.status"
  ]
}
Responses
{
  "data": {
    "id": "<UUID>",
    "name": "doc_test_webhook_1776899949_upd",
    "endpoint": "https://example.com/kinescope-doc-test",
    "login": "",
    "password": "<REDACTED>",
    "events": [
      "media.update.status"
    ],
    "created_at": "2026-04-22T23:19:10.316926Z",
    "updated_at": "2026-04-22T23:19:11.087179Z",
    "deleted_at": null
  }
}

Delete webhook

DELETE https://api.kinescope.io/v1/webhooks/:webhook_id

Permanently deletes the webhook. This action cannot be undone.

Responses
{
  "data": {
    "success": true
  }
}