/ docsYour first test in 5 minutesllms.txt
On this page
1 · Redeem a code2 · Register your app3 · Optional: Discovery4 · Write & compile5 · Run & read the evidence6 · Put it in CI

Your first test in 5 minutes

From an empty workspace to a run with evidence. Every step below names what it costs — nothing in NthCase spends without telling you first.

1 · Redeem a code

Nothing runs without a plan, and plans and credits can't be bought yet. A redemption code gives your workspace a month of a plan — Starter, Pro or Team — and the plan's credits come with it: a weekly budget (Starter 60, Pro 250 and Team 800 credits) that resets every seven days and never rolls over. Redeem yours on the Credits page. A code for the plan you are on adds its month to your current period, a code for a plan with more moves you up to it, and a code never moves you to a plan with less. When the month is over the plan ends: its weekly budget stops, and the rest of the last one goes with it. Some codes carry credits of their own too, and those never expire. Starter costs $29/mo, Pro $99/mo and Team $349/mo once on sale.

2 · Register your app

Upload an .ipa / .apk, give a package id, or point at a web URL — and attest that the app is yours. The attestation is not a checkbox for show: every run, discovery and scope generation is blocked on an un-attested app, before any billing happens. Plans hold 2 / 5 / 10 verified apps; the limit applies when you ADD an app — a plan change never touches the apps you already registered. An app registered with only a package id runs only on one of your own devices where it is already installed — the platform's devices never have it.

NthCase Demo is registered from the Apps screen as an Android app with its build, the box that says it is yours is ticked, and the app joins the list. 0:15

3 · Optional: let Discovery map it

Point Discovery at the app and it crawls screen by screen, builds the element map future compiles are grounded in, and proposes scenarios for review. You choose a depth (Quick · Standard · Thorough) and a model, and the exact price is quoted before the crawl starts — you pay the quote, not the meter.

4 · Write a scenario, compile it

A scenario is ordered natural-language steps — no selectors, no ids, and no requirement to write them in English. Compiling produces the deterministic plan that runs replay. With a map from Discovery, the compile takes your app's real selectors from it; without one, it works from the steps alone. Compiling is a spend and floors at 1 credit.

text
1. Open the storefront and dismiss the cookie banner
2. Add the first product to the basket
3. Go to checkout and fill the delivery form
4. Pay with the declined test card
5. Assert the decline message names the reason

5 · Run it, read the evidence

Trigger the run on a real device. It costs the greater of the run floor — 2 credits on an emulator, 4 on one of our physical devices, and the base 2 with no device time on a device you connected yourself — or the AI tokens it used; a run that reaches no verdict pays tokens only, because an infrastructure failure is not your test failing. The verdict comes back with a screenshot per step, the duration, the model used, the redacted logs, and the network capture when the run recorded one: an Android run whose scenario turns capture on, on one of our devices or on your own phone once its machine has turned capture on; the run's Network tab says why when there is none. Full arithmetic on /docs/pricing.

A compiled scenario runs in Strict on a phone, its steps pass one by one, and the run ends Passed as a replay that used no AI. 0:14

6 · Put it in CI

Mint an API key (Settings → API keys — owner-only) and gate a pipeline with the CLI. Keys authenticate on Pro and Team: you can mint one before the workspace's plan carries API access, and the same key starts working the moment it does.

bash
npm install -g @nthcase/cli@0.1.6
export NTH_API_KEY=gp_your_key
nth trigger <scenarioId> --wait \
  --timeout 900
# exit 0 passed · 1 failed
#      2 engine error · 3 timed out
#      4 cancelled
A GitHub Actions workflow runs trigger --wait in one step, with the API key in a repository secret: a commit that looks the cart badge up by a wrong id turns the pipeline red, the log and the run's summary say which step failed and why, and after the fix the pipeline is green. 0:47

What it prints when the run passes, and when it fails:

console
$ nth trigger 7c2f9a14-5b3e-4d8a-a1f0-3e9b6c2d8f51 --wait
Run 4e70d5d5-8f1c-4a3b-9d62-0b7e5c1a9f34 Passed. 2 credits. https://nthcase.com/runs/4e70d5d5-8f1c-4a3b-9d62-0b7e5c1a9f34
$ echo $?
0
console
$ nth trigger 9b1f3c57-2e84-4d6a-a0c9-6e5d4b3a2f18 --wait
Run 3a7e19c4-5b2d-4f60-9c81-d24e6b0f7a35 Failed. 2 credits. https://nthcase.com/runs/3a7e19c4-5b2d-4f60-9c81-d24e6b0f7a35
  step 5 failed (assert): Verify the cart reads "Cart (1)"
  reason: Text of [id="cart-count"] is not exactly "Cart (1)"
$ echo $?
1
The full command list and the exit-code contract are on the CLI page; an AI agent gets the same loop over MCP.