Billing & Plans
This guide covers NAT's pricing tiers, how quota enforcement works, how to upgrade or downgrade your plan, and how to respond to usage alerts.
Pricing tiers
NAT offers four plans designed to match teams of all sizes:
| Feature | Free | Pro ($79/mo) | Team ($199/mo) | Enterprise |
|---|---|---|---|---|
| Functional scans / month | 50 | 500 | 2,000 | Unlimited |
| Security scans / month | β | 100 | 500 | Unlimited |
| Requests / minute | 30 | 120 | 300 | 1,000 |
| Concurrent scans | 1 | 3 | 10 | 50 |
| Functional testing | β | β | β | β |
| Security scanning | β | β | β | β |
| Webhooks | β | β | β | β |
| API specs | 1 | 5 | Unlimited | Unlimited |
| Export formats | HTML, JSON, CSV | HTML, JSON, CSV, PDF | HTML, JSON, CSV, PDF | HTML, JSON, CSV, PDF (white-label) |
| AI queries/month | 5 | Unlimited | Unlimited | Unlimited |
| Compliance reports/month | β | 5 | Unlimited | Unlimited |
| Dashboard AI chat | β | β | β | β |
| Proactive insights | β | β | β | β |
| BGSTM audit trail | β | β | β | β |
| Priority support | β | β | β | β |
| SSO / SAML | β | β | β | β |
| Dashboard access | β | β | β | β |
| API access | β | β | β | β |
The Free plan is available without a credit card. Sign up at app.nat-testing.io/signup (opens in a new tab) to get started.
Enterprise plans include custom quotas, SLAs, and dedicated support. Contact us for pricing.
Quota enforcement
Each scan you start counts against your monthly quota. Quota resets on the first day of each billing period.
What happens when quota is exhausted
When you have consumed all scans for the period, any new POST /api/v1/scan request returns:
HTTP/1.1 402 Payment Required
Content-Type: application/json
{
"error": "QUOTA_EXCEEDED",
"message": "Monthly scan quota exhausted. Quota resets on 2026-02-01.",
"quota_reset_date": "2026-02-01T00:00:00Z"
}In-flight scans are not interrupted β only new scan requests are blocked.
Checking your current usage
Use the Usage API to see your current consumption at any time:
curl https://api.nat-testing.io/api/v1/usage \
-H "X-API-Key: $NAT_API_KEY"See Usage & Quotas API for the full response schema.
Approaching-limit warnings
When your usage crosses 80% of your monthly quota, NAT sets approaching_limit: true in the /api/v1/usage response and sends a usage_update event over the WebSocket connection.
NAT also sets the X-NAT-Usage-Warning response header on every API response once you cross the 80% threshold:
X-NAT-Usage-Warning: Approaching quota limit (85% used). Upgrade at https://app.nat-testing.io/dashboardYou can check for this header in your integration code to surface proactive warnings:
response = requests.post(...)
if "X-NAT-Usage-Warning" in response.headers:
print("Warning:", response.headers["X-NAT-Usage-Warning"])You can also poll the alerts history endpoint:
curl https://api.nat-testing.io/api/v1/usage/alerts \
-H "X-API-Key: $NAT_API_KEY"Plan ahead β if you are running automated scans in CI/CD, set up an alert handler early so you are not caught off guard at quota exhaustion.
Upgrading your plan
Via the dashboard
- Log in at app.nat-testing.io (opens in a new tab)
- Navigate to Settings β Billing
- Click Upgrade Plan
- Choose Pro or Team and complete the Stripe checkout flow
Your quota is updated immediately upon payment confirmation. The API key remains the same.
Via the API
Create a checkout session programmatically:
curl -X POST https://api.nat-testing.io/api/v1/billing/checkout \
-H "X-API-Key: $NAT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"price_id": "price_pro_monthly",
"success_url": "https://app.nat-testing.io/dashboard?checkout=success",
"cancel_url": "https://app.nat-testing.io/pricing"
}'Redirect the user to the returned checkout_url. See Billing API for full details.
Downgrading your plan
To downgrade, open the Stripe billing portal:
curl -X POST https://api.nat-testing.io/api/v1/billing/portal \
-H "X-API-Key: $NAT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"return_url": "https://app.nat-testing.io/dashboard"
}'Redirect the user to the returned portal_url. In the portal, they can change plan, update payment details, or cancel their subscription.
Downgrading from Pro or Team to a lower tier will reduce your quota on the next billing cycle. Pro/Team-only features (AI Assistant, compliance reports, visual regression, accessibility, performance) will no longer appear in scan results.
Stripe webhook integration
NAT listens for Stripe events at POST /api/v1/billing/webhook to keep tenant state in sync:
| Stripe event | Action |
|---|---|
checkout.session.completed | Tenant provisioned, API key issued |
customer.subscription.updated | Plan tier and quota updated |
customer.subscription.deleted | Tenant downgraded to Free |
invoice.payment_failed | Payment failure notification sent |
invoice.paid | Subscription renewed, quota reset |
charge.refunded | Refund processed, plan downgraded if applicable |
If you are self-hosting NAT, set the STRIPE_WEBHOOK_SECRET environment variable to the signing secret from your Stripe dashboard. See the self-hosted setup guide for full environment variable documentation.
See also
- Billing API reference β checkout, portal, and webhook endpoints
- Usage & Quotas API β monitor usage in real time
- AI Assistant β AI-powered test planning, compliance reports, and audit trails
- Compliance docs β supported frameworks, badges, and BGSTM audit trail
- Billing troubleshooting β common issues and fixes