GitHub (via Apideck)
Access GitHub through Apideck's Issue Tracking unified API — one of 6 Issue Tracking connectors that share the same method surface. Code you write here ports to Jira, GitLab, Linear and 2 other Issue Tracking connectors by changing a single serviceId string. Apideck handles auth, pagination, rate limiting, and retries so you don't write per-tenant GitHub plumbing.
Beta connector. GitHub is currently in beta on Apideck. Expect partial resource coverage and occasional mapping gaps. Always verify coverage (see below) and fall back to the Proxy API for unsupported operations.
Quick facts
- Apideck serviceId:
github - Unified API: Issue Tracking
- Auth type: oauth2
- Status: beta
- Gotchas: page
- GitHub docs: https://docs.github.com/en/rest
- Homepage: https://github.com/
When to use this skill
Activate this skill when the user explicitly wants to work with GitHub — for example, "create a ticket in GitHub" or "comment on an issue in GitHub". This skill teaches the agent:
- Which Apideck unified API covers GitHub (Issue Tracking)
- The correct
serviceIdto pass on every call (github) - GitHub-specific auth and coverage caveats
For the full method surface (parameters, pagination, filtering), use your language SDK skill:
apideck-node,apideck-python,apideck-dotnet,apideck-java,apideck-go,apideck-php, orapideck-rest
For the raw OpenAPI spec:
- Issue Tracking: https://specs.apideck.com/issue-tracking.yml · API Explorer
Minimal example (TypeScript)
import { Apideck } from "@apideck/unify";
const apideck = new Apideck({
apiKey: process.env.APIDECK_API_KEY,
appId: process.env.APIDECK_APP_ID,
consumerId: "your-consumer-id",
});
// List tickets in GitHub
const { data } = await apideck.issueTracking.tickets.list({
serviceId: "github",
});
Portable across 6 Issue Tracking connectors
The Apideck Issue Tracking unified API exposes the same methods for every connector in its catalog. Switching from GitHub to another Issue Tracking connector is a one-string change — no rewrite, no new SDK.
// Today — GitHub
await apideck.issueTracking.tickets.list({ serviceId: "github" });
// Tomorrow — same code, different connector
await apideck.issueTracking.tickets.list({ serviceId: "jira" });
await apideck.issueTracking.tickets.list({ serviceId: "gitlab" });
This is the compounding advantage of using Apideck over integrating GitHub directly: code against the unified Issue Tracking API once, gain access to every connector in it. New connectors Apideck adds become available to your app without code changes.
GitHub via Apideck Issue Tracking
GitHub Issues is mapped to Apideck's Issue Tracking unified API. Covers repositories, issues, comments, users, and labels.
Entity mapping
| GitHub concept | Apideck Issue Tracking resource |
|---|---|
| Repository | collections |
| Issue | tickets |
| Comment | comments |
| User | users |
| Label | tags |
| Milestone | use Proxy (not in unified) |
| Pull Request | use Proxy (distinct GitHub surface) |
| Project (Projects v2) | use Proxy |
Coverage highlights
- ✅ List repositories (collections) the authenticated user can access
- ✅ CRUD on issues (tickets)
- ✅ Comments
- ✅ Labels (tags)
- ❌ Pull requests — separate surface; use Proxy with
/repos/{owner}/{repo}/pulls - ❌ GitHub Actions, Packages, Codespaces — use Proxy
Auth
- Type: OAuth 2.0 or GitHub App installation, managed by Apideck Vault
- Scopes: repo scope for read/write on private repos; public_repo for public-only.
- Org-level vs. user-level: each connection targets one owner (user or org). To access multiple orgs, create multiple connections.
- Rate limits: GitHub's rate limits apply (5,000/hour for authenticated users; higher for Apps). Apideck backs off on 403/429.
Example: list open issues in a repo
const { data } = await apideck.issueTracking.collectionTickets.list({
serviceId: "github",
collectionId: "owner/repo", // or GitHub's numeric repo ID depending on SDK
filter: { status: "open" },
});
Escape hatch: Proxy API
When an endpoint isn't covered by the Issue Tracking unified API, use Apideck's Proxy to call GitHub directly — Apideck injects auth headers and handles token refresh. Set x-apideck-downstream-url to the target endpoint on GitHub's own API:
curl 'https://unify.apideck.com/proxy' \
-H "Authorization: Bearer ${APIDECK_API_KEY}" \
-H "x-apideck-app-id: ${APIDECK_APP_ID}" \
-H "x-apideck-consumer-id: ${CONSUMER_ID}" \
-H "x-apideck-service-id: github" \
-H "x-apideck-downstream-url: <target endpoint on GitHub>" \
-H "x-apideck-downstream-method: GET"
See GitHub's API docs for available endpoints.
Sibling connectors
Other Issue Tracking connectors that share this unified API surface (same method signatures, just change serviceId):
jira (beta), gitlab (beta), linear (beta), gitlab-server (beta), linear-multiworkspace (beta).
See also
- Issue Tracking OpenAPI spec · API Explorer
apideck-connector-coverage— programmatic coverage checksapideck-best-practices— architecture, Vault, pagination, error handlingapideck-node— TypeScript / Node SDK patterns- GitHub official docs