# Test addresses

> Reserved test.isbusinessemail.com addresses return fixed results with no key and never count toward quotas. Use them in docs, CI and smoke tests.

Source: https://isbusinessemail.com/docs/test-addresses

Every address below returns a **fixed, predictable result**. They need **no API key** and are **never counted** toward any quota, so they're safe in CI, smoke tests, demos and documentation.

| Address | `category` | `recommendation` (b2b) | What's special |
|---|---|---|---|
| `business@test.isbusinessemail.com` | `business` | `allow` | A plain company address |
| `personal@test.isbusinessemail.com` | `personal` | `block` | Shared-domain provider, `is_free_provider: true` |
| `disposable@test.isbusinessemail.com` | `disposable` | `block` | `is_disposable: true` |
| `relay@test.isbusinessemail.com` | `relay` | `block` | `is_relay: true` |
| `education@test.isbusinessemail.com` | `education` | `allow` | `is_business: true` |
| `invalid@test.isbusinessemail.com` | `invalid` | `block` | Can't receive mail |
| `unknown@test.isbusinessemail.com` | `unknown` | `review` | Too little evidence to decide |
| `m365@test.isbusinessemail.com` | `business` | `allow` | Microsoft 365 detected, `auth: "federated"` via Okta, with a placeholder tenant ID |
| `workspace@test.isbusinessemail.com` | `business` | `allow` | Google Workspace detected |
| `blocked@test.isbusinessemail.com` | any | `block` | `is_blocked: true`: blocked under every policy, whatever the category |
| `role@test.isbusinessemail.com` | `business` | `review` | `info@`-style role account, `is_role_account: true` |

## Examples

```bash
# No key needed
curl -sG https://api.isbusinessemail.com/v1/check \
  --data-urlencode "email=m365@test.isbusinessemail.com"
```

```bash
# Same thing with POST, as you'd call it in production
curl -s https://api.isbusinessemail.com/v1/check \
  -H "Content-Type: application/json" \
  -d '{"email":"role@test.isbusinessemail.com"}'
```

Test addresses also work when you send a key, so your production code path can be tested end to end without spending quota.

## A CI smoke test

```bash
#!/usr/bin/env bash
set -euo pipefail
api=https://api.isbusinessemail.com/v1/check

expect() {
  local email=$1 want=$2
  got=$(curl -sf "$api" -H "Content-Type: application/json" \
        -d "{\"email\":\"$email\"}" | jq -r .recommendation)
  [[ "$got" == "$want" ]] || { echo "FAIL $email: got $got, want $want"; exit 1; }
  echo "ok   $email → $got"
}

expect business@test.isbusinessemail.com   allow
expect personal@test.isbusinessemail.com   block
expect disposable@test.isbusinessemail.com block
expect unknown@test.isbusinessemail.com    review
```

## Unit tests for your signup logic

Use the test addresses to cover every branch of your own code: allow, review, block, `did_you_mean`, Workspace vs Microsoft 365 connector pre-selection. For failure paths (timeouts, `429`, `5xx`), mock the HTTP client; test addresses always succeed.
