---
title: "POST /experimental/workspaces/{workspaceId}/integrations/github-app/token"
method: POST
path: "/experimental/workspaces/{workspaceId}/integrations/github-app/token"
tags: ["Integrations", "Workspaces"]
---

# POST /experimental/workspaces/{workspaceId}/integrations/github-app/token

`POST /experimental/workspaces/{workspaceId}/integrations/github-app/token`

Mints a short-lived GitHub installation token for the workspace's Tessl Helper GitHub App installation, plus the bot identity (`appSlug`, `botUserId`, `login`, `email`) resolved via the authenticated App credentials. Naming an `owner` selects that GitHub account's installation instead of the most recently updated one, and `repositories` scopes the token to those repository names. Used by CI workflows and the CLI to act as the Tessl Helper bot without holding the private key or guessing the slug.

## Path parameters

- `workspaceId` string, uuid, required

## Headers

- `Authorization` string

## Request body

- object
  - `owner` string — The GitHub account — an organization or a user — whose Tessl Helper installation mints the token. A workspace can reach the app on several accounts; without this the most recently updated installation is used, which may not be the one owning the repositories you want. Required whenever `repositories` is given.
  - `repositories` string[] — Restricts the token to these repositories. Omit for a token covering everything the installation can reach.
  - `permissions` object

## Response `201`

Default Response

- object
  - `links` object, required
    - `self` string, uri, required
  - `data` object, required
    - `id` string, uuid, required
    - `type` 'github-installation-access-token', required
    - `attributes` object, required
      - `token` string, required
      - `expiresAt` string, required
      - `permissions` object, required
      - `appSlug` string, required
      - `botUserId` number, required
      - `login` string, required
      - `email` string, required

## Other responses

- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `500` — Internal Server Error

## Changes

- **2026-08-20** `cfc6292039de` — 1 warning, 1 info
  - the `repositories/items/` request property's maxLength was set to `100`
  - added the new optional request property `owner`

[Change history](https://skmtc.dev/tessl/apis/tessl-api/changes/experimental/workspaces/:workspaceId/integrations/github-app/token/post.md)

---

[API](https://skmtc.dev/tessl/apis/tessl-api.md) · [All operations](https://skmtc.dev/tessl/apis/tessl-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/tessl/tessl-api/revisions/11217e48a1a9/schema)
