1GH-API(1)                      GitHub CLI manual                     GH-API(1)
2
3
4

NAME

6       gh-api - Make an authenticated GitHub API request
7
8
9

SYNOPSIS

11       gh api <endpoint> [flags]
12
13
14

DESCRIPTION

16       Makes  an  authenticated  HTTP request to the GitHub API and prints the
17       response.
18
19
20       The endpoint argument should either be a path of a GitHub API  v3  end‐
21       point, or "graphql" to access the GitHub API v4.
22
23
24       Placeholder  values "{owner}", "{repo}", and "{branch}" in the endpoint
25       argument will get replaced with values from the repository of the  cur‐
26       rent  directory  or the repository specified in the GH_REPO environment
27       variable.  Note that in some shells, for example  PowerShell,  you  may
28       need  to  enclose  any value that contains "{...}" in quotes to prevent
29       the shell from applying special meaning to curly braces.
30
31
32       The default HTTP request method is "GET" normally and "POST" if any pa‐
33       rameters were added. Override the method with --method.
34
35
36       Pass  one  or  more  -f/--raw-field values in "key=value" format to add
37       static string parameters to the request payload. To add  non-string  or
38       placeholder-determined  values, see --field below. Note that adding re‐
39       quest parameters will automatically switch the request method to  POST.
40       To send the parameters as a GET query string instead, use --method GET.
41
42
43       The  -F/--field  flag  has magic type conversion based on the format of
44       the value:
45
46
47              • literal values "true", "false", "null",  and  integer  numbers
48                get converted to appropriate JSON types;
49
50              • placeholder  values  "{owner}",  "{repo}",  and "{branch}" get
51                populated with values from the repository of the  current  di‐
52                rectory;
53
54              • if  the value starts with "@", the rest of the value is inter‐
55                preted as a filename to read the value from. Pass "-" to  read
56                from standard input.
57
58
59
60       For GraphQL requests, all fields other than "query" and "operationName"
61       are interpreted as GraphQL variables.
62
63
64       To pass  nested  parameters  in  the  request  payload,  use  "key[sub‐
65       key]=value"  syntax when declaring fields. To pass nested values as ar‐
66       rays,  declare  multiple  fields  with   the   syntax   "key[]=value1",
67       "key[]=value2". To pass an empty array, use "key[]" without a value.
68
69
70       To  pass  pre-constructed  JSON or payloads in other formats, a request
71       body may be read from file specified by --input. Use "-" to  read  from
72       standard  input. When passing the request body this way, any parameters
73       specified via field flags are added to the query string of the endpoint
74       URL.
75
76
77       In --paginate mode, all pages of results will sequentially be requested
78       until there are no more pages of results. For  GraphQL  requests,  this
79       requires that the original query accepts an $endCursor: String variable
80       and that it fetches the  pageInfo{  hasNextPage,  endCursor  }  set  of
81       fields from a collection.
82
83
84

OPTIONS

86       --cache <duration>
87              Cache the response, e.g. "3600s", "60m", "1h"
88
89
90       -F, --field <key=value>
91              Add a typed parameter in key=value format
92
93
94       -H, --header <key:value>
95              Add a HTTP request header in key:value format
96
97
98       --hostname <string>
99              The GitHub hostname for the request (default "github.com")
100
101
102       -i, --include
103              Include HTTP response status line and headers in the output
104
105
106       --input <file>
107              The  file  to  use as body for the HTTP request (use "-" to read
108              from standard input)
109
110
111       -q, --jq <string>
112              Query to select values from the response using jq syntax
113
114
115       -X, --method <string>
116              The HTTP method for the request
117
118
119       --paginate
120              Make additional HTTP requests to fetch all pages of results
121
122
123       -p, --preview <names>
124              GitHub API preview names to request (without the "-preview" suf‐
125              fix)
126
127
128       -f, --raw-field <key=value>
129              Add a string parameter in key=value format
130
131
132       --silent
133              Do not print the response body
134
135
136       -t, --template <string>
137              Format JSON output using a Go template; see "gh help formatting"
138
139
140

EXAMPLE

142              # list releases in the current repository
143              $ gh api repos/{owner}/{repo}/releases
144
145              # post an issue comment
146              $ gh api repos/{owner}/{repo}/issues/123/comments -f body='Hi from CLI'
147
148              # post nested parameter read from a file
149              $ gh api gists -F 'files[myfile.txt][content]=@myfile.txt'
150
151              # add parameters to a GET request
152              $ gh api -X GET search/issues -f q='repo:cli/cli is:open remote'
153
154              # set a custom HTTP header
155              $ gh api -H 'Accept: application/vnd.github.v3.raw+json' ...
156
157              # opt into GitHub API previews
158              $ gh api --preview baptiste,nebula ...
159
160              # print only specific fields from the response
161              $ gh api repos/{owner}/{repo}/issues --jq '.[].title'
162
163              # use a template for the output
164              $ gh api repos/{owner}/{repo}/issues --template \
165                '{{range .}}{{.title}} ({{.labels | pluck "name" | join ", " | color "yellow"}}){{"\n"}}{{end}}'
166
167              # list releases with GraphQL
168              $ gh api graphql -F owner='{owner}' -F name='{repo}' -f query='
169                query($name: String!, $owner: String!) {
170                  repository(owner: $owner, name: $name) {
171                    releases(last: 3) {
172                      nodes { tagName }
173                    }
174                  }
175                }
176
177              # list all repositories for a user
178              $ gh api graphql --paginate -f query='
179                query($endCursor: String) {
180                  viewer {
181                    repositories(first: 100, after: $endCursor) {
182                      nodes { nameWithOwner }
183                      pageInfo {
184                        hasNextPage
185                        endCursor
186                      }
187                    }
188                  }
189                }
190
191
192
193
194

SEE ALSO

196       gh(1)
197
198
199
200                                   Jan 2023                          GH-API(1)
Impressum