Before you paste a live Slack token
This matters more than anything else on the page, so it is not buried at the bottom.
Your token is sent through api-tester.com's server. A browser cannot read a response
from slack.com directly — the same-origin policy forbids it — so the request,
including the Authorization header carrying your token, is forwarded through our proxy,
which is not bound by CORS. That is the only way a browser-based tester can reach the Slack API at all,
and it means the token transits infrastructure that is not yours and not Slack's.
We do not log or store tokens. But "we don't log it" is a promise, not a guarantee you can verify, so treat it the way you would treat any third-party tool and reduce your exposure instead of relying on trust alone:
- Use a scoped test token. Install a development Slack app into a test workspace with only the scopes the call needs, rather than reaching for a token that can post to every channel.
- Prefer a bot token over a user token. A
xoxb-bot token acts as the app; axoxp-user token acts as you, with your access. - Rotate anything you are unsure about. If you paste a production token here or anywhere else and then have second thoughts, revoke it and issue a new one. Rotation is cheap; a leaked workspace token is not.
Slack changes its API over time — methods, scopes and error strings are all subject to change. This page is an independent guide, not documentation. Check the official Slack Web API documentation for authoritative details.
How the Slack Web API is shaped
The Slack Web API does not look like a typical REST API, and that trips people up on their first call.
Instead of nouns and HTTP verbs — GET /channels/123 — Slack exposes
methods. Every call goes to https://slack.com/api/ followed by a dotted method
name: auth.test, conversations.list, chat.postMessage,
users.info. The method name carries the meaning; the URL path is not a resource identifier.
Arguments can be supplied as query-string parameters or, for methods that accept it, as a JSON request
body. Read-oriented methods are comfortable with a plain GET and query parameters, which is
why the Params tab above is a natural home for things like a channel ID or a pagination cursor. Methods
that write — posting a message, for example — are normally sent as POST. When
you send JSON to Slack, set the content type to application/json; charset=utf-8; Slack is
explicit about wanting the charset, and it is a cheap habit to adopt.
Authentication is a plain bearer token: the header is
Authorization: Bearer xoxb-your-token. Choose Bearer token in the Auth tab
and the tester builds that header for you. If you want to see exactly what is being sent, open the Body
tab and press Copy as cURL — the generated command shows the full header set,
which is often the fastest way to settle an argument about whether a header is actually present. The
HTTP headers reference covers the general rules if you want the
background.
Reading a Slack response: ok is the real status
Here is the single most useful thing to know about testing Slack. An HTTP 200 from Slack does
not mean your call worked. The Web API reports application-level outcomes inside the JSON body
through an ok boolean. A successful call returns "ok": true plus whatever
payload the method produces. A failed call very often returns HTTP 200 as well — with
"ok": false and an error string explaining what went wrong.
A valid auth.test call comes back with ok: true and identity fields describing
the workspace and the identity behind the token. That is the quickest possible confirmation that a token
is alive and which workspace it points at. An invalid one comes back with ok: false and an
error such as invalid_auth, meaning the token is not accepted, or not_authed,
meaning no token reached Slack at all — usually because the Auth tab was left on "No
authentication" or the token field was empty.
The other error you will meet constantly is missing_scope. This one is good news in
disguise: the token authenticated fine, so your credentials are correct, but the Slack app was never
granted the OAuth scope this particular method requires. The fix is always the same shape — add
the scope to the app, reinstall it into the workspace so that a fresh token is minted, then retry with
the new token. Re-using the old token after adding a scope is a classic wasted afternoon, since
scopes are baked into the token at install time.
Because the interesting part of a Slack response is nested JSON, the syntax highlighting above does real work. If you want to pull a response apart further, paste it into the JSON formatter.
Creating a token to test with
Tokens come from a Slack app, not from your account settings. In broad strokes: create an app at
Slack's developer site, open its OAuth and permissions configuration, add the scopes the methods you
care about require, then install the app into a workspace. Installation is what produces the token
— a bot token beginning xoxb- that represents the app itself, and optionally a user
token beginning xoxp- that acts on behalf of the installing user.
For testing, install into a workspace you do not mind experimenting in. A scratch workspace costs
nothing to create and turns "what happens if I post to the wrong channel" from an incident into a
shrug. Grant the narrowest scope set that lets your call succeed; if you find yourself adding scopes one
at a time in response to missing_scope errors, that is the process working correctly.
When Slack pushes back: 401, 403 and 429
Even though Slack prefers the ok envelope, real HTTP status codes still appear, and they
mean roughly what they mean everywhere else.
A 401 Unauthorized is about identity: the credential is missing,
malformed or rejected. In Slack's world you are more likely to see this expressed as
ok: false with invalid_auth, but the diagnosis is identical — check that
the Authorization header is present, that the scheme is Bearer, and that you
have not pasted a token with a stray space or newline attached. Copy-paste whitespace is a genuinely
common cause and is invisible in most editors.
A 403 Forbidden is about permission rather than identity: Slack knows who you are and is declining anyway. Scope problems are the usual root cause, as are workspace or enterprise policies that restrict what apps may do.
A 429 Too Many Requests means you are calling faster than the
method's rate tier allows. Slack applies rate limits per method and per workspace, and different methods
sit in different tiers — a bulk listing method is treated far more conservatively than a trivial
one. When you are limited, Slack sends a Retry-After header telling you how many seconds to
wait. Respect it rather than retrying immediately; tight retry loops are the fastest route to a longer
cool-down. Because rate tiers change, this page deliberately quotes no specific numbers — read the
value Slack actually sends back, which the response header panel above will show you.
Beyond the Web API
Not everything Slack does is a Web API method. Incoming webhooks give you a URL that accepts a JSON payload and posts it into a channel, with the destination baked into the URL rather than chosen per request. Slack also calls you: slash commands, interactive components and the Events API all deliver HTTP requests to an endpoint you host. Debugging that inbound direction is a different job, and the webhook tester is the page for it.
If you are working with Slack's OAuth flow and end up holding a token-shaped string you cannot identify, the JWT decoder will tell you whether it is a JSON Web Token with a readable payload or an opaque provider-issued string like Slack's own tokens. For everything else — your own service, a partner API, a staging environment — the general REST API tester is the same console without Slack-specific defaults.
Test another provider's API
GitHub API Tester
Test api.github.com endpoints and inspect rate-limit headers.
Discord API Tester
Try Discord bot endpoints and fire webhook payloads.
Telegram Bot API Tester
Call getMe, getUpdates and sendMessage on your bot.
Google Maps API Key Tester
Check whether a Maps API key is valid and unrestricted.
Graph API Tester
Send requests to the Facebook Graph API and read its errors.
General API Tester
The same console with no provider-specific defaults, for any REST endpoint.
Frequently asked questions
How do I check whether a Slack token is still valid?
Call auth.test with the token as a Bearer credential. ok: true with identity
fields means it works; ok: false with invalid_auth means it does not.
Why did I get not_authed instead of invalid_auth?
not_authed means Slack saw no credential at all, so check that the Auth tab is set to
Bearer token and the field is filled in. invalid_auth means a credential arrived and was
rejected.
Can I post a message to a channel from here?
Yes, if your token carries the necessary scope. Switch the method to POST, point the URL
at the message-posting method, put your JSON in the Body tab and add
Content-Type: application/json; charset=utf-8 in the Headers tab. Test in a workspace and
channel you do not mind writing to.
Does the token appear in my browser history?
No. Bearer tokens are sent as a header, not in the URL, and the request history stored in your browser records only the method and URL. Tokens are never written to local storage.
Is this an official Slack tool?
No. api-tester.com is an independent third-party tool and is not affiliated with, endorsed by or sponsored by Slack. It is a general HTTP client with Slack-friendly defaults, and this page is a third-party guide rather than documentation.