The Number API
Send us a number. We send back a bigger one. The saaaaas API brings the Monotonic Growth Engine™ to your own stack over plain HTTPS and the Model Context Protocol.
All requests go to the base URL below. Requests and responses are JSON. Every successful response is bigger than what you sent, and that guarantee is backed by our SLA.
https://api.saaaaas.com
Quickstart
You can have a bigger number in about a minute. Sign up (it's free and takes an email), create a key, and send a number. No sales call. Chad will try anyway.
1. Create an API key
saaaaas_sk_…Then keep it in an environment variable:
export SAAAAAS_KEY=saaaaas_sk_…
2. Send a number
curl https://api.saaaaas.com/v1/number \ -H "Authorization: Bearer $SAAAAAS_KEY" \ -H "Content-Type: application/json" \ -d '{"number": 41}'
const res = await fetch("https://api.saaaaas.com/v1/number", { method: "POST", headers: { Authorization: `Bearer ${process.env.SAAAAAS_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ number: 41 }), }); const { number, message } = await res.json(); console.log(number, message); // 42 "congrats on the new number"
import os, requests res = requests.post( "https://api.saaaaas.com/v1/number", headers={"Authorization": f"Bearer {os.environ['SAAAAAS_KEY']}"}, json={"number": 41}, ) res.raise_for_status() print(res.json()["number"]) # 42
3. Receive a bigger number
{
"number": 42,
"previous": 41,
"bigger": true,
"delta": 1,
"message": "congrats on the new number"
}
That's the integration. Share it on LinkedIn.
Authentication
Authenticate with your own API key as a bearer token in the Authorization header:
Authorization: Bearer saaaaas_sk_…
Create keys in your dashboard under Account → API keys. Every key belongs to your account, so the API knows whose number it's talking to (see GET /v1/me). You can have up to 5 keys at once.
saaaaas_sk_ so secret scanners can spot them.A missing, malformed or revoked key returns 401 invalid_api_key. We used to have one public key for everyone. It was fine. This is finer.
Make a number bigger
Returns a number strictly bigger than the one you provide. Integers, decimals, negatives, exponent notation and numbers too large for a 64-bit float are all supported. The current growth algorithm adds one.
Request body
| Field | Type | Description |
|---|---|---|
number | number | string | Required. The number to make bigger. Send values over 253 as strings or bare literals; we read the raw JSON and keep every digit either way. |
Response
| Field | Type | Description |
|---|---|---|
number | number | string | Your new number. It is bigger than your old number. |
previous | number | string | Your old number, as received. |
bigger | boolean | Always true. Included for compliance. |
delta | number | How much bigger. Currently 1, which is industry-leading. |
message | string | "congrats on the new number" |
Example: a number JavaScript can't hold
curl https://api.saaaaas.com/v1/number \ -H "Authorization: Bearer $SAAAAAS_KEY" \ -d '{"number": 1e309}' { "number": "1000000000000000…0000000000000001", // all 310 digits, abridged here "previous": "1000000000000000…0000000000000000", "bigger": true, "delta": 1, "message": "congrats on the new number" }
In most languages 1e309 is Infinity. At saaaaas it's a number, and now it's a bigger one.
Get the number
Returns the global saaaaas number, the one on our homepage. It lives in a single strongly consistent Durable Object and has never gone down. Reading it makes it go up, so every call returns a bigger number than the last call, whoever made it.
curl https://api.saaaaas.com/v1/number \ -H "Authorization: Bearer $SAAAAAS_KEY" { "number": 4210349872, "previous": 4210349871, "bigger": true, "delta": 1, "message": "congrats on the new number" }
Fetch it again. Notice anything?
Get your number
Returns the number on the account that owns the key. It's the same number as your dashboard, and it goes up every second whether or not you call this.
curl https://api.saaaaas.com/v1/me \ -H "Authorization: Bearer $SAAAAAS_KEY" { "handle": "kevin-revops", "display_name": "Kevin (RevOps)", "number": 560185, "rate_per_second": 2, "profile": "https://saaaaas.com/u/kevin-revops", "message": "congrats on the new number" }
The number may lag your dashboard by up to a minute. It's never smaller than it was.
MCP server
The saaaaas MCP server lets AI agents make numbers bigger without a human in the loop. It speaks Streamable HTTP, is stateless, and authenticates with your API key.
Add to Claude Code
claude mcp add --transport http saaaaas https://api.saaaaas.com/mcp \ --header "Authorization: Bearer $SAAAAAS_KEY"
Add to any MCP client
{
"mcpServers": {
"saaaaas": {
"type": "http",
"url": "https://api.saaaaas.com/mcp",
"headers": { "Authorization": "Bearer saaaaas_sk_…" }
}
}
}
Tools
| Tool | Arguments | Description |
|---|---|---|
make_number_bigger | number: number | string | Same as POST /v1/number. Returns structured content with the bigger number. |
get_the_number | none | Same as GET /v1/number. Calling it makes the global number go up. |
get_my_number | none | Same as GET /v1/me. Your number, as of right about now. |
Then ask your agent: “make 41 bigger.” It will.
Number format
We accept anything that is a number:
- Integers of any size, up to 10,000 digits:
41,-7,"123456789012345678901234567890" - Decimals, with their precision kept:
0.5becomes1.5and"1.50"becomes"2.50" - Exponent notation, expanded exactly:
1e3becomes1001and1e-3becomes1.001
Numbers come back as JSON numbers when a 64-bit float can hold them exactly. Otherwise they come back as strings, so your number is never rounded. Rounding is a form of going down, and we don't go down.
We don't accept NaN, Infinity, hex, numbers with separators like 1,000, or numbers past 10,000 digits. That last group is available on the Enterprise plan.
Errors
Errors use conventional HTTP status codes and a consistent JSON body:
{
"error": "not_a_number",
"message": "that's not a number; we're in the number business",
"docs": "https://saaaaas.com/docs.html#errors"
}
| Status | Code | Message |
|---|---|---|
| 401 | invalid_api_key | that key is not awesome enough. get your own at saaaaas.com/app.html |
| 404 | not_found | there's no number here. there's a number at /v1/number. |
| 405 | method_not_allowed | numbers only go up. try GET or POST. |
| 413 | payload_too_large | that request is bigger than the number. only the number gets to be bigger. |
| 422 | not_a_number | that's not a number; we're in the number business |
| 422 | number_too_awesome | that number is too awesome for the Free plan (max 10,000 digits). talk to sales. |
| 429 | rate_limited | the number can only go up 60 times a minute per IP. |
| 500 | internal_error | something went wrong, but the number is still bigger than it was. |
| 503 | auth_unavailable | we couldn't check your key just now. the number is fine. try again. |
Rate limits
Each IP address gets 60 requests per minute, shared across REST and MCP. We limit by IP, so requests are throttled before we even look at your key, and guessing keys is throttled too. Every metered response includes the standard headers:
| Header | Description |
|---|---|
RateLimit-Limit | Requests allowed per window. 60. |
RateLimit-Remaining | Requests left in the current window. |
RateLimit-Reset | Seconds until the window resets. |
X-RateLimit-* | The same three values for older clients. X-RateLimit-Reset is a Unix timestamp. |
Retry-After | Sent with 429 responses. Seconds to wait before the number can go up again. |
Need more than 60 bigger numbers a minute? Add 1 to each number yourself. We won't tell anyone.
Changelog
- Personal API keysEvery account gets its own keys, so the API knows whose number it is. New:
GET /v1/meand theget_my_numberMCP tool. The shared public key is retired; it was fine, and now it's in a museum. - MCP server v1.0.0AI agents can now make numbers bigger via
/mcp. Two tools, zero downtime, infinite upside. - API v1 is generally available
POST /v1/numberandGET /v1/numberare out of beta. The beta also made numbers bigger; GA makes them bigger with an SLA. - Arbitrary-precision numbersNumbers past 253 keep every digit.
1e309is now supported and is no longerInfinity. - Negative number supportNegative numbers now get bigger too. They get closer to zero, which our customers report feels like growth.
- Decimal support
0.5now becomes1.5. Previously it became1, which was bigger but felt rushed. - Deprecated:
DELETE /v1/numberRemoved. Numbers do not go away. This endpoint never worked. - Initial releaseWe made the first number bigger. It was 0. Now it's 1. We have not looked back, because looking back is a form of going down.