Agent Runtime
Status: Connected
Parsing documentation...
Extracted api references
Generating type definitions...
opensteeropensteer
Y Combinator logoBacked by Y Combinator.

The most comprehensive browser automation framework for AI

Enterprise-grade automation at scale.

Custom plans, unlimited concurrent sessions, dedicated proxies, and advanced support for teams that need more.

+ self-service sso
+ unlimited concurrent sessions
+ custom audit logs
+ advanced captcha bypass
+ dedicated support
view pricing

Simple, transparent pricing.

Start for free, upgrade when you need to scale. Everything you need to build robust AI agents.

Cloud

Cloud REST APIs

Opensteer Cloud public REST API reference

All Cloud API requests require an x-api-key header. Optionally include Idempotency-Key for safe retries.

curl -H "x-api-key: YOUR_KEY" https://api.opensteer.dev/v1/sessions

Browser Sessions

Create a session:

POST /v1/sessions
{
  "url": "https://example.com",
  "profileId": "optional-profile-id",
  "headless": true
}
# Response: { "sessionId": "...", "viewUrl": "..." }

Get session:

GET /v1/sessions/:sessionId

List sessions:

GET /v1/sessions

Delete session:

DELETE /v1/sessions/:sessionId

Ping session (keep-alive):

GET /v1/sessions/:sessionId/runtime/ping

Browser Profiles

List profiles:

GET /browser-profiles

Create profile:

POST /browser-profiles
{ "name": "my-profile" }

Rotate fingerprint seed:

POST /browser-profiles/:profileId/rotate-fingerprint-seed

Rotate proxy:

POST /browser-profiles/:profileId/rotate-proxy

Import data:

POST /browser-profiles/imports

Selector Cache

Import cached selectors:

POST /v1/selector-cache/import
{
  "entries": [{
    "workspace": "demo",
    "method": "css",
    "descriptionHash": "abc123",
    "path": "#search-input",
    "createdAt": "2025-01-01T00:00:00Z",
    "updatedAt": "2025-01-01T00:00:00Z"
  }]
}
# Response: { "imported": 1, "inserted": 1, "updated": 0, "skipped": 0 }

Scraper Runs

Create a run:

POST /scrapers/:slug/runs
{ "input": { "query": "laptops" } }
# Response: { "runId": "...", "status": "queued" }

Get run status:

GET /runs/:runId
# Response: { "runId": "...", "status": "running|succeeded|failed|canceled", "output": {...} }

Get run logs:

GET /runs/:runId/logs

Webhooks

Configure webhooks on scraper runs to receive notifications on completion. Payloads are signed with x-opensteer-signature using HMAC-SHA256.

Verify signature:

import crypto from "node:crypto";

function verifyWebhook(body: string, signature: string, secret: string): boolean {
  const expected = crypto
    .createHmac("sha256", secret)
    .update(body)
    .digest("hex");
  return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
}

Error Responses

All errors return:

{ "error": { "code": "ERROR_CODE", "message": "Human-readable message" } }
StatusCodeDescription
400CLOUD_INVALID_REQUESTInvalid request parameters
401CLOUD_AUTH_FAILEDInvalid API key
404CLOUD_SESSION_NOT_FOUNDSession not found
429CLOUD_RATE_LIMITEDRate limit exceeded
503CLOUD_CAPACITY_EXHAUSTEDNo capacity available
500CLOUD_INTERNALInternal server error