Connect a GitHub token (Issues) to Fondoo
This connection lets your AI agent read and open issues in one GitHub repository. For example, it can file a bug report from a customer conversation or check which issues are still open. It uses a fine-grained personal access token limited to that repository and to issues only. Code changes do not go through this connection; they use the separate GitHub App connection (provider github).
What Fondoo can do with it
| Action | What it does | GitHub call |
|---|---|---|
issues.list (read) | Lists issues in the repository. You can filter by state (open, closed, all) and page through with page and per_page | GET /repos/{owner}/{repo}/issues |
issues.create (write) | Opens a new issue from the fields you supply, such as title and body | POST /repos/{owner}/{repo}/issues |
Your agent calls them with:
connector_action({connectionId, action:"issues.list", input:{state:"open"}})connector_action({connectionId, action:"issues.create", input:{data:{title:"…", body:"…"}}})
Things to know:
- GitHub treats every pull request as an issue too, so
issues.listalso returns pull requests. You can tell them apart by thepull_requestfield (Issues API). - Neither action is destructive or spends money, so neither needs owner approval.
- Agents need Fondoo's
connectors:readscope to list andconnectors:writescope to create. Every call is audited. - There is no edit, close or delete action.
Before you start
- A GitHub account with access to the repository. You must be able to create issues there.
- Organization rules. If the repository belongs to an organization, it may require approval for fine-grained tokens, or block them entirely. A token waiting for approval can only read public resources until an organization admin approves it (managing personal access tokens).
- The repository's owner and name, for example owner
acmeand repowebsite. - There is no GitHub cost for API use.
Step by step: get your credentials
- On GitHub, click your profile picture → Settings → Developer settings → Personal access tokens → Fine-grained tokens → Generate new token.
- Fill in Token name (for example "Fondoo issues") and an optional Description.
- Choose an Expiration. A shorter lifetime is safer. Fondoo can remind you before it runs out (see "Rotate" below).
- Set Resource owner to the user or organization that owns the repository. An organization that blocks fine-grained tokens will not appear in this list.
- Under Repository access, choose Only select repositories and pick the one repository.
- Under Permissions → Repository permissions, set Issues to Read and write. GitHub also includes Metadata as read-only. Leave every other permission at No access (required permissions).
- Click Generate token and copy it. GitHub shows it only once.
Connect it in Fondoo
In the dashboard:
- Open Connections and type "GitHub" in Find a tool. Two GitHub cards may appear under Development. The token connection is the one with a Use a key button; the other one is the GitHub App.
- Click Use a key → Open secure key entry.
- Fill in
apiKey(the token),ownerandrepo. - Click Save connection securely. The link lasts 15 minutes and works once.
- Click Check connection.
By asking your agent. For example:
"Connect our GitHub repo acme/website so you can open issues for bugs customers report."
The agent calls add_connection_key({provider:"github_token", siteId}) without fields and sends you the secure link. Never paste the token in chat: tokens sent in fields trigger a chat-log warning. connect_service({provider:"github_token", siteId}) returns a signed 15-minute instruction link. Then the agent runs test_connection({connectionId}).
REST: POST https://api.getfondoo.com/v1/ops/add_connection_key with Authorization: Bearer <your Fondoo key> and {"provider":"github_token","siteId":"<site UUID>"}.
Test that it works
test_connectioncallsGET /user. Statusconnectedmeans GitHub accepts the token. It does not yet prove repository access, soissues.listandissues.createshow as "unknown".- Ask your agent to list open issues. If it returns results (or an empty list) without an error, the repository permissions are right.
- Optionally, have it open a test issue, then close it yourself on GitHub.
Troubleshooting
- Status
invalidor "Provider request failed (401)". The token is wrong, expired or revoked. Generate a new one. - "Provider request failed (404)" when listing. The
ownerorrepois misspelled, or the token was not given that repository. GitHub returns 404 rather than 403 for private repositories you cannot see. - "Provider request failed (403)" when creating. Issues is not set to Read and write, the organization has not approved the token yet, or issues are disabled on the repository.
- Pull requests show up in the list. This is expected; see above.
- "Provider request failed (429)" or 403 with a rate-limit message. GitHub allows 5,000 requests per hour per token, plus secondary limits such as 80 content-creating requests per minute (rate limits). Fondoo also limits each connection to about 60 actions per minute.
Limits, data and security
- What Fondoo stores: the encrypted token, owner and repo, status, last test and last use.
list_connectionsshows[redacted]. Issue contents are returned to the caller and not stored. - Rotate: set
expiresAt(and optionallyrotateAfter) when adding the key, and Fondoo reminds you a week before. To replace the token, generate a new one, callrotate_connection_key({connectionId})without fields, and paste it. Fondoo blocks use of an expired credential. - Disconnect:
delete_connection({connectionId})removes the token from Fondoo. Agents need your approval. Then delete the token under Fine-grained tokens on GitHub.
Official links
- Managing personal access tokens: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens
- Permissions for fine-grained tokens: https://docs.github.com/en/rest/authentication/permissions-required-for-fine-grained-personal-access-tokens
- Issues REST API: https://docs.github.com/en/rest/issues/issues
- REST API rate limits: https://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api
