Admin API / Security

Admin API IP allowlist
Make your app's tokens unusable from anywhere except your own servers

Register your server IP addresses (or CIDR ranges) in the Dev Dashboard and enable the restriction, and Shopify will reject with a 403 any GraphQL Admin API / REST Admin API request made with your app's token from anywhere else.

On this page
  1. What's changing (in 30 seconds)
  2. How it works: which requests pass and which get blocked
  3. Covered APIs / What the post doesn't cover
  4. Before vs. after
  5. Who should use it (static IPs vs. serverless)
  6. Setup (3 steps)
  7. 5 key points for developers
  8. 3 practical use cases
  9. One-line summary for proposals

1What's changing

Until now, anyone holding an app's Admin API access token could call the API from anywhere .
Now, you can restrict the token to calls from registered IP addresses only .

Before: a token alone was enough

The API accepted the token no matter where it was used from.

After: token + source IP are both checked

Requests from outside the allowlist fail with a 403. Even if a token leaks, it can't be used from outside the allowed IPs.

2How it works: which requests pass and which get blocked

App server IP on the allowlist Request with token Anywhere else IP not on the allowlist Even with the same token... Checked by Shopify Is the source IP within a registered address / CIDR range? (when the restriction is enabled) In range → processed GraphQL / REST Admin API 403 Out of range → fails Rejected with a 403 status
CIDR rangeWhat it is: 203.0.113.0/24 A notation that expresses a contiguous range of addresses as "IP address + prefix length," as in the example. It lets you allow access per network rather than one server at a time.

3APIs covered / Not stated in the article

What the restriction covers (stated in the article)

Covered

GraphQL Admin API

Requests made with the app's token are checked against the allowlist.

Covered

REST Admin API

Likewise, calls from outside the allowlist fail with a 403.

Not stated in the article

Not stated

Other APIs

The article doesn't say whether it applies to APIs other than the Admin API, such as the Storefront API.

Not stated

Entry limits / IPv6

The article doesn't mention a limit on how many addresses you can add or whether IPv6 is supported.

Not stated

Pricing / plan requirements

The article doesn't mention which plans it's available on or whether there are extra fees.

Full details are left to the guide linked in the article, "Restrict API access with an IP allowlist." Read it before you roll this out.

4Before vs. after

ItemNo allowlistAllowlist enabled
Where the token works From anywhere Only from registered IPs/CIDRs
Requests from outside the range Processed as usual 403 error
Impact if a token leaks A leaked token works as-is Unusable from outside allowed IPs
Where to configure — Dev Dashboard > your app's Settings > IP allowlist
Pre-rollout testing — Available Test your entries against recent traffic

5Who should use it (static IPs vs. serverless)

Apps calling Shopify from static IPs

Shopify strongly recommends using it. If you call the API from servers with fixed IPs or through a NAT gateway, you can adopt it right away.

Serverless (dynamic IP) apps

Support for apps hosted in serverless environments with dynamic IPs is "coming soon". For now, consider them out of scope.

No timeline or approach has been given for serverless support. If you enable enforcement in an environment where the source IP changes, even legitimate requests will fail with 403, so be careful.

6Setup steps (3 steps)

1

Enter addresses

Enter your server addresses or CIDR ranges in the IP allowlist on your app's Settings page in the Dev Dashboard.

2

Test against recent traffic

Check the ranges you entered against actual recent traffic.

3

Enable enforcement

Once enforcement is turned on, requests from outside the allowed ranges fail with 403.

The flow is "enter → test → enforce", so you don't have to cut off production traffic all at once. If testing turns up a source that's missing, add it before enabling enforcement.

75 key points for engineers

1. Defense in depth against token leaks

"Source IP (where you are)" is added on top of "token (what you have)". Even if a token leaks, it can't be used to call the Admin API from outside the allowlist.

403

2. Failures return 403

Requests from outside the allowed ranges get a 403. Review your logs and alerts so your app's error handling and monitoring can tell these apart from "insufficient permissions" errors.

3. Always test before enforcing

A test feature checks your entries against recent traffic. Use it to find easy-to-miss sources such as batch jobs, workers, and staging environments.

4. Serverless support is coming soon

Serverless environments with dynamic IPs aren't supported yet. For those setups, you'll need to either move to an architecture with a fixed source IP or wait for support.

GQL REST

5. Scoped per app, covering both GraphQL and REST

It's configured on each app's Settings page and applies to both the GraphQL Admin API and the REST Admin API when they're called with that app's tokens.Always add "update the allowlist" to your infrastructure change procedures (server migrations, NAT changes, new IPs). If you forget, every production API call will fail with 403.

83 practical use cases

USE CASE 1

Hardening custom apps and in-house integration platforms

Challenge
Tokens for in-house apps that connect Shopify to core systems or a WMS are stored in multiple places, such as config files and CI secrets, so a leak carries significant risk.
Solution
Add the integration servers' fixed IPs to the allowlist, test against recent traffic, then enable enforcement.
Impact
Even if a token leaks, the Admin API can't be called from outside your organization, which makes security reviews and audits easier to explain.
Technical notes
Requests from outside the allowed ranges get a 403. If staging or developers' local environments were using production tokens, those calls stop working at that point.
App Worker NAT Static IP
USE CASE 2

Auditing egress IPs and rolling out restrictions at a public app developer

Challenge
Shopify is called from multiple servers and workers, and there's no full picture of which IPs API requests come from.
Approach
Organize source IPs into CIDR ranges and register them, then use the test feature to compare against recent traffic and close any gaps before enabling.
Impact
API egress becomes clearly defined, and it doubles as material for explaining security to merchants.
Technical notes
Shopify strongly recommends this for static IP setups. Support for serverless components with dynamic IPs is coming soon, so decide whether to adopt it per setup.
USE CASE 3

Building it into infrastructure migration and replacement runbooks

Challenge
When a cloud migration or server replacement changes the source IP, apps with the allowlist enabled start failing with 403 right after the migration.
Approach
Add "Add new IPs to the allowlist → test → cut over → remove old IPs" to the migration checklist.
Impact
You can migrate without API outages while keeping security intact.
Technical notes
Registering both old and new IPs during the cutover period is the safe approach. Adding a monitoring alert for spikes in 403s helps you catch issues early.

9One-line summary for proposals

"A new feature that restricts your app's Admin API tokens to your own servers' IPs.
Register in the Dev Dashboard → test against recent traffic → enable: three steps, and anything outside the range gets a 403.
Apps with static IPs should adopt it right away. Serverless support is coming soon."