BBP API Reference
A commercial REST API for physics-based ground-motion simulations from the SCEC Broadband Platform (version 22.4.0). Submit a scenario, validation, or observed-comparison job; poll for completion; download artifacts.
Preview — service not yet publicly available
The hosted BBP API is being prepared for launch. This page documents the interface so you can plan an integration; access keys and the metered service are not yet open to the public. Watch the System Update Log for availability.
Getting Started
The API is reached under the /bbpapi/v1/
base path. Every request authenticates with your Intensity Lab API key, passed as a bearer token:
Your API key is the same one issued to your Intensity Lab account (see your
account page). Usage is metered per account — compute time and stored-artifact bytes are
tracked and exposed at GET /usage. Job results are retained for a
limited window and then swept, so download artifacts you need to keep.
https://intensitylab.com/bbpapi/v1 ·
responses are wrapped in a { "data": ... } envelope.
Velocity-Model Regions
A simulation runs against a regional 1-D crustal velocity
model. Each installed region (see GET /catalog/regions)
covers a native geographic extent; pass its id as region
in a job spec. The map shows the extents of the California regions Intensity Lab hosts.
region
in a job spec and what GET /catalog/regions returns.
The two correspond as follows:
| Name on the map | Package id (use this in the API) | Area covered |
|---|---|---|
| NoCal | NoCal500 |
Northern California, including the Bay Area |
| CenCoast | CentralCal500 |
Central Coast Ranges, including Parkfield |
| Southern Sierra Nevada | SouthernSierra500-2 |
Southern Sierra Nevada and Owens Valley |
| Mojave | Mojave500 |
Mojave Desert, including Ridgecrest |
| SoCal | LABasin500 |
Southern California, including the Los Angeles basin |
The 500 in a package id is the model's minimum shear-wave
velocity in m/s, not a region name. SouthernSierra500-2 ends
in -2 because it is the second release of that package.
Always send the package id exactly as GET /catalog/regions
reports it; the map names are not accepted.
Catalog
Read-only lookups describing what the platform can run: simulation methods, installed velocity-model regions, packaged validation events, and BBP versions.
GET
/catalog/methods
Lists the ground-motion simulation methods the platform supports
(e.g. Graves & Pitarka, GP). The id values are what you pass as method in a job spec.
{
"data": [
{ "id": "GP", "name": "Graves & Pitarka" }
]
}
GET
/catalog/regions
Lists the crustal velocity-model regions whose Green's-function
packages are installed on the host. The id values are valid for the region field of a scenario/comparison job.
{
"data": [
{ "id": "LABasin500", "name": "LA Basin (500 m/s)" }
]
}
GET
/catalog/validation-events
Lists the SCEC-packaged historical events available for a
validation job (e.g. Northridge, NR), each with bundled source and observed data.
{
"data": [
{ "id": "NR", "name": "Northridge 1994" }
]
}
GET
/catalog/versions
Lists the BBP software versions the host can run. Pass one as
bbp_version in a job spec (default 22.4.0).
{
"data": [
{ "id": "22.4.0" }
]
}
Jobs
Submit a simulation, then poll its status or stream its events. A job runs one or more stochastic realizations and produces downloadable artifacts. Jobs are scoped to your account — you can only see and act on your own.
POST
/jobs
Submits a job spec keyed by mode:
scenario (a synthetic rupture at one or more stations) or
validation (a packaged historical event). A scenario spec carries a
source (magnitude, fault geometry, hypocenter) and a
stations list (lon/lat/id/Vs30). Returns 202 Accepted with a job reference whose links point to its status, events, and artifacts.
mode: "comparison" requires uploaded observed files and must be sent to
POST /jobs/comparison (multipart) — posting it here returns 422.{
"id": "job_a1b2c3d4e5f6a7b8c9d0",
"status": "queued",
"mode": "scenario",
"method": "GP",
"name": "M6.4 test at Ridgecrest",
"bbp_version": "22.4.0",
"region": "LABasin500",
"realizations_total": 1,
"created_at": "2026-08-01T18:30:00Z",
"links": {
"self": "/v1/jobs/job_a1b2c3d4e5f6a7b8c9d0",
"events": "/v1/jobs/job_a1b2c3d4e5f6a7b8c9d0/events",
"artifacts": "/v1/jobs/job_a1b2c3d4e5f6a7b8c9d0/artifacts"
}
}
POST
/jobs/comparison
Runs a scenario simulation and the BBP goodness-of-fit chain against
your uploaded observed acceleration. This is a multipart/form-data request:
a spec form field (the ComparisonJobSpec JSON, mode: "comparison") plus one BBP-format observed file per station.
observed, and the
station id lives in the filename — <station-id>.bbp. Each file's id
must match a stations[].id in the spec, one-to-one (no missing, no extra), or the
request returns 422. Using per-station field names instead of the filename fails as "no files sent".{
"id": "job_9f8e7d6c5b4a39281706",
"status": "queued",
"mode": "comparison",
"method": "GP",
"name": "Ridgecrest GoF",
"bbp_version": "22.4.0",
"region": "LABasin500",
"realizations_total": 1,
"created_at": "2026-08-01T18:31:00Z",
"links": { "self": "...", "events": "...", "artifacts": "..." }
}
GET
/jobs
Returns your account's jobs, newest first. Optional query params:
status (e.g. succeeded) and limit (default 50, max 200).
{
"data": [
{
"id": "job_a1b2c3d4e5f6a7b8c9d0",
"status": "succeeded",
"mode": "scenario",
"method": "GP",
"region": "LABasin500",
"realizations_total": 1,
"realizations_succeeded": 1,
"created_at": "2026-08-01T18:30:00Z",
"usage": { "compute_seconds": 512.4, "artifacts_bytes": 8734512 }
}
],
"next_cursor": null
}
GET
/jobs/{job_id}
Full detail for one job: status, realization counts, timestamps, and the
usage rollup (compute-seconds and artifact bytes; estimated: true until the job is terminal). Poll this to await completion.
{
"id": "job_a1b2c3d4e5f6a7b8c9d0",
"status": "succeeded",
"mode": "scenario",
"method": "GP",
"region": "LABasin500",
"realizations_total": 1,
"realizations_succeeded": 1,
"realizations_failed": 0,
"started_at": "2026-08-01T18:30:05Z",
"finished_at": "2026-08-01T18:38:37Z",
"usage": { "compute_seconds": 512.4, "artifacts_bytes": 8734512, "estimated": false },
"error": null,
"links": { "self": "...", "events": "...", "artifacts": "..." }
}
POST
/jobs/{job_id}/cancel
Cancels a job that has not yet started running. Returns 409 if the job is
already terminal (succeeded, failed, or canceled).
GET
/jobs/{job_id}/realizations
Lists each stochastic realization in the job with its seed, status, and compute time — useful for multi-realization runs.
{
"data": [
{ "name": "r0", "seed": 2379646, "sim_id": 5551212, "status": "succeeded", "compute_seconds": 512.4, "error": null }
]
}
GET
/jobs/{job_id}/events
Returns the job's progress event log. By default a JSON snapshot; add
?stream=true to receive a live server-sent events (SSE) stream that
pushes new events until the job finishes — the low-latency way to await completion instead of polling.
{
"data": [
{ "id": 1, "type": "job.started", "created_at": "2026-08-01T18:30:05Z", "data": { } },
{ "id": 2, "type": "job.succeeded", "created_at": "2026-08-01T18:38:37Z", "data": { } }
]
}
Artifacts
A finished job produces downloadable outputs — seismograms, response spectra, goodness-of-fit summaries, plots. List them, then fetch a short-lived signed download URL for each.
GET
/jobs/{job_id}/artifacts
Lists the job's output files with type, station id, size, checksum, and an
expires_at (retention window). Each carries a links object for fetching a signed URL.
{
"data": [
{
"id": "art_1122334455",
"type": "acc_bbp",
"realization": "r0",
"filename": "CLC.acc.bbp",
"station_id": "CLC",
"size_bytes": 204812,
"checksum_sha256": "3f9c...e21a",
"created_at": "2026-08-01T18:38:37Z",
"expires_at": "2026-08-31T18:38:37Z",
"links": { "self": "/v1/artifacts/art_1122334455" }
}
]
}
GET
/artifacts/{artifact_id}
Returns one artifact's metadata plus a download_url (short-lived,
signed) and its expiry. Follow the URL to fetch the file bytes.
{
"id": "art_1122334455",
"type": "acc_bbp",
"filename": "CLC.acc.bbp",
"station_id": "CLC",
"size_bytes": 204812,
"download_url": "https://intensitylab.com/bbpapi/v1/download?...signature...",
"download_url_expires_at": "2026-08-01T19:38:37Z"
}
POST
/jobs/{job_id}/bundle
Packages all of a job's artifacts into a single downloadable archive and returns it as a new artifact (201 Created), so you can pull an entire run in one download.
GET
/download
Serves the artifact file bytes. You do not construct this URL yourself —
use the download_url returned by GET /artifacts/{id}, which carries a signature and expiry.
Usage
GET
/usage
Returns your account's consumption rollup: total compute-seconds, stored
artifact bytes, and job counts. Optional since (ISO 8601) bounds the window by job creation time.
{
"data": {
"jobs": 3,
"compute_seconds": 1620.7,
"artifacts_bytes": 26103544,
"realizations_succeeded": 3,
"jobs_failed": 0
}
}
This reference documents account-scoped endpoints only. Administrative endpoints are not part of the public API.