Skip to content
Console →
Website →
Asking an AI? Paste this URL https://keelson.dev/llms.txt

Verify a deployment

A deployed app is behind authentication, so a normal curl request returns 401. With keelson app curl and keelson preview, you can fetch paths from the app while authenticated as yourself. AI agents also use this route to verify that a deployment succeeded.

Send a single authenticated request.

Terminal window
keelson app curl / # GET /
keelson app curl -i /api/items # Also show headers
keelson app curl /api/items --method POST \
--data '{"name":"example"}' \
--header 'Content-Type: application/json'
keelson app curl /upload --form title=example --form photo=@sample.png
  • The response body goes to standard output, while the method, URL, and status go to standard error. With -i, headers also go to standard error, so you can redirect only the body to a file
  • The default method is GET. If you explicitly select POST, PUT, PATCH, or DELETE with --method, Keelson uses a write-enabled credential that is valid for 5 minutes
  • --data can only be used with a write method. Use @filename to read the data from a file
  • With --form, the method becomes POST, and the CLI sets the multipart Content-Type (you cannot override it with --header)
  • The path must start with /. Absolute URLs and paths starting with // are rejected. Redirects are not followed
  • You can also check /__keelson/media/... and /__keelson/assets/... with GET or HEAD
  • To target an app outside the current directory, use --app <slug>

Check the Content-Type as well as the status. If the SPA fallback handles a request for a nonexistent JavaScript file, the response can be 200 with a text/html content type.

Issue a credential directly when you want to use another HTTP client, make multiple requests, or choose the credential lifetime.

Terminal window
keelson preview # GET / HEAD only; 30 minutes by default
keelson preview --ttl 5m
keelson preview --allow-writes # Also allows POST / PUT / PATCH / DELETE; 5 minutes by default, 10 minutes maximum
keelson preview --json # Credential, URL, and expiration time as JSON

Use the token and app_url fields from --json with another HTTP client. Pass the credential as a Bearer token:

Terminal window
curl --header 'Authorization: Bearer <token>' '<app_url>/api/items'

The credential is displayed once on standard output, and Keelson does not save it. Do not include it in logs or reports. Each user can have one credential issued by keelson preview per app. Issuing another replaces and revokes the previous one, even if it has not expired. keelson app curl uses a separate internal credential and does not revoke the credential issued by preview.

If you did not create the deployment currently serving traffic, the command shows an approval URL to open in a browser. After approval, rerun the same command with the displayed --confirmation <id> option.

What this check does and does not tell you

Section titled “What this check does and does not tell you”
  • It only tells you which HTTP response the app returned to an authenticated request. It does not verify that the app’s business logic is correct
  • Static sites have no write target, so write methods are rejected
  • If the app implements side effects in a GET handler, Keelson cannot prevent those side effects. Do not use a preview check on such a path