📈 API v1 is generally available. Every number you send now comes back bigger. See what's new →
API Reference · v1

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.

Plus One handles developer relations. Send him a number; he sends back a bigger one.

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

Your API keys · Production
saaaaas_sk_…
Create a key

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}'

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.

Security note. We show a key once, when you create it, and only store a hash of it. Keep it out of source control and out of the browser. If one leaks, revoke it from the dashboard; revoked keys stop working within a minute. Keys start with 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

POST/v1/number

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

FieldTypeDescription
numbernumber | stringRequired. 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

FieldTypeDescription
numbernumber | stringYour new number. It is bigger than your old number.
previousnumber | stringYour old number, as received.
biggerbooleanAlways true. Included for compliance.
deltanumberHow much bigger. Currently 1, which is industry-leading.
messagestring"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

GET/v1/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

GET/v1/me

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

POST/mcp

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

ToolArgumentsDescription
make_number_biggernumber: number | stringSame as POST /v1/number. Returns structured content with the bigger number.
get_the_numbernoneSame as GET /v1/number. Calling it makes the global number go up.
get_my_numbernoneSame 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.5 becomes 1.5 and "1.50" becomes "2.50"
  • Exponent notation, expanded exactly: 1e3 becomes 1001 and 1e-3 becomes 1.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"
}
StatusCodeMessage
401invalid_api_keythat key is not awesome enough. get your own at saaaaas.com/app.html
404not_foundthere's no number here. there's a number at /v1/number.
405method_not_allowednumbers only go up. try GET or POST.
413payload_too_largethat request is bigger than the number. only the number gets to be bigger.
422not_a_numberthat's not a number; we're in the number business
422number_too_awesomethat number is too awesome for the Free plan (max 10,000 digits). talk to sales.
429rate_limitedthe number can only go up 60 times a minute per IP.
500internal_errorsomething went wrong, but the number is still bigger than it was.
503auth_unavailablewe 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:

HeaderDescription
RateLimit-LimitRequests allowed per window. 60.
RateLimit-RemainingRequests left in the current window.
RateLimit-ResetSeconds until the window resets.
X-RateLimit-*The same three values for older clients. X-RateLimit-Reset is a Unix timestamp.
Retry-AfterSent 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/me and the get_my_number MCP 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 availablePOST /v1/number and GET /v1/number are out of beta. The beta also made numbers bigger; GA makes them bigger with an SLA.
  • Arbitrary-precision numbersNumbers past 253 keep every digit. 1e309 is now supported and is no longer Infinity.
  • Negative number supportNegative numbers now get bigger too. They get closer to zero, which our customers report feels like growth.
  • Decimal support0.5 now becomes 1.5. Previously it became 1, 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.