How to Run a cURL Command Online (No Terminal Needed)
Paste a cURL command and run it online to see the status, headers, body and timing. Which flags work, the -d Content-Type trap, and how to schedule it.
Almost every API's documentation gives its examples as a curl command. That's fine when you're at a terminal. It's less fine on a Windows laptop without curl set up, on a locked-down work machine, on a phone, or when you just want to see the response laid out properly instead of a wall of JSON in a console.
This guide covers what a cURL command actually contains, how to run one online without installing anything, which flags carry over from a terminal and which don't, and how to read what comes back.
What does a cURL command actually contain?
Strip away the formatting and a cURL command is just a description of one HTTP request. Here's a typical one from an API's docs:
curl -X POST https://api.example.com/v1/orders \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"item": "notebook", "quantity": 2}'Read it piece by piece:
-X POST: the HTTP method. Leave it out and curl uses GET, or POST if there's a body.- The URL: where the request goes, including any query string.
-H: one request header per flag. Here, a bearer token and the body's content type.-d: the request body.- The backslashes: line continuations so the command fits on screen. They aren't part of the request.
That's the whole request. Anything that can read those four parts can send it, with or without a terminal.
How do I run a cURL command online?
The Wrklyst API Monitor has an Import cURL button for exactly this. It's free and needs no account.
- Open the API Monitor and click Import cURL in the top-right corner of the request builder.
- Paste the whole command, backslashes and line breaks included, and click Import.
- Check what was filled in. The method and URL go in the request bar, headers land on the Headers tab, the body on the Body tab, and a bearer token or a
-u user:passwordmoves to the Auth tab, where it's masked. - Click Run check.
The request is sent from Wrklyst's server rather than from your browser, so CORS doesn't get in the way. A browser page normally can't read a response from someone else's API, but a server can. Nothing about a one-off check is stored: not the URL, not your headers, not the response.
Which cURL flags work online?
The importer reads the flags that API docs and browser "Copy as cURL" menus actually produce:
| Flag | What it does | Online |
|---|---|---|
-X, --request | Sets the method | Yes |
-H, --header | Adds a header | Yes |
-d, --data, --data-raw, --data-binary | Sets the body; repeated flags are joined with & | Yes |
--json | Sends a JSON body with JSON Content-Type and Accept headers | Yes |
-u, --user | Basic auth as user:password | Yes, on the Auth tab |
-A, -e, -b | User-Agent, Referer and Cookie headers | Yes |
--url | The URL, when given as a flag | Yes |
-L, -s, -v, -i, --compressed | Output and redirect options | Ignored; redirects are always followed |
-F, -T | Multipart forms and file uploads | Not supported |
-k, --insecure | Skips certificate checks | Ignored; certificates are always verified |
Flags that don't apply are skipped rather than rejected, so a command littered with -s -L --compressed still imports cleanly.
Why does my command behave differently without a Content-Type?
This one catches people out in a terminal too. When you use -d without a Content-Type header, curl sends the body as application/x-www-form-urlencoded. It does that even if the body is JSON.
So curl -d '{"a":1}' https://api.example.com tells the server it's sending form data. A strict JSON API will answer 415 Unsupported Media Type or 400 Bad Request, and the command looks broken when it's really just missing a header.
The importer copies curl's behaviour exactly, so a pasted command fails online the same way it fails in a terminal. To fix it, add -H "Content-Type: application/json", use --json instead of -d, or switch the Body tab to JSON after importing.
What doesn't carry over from a terminal?
A few things can't work from a hosted tool, by design:
- localhost and private networks.
http://localhost:3000,192.168.x.x,10.x.x.xand cloud metadata addresses are refused. The request comes from a public server, and letting strangers point it at internal addresses would be a security hole. Use a terminal for local development, or expose the service with a tunnel. - Self-signed certificates.
-kis ignored and certificates are always verified. An endpoint with an invalid certificate shows up as a failed request, which is what any real client would see. - Files. There's no file system to read from, so
-F [email protected],-Tand-d @body.jsoncan't attach a local file. Paste the body text into the Body tab instead. - Very slow or very large responses. A check has 10 seconds in total, including redirects, and reads up to 512 KB of the response.
How do I read the response?
After Run check you get:
- Status: the HTTP status code and reason, colour-coded.
- Total time and time to first byte. If the first byte is fast but the total is slow, the response is just big. If the first byte itself is slow, the server is slow to start answering.
- Size: how much came back, and whether it was cut off at the read limit.
- Headers and body: the full response headers, and the body pretty-printed when it's JSON.
- Redirects: every hop that was followed. Authorization and Cookie headers are dropped when a redirect goes to a different site, the same as a browser does.
- SSL certificate: for HTTPS URLs, how many days are left before the certificate expires.
Run the same request a second time and the Diff tab compares the two responses. It's handy when you're changing a header or a body field to see what difference it makes.
My pasted command fails. What's usually wrong?
- 401 Unauthorized: the token has expired, or the docs' placeholder (
YOUR_API_KEY) is still in it. Also check the token still starts withBearerplus a space if the API expects that. - 403 Forbidden: the key is valid but isn't allowed to do this. That might be a test key on a live endpoint, a missing scope, or an IP allowlist.
- 405 Method Not Allowed: the method is wrong for that path, often a GET where the docs used POST.
- 415 or 400 on a JSON body: see the Content-Type section above.
- Run check stays greyed out, or you see "private or reserved address": the URL points at localhost or an internal network. See above.
- "The TLS certificate is self-signed and could not be verified": the endpoint uses a certificate no public client will trust. In a terminal,
-khid this from you.
For a deeper walk-through of headers, tokens and checking the response, see How to Test an API Online.
Can I run the same command on a schedule?
Yes. Once it works, click Monitor this. The exact request, headers and token included, runs every 5, 15 or 60 minutes. You get an email when it fails and when it recovers, plus an optional daily or weekly pass/fail report, alerts in Slack, Discord or Teams, and a public status page that shows only the hostname. Saved requests are encrypted before they're stored, because a monitored request usually carries a real credential.
If you're deciding how often to check and what's worth alerting on, the API uptime monitoring guide covers that.
Is it safe to paste a command that contains my API key?
For a one-off check, the key travels over HTTPS to Wrklyst's server, is used for that single request, and isn't stored or logged. That's the same exposure as any hosted API tester. Still, the safest habit with any third-party tool is to use a test-mode or limited-scope key where the API offers one, and to rotate a key you've pasted somewhere you're unsure about.
- #developer-tools
- #guides
- #api
- #curl
Last updated
October 14, 2026