Limits and timeouts

Poly enforces two different kinds of limits. Do not debug a 429 as a timeout, or a Job MAX_EXECUTION_TIME_REACHED as a killed server function.

  1. Usage / rate limits (your tenant’s limit tier): how many functions you may own, and how many API / server / variable / chat calls per day or per minute. Over the cap → HTTP 429.

  2. Execution time / resources: how long one server function run may execute on Knative, plus a separate Job wait budget.

This page does not publish free-tier CPU, memory, or time numbers. For SKUs and what a tier includes, see PolyAPI pricing.

Usage and rate limits

Your tenant is assigned a limit tier. Numeric caps that are unset generally mean no check (unlimited) for that field.

Typical caps:

  • maxFunctions — inventory (API functions, server/client functions, webhooks, and some related resources). Create is rejected when you are over.

  • Function calls per day

  • API function calls per minute vs server function calls per minute (separate buckets)

  • Variable calls per day

  • Chat questions per day

Exceeding a call cap returns HTTP 429 (FUNCTION_CALLS_LIMIT_REACHED).

Client-only work (no server function) is not billed as a server execution. Other resources you touch (API functions, Vari, Tabi, …) still count against the tier. See pricing rather than inventing meters here.

Server function execution limits

Each server function run has a Knative request timeout (seconds):

timeoutSeconds = function.limitTime
                 OR tier.serverFunctionLimitTime
                 OR 60

limitTime is per function, in seconds. The 60-second value is the platform default when neither the function nor the tier sets a time.

CPU and memory limits on the container come from the tenant tier when those tier fields are set (millicores and MiB). This page does not list the numbers.

alwaysOn keeps at least one warm pod (never scale below 1). It does not change how long a single execution may run. You can set both limitTime and alwaysOn. alwaysOn is a separate add-on (pricePerAlwaysOnFunction).

The execute HTTP client also has a 30 minute timeout. That timeout cancels only the waiting HTTP client. The Knative server function may keep running after the client gives up.

Job limits

Jobs wrap one or more server function calls. Defaults (instance → tenant → environment overlays):

Field

Default

Unit

maxExecutionTime

10

minutes (Job wait budget)

minimumExecutionInterval

5

minutes (floor for schedules)

Warning

A Job can show MAX_EXECUTION_TIME_REACHED (default 10 minutes) while the server function keeps running until its own Knative limitTime (and/or until logs stop). The Job timeout is a wait race. It does not cancel the server function.

Tenants cannot raise maxExecutionTime in Canopy themselves. Contact support@polyapi.io.

Who sets what

Knob

Who

Limit tier on the tenant

Poly ops

Server function limitTime, alwaysOn, scale

You, on the function (API / deploy config)

Jobs maxExecutionTime

Support (not self-serve in Canopy)

Troubleshooting

Symptom

Likely limit

HTTP 429 on execute

Day or per-minute call cap, not a timeout

Cannot create another function

maxFunctions

Server function dies around 60 seconds

No limitTime / tier time → 60s default

Job failed ~10 min; logs still going

Job wait budget vs server function hard timeout

timeout of 1800000ms exceeded

30-minute HTTP client timeout; the function may still be running

Related: Server Functions, Jobs, Usage and billing.