Testing for free
A test API key lets you build and validate an AmberPen integration without a paid plan. It uses
the same POST /proofread endpoint, SDK methods, request fields, response shapes, and
streaming behavior as a live key. Moving to production only requires replacing the key.
Create a test key
- Sign in and verify your email address.
- Open the API-key dashboard.
- Under Key type, select Test.
- Name the key, choose its expiration, and select Create key.
- Copy the key immediately. AmberPen does not show the full value again.
Each account can have one active test key. You can revoke it and create another whenever you need to rotate the credential.
Send a request
Keep the key in an environment variable or secret manager and send it as a Bearer token. Do not embed it in browser code or commit it to source control.
export AMBER_PEN_API_KEY="ap_test_v1.…"
curl https://api.amberpen.dev/proofread \
-H "authorization: Bearer $AMBER_PEN_API_KEY" \
-H "content-type: application/json" \
-d '{ "text": "This are a sentnce.", "mode": "correct" }' The same key works with the SDK:
import { applyEdits, createAmberPenClient } from "@amber-pen/sdk";
const amberPen = createAmberPenClient({
apiKey: process.env.AMBER_PEN_API_KEY!,
});
const text = "This are a sentnce.";
const result = await amberPen.proofread({ text });
console.log(applyEdits(text, result.edits));
// "This is a sentence." Test-key limits
Test access is deliberately small and is shared across your account.
| Limit | Allowance |
|---|---|
| Active test keys | 1 per account |
| Request rate | 20 requests per minute |
| Input per request | 1,000 weighted characters |
| Daily requests | 200 request units per UTC day |
| Daily input | 50,000 weighted characters per UTC day |
evaluate mode | 2 request units and 2× the weighted input |
Weighted input includes text, every dictionary entry, and every properNouns entry. Chinese, Japanese, and Korean code points count as 2.5 characters;
other Unicode code points count as one. The 1,000-character request limit is checked before the evaluate multiplier is applied to daily usage.
Daily usage is reserved before proofreading starts, so an accepted request still consumes its allowance if inference later fails. Daily allowances reset at midnight UTC.
Monitor remaining allowance
Test-key responses include standard minute-rate headers:
| Header | Meaning |
|---|---|
RateLimit-Limit | The active request limit. |
RateLimit-Policy | The limit and window in seconds. |
RateLimit-Remaining | Requests remaining in the current minute. |
RateLimit-Reset | Seconds until the active window resets. |
After daily usage is reserved, responses also include:
| Header | Meaning |
|---|---|
X-Test-Daily-Request-Limit | The daily request-unit allowance. |
X-Test-Daily-Request-Remaining | Request units left today. |
X-Test-Daily-Weighted-Character-Limit | The daily weighted-character allowance. |
X-Test-Daily-Weighted-Character-Remaining | Weighted characters left today. |
X-Test-Daily-Reset | Seconds until midnight UTC. |
A request over the per-request input limit returns 413. Exhausting the minute or
daily allowance returns 429 with Retry-After. See the HTTP API reference for all request fields and errors.
Move to production
Choose a paid plan, create a Live key in the same API-key dashboard, and replace the test key in your secret store. Your endpoint and integration code stay unchanged.