GitLab API
REST and GraphQL API access via glab api.
Placeholders
Auto-resolve to current project values:
:fullpath- Full project path (e.g.,group/project):id- Project ID:branch- Current branch:user/:username- Current user
glab api projects/:fullpath/merge_requests
REST
glab api projects/:id/issues # GET
glab api projects/:id/issues -X POST -f title="..." # POST with field
glab api projects/:id/issues --paginate # All pages
Pagination pitfall: --paginate concatenates JSON arrays across pages as ][, producing invalid JSON (e.g., [{...}][{...}]). Fix by replacing ][ with , before parsing: .replace(/\]\s*\[/g, ",").
Nested fields: -f and --raw-field silently drop bracket-nested keys like position[base_sha]=.... For nested objects, write JSON to a file and use --input:
echo '{"position":{"base_sha":"abc","head_sha":"def","old_path":"file.ts","new_path":"file.ts","position_type":"text","new_line":10}}' > /tmp/payload.json
glab api projects/:id/merge_requests/:iid/discussions -X POST -H "Content-Type: application/json" --input /tmp/payload.json
GraphQL
glab api graphql -f query='{ currentUser { username } }'
For pagination, accept $endCursor variable and fetch pageInfo { hasNextPage, endCursor }.
Output
--output json(default) - Pretty-printed JSON--output ndjson- Newline-delimited, works withjqstreaming
Documentation
- REST endpoints:
/api/in GitLab docs - GraphQL schema:
/api/graphql/reference/