Once youcreate your API token, all API requests are authorized in the same way. Cloudflare uses theRFC standard ↗Authorization: Bearer <API_TOKEN>
interface. An example request is shown below.
curl"https://api.cloudflare.com/client/v4/zones/$ZONE_ID"\--header"Authorization: Bearer YQSn-xWAQiiEh9qM58wZNnyQS7FUdoqGIUAbrh7T"
Never send or store your API token secret in plaintext. Also be sure not to check it into code repositories, especially public ones.
Consider definingenvironment variables for the zone or account ID, as well as for authentication credentials (for example, the API token).
To format JSON output for readability in the command line, you can use a tool likejq
, a command-line JSON processor. For more information on obtaining and installingjq
, refer toDownload jq ↗.
The following example will format the curl JSON output usingjq
:
curl"https://api.cloudflare.com/client/v4/zones/$ZONE_ID"\--header"Authorization: Bearer$CLOUDFLARE_API_TOKEN"|jq.
Every Cloudflare API element is fixed to a version number. The latest version is Version 4. The stable base URL for all Version 4 HTTPS endpoints is:https://api.cloudflare.com/client/v4/
For specific guidance on making API calls, refer to the following resources:
- The product'sDeveloper Docs section for how-to guides.
- API schema docs for request and response payloads for each endpoint.
- The first-party libraries forGo ↗,TypeScript ↗,Python ↗, orHashiCorp's Terraform ↗.
Several Cloudflare endpoints have optional query parameters to filter incoming results, such asList Zones.
When adding those query parameters, make sure you enclose the URL in double quotes""
(just like the header values), or the API call might error.
curl"https://api.cloudflare.com/client/v4/zones?account.id=$ACCOUNT_ID"\--header"Authorization: Bearer$CLOUDFLARE_API_TOKEN"
You can enclose strings using either single quotes (''
) or double quotes (""
). However, using single quotes prevents variable substitution in shells likebash
. In the previous example, this would mean that the$ACCOUNT_ID
and$CLOUDFLARE_API_TOKEN
environment variables would not be replaced with their values.
Sometimes there will be too many results to display via the default page size, for example you might receive the following:
"count": 1,"page": 1,"per_page": 20,"total_count": 200,
Two query parameter options exist, which can be combined to paginate across the results.
page=x
enables you to select a specific page.per_page=xx
enables you to adjust the number of results displayed on a page. If you select too many, you may get a timeout.
An example might behttps://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?per_page=100&page=2
.
Other options are:
order
: Select the attribute to order by.direction
: EitherASC
(ascending order) orDESC
(descending order).
The available options will be listed at the end of theresult_info
of all endpoints in theAPI documentation.
Recent versions of Windows 10 and 11already include the curl tool ↗ used in the developer documentation's API examples. If you are using a different Windows version, refer toWindows downloads ↗ in the curl website for more information on obtaining and installing this tool.
To use the Cloudflare API with curl on a Command Prompt window, you must use double quotes ("
) as string delimiters.
A typicalPATCH
request will be similar to the following:
C:\>curl --request PATCH "https://api.cloudflare.com/client/v4/user/invites/{id}" --header "X-Auth-Email: <EMAIL>" --header "X-Auth-Key: <API_KEY>" --data "{""status"": ""accepted""}"
To escape a double quote character in a request body (for example, a body specified with-d
or--data
in aPOST
/PATCH
request), prepend it with another double quote ("
) or a backslash (\
) character.
To break a single command in two or more lines, use^
as the line continuation character at the end of a line:
C:\>curl --request PATCH ^"https://api.cloudflare.com/client/v4/user/invites/{id}" ^--header "X-Auth-Email: <EMAIL>" ^--header "X-Auth-Key: <API_KEY>" ^--data "{""status"": ""accepted""}"
Cloudflare recommends that you use the most recent stable or preview version of PowerShell. For more information, refer toInstalling PowerShell on Windows ↗.
PowerShell has specific cmdlets (Invoke-RestMethod
andConvertFrom-Json
) for making REST API calls and handling JSON responses. The syntax for these cmdlets is different from the curl examples provided in the developer documentation.
The following example uses theInvoke-RestMethod
cmdlet:
Invoke-RestMethod-URI"https://api.cloudflare.com/client/v4/zones/$Env:ZONE_ID/ssl/certificate_packs?ssl_status=all"-Method'GET'-Headers@{'X-Auth-Email'=$Env:CLOUDFLARE_EMAIL;'X-Auth-Key'=$Env:CLOUDFLARE_API_KEY}
result : {@{id=78411cfa-5727-4dc1-8d4a-773d01f17c7c; type=universal; hosts=System.Object[];primary_certificate=c173c8a1-9724-4e96-a748-2c4494186098; status=active; certificates=System.Object[];created_on=2022-12-09T23:11:06.010263Z; validity_days=90; validation_method=txt;certificate_authority=lets_encrypt}}result_info : @{page=1; per_page=20; total_pages=1; count=1; total_count=1}success : Trueerrors : {}messages : {}
The command assumes that the environment variablesZONE_ID
,CLOUDFLARE_EMAIL
, andCLOUDFLARE_API_KEY
have been previously defined. For more information, refer toEnvironment variables.
By default, the output will only contain the first level of the JSON object hierarchy (in the above example, the content of objects such ashosts
andcertificates
is not shown). To show additional levels and format the output like thejq
tool, you can use theConvertFrom-Json
cmdlet specifying the desired maximum depth (by default,2
):
Invoke-RestMethod-URI"https://api.cloudflare.com/client/v4/zones/$Env:ZONE_ID/ssl/certificate_packs?ssl_status=all"-Method'GET'-Headers@{'X-Auth-Email'=$Env:CLOUDFLARE_EMAIL;'X-Auth-Key'=$Env:CLOUDFLARE_API_KEY}|ConvertTo-Json-Depth5
{"result":[{"id":"78411cfa-5727-4dc1-8d4a-773d01f17c7c","type":"universal","hosts":["*.example.com","example.com"],"primary_certificate":"c173c8a1-9724-4e96-a748-2c4494186098","status":"active","certificates":[{"id":"c173c8a1-9724-4e96-a748-2c4494186098","hosts":["*.example.com","example.com"],"issuer":"LetsEncrypt","signature":"ECDSAWithSHA384","status":"active","bundle_method":"ubiquitous","zone_id":"<ZONE_ID>","uploaded_on":"2023-02-02T11:20:25.403338Z","modified_on":"2022-12-08T00:26:15.577555Z","expires_on":"2023-03-07T23:26:12.000000Z","priority":null}],"created_on":"2022-12-09T23:11:06.010263Z","validity_days":90,"validation_method":"txt","certificate_authority":"lets_encrypt"}]// (...)}
TheConvertTo-Json
cmdlet tries to convert strings formatted as timestamps to DateTime values, according to the exact format in the string. For details on this behavior, refer to the notes in theConvertFrom-Json ↗ documentation.
You can also use the curl tool in PowerShell. However, in PowerShellcurl
is an alias to theInvoke-WebRequest
cmdlet, which supports a different syntax from the usual curl tool. To use curl, entercurl.exe
instead.
A typicalPATCH
request with curl will be similar to the following:
curl.exe--request PATCH"https://api.cloudflare.com/client/v4/user/invites/{id}"--header"Authorization: Bearer$Env:CLOUDFLARE_API_TOKEN"--data'{\"status\": \"accepted\"}'
To escape a double quote ("
) character in a request body (specified with-d
or--data
), prepend it with another double quote ("
) or a backslash (\
). You must escape double quotes even when using single quotes ('
) as string delimiters.
To break a single command in two or more lines, use a backtick (`
) character as the line continuation character at the end of a line:
curl.exe--request PATCH`"https://api.cloudflare.com/client/v4/user/invites/{id}"`--header"X-Auth-Email:$Env:CLOUDFLARE_EMAIL"`--header"X-Auth-Key:$Env:CLOUDFLARE_API_KEY"`--data'{\"status\": \"accepted\"}'
You can define environment variables for values that repeat between commands, such as the zone or account ID. The lifetime of an environment variable can be the current shell session, all future sessions of the current user, or even all future sessions of all users on the machine you are defining them.
You can also use environment variables for keeping authentication credentials (API token, API key, and email) and reusing them in different commands. However, make sure you define these values in the smallest possible scope (either the current shell session only or all new sessions for the current user).
The procedure for setting and referencing environment variables depends on your platform and shell.
To define aZONE_ID
environment variable for the current shell session, run the following command:
exportZONE_ID='f2ea6707005a4da1af1b431202e96ac5'
To define the variable for all new shell sessions for the current user, add the command above at the end of your shell configuration file (for example,~/.bashrc
for thebash
shell and~/.zshrc
for thezsh
shell).
To define aZONE_ID
environment variable for the current PowerShell session, run the following command:
$Env:ZONE_ID='f2ea6707005a4da1af1b431202e96ac5'
To define the environment variable for all new PowerShell sessions of the current user, set the variable in your PowerShell profile. You can get the path to your PowerShell profile by runningecho $PROFILE
.
Alternatively, set the variable for all new PowerShell sessions of the current user using theSetEnvironmentVariable()
method of theSystem.Environment
class. For example:
[Environment]::SetEnvironmentVariable("ZONE_ID","f2ea6707005a4da1af1b431202e96ac5","User")
Running this command will not affect the current session. You will need to close and start a new PowerShell session.
To define aZONE_ID
environment variable for the current Command Prompt session, run the following command:
set ZONE_ID=f2ea6707005a4da1af1b431202e96ac5
To define an environment variable for all future Command Prompt sessions of the current user, run the following command:
setx ZONE_ID f2ea6707005a4da1af1b431202e96ac5
Running this command will not affect the current window. You will need to either run theset
command or close and start a new Command Prompt window.
When referencing an environment variable in a command, add a$
prefix to the variable name (for example,$ZONE_ID
). Make sure that the full string referencing the variable is either unquoted (if it does not contain spaces) or enclosed in double quotes (""
).
For example:
curl"https://api.cloudflare.com/client/v4/zones/$ZONE_ID"\--header"Authorization: Bearer$CLOUDFLARE_API_TOKEN"
When referencing an environment variable in a command, add an$Env:
prefix to the variable name (for example,$Env:ZONE_ID
). Make sure that the full string referencing the variable is either unquoted or enclosed in double quotes (""
).
For example:
Invoke-RestMethod-URI"https://api.cloudflare.com/client/v4/zones/$Env:ZONE_ID"-Method'GET'-Headers@{'Authorization'="Bearer$Env:CLOUDFLARE_API_TOKEN"}
When referencing an environment variable in a command, enclose the variable name in%
characters (for example,%ZONE_ID%
).
For example:
curl "https://api.cloudflare.com/client/v4/zones/%ZONE_ID%" --header "Authorization: Bearer %CLOUDFLARE_API_TOKEN%"
- Resources
- API
- New to Cloudflare?
- Products
- Sponsorships
- Open Source
- Support
- Help Center
- System Status
- Compliance
- GDPR
- Company
- cloudflare.com
- Our team
- Careers
- © 2025 Cloudflare, Inc.
- Privacy Policy
- Terms of Use
- Report Security Issues
- Trademark