Shopify developer tool

Get your app’s
access token.

Connect your own Shopify app, approve its permissions, and get your Admin API access token.

First time? Configure your Shopify app
  1. Create your app in the Shopify Dev Dashboard.
  2. Select the API permissions your app needs.
  3. Add the App URL and Callback URL below.
  4. Release your app version.
  5. Configure custom distribution where required, then install the app using Shopify’s generated install link.
  6. Copy your Client ID and Client Secret from Settings.
App URL
https://shopify-token-tool-kohl.vercel.app
Callback URL
https://shopify-token-tool-kohl.vercel.app/api/auth/callback

Connect your app

Use credentials from your own Shopify app.

Continue only if you own this app or have permission to manage it. Your credentials will be sent to this service’s backend to complete Shopify authorization.

Token availability and expiry depend on your app and Shopify’s authentication rules.

Before you connect

Everything you need to know.

Learn how to configure your own Shopify app, get its access token, and use that token responsibly.

Only three fields on this website

Store URL, Client ID and Client Secret. Your Shopify app must still be configured and installed first. This tool handles the OAuth exchange; it does not bypass Shopify permissions.

Why use this tool?Benefits, supported workflow, permissions and troubleshooting.

Shopify Admin API Token Generator — Custom App OAuth Tool

Get your own Shopify custom app's Admin API access token without building an OAuth backend from scratch.

Enter your store domain, Client ID, and Client Secret, complete Shopify authorization, and copy your token. Review the exact granted permissions on the result page.

Open Shopify Token Generator →

Setup guide · FAQs by category · API usage examples · Security & privacy

Did this tool save you an OAuth setup? Give the repository a ⭐ using GitHub's Star button. It helps other Shopify developers discover the project. Starring is optional; it never changes access to the tool.

Built with Next.js by Shaykh Abdul Muhaiman.

Independent developer tool. Not affiliated with or endorsed by Shopify. The hosted tool is under active development. This repository currently contains its user documentation; the application source has not yet been published here.

Find what you need

Common integration use cases

An authorized Admin API token can be used by your own backend for product tools, catalog synchronization, inventory integrations, reporting, and custom automations, subject to its granted permissions.

For example, an auto-restock application needs its own business logic, inventory permissions, scheduling, and token lifecycle handling. This website supplies a token; it does not build or operate the restock integration.

See a read-only GraphQL token test and permissions query →

Why use this Shopify token generator?

You have created a custom app and have its Client ID and Client Secret—but still need an Admin API access token.

For an OAuth-based custom integration, getting that token otherwise means handling authorization redirects, callback validation, and a server-side code exchange. This tool handles those steps through a guided browser flow.

You configure your Shopify app. The website handles the OAuth exchange.

Without a hosted helperWith this tool
Write authorization and callback codeEnter three credential fields
Host a callback and token-exchange endpointUse the supplied callback URL
Exchange the authorization code manually or through your own backendComplete Shopify authorization in your browser
Inspect raw token responsesCopy the token from a dedicated result screen
Query the installation's permissionsReview granted scopes as a list

Using this website is optional. Shopify's official libraries, your own backend, and tools such as Postman are valid alternatives.

Who is it for?

  • Shopify developers testing custom apps and Admin API integrations.
  • Freelancers and agencies working on stores they are authorized to manage.
  • Store owners working with a developer who need help completing the token exchange.

If your application already manages Shopify authentication, you may not need this tool.

Quick start

1. Configure and install your app

Create your app in the Shopify Dev Dashboard, select the required API scopes, and configure these URLs:

Shopify settingValue
App URLhttps://shopify-token-tool-kohl.vercel.app
Allowed redirection URLhttps://shopify-token-tool-kohl.vercel.app/api/auth/callback

Use standalone app behavior for this flow. Release your configuration, configure distribution where required, and install the app using Shopify's generated install link where applicable.

Follow the complete setup guide →

2. Enter three values

Open the hosted token generator.

FieldWhat to enter
Store URLYour permanent domain, such as your-store.myshopify.com
Client IDClient ID from your app's settings
Client SecretClient Secret from the same app

Only use credentials you own or are explicitly authorized to manage.

3. Connect and copy

Click Connect Shopify, complete any Shopify authorization prompt, and return to the result screen.

Use Copy Token and save it securely. The token belongs to your app's installation on that store, not to a shared app owned by this tool.

What the result screen shows

  • The connected store.
  • A copyable Admin API access token.
  • Granted access scopes, each shown as a separate list item.
  • Token expiry information when returned by Shopify.
  • A refresh token when returned by Shopify.

The tool queries currentAppInstallation.accessScopes for the installation's granted permissions. If that lookup is unavailable, it shows the token exchange's scope list with a fallback notice.

A matching write scope includes read access: for example, write_products grants product read and write access.

Current scope behavior

The current authorization request includes read_products. Shopify-managed installation can grant scopes from the app's released and approved configuration.

The result list reports what Shopify actually granted. It does not grant additional permissions, guarantee every configured scope is approved, or bypass protected-data requirements.

Broader app configurations still need testing before a general public launch.

Does the token expire after 24 hours?

This tool uses the OAuth authorization-code flow, not the client-credentials grant.

Token lifetime depends on the app and Shopify's authentication rules. The result shows the expiry information Shopify returns. There is no universal promise of a permanent token.

A non-expiring offline token has no scheduled time expiry, but uninstall, revocation, and relevant platform changes can invalidate it. An expiring token requires renewal in the application that uses it.

Read token and permissions FAQs →

Security protections explained

These controls are implemented in the development code. They reduce specific risks; they are not a claim that the hosted service is risk-free or independently certified.

ProtectionWhat it does
HTTPS endpointEncrypts browser-to-service transport when a valid HTTPS connection is used
POST form submissionKeeps entered credentials out of the form submission URL
AES-256-GCM session encryptionProtects temporary OAuth session contents against reading and tampering without the server key
HTTP-only cookiePrevents ordinary page JavaScript from reading the OAuth cookie
Secure production cookieRestricts that cookie to HTTPS connections
SameSite=Lax and Origin checkAdd protections around cross-site request handling
Browser-bound OAuth stateLinks the callback to the browser session that started authorization
Shopify HMAC checkVerifies the callback signature against the entered app secret
Store and timestamp checksReject mismatched stores and callbacks outside the accepted time window
Session cleanup and no-store headersClear the OAuth cookie and tell compliant caches not to retain the response
Result-page Content Security PolicyRestricts scripts, resources, and framing on the token result page

The Client Secret is still processed by the hosted backend. Encryption does not make an untrusted operator trustworthy. Never submit secrets to a service you do not trust.

Trust and credential handling

Using a hosted helper means trusting its operator with your Client Secret during authorization. HTTPS protects transport; it does not remove that trust requirement.

The implementation shared during development uses a temporary encrypted, HTTP-only OAuth cookie, verifies callback state and Shopify's signature, and clears that cookie while processing the callback.

It does not intentionally save result tokens in a database or browser local storage. Hosting-provider infrastructure and logging settings are separate considerations. The service has not undergone an independent security audit.

Never paste Admin API tokens into theme code, public JavaScript, GitHub issues, or screenshots.

Read security and privacy details →

Troubleshooting

MessageNext step
Distribution method requiredConfigure distribution if required for this app's organization.
Installation link invalidUse Shopify's current generated install link for the intended store.
Callback returns 404Check that the registered callback matches the deployed route exactly.
Session missing or expiredStart again from the homepage in the same browser.
Signature verification failedVerify the Client Secret and begin a fresh connection.
Token exchange rejectedCheck app credentials and restart authorization.
Missing permissionsCheck the released scopes, store approval, and Shopify access requirements.

Do not refresh an old OAuth callback to repeat the exchange. Authorization codes are temporary and single-use.

Project status

Available in the hosted toolRemaining work
Three-field form and OAuth exchangePublish the reviewed application source
Token copy screenAbuse protection and security review
Granted scopes listBroader app and permissions compatibility testing
Expiry details when returnedExpanded failure and browser compatibility testing

This is a token-acquisition helper. It does not run your integration, perform automatic inventory updates, or manage token renewal for your application's backend.

Official Shopify resources

Support the project

If this Shopify custom app token generator helped you:

  1. Star this repository to bookmark it and show support.
  2. Share the repository link with developers who need this workflow.
  3. Report a reproducible issue with all credentials redacted.
  4. Suggest a missing FAQ, clearer setup step, or compatibility test.

Stars are voluntary. No token access, support entitlement, or feature is conditional on starring. This project does not buy stars or claim unverified adoption numbers.

Documentation improvements are welcome through pull requests. See contribution guidance.

Support

Found a problem? Open an issue.

Include reproduction steps and a redacted error message. Never include a Client Secret, access token, refresh token, authorization code, or complete callback URL.

Created by Shaykh Abdul Muhaiman · Shopify development and custom integrations.

Complete Shopify setupFollow the app creation and installation steps.

Shopify custom app setup

Open the tool · Back to README

Before you begin

You need permission to develop and install the app on the target store. This is a standalone OAuth flow for your own custom app. It does not create an app or bypass Shopify approvals.

1. Create your Shopify app

Open the Shopify Dev Dashboard, choose the correct organization, and create an app. Give it a name that identifies your integration.

2. Select API permissions

Select only the access your integration needs. For a product-read test, use read_products. Product writes require appropriate write permission.

A matching write scope includes read access. Some scopes also require additional Shopify approval or protected customer data eligibility.

3. Configure URLs

App URL:

https://shopify-token-tool-kohl.vercel.app

Allowed redirection URL:

https://shopify-token-tool-kohl.vercel.app/api/auth/callback

Disable embedding in Shopify admin for this standalone test. Release the app version after saving the configuration.

4. Configure distribution and install

For a Partner app requiring distribution selection, open the app's distribution settings. A custom single-store integration normally uses custom distribution.

Distribution selection cannot be changed later. Choose based on the intended app audience; do not choose custom distribution for an app you intend to distribute publicly.

Enter the intended store's permanent myshopify.com domain, generate the installation link, and open the complete link in your browser. Install the app on the correct store.

Store-organization apps have a different installation path and may not show a Distribution card. Follow Shopify's instructions for that organization. Do not assume all custom app types support identical authentication options.

5. Obtain credentials

Copy the Client ID and Client Secret from the same app's settings.

Do not put these in a public repository or screenshots. Do not share a Client Secret through issue reports.

6. Use the website

Enter:

  1. The store's permanent myshopify.com domain.
  2. Your app's Client ID.
  3. Your app's Client Secret.

Click Connect Shopify. Complete Shopify authorization if prompted. Keep the same browser session throughout the flow.

7. Save the result

Copy the access token. Review the granted scopes and expiry information. If Shopify returns a refresh token, keep that private too.

Save credentials in your own trusted backend's secret configuration. Do not expose an Admin API token in storefront code.

The result is not a persistent token vault. Save it before leaving. Refreshing the callback does not generate a new result.

Later: move to your own app backend

You can update the App URL and allowed redirect URLs when your actual application is ready, then release the configuration.

Your backend must handle future OAuth callbacks and any required token renewal. A URL change alone is not a token revocation operation, but it is not a guarantee against other causes of token invalidation.

Current limitation

The hosted tool currently includes read_products in its authorization request. Shopify-managed installation can grant released and approved app configuration scopes. Always inspect the result; do not assume all configured permissions have been granted.

See Shopify's standalone authentication guide and distribution guide.

Frequently asked questionsAnswers about tokens, expiry, permissions, privacy and errors.

Shopify Admin API Token Generator FAQ

Open Token Generator · Setup guide · API examples · Security · README

Answers about Shopify custom apps, OAuth tokens, scopes, privacy, installation and API testing.

Getting started and choosing a workflow

Why use this website?

It handles the authorization redirect, callback checks, and code exchange so you do not need to build and host a backend just to acquire a token.

Is using it necessary?

No. You can use your own backend, Shopify's libraries, or a manual OAuth workflow. This tool is an optional convenience.

Is it a Shopify product?

No. It is an independent project without Shopify endorsement.

What do I enter?

Your store's permanent myshopify.com domain, your own app's Client ID, and its Client Secret.

Is that all the setup?

Those are the three website fields. You must still create and configure the Shopify app, set the supplied URLs, release permissions, and install the app appropriately.

Do I need to code or deploy anything?

Not to use the hosted website. Your actual integration may still need its own backend.

Does the token belong to my app?

Yes. The exchange uses your entered app credentials and the authorized store installation.

Will this create a custom app for me?

No. App creation, distribution and Shopify permission approvals remain in Shopify.

Do I need a Shopify account or store access?

Yes. You need an account authorized to manage and install the app. App credentials are not a replacement for merchant authorization.

Does this need my Shopify account password?

The tool asks for app credentials, not your Shopify password. Sign in and approve permissions on Shopify's own pages.

Token lifetime and authentication

Is every token permanent?

No. Lifetime depends on app eligibility and Shopify's authentication rules. The website cannot override those rules.

Is this the 24-hour client-credentials flow?

No. The website uses the OAuth authorization-code flow. Other grants have different lifetime rules.

What does “no expiry returned” mean?

Shopify did not provide an expiry field in that exchange response. It is not a promise that the token can never become invalid.

Can a non-expiring token stop working?

Yes. Uninstall, revocation and applicable Shopify security or policy changes can invalidate access.

Does this service automatically renew tokens?

No. Your application must manage renewal when required. Copying a token once does not establish automatic renewal in another application.

Are Client ID, Client Secret and access token the same?

No. The Client ID identifies an app, the Client Secret authenticates server-side exchanges, and the access token authorizes API requests for the granted store installation.

Is this an Admin API or Storefront API token?

The helper obtains an Admin API token. Storefront API access uses a different authentication model.

Can I use the same token on another store?

Do not assume so. The token is tied to the authorized app installation and store. Obtain a token for each authorized store separately.

Will reinstalling preserve my token?

Do not rely on a previous token. Uninstall revokes installation access; complete authorization again and update your backend.

Should I regenerate a token every time I open the page?

No. Save credentials securely and follow the appropriate lifecycle. Reauthorization can affect existing tokens or refresh credentials depending on the flow.

Permissions and scope lists

Why is read_products absent when write_products is present?

The matching write scope includes read access. Shopify may omit the separate read scope from its exchange response.

Where does the permission list come from?

The tool queries the current installation's granted access scopes. If unavailable, it shows the token exchange's scope list with a notice.

Does the list reproduce my dashboard configuration?

It shows granted permissions, not every configured but unapproved or optional permission. Those are different things.

Can the service grant more scopes?

No. Shopify is the authority for granted permissions. Protected-data requirements also remain in effect.

Will this work with every possible scope?

No universal compatibility claim is made. Shopify controls approval and the current request includes read_products. Other configurations need testing; protected data can require additional approval.

Does it collect product, customer or order records?

The shown callback implementation exchanges credentials and queries installation scope handles; it does not query those business records. A granted token can still authorize sensitive access, so limit scopes appropriately.

How do I add inventory or orders permissions?

Configure required scopes in Shopify, release changes and obtain store approval. Reconnect as appropriate and verify granted scopes before calling the relevant API.

Are configured, optional and granted scopes identical?

No. Configuration declares requested access, optional scopes can require separate approval, and granted scopes reflect actual installation access.

URLs, credentials and privacy

Can I change the app URLs later?

Yes. Update the app configuration and release it. Future OAuth requests must use a valid callback supported by your new backend.

Is the Client Secret sent to this service?

Yes. The backend needs it for the code exchange. Use the service only if you trust its operator. HTTPS does not remove that trust requirement.

Is the source available for self-hosting?

Not yet in this repository. This repository currently documents the hosted tool. Do not assume the deployed implementation has been independently audited.

Can I put the token in Liquid or public JavaScript?

No. An Admin API token belongs in trusted server-side code or secret configuration.

What if I accidentally share a credential?

Treat it as exposed. Follow Shopify's revocation or credential-rotation process and update affected integrations. Deleting a screenshot alone does not revoke a credential.

Can you guarantee the service is fully secure?

No responsible service can promise zero risk. The implementation uses encryption and callback verification, but infrastructure review, abuse prevention and independent testing remain separate requirements.

Why is an encrypted cookie used?

It carries a short-lived OAuth session across the redirect without placing the Client Secret in the redirect URL. The encryption key must stay private. Cookie flags do not protect against a compromised server.

Can browser extensions or screen sharing expose my token?

Potentially. The token is visible in the result page and can be copied to the clipboard. Use a trusted browser and avoid unredacted screenshots and recordings.

Does no-store prevent retention everywhere?

No. It instructs compliant caches not to store the response. It does not control screenshots, extensions, clipboard history, hosting telemetry or administrator logging.

Can I self-host this repository?

Not yet. Application source is not published here. Documentation alone is not a runnable Next.js application.

Can I use localhost?

Local rendering can be tested, but the registered callback and cookie session must match the deployed flow. Use the live HTTPS website for this hosted helper's complete OAuth test.

Installation errors and support

Why does installation say the link is invalid?

Use the current complete install link generated in Shopify's custom distribution settings for the intended store. Check that the domain and app match.

Why did the callback expire?

The helper's temporary OAuth session lasts ten minutes. Start from the homepage again in the same browser. An old authorization code cannot be reused.

Where do I ask for support?

Use repository Issues for redacted bug reports. Never post credentials, token values, complete OAuth callback URLs or sensitive store data.

Why does read_products appear in the code?

It is the current authorization request scope. Managed installation can affect grants through released and approved configuration. Inspect the result rather than assuming permissions from the request.

Why did copying fail?

Clipboard permissions differ by browser. Select the token and use your operating system's copy shortcut. Never paste it into a public issue.

Does successful OAuth prove every API operation works?

No. It proves the exchange returned a token. Test an authorized read-only request, inspect GraphQL errors, and verify the operation's required scopes.

Does the helper bypass API rate limits?

No. Shopify applies API limits independently. Hosted-service abuse protection remains on the roadmap.

Where do I report a security vulnerability?

Use private reporting if enabled, or ask for a private contact route without exploit details. Follow SECURITY.md and do not post credentials publicly.

How can I support development?

If the tool helped you, star the repository, share the public link or contribute a documentation improvement. Stars are optional and never unlock access.

Security and privacyUnderstand how credentials are handled and what to protect.

Security and credential handling

Hosted-service trust

The hosted website receives the Client Secret you submit. Use it only if you trust the operator and have permission to manage the app.

This repository currently contains documentation, not the deployed application source. Descriptions below reflect the implementation shared during development; they are not an independent audit of the deployed service.

Current implementation design

  • Credentials are submitted by POST.
  • OAuth session credentials are temporarily encrypted with AES-256-GCM in an HTTP-only cookie.
  • The cookie lasts ten minutes, uses SameSite=Lax, and is Secure in production.
  • The callback validates the browser-bound state, store, timestamp and Shopify HMAC.
  • The callback clears the session cookie and uses no-store response headers.
  • Tokens are not intentionally persisted to a database or browser local storage by application code.
  • A result-page action copies the token to the user's clipboard.

Encrypted session data is still temporarily present in the browser. Clipboard contents and user-installed browser extensions are outside the application's control. Hosting-provider logging, backups and telemetry require separate configuration and review.

Never publish

  • Client Secrets.
  • Access or refresh tokens.
  • OAuth authorization codes or complete callback URLs.
  • OAUTH_SESSION_KEY.
  • Real .env files.
  • Screenshots containing unredacted credentials.

Do not enable session recording, request-body logging or analytics that capture credential and token pages.

If credentials are exposed

Follow Shopify's documented token revocation or app credential rotation process. Update affected integrations and confirm the previous credential no longer works. Deleting an issue or screenshot does not invalidate a leaked credential.

Reporting a vulnerability

Do not disclose an exploitable vulnerability or secret through a public issue. Use GitHub's private vulnerability reporting option if the repository provides it. If unavailable, open a minimal issue asking for a private contact route without revealing the vulnerability.

Never send real credentials as proof.

Status

The hosted tool is under active development. Broader compatibility testing, abuse controls and independent security review remain work before a general public launch. No security certification or warranty is claimed.

Test your access tokenRead-only API examples and guidance for your actual app.

Test a Shopify Admin API token

Open Token Generator · Setup · FAQ · README

Successful OAuth means Shopify returned a token. Verify a read-only API request before relying on it in an integration. This guide does not require a product write or inventory change.

Postman request

Create a POST request to your own store:

https://YOUR-STORE.myshopify.com/admin/api/2026-10/graphql.json

Headers:

HeaderValue
Content-Typeapplication/json
X-Shopify-Access-TokenYour private Admin API access token

Keep the token in a private local secret variable. Do not export it, share a workspace containing it, or include it in screenshots.

Use a raw JSON body:

{
  "query": "query TokenPermissions { currentAppInstallation { accessScopes { handle } } }"
}

The response should contain the granted scope handles under:

data.currentAppInstallation.accessScopes

This query checks the token's current installation permissions without modifying store records.

Optional product-read check

Only if the installation has product read access, send:

{
  "query": "query ProductReadTest { products(first: 1) { nodes { id title } } }"
}

A valid token can still receive an access-denied error if the requested operation needs scopes the app does not have.

Interpret the response

  • HTTP success alone is not enough: inspect GraphQL's top-level errors and operation-specific errors.
  • Check the store domain if Shopify rejects the token.
  • Review granted scopes if a resource is denied.
  • Empty product results can mean the store has no accessible products; they do not necessarily mean authentication failed.
  • Respect API throttling and inspect Shopify error details.
  • If you change permissions, release and obtain any needed merchant approval before assuming the token's access changed.

Put the token in your actual app

Store it in trusted backend secret configuration. Never hardcode it into public JavaScript, Shopify theme assets, a public repository or client-exposed environment variables.

Implement renewal when your token type requires it. The helper does not update your other applications automatically.

An inventory or auto-restock app also needs its own validated business logic, inventory permissions, scheduler, error recovery and uninstall handling. Acquiring a token is only the authentication step.

Official reference

Shopify currentAppInstallation query

Manage access scopes