Serverless
Usage

Usage

Time-bucketed, aggregated serverless compute usage for your own account — the machine-seconds your deployed serverless apps consumed, priced with your machine prices and net of discounts. This matches the serverless portion of the dashboard usage view. Unlike /v1/models/usage (which reports model API endpoint calls), this reports the sdk_billing_event compute spend of the apps you run on fal Serverless. Requires an ADMIN-scoped API key (this endpoint returns billing and usage data, which the standard API key scope does not include); results are always scoped to the apps you own.

Filtering by app:

  • app — exact match on one or more app names (comma-separated or repeated, up to 50): ?app=my-app-dev,my-app-prod. Use the value exactly as it appears in the response app field.
  • search — case-insensitive substring match on the app name, for when you know the name but not the exact environment/version suffix: ?search=my-app returns every my-app* variant.
  • Provide both to AND them. Omit both to return every app you own — useful for discovering the exact app names to filter on.

Expansions:

  • time_series: usage grouped into time buckets (default)
  • summary: a single aggregate row per app × machine type across the window

Notes:

  • Each row is machine-seconds (unit is always "second"); surge and non-surge usage of the same app/machine come back as separate rows (is_surge), so sum across them for a per-app total.
  • Time-series bucket timestamps are returned in the timezone you request (ISO 8601 with offset, e.g. 2025-01-15T00:00:00-05:00), which also controls how usage is grouped into buckets.

Common Use Cases:

  • Track your serverless apps' compute consumption and cost over time
  • Break down spend per app, environment, and machine type
  • Export usage to your own billing/observability tooling
get/serverless/usage

Query parameters

limitinteger

Maximum number of items to return. Actual maximum depends on query type and expansion parameters.

Example:50

Maximum number of items to return. Actual maximum depends on query type and expansion parameters.

cursorstring

Pagination cursor from previous response. Encodes the page number.

Example:Mg==

Pagination cursor from previous response. Encodes the page number.

string date-time
OR
string

Start date in ISO8601 format (e.g., '2025-01-01T00:00:00Z' or '2025-01-01'). Defaults to 24 hours ago.

string date-time
OR
string

End date in ISO8601 format, exclusive (e.g., '2025-02-01T00:00:00Z' or '2025-02-01'). Data up to but not including this timestamp is returned. Defaults to current time.

timezonestring

Timezone for date aggregation and boundaries. All timestamps in responses are in UTC, but this controls how dates are bucketed.

Example:UTC

Timezone for date aggregation and boundaries. All timestamps in responses are in UTC, but this controls how dates are bucketed.

timeframe'minute' | 'hour' | 'day' | 'week' | 'month'

Aggregation timeframe for timeseries data (auto-detected from date range if not specified). Auto-detection uses: minute (<2h), hour (<2d), day (<64d), week (<183d), month (>=183d).

Example:day

Aggregation timeframe for timeseries data (auto-detected from date range if not specified). Auto-detection uses: minute (<2h), hour (<2d), day (<64d), week (<183d), month (>=183d).

bound_to_timeframe'true' | 'false'

Whether to adjust start/end dates to align with timeframe boundaries and use exclusive end. Defaults to true. When true, dates are aligned to the start of the timeframe period (e.g., start of day) and end is made exclusive (e.g., start of next day). When false, uses exact dates provided.

Example:true

Whether to adjust start/end dates to align with timeframe boundaries and use exclusive end. Defaults to true. When true, dates are aligned to the start of the timeframe period (e.g., start of day) and end is made exclusive (e.g., start of next day). When false, uses exact dates provided.

string
OR
string[]

Filter to one or more serverless apps, matched exactly against the app value in the response (deployed name, owner prefix stripped). Accepts a comma-separated list or repeated parameter (1-50). For partial/name-only matching use search.

searchstring

Case-insensitive substring match on the app name — returns every app whose name contains this term (e.g. search=autohdr matches all autohdr-* apps across environments). Combined with app via AND when both are given.

Example:autohdr-raw-to-jpg

Case-insensitive substring match on the app name — returns every app whose name contains this term (e.g. search=autohdr matches all autohdr-* apps across environments). Combined with app via AND when both are given.

string
OR
string[]

Data to include in the response. Use 'time_series' for time-bucketed data and 'summary' for aggregate statistics across the entire window. At least one is required.

Response

Usage data retrieved successfully

next_cursorstring nullable required

Cursor for the next page of results, null if no more pages

has_moreboolean required

Boolean indicating if more results are available (convenience field derived from next_cursor)

Changes