spicrawl-com · Schema
SessionCreateRequest
Body of `POST /v1/sessions`. All fields optional; unknown fields are refused with 400.
CompanyWeb ScrapingData ExtractionAPIAutomationAI
Properties
| Name | Type | Description |
|---|---|---|
| engine | object | Optional. The rendering tier to bind the session to (`fetch`, `js` or `browser`); omit it and one is chosen for you. A tier the deployment does not offer is 503 `ERR::ENGINE::UNAVAILABLE`. |
| ttl_seconds | integer | Sliding lifetime in seconds. Omitted or 0 means 1800, reduced to the organization maximum with a warning if that is lower. Values above the organization maximum (default 604800, i.e. 7 days) are refus |
| sticky_key | string | Coming soon. Pins the exit IP across the session. Letters, digits and hyphens, not starting or ending with a hyphen. Omitted means derived from the session id (still pinned). Must be unique among acti |
| region_pool | string | Coming soon. Regional exit pool to draw from. Trimmed; longer than 64 characters is refused. |
| rotate_ip | boolean | Coming soon. Keep the cookie jar but let the exit IP change between requests. Use for many-page crawls; avoid for replayed logins, which get challenged on a moving IP. Refused together with `sticky_ke |
| premium_proxy | boolean | Coming soon. Use the residential tier instead of datacenter. Same meaning as on `/v1/scrape`. |
| proxy_country | string | Coming soon. ISO 3166-1 alpha-2 exit country, case-insensitive. Requires `premium_proxy: true`, otherwise 400 `ERR::REQUEST::INCOMPATIBLE_FLAGS`. |
| fingerprint | objectnull | Browser fingerprint pin, stored verbatim. Advanced option; a non-empty object is refused with 400 where the session's rendering cannot apply it. `null` and `{}` count as absent. |
| domain_scores | object | Seed per-domain health, keyed by lowercase registrable domain (e.g. `example.com`). Scores must be non-negative. Above 64 entries, the least useful (unblocked, lowest score, oldest) are evicted rather |
| session_context | object | Initial cookies and storage, e.g. an existing login or the `session_context` from a previous `GET /v1/sessions/{id}/context`. Serialised size limit 1 MiB (413). Omitted means an empty context. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/spicrawl-com/json-schema/spicrawl-com-session-create-request-schema.json",
"title": "SessionCreateRequest",
"description": "Body of `POST /v1/sessions`. All fields optional; unknown fields are refused with 400.",
"x-generated": "2026-10-31",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/spicrawl-com-openapi.yaml#/components/schemas/SessionCreateRequest",
"type": "object",
"additionalProperties": false,
"properties": {
"engine": {
"allOf": [
{
"$ref": "#/$defs/SessionEngine"
}
],
"description": "Optional. The rendering tier to bind the session to (`fetch`, `js` or `browser`); omit it and one is chosen for you. A tier the deployment does not offer is 503 `ERR::ENGINE::UNAVAILABLE`."
},
"ttl_seconds": {
"type": "integer",
"minimum": 30,
"default": 1800,
"description": "Sliding lifetime in seconds. Omitted or 0 means 1800, reduced to the organization maximum with a warning if that is lower. Values above the organization maximum (default 604800, i.e. 7 days) are refused with 400 naming the real maximum."
},
"sticky_key": {
"type": "string",
"minLength": 2,
"maxLength": 64,
"pattern": "^[A-Za-z0-9][A-Za-z0-9-]{0,62}[A-Za-z0-9]$",
"description": "Coming soon. Pins the exit IP across the session. Letters, digits and hyphens, not starting or ending with a hyphen. Omitted means derived from the session id (still pinned). Must be unique among active sessions in the project. Cannot be combined with `rotate_ip`."
},
"region_pool": {
"type": "string",
"maxLength": 64,
"description": "Coming soon. Regional exit pool to draw from. Trimmed; longer than 64 characters is refused."
},
"rotate_ip": {
"type": "boolean",
"default": false,
"description": "Coming soon. Keep the cookie jar but let the exit IP change between requests. Use for many-page crawls; avoid for replayed logins, which get challenged on a moving IP. Refused together with `sticky_key`."
},
"premium_proxy": {
"type": "boolean",
"default": false,
"description": "Coming soon. Use the residential tier instead of datacenter. Same meaning as on `/v1/scrape`."
},
"proxy_country": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Coming soon. ISO 3166-1 alpha-2 exit country, case-insensitive. Requires `premium_proxy: true`, otherwise 400 `ERR::REQUEST::INCOMPATIBLE_FLAGS`."
},
"fingerprint": {
"type": [
"object",
"null"
],
"description": "Browser fingerprint pin, stored verbatim. Advanced option; a non-empty object is refused with 400 where the session's rendering cannot apply it. `null` and `{}` count as absent."
},
"domain_scores": {
"type": "object",
"description": "Seed per-domain health, keyed by lowercase registrable domain (e.g. `example.com`). Scores must be non-negative. Above 64 entries, the least useful (unblocked, lowest score, oldest) are evicted rather than refused.",
"additionalProperties": {
"$ref": "#/$defs/SessionDomainScore"
}
},
"session_context": {
"allOf": [
{
"$ref": "#/$defs/SessionContext"
}
],
"description": "Initial cookies and storage, e.g. an existing login or the `session_context` from a previous `GET /v1/sessions/{id}/context`. Serialised size limit 1 MiB (413). Omitted means an empty context."
}
},
"$defs": {
"SessionContext": {
"type": "object",
"description": "Everything a browser holds that makes it logged in. Maps and arrays are never null in responses.",
"properties": {
"cookies": {
"type": "array",
"maxItems": 2000,
"items": {
"$ref": "#/$defs/SessionCookie"
},
"description": "Browser-wide cookie jar. At most 2000."
},
"local_storage": {
"type": "object",
"maxProperties": 100,
"description": "Origin (bare `http(s)://host[:port]`, no path) to key/value map. At most 100 origins and 1000 keys per origin.",
"additionalProperties": {
"type": "object",
"maxProperties": 1000,
"additionalProperties": {
"type": "string"
}
}
},
"session_storage": {
"type": "object",
"maxProperties": 100,
"description": "Same shape and limits as `local_storage`. Many single-page apps keep access tokens here; include it when importing a login.",
"additionalProperties": {
"type": "object",
"maxProperties": 1000,
"additionalProperties": {
"type": "string"
}
}
},
"indexed_db": {
"type": "object",
"maxProperties": 50,
"description": "Origin to list of IndexedDB databases, each carried verbatim as JSON. At most 50 origins and 50 databases per origin. Treat as opaque.",
"additionalProperties": {
"type": "array",
"maxItems": 50,
"items": {}
}
}
}
},
"SessionCookie": {
"type": "object",
"required": [
"name",
"domain"
],
"description": "One cookie in stored spelling (`http_only`, `same_site`), not CDP spelling.",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Cookie name. Required; trimmed."
},
"value": {
"type": "string",
"description": "Cookie value."
},
"domain": {
"type": "string",
"minLength": 1,
"description": "Cookie domain; a leading dot (\".example.com\") makes it domain-wide and is preserved. Required."
},
"path": {
"type": "string",
"default": "/",
"description": "Cookie path. Empty becomes `/`."
},
"expires": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Expiry in seconds since the epoch (CDP units). Omit for a session cookie. Zero or negative values (such as CDP's -1) are treated as a session cookie and omitted."
},
"http_only": {
"type": "boolean",
"default": false,
"description": "HttpOnly flag."
},
"secure": {
"type": "boolean",
"default": false,
"description": "Secure flag. Required to be true when `same_site` is `None`."
},
"same_site": {
"type": "string",
"enum": [
"Strict",
"Lax",
"None"
],
"description": "SameSite attribute in exact CDP casing. Omit when unset; it is not defaulted. `None` without `secure: true` is refused."
}
}
},
"SessionDomainScore": {
"type": "object",
"required": [
"score",
"good",
"bad",
"last_updated",
"retired"
],
"description": "One domain's standing with the session. At a score of 3 or with `retired` true, the session is treated as blocked for that domain.",
"properties": {
"score": {
"type": "number",
"minimum": 0,
"description": "Error score; rises on failures, decays on successes. Blocked at 3."
},
"good": {
"type": "integer",
"minimum": 0,
"description": "Successful requests counted."
},
"bad": {
"type": "integer",
"minimum": 0,
"description": "Failed requests counted."
},
"last_updated": {
"type": "integer",
"format": "int64",
"description": "Last update in Unix milliseconds."
},
"retired": {
"type": "boolean",
"description": "Hard, sticky block for this domain (e.g. a 403 wall). Does not decay; use a new session for this domain."
}
}
},
"SessionEngine": {
"type": "string",
"enum": [
"fetch",
"js",
"browser"
],
"description": "The rendering tier a session is bound to for its lifetime (`fetch` is HTTP only, `js` is JavaScript rendering, `browser` is full-browser rendering). Chosen automatically when the session is created unless the create names one."
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/spicrawl-com-session-create-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.