SpideyDataAPI Reference
API navigation Crawl
CrawlEndpoints

Start a Website Crawl

POST/v1/crawl

Creates an asynchronous crawl and returns run/job metadata. Optional structured extraction runs per crawled page and item-level rows are read through /v1/crawl/{crawl_id}/items. The runtime must produce a materialized crawl plan before quota reservation; an unavailable planning runtime returns 503 without reserving quota or creating a job.

On this page

Request example

Replace placeholders with your values. Use your Team API key for authenticated requests.

API base https://kieapi.com
curl -X POST "https://kieapi.com/v1/crawl" \
  -H "Authorization: Bearer $SPIDER_API_KEY" \
  -H 'Idempotency-Key: docs-example-01' \
  -H "Content-Type: application/json" \
  -d '{
  "urls": [
    "<value>"
  ]
}'

Authentication

BearerAuth

Parameters

Idempotency-Key header ยท string
Caller-generated key for replay-safe creation. Reusing the key with the same request body returns the stored response; reusing it with a different body or while the original request is in progress returns 409.

Request body required

application/json

CrawlCreateRequest

urls array of string (uri) required
Seed URLs for the crawl. Each URL must use HTTP or HTTPS and must not contain URL userinfo (a username or password).
max_pages integer
Maximum queued pages and Credits reservation; 1 Credit per delivered page.

Default: 100

max_depth integer

Default: 0

scope string
scope defaults to same_hostname. same_hostname follows only the exact hostname. same_domain follows hosts sharing the same registrable domain, including subdomains. same_origin additionally requires the same scheme and effective port. all accepts any valid HTTP(S) URL.

Allowed: "same_hostname", "same_domain", "same_origin", "all"

Default: "same_hostname"

discover_sitemap boolean

Default: false

sitemap_url string | null (uri)
Optional explicit sitemap URL. It must use HTTP or HTTPS and must not contain URL userinfo (a username or password).
sitemap_limit integer

Default: 1000

Responses

202 Crawl accepted.

application/json

CrawlCreateResponse

run PublicRun required
crawl PublicCrawl required
400 Request validation failed.

application/json

PublicErrorResponse

error PublicError required
401 Missing or invalid API key.

application/json

PublicErrorResponse

error PublicError required
402 The Team does not have enough available Credits for the maximum reservation.

application/json

PublicErrorResponse

error PublicError required
403 Authenticated principal cannot access this resource.

application/json

PublicErrorResponse

error PublicError required
409 The idempotency key is already in progress or belongs to a different request body. In-progress Browser Session creation returns Retry-After.

application/json

PublicErrorResponse

error PublicError required
429 Monthly quota was exhausted.

application/json

PublicErrorResponse

error PublicError required
503 Required runtime service is unavailable.

application/json

PublicErrorResponse

error PublicError required

Schemas

Field definitions and complete validation rules for this API. Follow a type link to its definition.

CrawlCreateRequest

object

urls array of string (uri) required
Seed URLs for the crawl. Each URL must use HTTP or HTTPS and must not contain URL userinfo (a username or password).
max_pages integer
Maximum queued pages and Credits reservation; 1 Credit per delivered page.

Default: 100

max_depth integer

Default: 0

scope string
scope defaults to same_hostname. same_hostname follows only the exact hostname. same_domain follows hosts sharing the same registrable domain, including subdomains. same_origin additionally requires the same scheme and effective port. all accepts any valid HTTP(S) URL.

Allowed: "same_hostname", "same_domain", "same_origin", "all"

Default: "same_hostname"

discover_sitemap boolean

Default: false

sitemap_url string | null (uri)
Optional explicit sitemap URL. It must use HTTP or HTTPS and must not contain URL userinfo (a username or password).
sitemap_limit integer

Default: 1000

Complete schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "urls"
  ],
  "properties": {
    "urls": {
      "type": "array",
      "minItems": 1,
      "maxItems": 100,
      "description": "Seed URLs for the crawl. Each URL must use HTTP or HTTPS and must not contain URL userinfo (a username or password).\n",
      "items": {
        "type": "string",
        "format": "uri"
      }
    },
    "max_pages": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10000,
      "default": 100,
      "description": "Maximum queued pages and Credits reservation; 1 Credit per delivered page."
    },
    "max_depth": {
      "type": "integer",
      "minimum": 0,
      "default": 0
    },
    "scope": {
      "type": "string",
      "enum": [
        "same_hostname",
        "same_domain",
        "same_origin",
        "all"
      ],
      "default": "same_hostname",
      "description": "scope defaults to same_hostname. same_hostname follows only the exact hostname. same_domain follows hosts sharing the same registrable domain, including subdomains. same_origin additionally requires the same scheme and effective port. all accepts any valid HTTP(S) URL."
    },
    "discover_sitemap": {
      "type": "boolean",
      "default": false
    },
    "sitemap_url": {
      "type": [
        "string",
        "null"
      ],
      "format": "uri",
      "description": "Optional explicit sitemap URL. It must use HTTP or HTTPS and must not contain URL userinfo (a username or password).\n"
    },
    "sitemap_limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10000,
      "default": 1000
    },
    "browser": {
      "$ref": "#/components/schemas/BrowserOptions"
    },
    "extraction": {
      "$ref": "#/components/schemas/StructuredExtractionRequest"
    }
  }
}

BrowserOptions

object

Safe browser-render controls. These map to Spider human_behavior policy and do not expose arbitrary JavaScript, cookies, storage state, proxy URLs, user agents, or DICloak profile IDs.

wait_for_selector string | null
CSS selector that must appear before returning the rendered page.
wait_for_timeout_ms integer | null
Maximum wait for `wait_for_selector`, in milliseconds.
process_iframes boolean
Include same-origin iframe content where the renderer can safely access it.

Default: false

flatten_shadow_dom boolean
Flatten open shadow DOM content into the rendered document output.

Default: false

virtual_scroll VirtualScrollOptions
Complete schema
{
  "type": "object",
  "additionalProperties": false,
  "description": "Safe browser-render controls. These map to Spider human_behavior policy and do not expose arbitrary JavaScript, cookies, storage state, proxy URLs, user agents, or DICloak profile IDs.\n",
  "properties": {
    "wait_for_selector": {
      "type": [
        "string",
        "null"
      ],
      "minLength": 1,
      "maxLength": 1024,
      "description": "CSS selector that must appear before returning the rendered page."
    },
    "wait_for_timeout_ms": {
      "type": [
        "integer",
        "null"
      ],
      "minimum": 1,
      "maximum": 15000,
      "description": "Maximum wait for `wait_for_selector`, in milliseconds."
    },
    "process_iframes": {
      "type": "boolean",
      "default": false,
      "description": "Include same-origin iframe content where the renderer can safely access it."
    },
    "flatten_shadow_dom": {
      "type": "boolean",
      "default": false,
      "description": "Flatten open shadow DOM content into the rendered document output."
    },
    "virtual_scroll": {
      "$ref": "#/components/schemas/VirtualScrollOptions"
    }
  }
}

VirtualScrollOptions

object

container_selector string required
CSS selector for the scrollable container.
scroll_count integer

Default: 10

scroll_by string or integer

Default: "container_height"

wait_after_scroll number

Default: 0.5

Complete schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "container_selector"
  ],
  "properties": {
    "container_selector": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1024,
      "description": "CSS selector for the scrollable container."
    },
    "scroll_count": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 10
    },
    "scroll_by": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "container_height",
            "page_height"
          ]
        },
        {
          "type": "integer",
          "minimum": 1,
          "maximum": 20000
        }
      ],
      "default": "container_height"
    },
    "wait_after_scroll": {
      "type": "number",
      "minimum": 0,
      "maximum": 5,
      "default": 0.5
    }
  }
}

StructuredExtractionRequest

object

type string required

Allowed: "json_css", "llm"

raw_crawl4ai_schema object | null
Allowlisted raw Crawl4AI JsonCssExtractionStrategy schema. Only JSON schema keys for name, baseSelector, baseFields, fields, selector, source, default, scalar/list/nested field types, regex, and safe transforms are accepted. function/expression hooks are rejected.
computed_fields array of StructuredComputedField

Default: []

Complete schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "type"
  ],
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "json_css",
        "llm"
      ]
    },
    "schema": {
      "$ref": "#/components/schemas/JsonCssExtractionSchema"
    },
    "raw_crawl4ai_schema": {
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": true,
      "description": "Allowlisted raw Crawl4AI JsonCssExtractionStrategy schema. Only JSON schema keys for name, baseSelector, baseFields, fields, selector, source, default, scalar/list/nested field types, regex, and safe transforms are accepted. function/expression hooks are rejected.\n"
    },
    "computed_fields": {
      "type": "array",
      "maxItems": 100,
      "default": [],
      "items": {
        "$ref": "#/components/schemas/StructuredComputedField"
      }
    },
    "llm": {
      "anyOf": [
        {
          "$ref": "#/components/schemas/StructuredLLMExtractionOptions"
        },
        {
          "type": "null"
        }
      ]
    }
  }
}

JsonCssExtractionSchema

object

name string | null
base_selector string required
fields array of StructuredExtractionField required
Complete schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "base_selector",
    "fields"
  ],
  "properties": {
    "name": {
      "type": [
        "string",
        "null"
      ],
      "minLength": 1,
      "maxLength": 128
    },
    "base_selector": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1024
    },
    "fields": {
      "type": "array",
      "minItems": 1,
      "maxItems": 100,
      "items": {
        "$ref": "#/components/schemas/StructuredExtractionField"
      }
    }
  }
}

StructuredExtractionField

object

name string required
selector string | null
type string required

Allowed: "text", "html", "attribute", "regex", "nested", "list", "nested_list"

attribute string | null
pattern string | null
group integer | null
transform string | null

Allowed: "strip", "lowercase", "uppercase"

fields array of StructuredExtractionField or null
Complete schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "name",
    "type"
  ],
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128
    },
    "selector": {
      "type": [
        "string",
        "null"
      ],
      "minLength": 1,
      "maxLength": 1024
    },
    "type": {
      "type": "string",
      "enum": [
        "text",
        "html",
        "attribute",
        "regex",
        "nested",
        "list",
        "nested_list"
      ]
    },
    "attribute": {
      "type": [
        "string",
        "null"
      ],
      "minLength": 1,
      "maxLength": 128
    },
    "pattern": {
      "type": [
        "string",
        "null"
      ],
      "minLength": 1,
      "maxLength": 1024
    },
    "group": {
      "type": [
        "integer",
        "null"
      ],
      "minimum": 0
    },
    "transform": {
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "strip",
        "lowercase",
        "uppercase"
      ]
    },
    "fields": {
      "anyOf": [
        {
          "type": "array",
          "minItems": 1,
          "maxItems": 100,
          "items": {
            "$ref": "#/components/schemas/StructuredExtractionField"
          }
        },
        {
          "type": "null"
        }
      ]
    }
  }
}

StructuredComputedField

object

name string required
operation string required

Allowed: "template", "join", "first_non_empty"

Default: "template"

sources array of string

Default: []

template string | null
separator string

Default: ""

default string | null
transform string | null

Allowed: "strip", "lowercase", "uppercase"

Complete schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "name",
    "operation"
  ],
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128
    },
    "operation": {
      "type": "string",
      "enum": [
        "template",
        "join",
        "first_non_empty"
      ],
      "default": "template"
    },
    "sources": {
      "type": "array",
      "maxItems": 20,
      "default": [],
      "items": {
        "type": "string",
        "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*|\\[[0-9]{1,4}\\])*$"
      }
    },
    "template": {
      "type": [
        "string",
        "null"
      ],
      "minLength": 1,
      "maxLength": 2048
    },
    "separator": {
      "type": "string",
      "maxLength": 128,
      "default": ""
    },
    "default": {
      "type": [
        "string",
        "null"
      ],
      "maxLength": 2048
    },
    "transform": {
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "strip",
        "lowercase",
        "uppercase"
      ]
    }
  }
}

StructuredLLMExtractionOptions

object

name string | null
instruction string
schema object | null
JSON Schema-style target shape sent to the server-configured LLM.
extraction_type string

Allowed: "schema", "block"

Default: "schema"

input_format string

Allowed: "html", "markdown", "text", "fit_html"

Default: "html"

chunk_token_threshold integer

Default: 4096

overlap_rate number

Default: 0.1

apply_chunking boolean

Default: true

force_json_response boolean

Default: true

temperature number | null
max_tokens integer | null
Complete schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "name": {
      "type": [
        "string",
        "null"
      ],
      "minLength": 1,
      "maxLength": 128
    },
    "instruction": {
      "type": "string",
      "minLength": 1,
      "maxLength": 4096
    },
    "schema": {
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": true,
      "description": "JSON Schema-style target shape sent to the server-configured LLM."
    },
    "extraction_type": {
      "type": "string",
      "enum": [
        "schema",
        "block"
      ],
      "default": "schema"
    },
    "input_format": {
      "type": "string",
      "enum": [
        "html",
        "markdown",
        "text",
        "fit_html"
      ],
      "default": "html"
    },
    "chunk_token_threshold": {
      "type": "integer",
      "minimum": 128,
      "maximum": 200000,
      "default": 4096
    },
    "overlap_rate": {
      "type": "number",
      "minimum": 0,
      "maximum": 0.5,
      "default": 0.1
    },
    "apply_chunking": {
      "type": "boolean",
      "default": true
    },
    "force_json_response": {
      "type": "boolean",
      "default": true
    },
    "temperature": {
      "type": [
        "number",
        "null"
      ],
      "minimum": 0,
      "maximum": 2
    },
    "max_tokens": {
      "type": [
        "integer",
        "null"
      ],
      "minimum": 1,
      "maximum": 128000
    }
  }
}

CrawlCreateResponse

object

run PublicRun required
crawl PublicCrawl required
Complete schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "run",
    "crawl"
  ],
  "properties": {
    "run": {
      "$ref": "#/components/schemas/PublicRun"
    },
    "crawl": {
      "$ref": "#/components/schemas/PublicCrawl"
    }
  }
}

PublicRun

object

id string required
type PublicRunType required
status PublicStatus required
created_at string | null (date-time)
completed_at string | null (date-time)
cost_units integer | null
quota PublicQuotaReservation required
Complete schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "id",
    "type",
    "status",
    "quota"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "type": {
      "$ref": "#/components/schemas/PublicRunType"
    },
    "status": {
      "$ref": "#/components/schemas/PublicStatus"
    },
    "created_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "completed_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "cost_units": {
      "type": [
        "integer",
        "null"
      ],
      "minimum": 0
    },
    "quota": {
      "$ref": "#/components/schemas/PublicQuotaReservation"
    }
  }
}

PublicRunType

string

Complete schema
{
  "type": "string",
  "enum": [
    "fetch",
    "browser_scrape",
    "crawl"
  ]
}

PublicStatus

string

Complete schema
{
  "type": "string",
  "enum": [
    "queued",
    "running",
    "paused",
    "completed",
    "failed",
    "low_quality",
    "budget_exhausted",
    "expired"
  ]
}

PublicQuotaReservation

object

resource string required

Allowed: "scrape", "crawl"

quantity_reserved integer required
Complete schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "resource",
    "quantity_reserved"
  ],
  "properties": {
    "resource": {
      "type": "string",
      "enum": [
        "scrape",
        "crawl"
      ]
    },
    "quantity_reserved": {
      "type": "integer",
      "minimum": 1
    }
  }
}

PublicCrawl

object

id string required
run_id string | null
status PublicStatus required
submitted_url_count integer | null
queued_url_count integer | null
max_depth integer | null
queue_counts object
processed_count integer | null
remaining_count integer | null
stop_reason string | null
links object
results_url string | null
Complete schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "id",
    "status"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "run_id": {
      "type": [
        "string",
        "null"
      ]
    },
    "status": {
      "$ref": "#/components/schemas/PublicStatus"
    },
    "submitted_url_count": {
      "type": [
        "integer",
        "null"
      ],
      "minimum": 0
    },
    "queued_url_count": {
      "type": [
        "integer",
        "null"
      ],
      "minimum": 0
    },
    "max_depth": {
      "type": [
        "integer",
        "null"
      ],
      "minimum": 0
    },
    "queue_counts": {
      "type": "object",
      "additionalProperties": {
        "type": "integer"
      }
    },
    "processed_count": {
      "type": [
        "integer",
        "null"
      ],
      "minimum": 0
    },
    "remaining_count": {
      "type": [
        "integer",
        "null"
      ],
      "minimum": 0
    },
    "stop_reason": {
      "type": [
        "string",
        "null"
      ]
    },
    "diagnostics": {
      "$ref": "#/components/schemas/PublicCrawlDiagnostics"
    },
    "links": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    },
    "results_url": {
      "type": [
        "string",
        "null"
      ]
    }
  }
}

PublicCrawlDiagnostics

object

Public crawl diagnostics are sanitized aggregate counters for processed pages, blocked pages, engine attempts, and retry taxonomy. They do not expose raw selectors, profile data, proxy data, CDP URLs, DICloak/provider internals, identity feedback kinds, retry policy reasons, or raw audit attempt rows.

processed_count integer

Default: 0

blocked_count integer

Default: 0

block_reasons object
engine_attempts object
Complete schema
{
  "type": "object",
  "additionalProperties": false,
  "description": "Public crawl diagnostics are sanitized aggregate counters for processed pages, blocked pages, engine attempts, and retry taxonomy. They do not expose raw selectors, profile data, proxy data, CDP URLs, DICloak/provider internals, identity feedback kinds, retry policy reasons, or raw audit attempt rows.\n",
  "properties": {
    "processed_count": {
      "type": "integer",
      "minimum": 0,
      "default": 0
    },
    "blocked_count": {
      "type": "integer",
      "minimum": 0,
      "default": 0
    },
    "block_reasons": {
      "type": "object",
      "additionalProperties": {
        "type": "integer",
        "minimum": 0
      }
    },
    "engine_attempts": {
      "type": "object",
      "additionalProperties": {
        "type": "integer",
        "minimum": 0
      }
    },
    "retry": {
      "$ref": "#/components/schemas/PublicCrawlRetryDiagnostics"
    }
  }
}

PublicCrawlRetryDiagnostics

object

Public sanitized aggregate for crawl retry taxonomy. Counts are bucketed into safe categories and do not expose queue row internals, retry policy reasons, identity feedback kinds, or audit attempts.

scheduled_count integer

Default: 0

failed_count integer

Default: 0

categories object
next_retry_at string | null (date-time)
Complete schema
{
  "type": "object",
  "additionalProperties": false,
  "description": "Public sanitized aggregate for crawl retry taxonomy. Counts are bucketed into safe categories and do not expose queue row internals, retry policy reasons, identity feedback kinds, or audit attempts.\n",
  "properties": {
    "scheduled_count": {
      "type": "integer",
      "minimum": 0,
      "default": 0
    },
    "failed_count": {
      "type": "integer",
      "minimum": 0,
      "default": 0
    },
    "categories": {
      "type": "object",
      "additionalProperties": {
        "type": "integer",
        "minimum": 0
      }
    },
    "next_retry_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    }
  }
}

PublicErrorResponse

object

error PublicError required
Complete schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "error"
  ],
  "properties": {
    "error": {
      "$ref": "#/components/schemas/PublicError"
    }
  }
}

PublicError

object

code string required

Allowed: "seoapi_price_pending", "seoapi_unavailable", "seoapi_busy", "seoapi_not_found", "seoapi_rate_limited", "seoapi_budget_exceeded", "seoapi_idempotency_conflict", "seoapi_insufficient_credits", "seoapi_admission_failed", "seoapi_execution_interrupted", "seoapi_delivery_unknown", "seoapi_response_invalid", "seoapi_model_unsupported", "seoapi_model_options_invalid", "seoapi_provider_rejected", "seo_price_pending", "seo_provider_blocked", "seo_local_rate_limited", "seo_fallback_unavailable", "seo_fallback_budget_exceeded", "seo_pagination_expired", "seo_delivery_uncertain", "seo_auth_required", "seo_initialization_required", "seo_permission_denied", "seo_verification_required", "seo_rate_limited", "seo_upstream_unavailable", "seo_transport_failed", "seo_invalid_response", "seo_rpc_error", "seo_period_unavailable", "seo_account_unavailable", "seo_session_busy", "seo_configuration_required", "validation_error", "invalid_request", "unsupported_feature", "authentication_required", "permission_denied", "not_found", "run_not_found", "crawl_not_found", "artifact_not_found", "session_not_found", "profile_not_found", "profile_in_use", "profile_not_ready", "profile_not_cloneable", "profile_limit_reached", "profile_proxy_conflict", "proxy_not_found", "proxy_unavailable", "invalid_session_options", "invalid_query_options", "invalid_cursor", "idempotency_key_required", "browser_session_limit_reached", "browser_capacity_exhausted", "browser_start_timeout", "browser_runtime_unavailable", "session_not_active", "controller_already_connected", "browser_relay_unavailable", "precondition_required", "precondition_failed", "timeout", "run_not_ready", "artifact_expired", "quota_exceeded", "insufficient_credits", "billing_reconciliation_required", "rate_limited", "fetch_failed", "render_failed", "maps_rate_limited", "maps_challenge", "maps_schema_changed", "maps_invalid_response", "maps_transport_failed", "maps_page_budget_exhausted", "google_trends_rate_limited", "google_trends_challenge", "google_trends_explore_failed", "google_trends_widget_missing", "google_trends_related_failed", "google_trends_invalid_response", "google_trends_transport_failed", "google_trends_collection_failed", "google_ads_account_context_missing", "google_ads_batch_failed", "google_ads_browser_context_missing", "google_ads_browser_unavailable", "google_ads_collection_failed", "google_ads_page_failed", "google_ads_protocol_drift", "google_ads_rate_limited", "google_ads_timeout", "twitter_provider_unavailable", "twitter_provider_rejected", "twitter_submission_unknown", "wechat_transport_failed", "wechat_rate_limited", "wechat_invalid_response", "wechat_redirect_rejected", "wechat_verification_required", "wechat_parse_failed", "blackhatworld_search_failed", "blackhatworld_no_results", "reddit_read_failed", "idempotency_conflict", "idempotency_in_progress", "service_unavailable", "internal_error"

message string required
type string required

Allowed: "auth", "validation", "quota", "rate_limit", "not_found", "execution", "conflict", "internal"

retryable boolean required
request_id string | null
details object
Complete schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "code",
    "message",
    "type",
    "retryable"
  ],
  "properties": {
    "code": {
      "type": "string",
      "enum": [
        "seoapi_price_pending",
        "seoapi_unavailable",
        "seoapi_busy",
        "seoapi_not_found",
        "seoapi_rate_limited",
        "seoapi_budget_exceeded",
        "seoapi_idempotency_conflict",
        "seoapi_insufficient_credits",
        "seoapi_admission_failed",
        "seoapi_execution_interrupted",
        "seoapi_delivery_unknown",
        "seoapi_response_invalid",
        "seoapi_model_unsupported",
        "seoapi_model_options_invalid",
        "seoapi_provider_rejected",
        "seo_price_pending",
        "seo_provider_blocked",
        "seo_local_rate_limited",
        "seo_fallback_unavailable",
        "seo_fallback_budget_exceeded",
        "seo_pagination_expired",
        "seo_delivery_uncertain",
        "seo_auth_required",
        "seo_initialization_required",
        "seo_permission_denied",
        "seo_verification_required",
        "seo_rate_limited",
        "seo_upstream_unavailable",
        "seo_transport_failed",
        "seo_invalid_response",
        "seo_rpc_error",
        "seo_period_unavailable",
        "seo_account_unavailable",
        "seo_session_busy",
        "seo_configuration_required",
        "validation_error",
        "invalid_request",
        "unsupported_feature",
        "authentication_required",
        "permission_denied",
        "not_found",
        "run_not_found",
        "crawl_not_found",
        "artifact_not_found",
        "session_not_found",
        "profile_not_found",
        "profile_in_use",
        "profile_not_ready",
        "profile_not_cloneable",
        "profile_limit_reached",
        "profile_proxy_conflict",
        "proxy_not_found",
        "proxy_unavailable",
        "invalid_session_options",
        "invalid_query_options",
        "invalid_cursor",
        "idempotency_key_required",
        "browser_session_limit_reached",
        "browser_capacity_exhausted",
        "browser_start_timeout",
        "browser_runtime_unavailable",
        "session_not_active",
        "controller_already_connected",
        "browser_relay_unavailable",
        "precondition_required",
        "precondition_failed",
        "timeout",
        "run_not_ready",
        "artifact_expired",
        "quota_exceeded",
        "insufficient_credits",
        "billing_reconciliation_required",
        "rate_limited",
        "fetch_failed",
        "render_failed",
        "maps_rate_limited",
        "maps_challenge",
        "maps_schema_changed",
        "maps_invalid_response",
        "maps_transport_failed",
        "maps_page_budget_exhausted",
        "google_trends_rate_limited",
        "google_trends_challenge",
        "google_trends_explore_failed",
        "google_trends_widget_missing",
        "google_trends_related_failed",
        "google_trends_invalid_response",
        "google_trends_transport_failed",
        "google_trends_collection_failed",
        "google_ads_account_context_missing",
        "google_ads_batch_failed",
        "google_ads_browser_context_missing",
        "google_ads_browser_unavailable",
        "google_ads_collection_failed",
        "google_ads_page_failed",
        "google_ads_protocol_drift",
        "google_ads_rate_limited",
        "google_ads_timeout",
        "twitter_provider_unavailable",
        "twitter_provider_rejected",
        "twitter_submission_unknown",
        "wechat_transport_failed",
        "wechat_rate_limited",
        "wechat_invalid_response",
        "wechat_redirect_rejected",
        "wechat_verification_required",
        "wechat_parse_failed",
        "blackhatworld_search_failed",
        "blackhatworld_no_results",
        "reddit_read_failed",
        "idempotency_conflict",
        "idempotency_in_progress",
        "service_unavailable",
        "internal_error"
      ]
    },
    "message": {
      "type": "string"
    },
    "type": {
      "type": "string",
      "enum": [
        "auth",
        "validation",
        "quota",
        "rate_limit",
        "not_found",
        "execution",
        "conflict",
        "internal"
      ]
    },
    "retryable": {
      "type": "boolean"
    },
    "request_id": {
      "type": [
        "string",
        "null"
      ]
    },
    "details": {
      "type": "object",
      "additionalProperties": true
    }
  }
}