shiftlabs Start free

Security model

How we keep your workspace, your secrets and the internet safe from the code that runs here, yours included.

Women's Army Corps operators in headsets work a long switchboard side by side, on the afternoon shift.
WAC operators on the afternoon shift, Potsdam, 1945

Accounts and access

Who can sign in, how long a session lasts, and what an API key can reach.

Members · ridgeline-ops

3
MemberRoleSign-in
dana@ridgeline.exampleadminMFA · TOTP
li@ridgeline.exampledeveloperMFA · TOTP
sam@ridgeline.exampleviewerMFA · TOTP

Removing a member revokes their sessions.

Operators on shift, from “Operator Toll Dialing: Teamwork”, about 1949

Webhooks

A trigger URL starts a run. Signatures, rate limits and a size cap decide which deliveries get that far.

Deliveries to hooks.shiftlabs.org/t/kQ7v…

signed: stripe
21:41:09.698202{"runId":"316d72be"}
21:39:52.114401{"error":"invalid signature"}
21:30:14.227202{"runId":"7d10ce5b"}
21:30:16.502replay{"duplicate":true}

A replayed delivery starts nothing; an unsigned one never reaches the queue.

Secrets and connections

Secrets are write-only: no endpoint returns a value. Your code reaches an upstream with a secret only through a connection, which an admin owns and which names the exact hosts it applies to.

Audit log · ridgeline-ops

admins only
Time (UTC)ActionSubjectHostDetail
21:41:10.470injectstripeapi.stripe.com["STRIPE_KEY"]
21:36:02.881blockedbillingapi.stripe.comconnection billing is not declared for workflow refund-check
21:30:15.303injectstripeapi.stripe.com["STRIPE_KEY"]
21:05:40.112connection_putstripe
21:05:12.640secret_putSTRIPE_KEYversion 2

Outbound requests

Every request your code makes with fetch goes through our egress gateway. Nothing else leaves: raw TCP is refused at deploy and has no path out.

Outbound requests · last hour

5
RequestStatusTime
GET api.stripe.comvia connection stripe200182 ms
POST hooks.slack.comno connection20095 ms
GET 203.0.113.7no connectionblockedrequests to IP addresses are not allowed; use a hostname2 ms
GET api.stripe.com:8443no connectionblockedport 8443 is not allowed; use 80 or 4432 ms
POST hooks.shiftlabs.orgno connectionblockedrequests to shiftlabs.org are not allowed from workflows2 ms
Call records clipped in sheaves along the top of the Fort Richardson switchboard in 1950, operators connecting calls below.
Every call on the record: Fort Richardson switchboard, 1950

Limits

Every workspace starts on these free-tier limits. We can raise them for a workspace, up to platform ceilings.

Usage · last 24 hours

Runs
630 of 1,000
Outbound requests
1,236 of 3,000
Concurrent runs
4 of 10
Workflows
4 of 10
Free-tier limits
LimitFreeWhen you reach it
Runs per 24 hours · concurrent active runs1,000 · 10The webhook answers 429.
Workflows · active triggers · secrets · connections10 · 20 · 25 · 10Creating one more answers 403.
Engine dispatches per run · run lifetime50 · 168 hThe run fails before your code loads again.
CPU · subrequests per invocation2,000 ms · 50The invocation fails.
Outbound requests3,000 per 24 h · 30/min per hostThe gateway answers 429.
Deploys · new versions per 24 hours20/min · 100The API answers 429.
Webhook body · workflow source · API JSON body256 KiB · 512 KiB · 16 KiBThe request is refused with 413.
Logs per invocation500 lines · 4,000 chars/lineFurther lines are not stored; long lines are cut.

Abuse

Report abuse to abuse@shiftlabs.org with the X-Shiftlabs-Tenant value from the request.

Platform

Where runs execute, and what this site and the API send back.