{
  "openapi": "3.1.0",
  "info": {
    "title": "SocialCrawl API: Instagram",
    "version": "1.0.0",
    "description": "Unified social media data API - one API key, one consistent response format, 69 platforms, 678 endpoints. Power AI agents with clean social data.\n\nThis document covers the Instagram endpoints only (43 operations). The full contract for every platform is at https://www.socialcrawl.dev/v1/openapi.json, and every per-platform document is listed at https://www.socialcrawl.dev/openapi/index.json.",
    "contact": {
      "name": "SocialCrawl",
      "url": "https://www.socialcrawl.dev",
      "email": "socialcrawl@ridio.io"
    }
  },
  "servers": [
    {
      "url": "https://www.socialcrawl.dev/v1",
      "description": "Production"
    }
  ],
  "security": [
    {
      "ApiKeyAuth": []
    },
    {
      "BearerAuth": []
    }
  ],
  "components": {
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "x-api-key",
        "description": "API key authentication. Send your key in the `x-api-key` request header on every call. Create and manage keys in the dashboard."
      },
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "The same API key sent as `Authorization: Bearer <key>`, the default in most agents and HTTP tools. Same key, same rules; when both headers are sent, `x-api-key` wins."
      }
    },
    "schemas": {
      "ErrorEnvelope": {
        "type": "object",
        "description": "Unified error response envelope. Every 4xx/5xx response returns this shape; `error.type` is a machine-readable code from the API's error catalog.",
        "properties": {
          "success": {
            "type": "boolean",
            "enum": [
              false
            ],
            "example": false,
            "description": "Always false on an error response."
          },
          "error": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "MISSING_API_KEY",
                  "INVALID_API_KEY",
                  "INSUFFICIENT_CREDITS",
                  "INVALID_REQUEST",
                  "ENDPOINT_NOT_FOUND",
                  "RESOURCE_NOT_FOUND",
                  "CONCURRENCY_LIMIT",
                  "UPSTREAM_ERROR",
                  "SERVICE_UNAVAILABLE",
                  "INTERNAL_ERROR",
                  "METHOD_NOT_ALLOWED",
                  "IDEMPOTENCY_KEY_CONFLICT",
                  "IDEMPOTENCY_IN_PROGRESS",
                  "IDEMPOTENCY_REPLAY_UNAVAILABLE",
                  "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                  "COHORT_MEMBER_LIMIT_EXCEEDED",
                  "COHORT_LIMIT_EXCEEDED",
                  "COHORT_IDENTITY_PLATFORM_UNSUPPORTED",
                  "COHORT_IDENTITY_CONFLICT",
                  "COHORT_QUERY_NOT_CANCELLABLE",
                  "COHORT_QUERY_NOT_READY",
                  "COHORT_RESULT_TOO_LARGE",
                  "PAYLOAD_TOO_LARGE",
                  "RATE_LIMITED",
                  "KEY_BUDGET_EXCEEDED",
                  "RUN_NOT_FOUND",
                  "RUN_STATE_CONFLICT",
                  "RUN_EXPIRED",
                  "NEEDS_ASYNC",
                  "CURSOR_EXPIRED",
                  "SCHEDULE_NOT_FOUND",
                  "STREAM_NOT_FOUND",
                  "STREAM_STATE_CONFLICT"
                ],
                "example": "INVALID_REQUEST",
                "description": "Machine-readable error code. The per-status `x-error-codes` list on each response narrows which codes that status can carry."
              },
              "message": {
                "type": "string",
                "description": "Human-readable explanation of the error."
              },
              "status": {
                "type": "integer",
                "description": "HTTP status code, echoed in the body."
              },
              "doc_url": {
                "type": "string",
                "description": "Link to the docs page for this error code."
              },
              "retryable": {
                "type": "boolean",
                "description": "Whether retrying the identical request can succeed. True for rate limits, concurrency limits, idempotency contention and transient upstream or server failures; false for every other code, including both 402s."
              },
              "details": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": true,
                "description": "Optional structured context. Omitted on ordinary errors. Both 402s carry `reason` (`balance_too_low` or `key_budget_reached`), `retry_will_succeed: false`, a one-sentence `next_step`, and `top_up_url` or `key_settings_url`; the GET endpoints add `credits_required`; a metered endpoint adds `pricing` (`\"ceiling\"` when the hold is the most the call can cost and the unused part is refunded, `\"exact\"` when the call is charged what it holds; measured on recent production calls), `credits_typical` (on a ceiling, what a call like this is usually charged), and, when a cheaper shape of the same request exists, `lower_cost_with`, `lower_cost_options` (`param`, `value` or null to leave it out, and `credits_required` with that change) and `credits_required_cheapest`. A `max_credits` page that switched to a cheaper form to fit (`threads/search` with `expand=false`) and still found the balance short adds `balance_fallback`: the `param` and `value` it switched to, and `credits_required` for the call as sent. A page-cap rejection carries `reason: \"page_limit\"` with `max_page`, `requested_page` and `narrow_with`. An `INVALID_REQUEST` that sends no member of a required one-of group carries `fields` (the parameters of that group) and a one-sentence `next_step`. Other endpoints use it for their own taxonomies, such as the comment-lookup not-found reasons."
              },
              "status_url": {
                "type": "string",
                "format": "uri",
                "description": "Present on 5xx responses: the public status page, filtered to the platform when one is known."
              },
              "incident": {
                "type": "object",
                "description": "Present on a 5xx response when an open public incident explains the failure.",
                "properties": {
                  "id": {
                    "type": "string",
                    "example": "k3v9w2m8q1zt"
                  },
                  "title": {
                    "type": "string"
                  },
                  "status": {
                    "type": "string",
                    "example": "investigating"
                  },
                  "impact": {
                    "type": "string",
                    "example": "major"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  }
                },
                "required": [
                  "id",
                  "title",
                  "status",
                  "impact",
                  "url"
                ]
              }
            },
            "required": [
              "type",
              "message",
              "status",
              "doc_url"
            ]
          },
          "credits_used": {
            "type": "integer",
            "description": "Net credits charged for this request. Error paths deduct-then-refund, so this is 0 in almost every case; a partial-coverage composite may keep the succeeded-leg cost."
          },
          "credits_remaining": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Credits left after this request when established. Some unauthenticated errors use null; on a prebilling route whose attempted balance lookup fails, this field is omitted instead of fabricated."
          },
          "request_id": {
            "type": "string",
            "description": "Unique request identifier - matches the X-Request-Id header. Quote it in support requests."
          }
        },
        "required": [
          "success",
          "error",
          "credits_used",
          "request_id"
        ]
      },
      "MonitorAlertRule": {
        "description": "A numeric condition evaluated against a monitor run and, for change operators, a previous comparable run.",
        "properties": {
          "metric": {
            "description": "Dot path to a numeric key in the recipe's own result, for example `coverage` or `summary.total`. On a numbers-only monitor (created with `track`) the metric must be one of `track.metrics`, and an `items[].<path>` metric is evaluated once per row: a fired alert then carries `row_id`. The special metric `rows_new` (numbers-only monitors only; it needs an `items[].` metric in `track.metrics` and is not itself tracked) counts the list rows this run has that the previous run did not: `{\"metric\":\"rows_new\",\"op\":\"gt\",\"value\":0}` alerts on any new post or video. It accepts only `gt` and `gte`, and is skipped on the first run. \"New\" means absent from the previous successful run's stored rows (capped at `max_rows`, default 100), so a row that drops off and returns later counts as new again. An empty-page run is refunded and is not a baseline, so on a sparse feed the first run that holds rows has no baseline and stays silent: the first new post after a quiet period may not alert. Use a daily cadence or leave `max_rows` headroom.",
            "type": "string"
          },
          "op": {
            "enum": [
              "gt",
              "lt",
              "gte",
              "lte",
              "abs_change_gt",
              "pct_change_gt",
              "pct_change_lt"
            ],
            "type": "string"
          },
          "value": {
            "type": "number"
          },
          "window": {
            "description": "Accepted and stored, but ignored: a change op always compares against the immediately preceding comparable run, whatever the value.",
            "enum": [
              "1d",
              "1w"
            ],
            "type": "string"
          }
        },
        "required": [
          "metric",
          "op",
          "value"
        ],
        "type": "object"
      },
      "EventEnvelope": {
        "description": "One event, identical in the feed and in every webhook batch. `id` is stable for one fact, so deduplicate on it.",
        "properties": {
          "id": {
            "description": "Deterministic event id: the same fact never mints a second event.",
            "example": "evt_k3m7q2xwcbvd4nph6trz5ycgda",
            "type": "string"
          },
          "type": {
            "description": "Dot-delimited lower-case type. Types written today: `discover.progress`, `discover.accounts_ready`, `discover.completed`, `discover.partial`, `discover.paused`, `discover.failed`, `discover.new_rows`, `discover.new_accounts`, `discover.new_items`, `discover.run_skipped`, `discover.run_failed`, `endpoint.disabled`, `mention.created`, `mention.deleted`, `stream.baseline.established`, `stream.coverage_gap`, `stream.paused`, `stream.resumed`, `stream.deleted`, `stream.budget.warning`, `stream.health`.",
            "example": "discover.completed",
            "type": "string"
          },
          "api_version": {
            "example": "2026-10-01",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "cursor": {
            "description": "The feed position right after this event. Send it as `cursor` to read what came after; an event id works too.",
            "example": "c_MS4xMi4xNzkyNDA0OTA0",
            "type": "string"
          },
          "subject": {
            "description": "The object the event is about, for example `{ kind: \"discover_run\", id: \"run_…\" }`.",
            "properties": {
              "id": {
                "type": "string"
              },
              "kind": {
                "type": "string"
              },
              "metadata": {
                "type": [
                  "object",
                  "null"
                ]
              },
              "name": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "kind",
              "id"
            ],
            "type": [
              "object",
              "null"
            ]
          },
          "data": {
            "description": "The event's facts. Discover events carry counts and ids, never keywords or row text.",
            "type": "object"
          },
          "links": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "Absolute URLs to the subject, such as `run` and `results` (for example `https://www.socialcrawl.dev/v1/prism/discover/runs/run_...`), the same in the feed and in webhook batches. Events served before 26/10/2026 carried relative paths.",
            "type": "object"
          }
        },
        "required": [
          "id",
          "type",
          "api_version",
          "created_at",
          "cursor",
          "subject",
          "data",
          "links"
        ],
        "type": "object"
      },
      "WebhookEndpoint": {
        "description": "A registered receiver. The signing secret is never part of it: it is returned once, by create and by rotate-secret.",
        "properties": {
          "id": {
            "example": "we_V1StGXR8Z5jdHi6BmyT",
            "type": "string"
          },
          "url": {
            "example": "https://example.com/hooks/socialcrawl",
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "types": {
            "description": "Subscribed event types: exact types, `ns.*` wildcards, or `*` for every type.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "subject_ids": {
            "description": "Only events about these subjects (a run or schedule id); null for every subject.",
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "status": {
            "enum": [
              "enabled",
              "disabled"
            ],
            "type": "string"
          },
          "disabled_reason": {
            "description": "`gone` (the receiver answered 410), `failing` (5 consecutive days of failed deliveries), `key_revoked` (the creating key was revoked or deleted) or `user` (set with PATCH). Null while enabled.",
            "enum": [
              "gone",
              "failing",
              "key_revoked",
              "user",
              null
            ],
            "type": [
              "string",
              "null"
            ]
          },
          "failing_since": {
            "description": "Start of the current run of failed deliveries; null while healthy.",
            "format": "date-time",
            "type": [
              "string",
              "null"
            ]
          },
          "api_version": {
            "example": "2026-10-01",
            "type": "string"
          },
          "secret_rotation": {
            "description": "Set during a rotation: until `previous_secret_expires_at` every delivery is signed with both secrets.",
            "properties": {
              "previous_secret_expires_at": {
                "format": "date-time",
                "type": "string"
              }
            },
            "type": [
              "object",
              "null"
            ]
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "next": {
            "description": "Ready relative URLs for the next calls.",
            "properties": {
              "attempts_url": {
                "type": "string"
              },
              "events_url": {
                "type": "string"
              },
              "rotate_secret_url": {
                "type": "string"
              },
              "self_url": {
                "type": "string"
              },
              "test_url": {
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "id",
          "url",
          "types",
          "status",
          "api_version",
          "created_at"
        ],
        "type": "object"
      },
      "WebhookAttempt": {
        "description": "One delivery attempt. `response_excerpt` is at most 1 KB of your receiver's answer.",
        "properties": {
          "id": {
            "type": "string"
          },
          "delivery_id": {
            "description": "The batch's `webhook-id`, the same on every retry.",
            "type": "string"
          },
          "test": {
            "type": "boolean"
          },
          "status": {
            "description": "Your receiver's HTTP status; null for a timeout, a refused host, a network error or a secret that could not be opened.",
            "type": [
              "integer",
              "null"
            ]
          },
          "outcome": {
            "enum": [
              "delivered",
              "failed",
              "gone",
              "retry_after",
              "timeout",
              "redirect",
              "refused_host",
              "secret_unavailable",
              "network_error"
            ],
            "type": "string"
          },
          "duration_ms": {
            "type": [
              "integer",
              "null"
            ]
          },
          "response_excerpt": {
            "type": [
              "string",
              "null"
            ]
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "id",
          "delivery_id",
          "test",
          "status",
          "outcome",
          "created_at"
        ],
        "type": "object"
      },
      "EventBatch": {
        "description": "What every delivery carries, also for one event: at most 100 events or 256 KB. Each inner event keeps its own `id` and `cursor`; deduplicate on the inner ids. A test send marks its event `\"test\": true` with `\"cursor\": null`.",
        "properties": {
          "id": {
            "example": "bat_V1StGXR8Z5jdHi6BmyT",
            "type": "string"
          },
          "type": {
            "const": "event.batch",
            "type": "string"
          },
          "data": {
            "properties": {
              "events": {
                "items": {
                  "$ref": "#/components/schemas/EventEnvelope"
                },
                "maxItems": 100,
                "type": "array"
              }
            },
            "required": [
              "events"
            ],
            "type": "object"
          }
        },
        "required": [
          "id",
          "type",
          "data"
        ],
        "type": "object"
      },
      "ListeningRuleAst": {
        "description": "A rule as a tree of `and`, `or`, `not`, `term`, `phrase` and `field` nodes, as the dry run returns it in `data.stream.groups[].ast`.",
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "and": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ListeningRuleAst"
                }
              }
            },
            "required": [
              "and"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "or": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ListeningRuleAst"
                }
              }
            },
            "required": [
              "or"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "not": {
                "$ref": "#/components/schemas/ListeningRuleAst"
              }
            },
            "required": [
              "not"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "term": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "term"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "phrase": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "phrase"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "field": {
                "type": "string",
                "enum": [
                  "lang",
                  "country",
                  "platform",
                  "site",
                  "community"
                ]
              },
              "value": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "field",
              "value"
            ],
            "additionalProperties": false
          }
        ]
      }
    }
  },
  "tags": [
    {
      "name": "instagram",
      "description": "Instagram endpoints"
    }
  ],
  "paths": {
    "/instagram/profile": {
      "get": {
        "summary": "Get Instagram user profile",
        "description": "Returns public profile information for an Instagram user including the exact integer follower count, following count, bio, profile picture URL, and verification status. `author.posts_count` is the account's lifetime post count, for accounts of any size, in the same call and for the same 1 credit. In the rare case that count cannot be read in time the leaf is null rather than a wrong number, and a repeat call normally fills it. Age-restricted (18+) profiles are supported. Every link in the bio is listed in `author.ext.bio_links` (`{ title, url, link_type }`, the direct address), the Facebook-side id of the account is `author.ext.fbid`, and `author.ext.is_business` says whether it is an Instagram business account. `author.ext.hd_avatar_url` is the full-size profile picture. When the account publishes a contact address in its bio, it is returned as `author.ext.public_email`; otherwise that leaf is null. Instagram's in-app tap-to-email button is not readable from any public surface, so the bio is the only source for it. To vet a creator by market, call /v1/instagram/profile/about instead: it returns the follower count and the declared country in one call, at the same price, so there is no need to call both.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_profile",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 1,
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": true,
            "description": "Instagram username without the @ symbol",
            "schema": {
              "type": "string"
            },
            "example": "instagram"
          },
          {
            "name": "trim",
            "in": "query",
            "required": false,
            "description": "Set to true to skip the recent-posts read. The profile comes back faster, at the same price, with `author.last_post_at` and `computed.engagement_rate` null.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "contact_email",
            "in": "query",
            "required": false,
            "description": "Optional. When 1, also returns author.ext.contact_email: when the bio lists two or more email addresses, the one the creator gives for contacting them personally, copied verbatim from the bio. Null when there is one address or none, when every address belongs to a manager, agency or brand, or when the choice was not confident. author.ext.public_email is unchanged. No extra credits.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ]
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/profile"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Platform-specific user ID (always a string; platform-specific prefixes like `did:`, `spotify:artist:`, `t2_` are stripped)"
                        },
                        "username": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "User handle or username"
                        },
                        "display_name": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Display name or full name"
                        },
                        "avatar_url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "URL to profile picture"
                        },
                        "bio": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Profile biography or description"
                        },
                        "verified": {
                          "type": [
                            "boolean",
                            "null"
                          ],
                          "description": "Whether the account is verified"
                        },
                        "followers": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Follower or subscriber count as an integer. Exact on Instagram and on TikTok when the source exposes an unrounded figure. YouTube above 1,000 subscribers is YouTube's published three-significant-figure figure. When the integer is a published/rounded value, `author.ext.followers_approximate` is true."
                        },
                        "following": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Number of accounts followed"
                        },
                        "posts_count": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of posts / videos / tracks / episodes"
                        },
                        "likes_count": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total likes received across the author's content (when surfaced)"
                        },
                        "url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Direct URL to the profile page"
                        },
                        "location": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "ISO region code (e.g. `US`) or freeform location string when surfaced"
                        },
                        "external_url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Bio link / external website URL when surfaced by the platform"
                        },
                        "private": {
                          "type": [
                            "boolean",
                            "null"
                          ],
                          "description": "Boolean at author.private"
                        },
                        "joined_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "String at author.joined_at"
                        },
                        "last_post_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "String at author.last_post_at"
                        },
                        "ext": {
                          "type": [
                            "object",
                            "null"
                          ],
                          "description": "Nested object: author.ext",
                          "properties": {
                            "social_context": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.social_context"
                            },
                            "account_created": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.account_created"
                            },
                            "country": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.country"
                            },
                            "country_name": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.country_name"
                            },
                            "collects_received": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.collects_received"
                            },
                            "former_usernames": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.former_usernames",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.former_usernames"
                              }
                            },
                            "former_usernames_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram profile/about: how many former usernames Instagram's \"About this account\" panel lists for the account. 0 when the panel lists none, null when the panel could not be read on this call (the response then carries a note saying so). A count above 0 means the handle was renamed at least once; the names themselves are not published."
                            },
                            "verified_at": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Instagram profile/about, opt-in (`include=verified_at`): the month Instagram verified the account, as the panel shows it (\"April 2024\"). A month, not a date. Null when the account is not verified or the panel shows no verification date. Absent unless requested."
                            },
                            "public_email": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.public_email"
                            },
                            "contact_email": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Opt-in (`contact_email=1` on instagram/profile, youtube/channel and youtube/channel/about). When the bio lists two or more email addresses, the one the creator gives for contacting them personally, copied verbatim. Null when there is one address or none, when every address belongs to a manager, agency or brand, or when the choice was not confident. `author.ext.public_email` (the first address in the bio) is unchanged."
                            },
                            "public_phone": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.public_phone"
                            },
                            "similar_source": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.similar_source"
                            },
                            "instagram_username": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.instagram_username"
                            },
                            "similar_via": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.similar_via"
                            },
                            "business_category": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.business_category"
                            },
                            "bio_links": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.bio_links",
                              "items": {
                                "type": "object",
                                "description": "Nested object: author.ext.bio_links",
                                "properties": {
                                  "title": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.ext.bio_links.title"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.ext.bio_links.url"
                                  },
                                  "link_type": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.ext.bio_links.link_type"
                                  }
                                }
                              }
                            },
                            "is_business": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_business"
                            },
                            "is_professional": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_professional"
                            },
                            "creator_marketplace": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.creator_marketplace"
                            },
                            "verification_label": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.verification_label"
                            },
                            "fbid": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.fbid"
                            },
                            "hd_avatar_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.hd_avatar_url"
                            },
                            "website": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.website"
                            },
                            "cover_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.cover_url"
                            },
                            "page_active": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.page_active"
                            },
                            "employee_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.employee_count"
                            },
                            "employee_count_range": {
                              "type": [
                                "object",
                                "null"
                              ],
                              "description": "Nested object: author.ext.employee_count_range",
                              "properties": {
                                "start": {
                                  "type": [
                                    "integer",
                                    "null"
                                  ],
                                  "description": "Numeric at author.ext.employee_count_range.start"
                                },
                                "end": {
                                  "type": [
                                    "integer",
                                    "null"
                                  ],
                                  "description": "Numeric at author.ext.employee_count_range.end"
                                }
                              }
                            },
                            "founded_year": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.founded_year"
                            },
                            "company_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.company_type"
                            },
                            "tagline": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.tagline"
                            },
                            "specialities": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.specialities",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.specialities"
                              }
                            },
                            "industries": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.industries",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.industries"
                              }
                            },
                            "headquarters": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.headquarters"
                            },
                            "locations": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.locations",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.locations"
                              }
                            },
                            "hashtags": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.hashtags",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.hashtags"
                              }
                            },
                            "funding": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.funding"
                            },
                            "address": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.address"
                            },
                            "price_range": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.price_range"
                            },
                            "rating": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.rating"
                            },
                            "rating_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.rating_count"
                            },
                            "talking_about_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.talking_about_count"
                            },
                            "business_hours": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.business_hours",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.business_hours"
                              }
                            },
                            "links": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.links",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.links"
                              }
                            },
                            "ad_library_page_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.ad_library_page_id"
                            },
                            "ad_library_status": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.ad_library_status"
                            },
                            "urn": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.urn"
                            },
                            "is_top_voice": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_top_voice"
                            },
                            "is_premium": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_premium"
                            },
                            "is_creator": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_creator"
                            },
                            "is_influencer": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_influencer"
                            },
                            "is_open_to_work": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_open_to_work"
                            },
                            "is_hiring": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_hiring"
                            },
                            "member_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.member_id"
                            },
                            "company_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.company_id"
                            },
                            "reaction_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.reaction_type"
                            },
                            "followers_approximate": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "True when `author.followers` is a published or rounded figure rather than an unrounded census: LinkedIn people-list display buckets, TikTok `stats.followerCount` when the exact sibling is absent, and YouTube subscriber counts at or above 1,000. Null or absent on exact counts."
                            },
                            "counts_source": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok profile only. Which of TikTok's two live counter sets `author.followers`, `author.following`, `author.likes_count` and `author.posts_count` carry: `app` (TikTok's app counters, the default) or `web` (the website's `statsV2`, returned with `counts=web`). The two sets can differ by a few percent in either direction."
                            },
                            "keywords": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.keywords"
                            },
                            "total_views": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.total_views"
                            },
                            "joined_at_timestamp": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.joined_at_timestamp"
                            },
                            "topicCategories": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.topicCategories",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.topicCategories"
                              }
                            },
                            "bannerExternalUrl": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.bannerExternalUrl"
                            },
                            "madeForKids": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.madeForKids"
                            },
                            "hiddenSubscriberCount": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.hiddenSubscriberCount"
                            },
                            "related_playlists": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.related_playlists"
                            },
                            "topic_ids": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.topic_ids",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.topic_ids"
                              }
                            },
                            "unsubscribed_trailer": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.unsubscribed_trailer"
                            },
                            "localizations": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.localizations"
                            },
                            "monthly_listeners": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.monthly_listeners"
                            },
                            "total_ratings": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Spotify podcasts only: how many listeners have rated the show. Cumulative over the show's whole run, so it reflects longevity as well as size, and it is NOT an audience count (Spotify publishes no play, download, subscriber or follower count for a podcast)"
                            },
                            "average_rating": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Spotify podcasts only: mean listener rating from 0 to 5. Fractional (e.g. 4.66) despite the integer type this schema emits for every numeric leaf"
                            },
                            "creator_username": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.creator_username"
                            },
                            "join_policy": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.join_policy"
                            },
                            "is_nsfw": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_nsfw"
                            },
                            "rules": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.rules",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.rules"
                              }
                            },
                            "weekly_active_users": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.weekly_active_users"
                            },
                            "weekly_contributions": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.weekly_contributions"
                            },
                            "rules_text": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.rules_text"
                            },
                            "language": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.language"
                            },
                            "post_karma": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.post_karma"
                            },
                            "comment_karma": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.comment_karma"
                            },
                            "awardee_karma": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.awardee_karma"
                            },
                            "trophy_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.trophy_count"
                            },
                            "banner_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.banner_url"
                            },
                            "profile_title": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.profile_title"
                            },
                            "social_links": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.social_links",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.social_links"
                              }
                            },
                            "bio_link": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.bio_link"
                            },
                            "embed_html": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.embed_html"
                            },
                            "embed_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.embed_url"
                            },
                            "group": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.group"
                            },
                            "search_hit": {
                              "type": [
                                "object",
                                "null"
                              ],
                              "description": "Nested object: author.ext.search_hit",
                              "properties": {
                                "match": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "description": "Leaf at author.ext.search_hit.match"
                                },
                                "title": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "description": "String at author.ext.search_hit.title"
                                },
                                "snippet": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "description": "String at author.ext.search_hit.snippet"
                                },
                                "evidence_url": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "description": "String at author.ext.search_hit.evidence_url"
                                },
                                "matched_urls": {
                                  "type": [
                                    "array",
                                    "null"
                                  ],
                                  "description": "Array at author.ext.search_hit.matched_urls",
                                  "items": {
                                    "type": "string",
                                    "description": "String at author.ext.search_hit.matched_urls"
                                  }
                                }
                              }
                            },
                            "blog_name": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.blog_name"
                            },
                            "blog_no": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.blog_no"
                            },
                            "visitors_today": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.visitors_today"
                            },
                            "visitors_total": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.visitors_total"
                            },
                            "topic": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.topic"
                            },
                            "power_blog": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.power_blog"
                            },
                            "official_blog": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.official_blog"
                            }
                          }
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      }
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/profile",
                  "data": {
                    "author": {
                      "id": "25025320",
                      "username": "instagram",
                      "display_name": "Instagram",
                      "avatar_url": "https://scontent-lga3-2.cdninstagram.com/v/t51.82787-19/550891366_18667771684001321_1383210656577177067_n.jpg?_nc_cat=1&ccb=7-5&_nc_sid=bf7eb4&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLnd3dy4xMDgwLkMzIn0%3D&_nc_ohc=_dBpg1akaE4Q7kNvwFYM7uD&_nc_oc=Adon7FyLdWoU4qlxV71upGICROogjL2FcBl8yxsbgAED8LO-iYDUQwdh-6fE2_5ZogQ&_nc_zt=24&_nc_ht=scontent-lga3-2.cdninstagram.com&_nc_gid=uZUdmerubWJW2Oihg78ZEA&_nc_ss=78a8c&oh=00_AQMqWYj2lI4SCSE84OaU1qQgetf8XJfEEQiNQv8y9mYjlA&oe=6AC59627",
                      "bio": "Discover what's new on Instagram 🔎✨",
                      "verified": true,
                      "followers": 686584866,
                      "following": 305,
                      "posts_count": 8612,
                      "likes_count": null,
                      "url": "http://help.instagram.com",
                      "private": false,
                      "joined_at": null,
                      "last_post_at": "2026-10-01T15:59:45.000Z",
                      "ext": {
                        "business_category": null
                      }
                    },
                    "computed": {
                      "engagement_rate": null,
                      "language": "de",
                      "content_category": "other",
                      "estimated_reach": null
                    }
                  },
                  "credits_used": 1,
                  "request_id": "req_example000000",
                  "cached": false,
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T15:37:22.521Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/profile/about": {
      "get": {
        "summary": "Get Instagram account transparency details",
        "description": "Returns the data behind Instagram's \"About this account\" panel for a public account: the country the account is based in (`author.ext.country`, an ISO 3166-1 alpha-2 code such as `KR`, with the English name in `author.ext.country_name`), the month it joined (`author.ext.account_created`), the public contact address and phone the account publishes (`author.ext.public_email`, `author.ext.public_phone`), and the link in its bio (`author.external_url`, with the full list in `author.ext.bio_links`). Country is the account's own declared country, not the country you are calling from. The same call returns the profile itself: follower and following counts (`author.followers`), bio, avatar, verification, and the account's lifetime post count as `author.posts_count`. It gives the follower count and the declared country in one call, so there is no need to call /v1/instagram/profile as well. Coverage follows what Instagram publishes: an account that shows no transparency panel returns null for those fields. `author.ext.former_usernames_count` is how many former usernames the panel lists, 0 when it lists none, so a count above 0 tells you the handle was renamed at least once (the old names themselves are not published). Send `include=verified_at` to add `author.ext.verified_at`, the month Instagram verified the account as the panel shows it (\"April 2024\"), null when the account is not verified or the panel shows no date. Only one source serves `include=verified_at`, so when it is unavailable the call returns an error at no charge rather than a profile without the date; the same request without it still works.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_profile_about",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 1,
        "x-credit-cost-formula": "1 credit per call, with or without `include=verified_at`. A call that fails, a handle that does not exist and a refused parameter cost nothing.",
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": true,
            "description": "Instagram username without the @ symbol",
            "schema": {
              "type": "string"
            },
            "example": "instagram"
          },
          {
            "name": "include",
            "in": "query",
            "required": false,
            "description": "Send `verified_at` to add `author.ext.verified_at`, the month Instagram verified the account (\"April 2024\"). Same price. Any other value is a free 400.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/profile/about"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Platform-specific user ID (always a string; platform-specific prefixes like `did:`, `spotify:artist:`, `t2_` are stripped)"
                        },
                        "username": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "User handle or username"
                        },
                        "display_name": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Display name or full name"
                        },
                        "avatar_url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "URL to profile picture"
                        },
                        "bio": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Profile biography or description"
                        },
                        "verified": {
                          "type": [
                            "boolean",
                            "null"
                          ],
                          "description": "Whether the account is verified"
                        },
                        "followers": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Follower or subscriber count as an integer. Exact on Instagram and on TikTok when the source exposes an unrounded figure. YouTube above 1,000 subscribers is YouTube's published three-significant-figure figure. When the integer is a published/rounded value, `author.ext.followers_approximate` is true."
                        },
                        "following": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Number of accounts followed"
                        },
                        "posts_count": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of posts / videos / tracks / episodes"
                        },
                        "likes_count": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total likes received across the author's content (when surfaced)"
                        },
                        "url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Direct URL to the profile page"
                        },
                        "location": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "ISO region code (e.g. `US`) or freeform location string when surfaced"
                        },
                        "external_url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Bio link / external website URL when surfaced by the platform"
                        },
                        "private": {
                          "type": [
                            "boolean",
                            "null"
                          ],
                          "description": "Boolean at author.private"
                        },
                        "joined_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "String at author.joined_at"
                        },
                        "last_post_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "String at author.last_post_at"
                        },
                        "ext": {
                          "type": [
                            "object",
                            "null"
                          ],
                          "description": "Nested object: author.ext",
                          "properties": {
                            "social_context": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.social_context"
                            },
                            "account_created": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.account_created"
                            },
                            "country": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.country"
                            },
                            "country_name": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.country_name"
                            },
                            "collects_received": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.collects_received"
                            },
                            "former_usernames": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.former_usernames",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.former_usernames"
                              }
                            },
                            "former_usernames_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram profile/about: how many former usernames Instagram's \"About this account\" panel lists for the account. 0 when the panel lists none, null when the panel could not be read on this call (the response then carries a note saying so). A count above 0 means the handle was renamed at least once; the names themselves are not published."
                            },
                            "verified_at": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Instagram profile/about, opt-in (`include=verified_at`): the month Instagram verified the account, as the panel shows it (\"April 2024\"). A month, not a date. Null when the account is not verified or the panel shows no verification date. Absent unless requested."
                            },
                            "public_email": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.public_email"
                            },
                            "contact_email": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Opt-in (`contact_email=1` on instagram/profile, youtube/channel and youtube/channel/about). When the bio lists two or more email addresses, the one the creator gives for contacting them personally, copied verbatim. Null when there is one address or none, when every address belongs to a manager, agency or brand, or when the choice was not confident. `author.ext.public_email` (the first address in the bio) is unchanged."
                            },
                            "public_phone": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.public_phone"
                            },
                            "similar_source": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.similar_source"
                            },
                            "instagram_username": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.instagram_username"
                            },
                            "similar_via": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.similar_via"
                            },
                            "business_category": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.business_category"
                            },
                            "bio_links": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.bio_links",
                              "items": {
                                "type": "object",
                                "description": "Nested object: author.ext.bio_links",
                                "properties": {
                                  "title": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.ext.bio_links.title"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.ext.bio_links.url"
                                  },
                                  "link_type": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.ext.bio_links.link_type"
                                  }
                                }
                              }
                            },
                            "is_business": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_business"
                            },
                            "is_professional": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_professional"
                            },
                            "creator_marketplace": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.creator_marketplace"
                            },
                            "verification_label": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.verification_label"
                            },
                            "fbid": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.fbid"
                            },
                            "hd_avatar_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.hd_avatar_url"
                            },
                            "website": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.website"
                            },
                            "cover_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.cover_url"
                            },
                            "page_active": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.page_active"
                            },
                            "employee_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.employee_count"
                            },
                            "employee_count_range": {
                              "type": [
                                "object",
                                "null"
                              ],
                              "description": "Nested object: author.ext.employee_count_range",
                              "properties": {
                                "start": {
                                  "type": [
                                    "integer",
                                    "null"
                                  ],
                                  "description": "Numeric at author.ext.employee_count_range.start"
                                },
                                "end": {
                                  "type": [
                                    "integer",
                                    "null"
                                  ],
                                  "description": "Numeric at author.ext.employee_count_range.end"
                                }
                              }
                            },
                            "founded_year": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.founded_year"
                            },
                            "company_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.company_type"
                            },
                            "tagline": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.tagline"
                            },
                            "specialities": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.specialities",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.specialities"
                              }
                            },
                            "industries": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.industries",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.industries"
                              }
                            },
                            "headquarters": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.headquarters"
                            },
                            "locations": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.locations",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.locations"
                              }
                            },
                            "hashtags": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.hashtags",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.hashtags"
                              }
                            },
                            "funding": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.funding"
                            },
                            "address": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.address"
                            },
                            "price_range": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.price_range"
                            },
                            "rating": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.rating"
                            },
                            "rating_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.rating_count"
                            },
                            "talking_about_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.talking_about_count"
                            },
                            "business_hours": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.business_hours",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.business_hours"
                              }
                            },
                            "links": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.links",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.links"
                              }
                            },
                            "ad_library_page_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.ad_library_page_id"
                            },
                            "ad_library_status": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.ad_library_status"
                            },
                            "urn": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.urn"
                            },
                            "is_top_voice": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_top_voice"
                            },
                            "is_premium": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_premium"
                            },
                            "is_creator": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_creator"
                            },
                            "is_influencer": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_influencer"
                            },
                            "is_open_to_work": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_open_to_work"
                            },
                            "is_hiring": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_hiring"
                            },
                            "member_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.member_id"
                            },
                            "company_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.company_id"
                            },
                            "reaction_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.reaction_type"
                            },
                            "followers_approximate": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "True when `author.followers` is a published or rounded figure rather than an unrounded census: LinkedIn people-list display buckets, TikTok `stats.followerCount` when the exact sibling is absent, and YouTube subscriber counts at or above 1,000. Null or absent on exact counts."
                            },
                            "counts_source": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok profile only. Which of TikTok's two live counter sets `author.followers`, `author.following`, `author.likes_count` and `author.posts_count` carry: `app` (TikTok's app counters, the default) or `web` (the website's `statsV2`, returned with `counts=web`). The two sets can differ by a few percent in either direction."
                            },
                            "keywords": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.keywords"
                            },
                            "total_views": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.total_views"
                            },
                            "joined_at_timestamp": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.joined_at_timestamp"
                            },
                            "topicCategories": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.topicCategories",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.topicCategories"
                              }
                            },
                            "bannerExternalUrl": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.bannerExternalUrl"
                            },
                            "madeForKids": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.madeForKids"
                            },
                            "hiddenSubscriberCount": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.hiddenSubscriberCount"
                            },
                            "related_playlists": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.related_playlists"
                            },
                            "topic_ids": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.topic_ids",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.topic_ids"
                              }
                            },
                            "unsubscribed_trailer": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.unsubscribed_trailer"
                            },
                            "localizations": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.localizations"
                            },
                            "monthly_listeners": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.monthly_listeners"
                            },
                            "total_ratings": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Spotify podcasts only: how many listeners have rated the show. Cumulative over the show's whole run, so it reflects longevity as well as size, and it is NOT an audience count (Spotify publishes no play, download, subscriber or follower count for a podcast)"
                            },
                            "average_rating": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Spotify podcasts only: mean listener rating from 0 to 5. Fractional (e.g. 4.66) despite the integer type this schema emits for every numeric leaf"
                            },
                            "creator_username": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.creator_username"
                            },
                            "join_policy": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.join_policy"
                            },
                            "is_nsfw": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_nsfw"
                            },
                            "rules": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.rules",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.rules"
                              }
                            },
                            "weekly_active_users": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.weekly_active_users"
                            },
                            "weekly_contributions": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.weekly_contributions"
                            },
                            "rules_text": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.rules_text"
                            },
                            "language": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.language"
                            },
                            "post_karma": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.post_karma"
                            },
                            "comment_karma": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.comment_karma"
                            },
                            "awardee_karma": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.awardee_karma"
                            },
                            "trophy_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.trophy_count"
                            },
                            "banner_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.banner_url"
                            },
                            "profile_title": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.profile_title"
                            },
                            "social_links": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.social_links",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.social_links"
                              }
                            },
                            "bio_link": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.bio_link"
                            },
                            "embed_html": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.embed_html"
                            },
                            "embed_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.embed_url"
                            },
                            "group": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.group"
                            },
                            "search_hit": {
                              "type": [
                                "object",
                                "null"
                              ],
                              "description": "Nested object: author.ext.search_hit",
                              "properties": {
                                "match": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "description": "Leaf at author.ext.search_hit.match"
                                },
                                "title": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "description": "String at author.ext.search_hit.title"
                                },
                                "snippet": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "description": "String at author.ext.search_hit.snippet"
                                },
                                "evidence_url": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "description": "String at author.ext.search_hit.evidence_url"
                                },
                                "matched_urls": {
                                  "type": [
                                    "array",
                                    "null"
                                  ],
                                  "description": "Array at author.ext.search_hit.matched_urls",
                                  "items": {
                                    "type": "string",
                                    "description": "String at author.ext.search_hit.matched_urls"
                                  }
                                }
                              }
                            },
                            "blog_name": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.blog_name"
                            },
                            "blog_no": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.blog_no"
                            },
                            "visitors_today": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.visitors_today"
                            },
                            "visitors_total": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.visitors_total"
                            },
                            "topic": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.topic"
                            },
                            "power_blog": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.power_blog"
                            },
                            "official_blog": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.official_blog"
                            }
                          }
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      }
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/profile/about",
                  "data": {
                    "author": {
                      "id": "25025320",
                      "username": "instagram",
                      "display_name": "Instagram",
                      "avatar_url": "https://scontent-iad6-1.cdninstagram.com/v/t51.82787-19/550891366_18667771684001321_1383210656577177067_n.jpg?efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-iad6-1.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2gH_r93BIBuaBIfRouf6XObOBfI8RefXxhSv4L1LATZG5ypXa0DLfHayuGyKE2atvDw&_nc_ohc=q2IW4mzP_wkQ7kNvwHu1yIH&_nc_gid=1beB4Q3XaICpi9-0PKJm8A&edm=APs17CUBAAAA&ccb=7-5&ig_cache_key=GGbv1SApFvlLPVJCAOtF0XrDJjITbmNDAQAB0j-ccb7-5&oh=00_AQM2uz2jL3Mjjj7ekjA-B7fbqKkTO2_vLJ7KVLO2iRYHZg&oe=6AC59627&_nc_sid=10d13b",
                      "bio": "Discover what's new on Instagram 🔎✨",
                      "verified": true,
                      "followers": 686587747,
                      "following": 305,
                      "posts_count": 8612,
                      "likes_count": null,
                      "url": "https://www.instagram.com/instagram/",
                      "private": false,
                      "ext": {
                        "account_created": "February 2012",
                        "country": "United States",
                        "public_email": null,
                        "public_phone": null,
                        "business_category": null,
                        "hd_avatar_url": "https://scontent-iad6-1.cdninstagram.com/v/t51.82787-19/550891366_18667771684001321_1383210656577177067_n.jpg?efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-iad6-1.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2gH_r93BIBuaBIfRouf6XObOBfI8RefXxhSv4L1LATZG5ypXa0DLfHayuGyKE2atvDw&_nc_ohc=q2IW4mzP_wkQ7kNvwHu1yIH&_nc_gid=1beB4Q3XaICpi9-0PKJm8A&edm=APs17CUBAAAA&ccb=7-5&ig_cache_key=GGbv1SApFvlLPVJCAOtF0XrDJjITbmNDAQAB0j-ccb7-5&oh=00_AQM2uz2jL3Mjjj7ekjA-B7fbqKkTO2_vLJ7KVLO2iRYHZg&oe=6AC59627&_nc_sid=10d13b"
                      }
                    },
                    "computed": {
                      "engagement_rate": null,
                      "language": "de",
                      "content_category": "other",
                      "estimated_reach": null
                    }
                  },
                  "credits_used": 1,
                  "request_id": "req_example000000",
                  "cached": false,
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T15:37:17.812Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/profile/country": {
      "get": {
        "summary": "Get the country an Instagram account declares, by user id",
        "description": "Returns the country an Instagram account declares on its \"About this account\" panel (`author.ext.country`, an ISO 3166-1 alpha-2 code, with the English name in `author.ext.country_name`), the month it joined (`author.ext.account_created`), its username, its profile link and its verified flag, for 1 credit. Pass the numeric account id as `user_id`: every Instagram search row carries it as `post.ext.author_id`, and /v1/instagram/profile/about returns it as `author.id`. Country is the account's own declared country, not where a post was filmed and not the country you are calling from, and it is null when the account shows no transparency panel. This endpoint reads the panel only, so followers, bio, avatar, posts count and the public email and phone are not on it; for those, call /v1/instagram/profile/about with the username. A username is refused at no charge with a pointer to /v1/instagram/profile/about. Only one source serves this read, so there is no second source to fall back to when it is unavailable.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_profile_country",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 1,
        "x-credit-cost-formula": "1 credit per call. A refused username or a missing `user_id` costs nothing.",
        "x-socialcrawl-oneOf": [
          [
            "user_id"
          ]
        ],
        "parameters": [
          {
            "name": "user_id",
            "in": "query",
            "required": false,
            "description": "The numeric Instagram account id, for example `post.ext.author_id` from a search row or `author.id` from /v1/instagram/profile/about. A username is refused at no charge. (one of: user_id; at least one required)",
            "schema": {
              "type": "string"
            },
            "example": "25025320"
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/profile/country"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Platform-specific user ID (always a string; platform-specific prefixes like `did:`, `spotify:artist:`, `t2_` are stripped)"
                        },
                        "username": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "User handle or username"
                        },
                        "display_name": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Display name or full name"
                        },
                        "avatar_url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "URL to profile picture"
                        },
                        "bio": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Profile biography or description"
                        },
                        "verified": {
                          "type": [
                            "boolean",
                            "null"
                          ],
                          "description": "Whether the account is verified"
                        },
                        "followers": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Follower or subscriber count as an integer. Exact on Instagram and on TikTok when the source exposes an unrounded figure. YouTube above 1,000 subscribers is YouTube's published three-significant-figure figure. When the integer is a published/rounded value, `author.ext.followers_approximate` is true."
                        },
                        "following": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Number of accounts followed"
                        },
                        "posts_count": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of posts / videos / tracks / episodes"
                        },
                        "likes_count": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total likes received across the author's content (when surfaced)"
                        },
                        "url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Direct URL to the profile page"
                        },
                        "location": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "ISO region code (e.g. `US`) or freeform location string when surfaced"
                        },
                        "external_url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Bio link / external website URL when surfaced by the platform"
                        },
                        "private": {
                          "type": [
                            "boolean",
                            "null"
                          ],
                          "description": "Boolean at author.private"
                        },
                        "joined_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "String at author.joined_at"
                        },
                        "last_post_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "String at author.last_post_at"
                        },
                        "ext": {
                          "type": [
                            "object",
                            "null"
                          ],
                          "description": "Nested object: author.ext",
                          "properties": {
                            "social_context": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.social_context"
                            },
                            "account_created": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.account_created"
                            },
                            "country": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.country"
                            },
                            "country_name": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.country_name"
                            },
                            "collects_received": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.collects_received"
                            },
                            "former_usernames": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.former_usernames",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.former_usernames"
                              }
                            },
                            "former_usernames_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram profile/about: how many former usernames Instagram's \"About this account\" panel lists for the account. 0 when the panel lists none, null when the panel could not be read on this call (the response then carries a note saying so). A count above 0 means the handle was renamed at least once; the names themselves are not published."
                            },
                            "verified_at": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Instagram profile/about, opt-in (`include=verified_at`): the month Instagram verified the account, as the panel shows it (\"April 2024\"). A month, not a date. Null when the account is not verified or the panel shows no verification date. Absent unless requested."
                            },
                            "public_email": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.public_email"
                            },
                            "contact_email": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Opt-in (`contact_email=1` on instagram/profile, youtube/channel and youtube/channel/about). When the bio lists two or more email addresses, the one the creator gives for contacting them personally, copied verbatim. Null when there is one address or none, when every address belongs to a manager, agency or brand, or when the choice was not confident. `author.ext.public_email` (the first address in the bio) is unchanged."
                            },
                            "public_phone": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.public_phone"
                            },
                            "similar_source": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.similar_source"
                            },
                            "instagram_username": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.instagram_username"
                            },
                            "similar_via": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.similar_via"
                            },
                            "business_category": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.business_category"
                            },
                            "bio_links": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.bio_links",
                              "items": {
                                "type": "object",
                                "description": "Nested object: author.ext.bio_links",
                                "properties": {
                                  "title": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.ext.bio_links.title"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.ext.bio_links.url"
                                  },
                                  "link_type": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.ext.bio_links.link_type"
                                  }
                                }
                              }
                            },
                            "is_business": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_business"
                            },
                            "is_professional": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_professional"
                            },
                            "creator_marketplace": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.creator_marketplace"
                            },
                            "verification_label": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.verification_label"
                            },
                            "fbid": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.fbid"
                            },
                            "hd_avatar_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.hd_avatar_url"
                            },
                            "website": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.website"
                            },
                            "cover_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.cover_url"
                            },
                            "page_active": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.page_active"
                            },
                            "employee_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.employee_count"
                            },
                            "employee_count_range": {
                              "type": [
                                "object",
                                "null"
                              ],
                              "description": "Nested object: author.ext.employee_count_range",
                              "properties": {
                                "start": {
                                  "type": [
                                    "integer",
                                    "null"
                                  ],
                                  "description": "Numeric at author.ext.employee_count_range.start"
                                },
                                "end": {
                                  "type": [
                                    "integer",
                                    "null"
                                  ],
                                  "description": "Numeric at author.ext.employee_count_range.end"
                                }
                              }
                            },
                            "founded_year": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.founded_year"
                            },
                            "company_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.company_type"
                            },
                            "tagline": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.tagline"
                            },
                            "specialities": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.specialities",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.specialities"
                              }
                            },
                            "industries": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.industries",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.industries"
                              }
                            },
                            "headquarters": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.headquarters"
                            },
                            "locations": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.locations",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.locations"
                              }
                            },
                            "hashtags": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.hashtags",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.hashtags"
                              }
                            },
                            "funding": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.funding"
                            },
                            "address": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.address"
                            },
                            "price_range": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.price_range"
                            },
                            "rating": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.rating"
                            },
                            "rating_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.rating_count"
                            },
                            "talking_about_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.talking_about_count"
                            },
                            "business_hours": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.business_hours",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.business_hours"
                              }
                            },
                            "links": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.links",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.links"
                              }
                            },
                            "ad_library_page_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.ad_library_page_id"
                            },
                            "ad_library_status": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.ad_library_status"
                            },
                            "urn": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.urn"
                            },
                            "is_top_voice": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_top_voice"
                            },
                            "is_premium": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_premium"
                            },
                            "is_creator": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_creator"
                            },
                            "is_influencer": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_influencer"
                            },
                            "is_open_to_work": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_open_to_work"
                            },
                            "is_hiring": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_hiring"
                            },
                            "member_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.member_id"
                            },
                            "company_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.company_id"
                            },
                            "reaction_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.reaction_type"
                            },
                            "followers_approximate": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "True when `author.followers` is a published or rounded figure rather than an unrounded census: LinkedIn people-list display buckets, TikTok `stats.followerCount` when the exact sibling is absent, and YouTube subscriber counts at or above 1,000. Null or absent on exact counts."
                            },
                            "counts_source": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok profile only. Which of TikTok's two live counter sets `author.followers`, `author.following`, `author.likes_count` and `author.posts_count` carry: `app` (TikTok's app counters, the default) or `web` (the website's `statsV2`, returned with `counts=web`). The two sets can differ by a few percent in either direction."
                            },
                            "keywords": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.keywords"
                            },
                            "total_views": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.total_views"
                            },
                            "joined_at_timestamp": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.joined_at_timestamp"
                            },
                            "topicCategories": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.topicCategories",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.topicCategories"
                              }
                            },
                            "bannerExternalUrl": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.bannerExternalUrl"
                            },
                            "madeForKids": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.madeForKids"
                            },
                            "hiddenSubscriberCount": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.hiddenSubscriberCount"
                            },
                            "related_playlists": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.related_playlists"
                            },
                            "topic_ids": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.topic_ids",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.topic_ids"
                              }
                            },
                            "unsubscribed_trailer": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.unsubscribed_trailer"
                            },
                            "localizations": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.localizations"
                            },
                            "monthly_listeners": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.monthly_listeners"
                            },
                            "total_ratings": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Spotify podcasts only: how many listeners have rated the show. Cumulative over the show's whole run, so it reflects longevity as well as size, and it is NOT an audience count (Spotify publishes no play, download, subscriber or follower count for a podcast)"
                            },
                            "average_rating": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Spotify podcasts only: mean listener rating from 0 to 5. Fractional (e.g. 4.66) despite the integer type this schema emits for every numeric leaf"
                            },
                            "creator_username": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.creator_username"
                            },
                            "join_policy": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.join_policy"
                            },
                            "is_nsfw": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_nsfw"
                            },
                            "rules": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.rules",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.rules"
                              }
                            },
                            "weekly_active_users": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.weekly_active_users"
                            },
                            "weekly_contributions": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.weekly_contributions"
                            },
                            "rules_text": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.rules_text"
                            },
                            "language": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.language"
                            },
                            "post_karma": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.post_karma"
                            },
                            "comment_karma": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.comment_karma"
                            },
                            "awardee_karma": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.awardee_karma"
                            },
                            "trophy_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.trophy_count"
                            },
                            "banner_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.banner_url"
                            },
                            "profile_title": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.profile_title"
                            },
                            "social_links": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.social_links",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.social_links"
                              }
                            },
                            "bio_link": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.bio_link"
                            },
                            "embed_html": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.embed_html"
                            },
                            "embed_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.embed_url"
                            },
                            "group": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.group"
                            },
                            "search_hit": {
                              "type": [
                                "object",
                                "null"
                              ],
                              "description": "Nested object: author.ext.search_hit",
                              "properties": {
                                "match": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "description": "Leaf at author.ext.search_hit.match"
                                },
                                "title": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "description": "String at author.ext.search_hit.title"
                                },
                                "snippet": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "description": "String at author.ext.search_hit.snippet"
                                },
                                "evidence_url": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "description": "String at author.ext.search_hit.evidence_url"
                                },
                                "matched_urls": {
                                  "type": [
                                    "array",
                                    "null"
                                  ],
                                  "description": "Array at author.ext.search_hit.matched_urls",
                                  "items": {
                                    "type": "string",
                                    "description": "String at author.ext.search_hit.matched_urls"
                                  }
                                }
                              }
                            },
                            "blog_name": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.blog_name"
                            },
                            "blog_no": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.blog_no"
                            },
                            "visitors_today": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.visitors_today"
                            },
                            "visitors_total": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.visitors_total"
                            },
                            "topic": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.topic"
                            },
                            "power_blog": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.power_blog"
                            },
                            "official_blog": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.official_blog"
                            }
                          }
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      }
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/profile",
                  "data": {
                    "author": {
                      "id": "528817151",
                      "username": "nasa",
                      "display_name": "NASA",
                      "avatar_url": "https://scontent-mia3-2.cdninstagram.com/v/t51.2885-19/29090066_159271188110124_1152068159029641216_n.jpg?stp=dst-jpg_s320x320_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-mia3-2.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2gF_ZOyacP2ZxvTwISAHsSMx5asgW1AxJ-EvdVyQnWaIqOoHbHMxaugucZE9K7U6iePJ5sy_AwBliYYR9brDmaTN&_nc_ohc=Nw8H9lTngQgQ7kNvwGnjtoO&_nc_gid=oVc10Bvl_SYb8NYf4N9zow&edm=AOQ1c0wBAAAA&ccb=7-5&oh=00_AQBRPsRNYH983CV3Cpi5GEmECZIFeJsRBFCxbj0YQVLw4A&oe=6A631B69&_nc_sid=8b3546",
                      "bio": "Making the seemingly impossible, possible. ✨",
                      "verified": true,
                      "followers": 104307425,
                      "following": 91,
                      "posts_count": 4853,
                      "likes_count": null,
                      "url": "https://www.nasa.gov/",
                      "private": false,
                      "joined_at": null
                    },
                    "computed": {
                      "engagement_rate": 0.00193,
                      "language": "en",
                      "content_category": "other",
                      "estimated_reach": null
                    }
                  },
                  "credits_used": 1,
                  "credits_remaining": 9999,
                  "request_id": "req_example000000",
                  "cached": false,
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/profile/posts": {
      "get": {
        "summary": "List Instagram user posts",
        "description": "Returns the public posts on an Instagram profile, newest first. Paging the cursor continues through that grid until it ends. Each post includes the written caption, the post URL, the media type, the post date, the like count and the comment count. Instagram is currently returning two record widths on this surface, and the narrow one carries no like count, no comment count, no post date and no author display name. When a whole page comes back narrow, the page is served from a second source that carries all four, at the same price, and its `next_cursor` continues on that source. If no second source answers, the narrow page is returned rather than an error, so those leaves can still be null on a page. Every row still carries its id, URL and caption. Every row also carries `post.ext.media_type` (`image`, `video` or `carousel`), a carousel carries its slide count at `post.ext.carousel_count`, and `post.flags.pinned` says whether the owner pinned the post to the top of the grid. The pins are read when you send `exclude_pinned=true`, at the same price: the pinned posts are left out and the rows kept carry `post.flags.pinned: false`. A row the pin read did not reach, or a page where only a source that cannot mark pins answered, carries `post.flags.pinned: null`, is kept, and `data._warnings` says so. Without `exclude_pinned`, `post.flags.pinned` is null on rows from the first source, whose record carries no pin data. `recent_days=N` keeps only posts from the last N days and stops the pagination once a page reaches older posts, so walking a feed back to a date window needs no manual stop. Send `include=audio` to add the sound each video uses: `post.ext.music_id`, the id /v1/instagram/audio/reels takes, and `post.ext.music` (`{ id, track_title, artist, is_original }`), for 1 extra credit per video filled. Every row carries the place the post is tagged at as `post.ext.location` (`{ id, name, lat, lng }`, null when the post has no place), a carousel lists its slides in `post.ext.media` (`{ type, url, width, height }`), and the `#tags` and `@handles` in the caption are listed in `post.ext.hashtags` and `post.ext.mentions`. Send `include=tags` to add `post.ext.usertags`, the usernames tagged in each post, for 1 extra credit per post that names someone. When you need the engagement for a specific post, pass its URL to /v1/instagram/post/stats; for a whole feed with share counts merged in, use /v1/instagram/profile/posts/full. Collaborative posts (Instagram's native \"Collab\" feature) are fully resolved: `post.ext.coauthors` lists every co-author account as `{ id, username, full_name, is_verified, profile_pic_url }`. Read it whenever you list a profile: a collab post has a single producer and appears in every co-author's grid, so `post.author` is whichever account created the post and is not always the handle you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in `post.ext.coauthors`. An empty array means Instagram reports the post as not a collab; on a narrow record the key is absent rather than empty, which means the question was not answered for that row, so treat absent and `[]` as different. Note: engagement.shares is null on this endpoint (the upstream carries no per-post share count); to additionally merge in per-post share counts where a second source exposes them (coverage varies by account), use /v1/instagram/profile/posts/full. With trim=true the upstream record is the narrow one, so the page is normally served from the second source described at the top and carries every field above. A trimmed page served as it is omits `post.ext.coauthors` and leaves `post.flags.pinned` null, because the trimmed record carries neither signal.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_profile_posts",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 1,
        "x-credit-cost-min": 1,
        "x-credit-cost-max": 29,
        "x-credit-cost-formula": "1 credit per page. include=audio holds 1 more per row, up to 12, and keeps it only for each video whose sound came back, refunding the rest, so a page costs at most 13 credits and a page with no videos costs 1. include=tags holds 1 more per row, up to 12, and keeps it only for each post whose tagged accounts came back, refunding the rest; with both tokens a page costs at most 25 credits. exclude_pinned and recent_days do not change the price of a page. The default labels (sponsored, intent, niche) are free. label=mention, quality, ai_style, ai_written, injection, or label=intent with offer=, holds 4 extra credits and refunds down to 1 credit per started 25 posts that were newly judged: posts already labelled are free, a page where nothing could be judged refunds the whole extra, and a cached page is free. With `max_pages`, `max_items` or `max_credits`, each page walked is billed at this price (a cached page is free), and `max_credits` caps the total.",
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": true,
            "description": "Instagram username without the @ symbol",
            "schema": {
              "type": "string"
            },
            "example": "instagram"
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "Only posts published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Older posts are left off the page, and the page that reaches one ends the walk: `next_cursor` is not returned and `pagination.stopped_at` is `since`. Pinned posts sit out of date order and never end the walk. The page still costs what a page costs, so a daily poll pays for the pages it walks and no more.",
            "schema": {
              "type": "string"
            },
            "example": "2026-09-01"
          },
          {
            "name": "stop_at_id",
            "in": "query",
            "required": false,
            "description": "The id (`post.id`) or URL (`post.url`) of the newest post you already hold. The page stops just before it: that post and everything after it are left off, `next_cursor` is not returned, and `pagination.stopped_at` is `known_id`. A pinned post never counts as the stop point. If it is not on this page the page is returned in full with its cursor, so keep walking. `pagination.stopped_at` is `end` when the list ran out first and `null` while there is more to walk. A post counts as pinned when `post.flags.pinned` is true or when it is older than a post below it on the page, so a pinned post that also sits in date order is never the stop point on a page that marks pins, and can be on a page whose `post.flags.pinned` is null.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "next_max_id",
            "in": "query",
            "required": false,
            "description": "Cursor to get next page of results. Native upstream cursor param. Send the universal `cursor` instead: the API maps it to this name for you.",
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "trim",
            "in": "query",
            "required": false,
            "description": "Set to true to request the lighter upstream record. That record is the narrow width described above, so the page is normally served from the second source with every field. A trimmed page served as it is omits `post.ext.coauthors`, and its `post.flags.pinned` is null, as it is on any page called without `exclude_pinned`. The price is the same either way.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "exclude_pinned",
            "in": "query",
            "required": false,
            "description": "Set to true to leave out the posts the owner pinned to the top of the profile. The pins are read from a second source alongside the page, at the same price, and the rows kept carry `post.flags.pinned: false`. A row whose pin state is unknown (`post.flags.pinned: null`), such as a row that pin read did not reach, a trimmed row, or a page from a source that cannot mark pins, is kept, and `data._warnings` says so. Without this parameter `post.flags.pinned` is not read and is null on rows from the first source, except on a page reached with a cursor, whose rows are `false` either way because a pinned post is served on the first page only.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "recent_days",
            "in": "query",
            "required": false,
            "description": "Keep only posts published in the last N days (1 to 3650). Older posts are removed from the page, pinned ones included, and once a page reaches posts older than the window `next_cursor` is not returned, so a walk back to a date window stops on its own. The page still costs what a page costs.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 3650
            }
          },
          {
            "name": "include",
            "in": "query",
            "required": false,
            "description": "`audio` adds `post.ext.music_id` and `post.ext.music` to video rows from a second lookup: 1 extra credit per video filled, refunded when the sound could not be read. Photos and carousels are never looked up. `tags` adds `post.ext.usertags`, the usernames tagged in the post, to every row from a second lookup: 1 extra credit per post that names someone, refunded for a post that tags nobody or whose lookup failed. Both tokens can be combined (`include=audio,tags`). Adds a few seconds; read `data.hydration` for the credits held and kept and the time.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "label",
            "in": "query",
            "required": false,
            "description": "Optional CSV of SocialCrawl labels to add to every post. Without this param every page already carries sponsored, intent and niche, free; label= adds the labels you name to them (the defaults keep running). sponsored, intent and niche are free when asked for too; mention, quality, ai_style, intent with offer=, and injection add 1 credit per started 25 newly judged posts. judgments=off (or label=none) turns the default labels off. sponsored: is the post a paid or gifted promotion (p, 0 to 1), did it carry a disclosure marker such as #ad or 광고 (disclosed), is it likely paid with no marker (undisclosed), and which of the accounts it mentions does it promote (brand, or null). These are signals to review, never a finding. mention (needs brand=): is the post about that brand rather than something that shares its name (about_brand, 0 to 1), how it feels about the brand on five levels (sentiment_level 0 to 4 and sentiment_score 0 to 1, null when the post is not about the brand), is it sarcastic, which aspect it talks about (taste_or_quality, price_or_value, availability_or_delivery, health_or_safety, advertising_or_campaign, customer_service, none), and did the author buy or use it (first_hand). intent: what the author is mainly doing (label: asking_for_recommendation, comparing_options, switching_away, complaining, promoting, news_or_discussion, other, or null when unsure, with confidence), whether they read as a potential buyer rather than a seller (buyer, seller), how pressing the need is (urgency, 0 to 3), and, when you pass offer=, whether your offer would plausibly help them (fits_offer). niche: which of the 33 niches of the published taxonomy sc-niche-v1 the caption belongs to, or personal_no_niche, or other (label, confidence, taxonomy), with label null when the caption is too thin to tell or the pick is unsure. It reads the caption only, not the video. quality: how much checkable detail the caption carries (fact_density 0 to 3), whether it mainly asks for likes, replies, shares, follows or tags (engagement_bait, 0 to 1), whether it is written to provoke anger as a way to get engagement (rage_bait, 0 to 1; about the writing, never the side taken), whether it only repeats someone else's news or view (secondhand, 0 to 1), and what the post is mainly doing (post_aim: inform, opinion, sell, entertain, provoke, other). exclude=engagement_bait drops posts whose engagement_bait is 0.8 or higher. ai_style: writing patterns common in AI-generated text, judged on the text alone. It does not say who wrote the post, and a person who writes in this style is flagged too. Six patterns are judged, each a probability (0 to 1): binary_contrast (\"This is not X. It's Y.\"), faux_insight (\"Here's what nobody tells you\" and throat-clearing openers), colon_reveal (\"The best part: it learns.\"), profound_kicker (ends on an aphorism or mic-drop line), puffery (\"marks a pivotal moment\", \"highlighting the importance of\") and rhetorical_setup (\"What if I told you\", a question the post answers itself, \"Not a X. Not a Y. A Z.\"). Four are counted in the text: slop_words (words and phrases such as delve, leverage, robust, game changer, at the end of the day), em_dashes, emoji_bullets (lines that start with an emoji or a symbol bullet) and one_line_paragraphs (paragraphs that are one short line). pattern_count is how many patterns are present (a judged pattern at 0.8 or higher, slop_words 1 or more, em_dashes 2 or more, emoji_bullets 2 or more, one_line_paragraphs 5 or more) and markers lists their names, comma-separated. A post with less than about eight words of text is only counted, with every judged pattern 0. The judged patterns read the first 400 and the last 150 characters of a long post, and the counts read the whole post. exclude=ai_style drops posts with 2 or more patterns. ai_written: how likely the post was written by an AI model, from SocialCrawl's own text classifier, reading the opening of the post (about 1,000 characters): p (0 to 1, calibrated), level (likely (p 0.95 or higher), possible (p 0.71 or higher) or unlikely) and model (the model name; a new name means a new scale). A post under 8 words is too short to read: p null, level too_short. It is a probability, not proof: a person can be flagged and an AI-written post can pass, and the shorter the post the less certain it is. exclude=ai_written drops likely posts. injection flags text that addresses an AI system and tries to direct it (flagged, p); it never drops or rewrites a row. A post that could not be judged carries labels: null. Posts already labelled for anyone are free, and so is a cached page. data.labels reports what was judged and billed.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "exclude",
            "in": "query",
            "required": false,
            "description": "Optional CSV (engagement_bait, ai_style, ai_written). engagement_bait, only with label=quality, drops posts whose engagement_bait probability is 0.8 or higher. ai_style, only with label=ai_style, drops posts that show 2 or more of its writing patterns (pattern_count 2 or higher). ai_written, only with label=ai_written, drops posts whose level is likely (p 0.95 or higher), or whose p reaches your ai_written_threshold; a post too short to read is never dropped. Dropped posts are listed in data.labels.dropped_ids. A post that could not be judged is never dropped.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ai_written_threshold",
            "in": "query",
            "required": false,
            "description": "Optional, only with label=ai_written and exclude=ai_written. The p (0 to 1) at which exclude=ai_written drops a post. Default 0.95 (level likely). 0.71 also drops possible posts: more AI posts go, and more posts by people with them.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "brand",
            "in": "query",
            "required": false,
            "description": "Required by label=mention, ignored otherwise. The brand or product the posts are judged against, up to 300 characters, for example brand=Buldak. Without it label=mention is skipped with the warning label_mention_needs_brand and is not billed.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "brand_description",
            "in": "query",
            "required": false,
            "description": "Optional, with label=mention. One plain sentence saying what the brand is, for example brand_description=Samyang's spicy instant noodle brand. Use it when the name is also an ordinary word or another company's name.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "offer",
            "in": "query",
            "required": false,
            "description": "Optional, with label=intent. One or two plain sentences saying what you sell, up to 300 characters, for example offer=A web design agency that builds websites for small businesses. Adds fits_offer to every post; without it fits_offer is null.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "judgments",
            "in": "query",
            "required": false,
            "description": "Optional, on (the default) or off. By default every row gains free SocialCrawl judgments (computed.labels, and computed.relevance on search endpoints), reported in data.labels (mode default) and data.relevance (origin default), each with a status (complete, partial or skipped) and pending: the rows still being judged when the page was sent, which carry null now and are filled on your next call or cached read. Default judgments never add credits, never change an existing field, and never drop or reorder a row. off returns the page exactly as before, with none of those keys. label=none does the same.",
            "schema": {
              "type": "string",
              "enum": [
                "on",
                "off"
              ]
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Optional. When 1, return a cost preview for this labelled or relevance-filtered request without fetching the page or judging any row. data.estimate reports rows_expected, rows_cached, label_credits_min, label_credits_max and base_credits. 0 credits charged.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ]
            }
          },
          {
            "name": "label_evidence",
            "in": "query",
            "required": false,
            "description": "Optional, only with label=. When 1, every labelled row also carries computed.labels_evidence.<preset> = { quote, sentence_index }: the sentence in the row that most clearly shows the label, copied verbatim. Absent or null when no single sentence shows it.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ]
            }
          },
          {
            "name": "fit",
            "in": "query",
            "required": false,
            "description": "Optional. When goal, keep the rows and fields needed for the goal you pass in goal= (plus any that are uncertain, and the first and last), and replace the rest with a stub. data.held_back lists the held ids and a recall id that re-reads the full page from cache at no extra charge. Without this param the page is unchanged.",
            "schema": {
              "type": "string",
              "enum": [
                "goal"
              ]
            }
          },
          {
            "name": "goal",
            "in": "query",
            "required": false,
            "description": "Required by fit=goal. What you are trying to do, in your own words, up to 300 characters.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fit_tokens",
            "in": "query",
            "required": false,
            "description": "Optional, only with fit=goal. Soft cap on how much of the page to keep, in tokens. Uncertain blocks and the first and last block are kept even if they exceed it.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "description": "Only rows published on or before this date: YYYY-MM-DD (that whole UTC day is included) or an ISO 8601 timestamp. Newer rows are left off each page and the walk does not stop, so older pages follow. A row with no date is kept. `published_before`, `end_date` and `to_date` are accepted and applied as `until`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max_pages",
            "in": "query",
            "required": false,
            "description": "1 to 50 (default 1, or 50 when `max_items` or `max_credits` is sent). Walk up to this many pages in one call and return the rows from all of them. Each page walked is billed exactly as one call to this endpoint (a cached page is free) and counts against your rate limit; its charge and any refund are recorded under the page's own request id, listed in `data.walk.request_ids`. The walk stops early at the last page, or when the request's time budget runs low; `data.walk.stopped` says why (`end`, `max_pages`, `max_items`, `max_credits`, `time_budget`, `page_error`) and `pagination.next_cursor` continues from where it stopped.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "max_items",
            "in": "query",
            "required": false,
            "description": "1 to 5000. Get more in one call: keep walking pages until the response holds at least this many rows, then stop with `data.walk.stopped: \"max_items\"`. The last page is returned whole (it was billed), so `data.items` can hold up to one page more than this, and `pagination.next_cursor` resumes right after it without skipping a row. Walks up to 50 pages unless `max_pages` says fewer; each page is billed as one call (a cached page is free). Add `max_credits` to cap the spend. A long walk can stop on the time budget first (`\"time_budget\"`): send the returned cursor with the same params to continue.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5000
            }
          },
          {
            "name": "max_credits",
            "in": "query",
            "required": false,
            "description": "1 to 100000. The most this call may spend, across every page it walks. A page starts only while the credits already spent plus that page's price (or, when higher, the most any page of this walk has cost) still fit, so the call never goes past it; the walk then stops with `data.walk.stopped: \"max_credits\"` and the cursor to resume. Sent alone, it walks as far as the budget goes (up to 50 pages). A value below the price of one page is a free 400 whose `error.details.page_credits` names that price. Credits a row join (`include=`) adds are known only once a page has run, so page 1 is checked against its own price.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100000
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Universal pagination cursor. Send `pagination.next_cursor` from the previous response back verbatim: the API maps it to this endpoint's native `next_max_id` (cursor style). You never construct, decode, or look up a cursor. Omit it for page 1.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/profile/posts"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of canonical post wrappers ({ post, computed })",
                          "items": {
                            "type": "object",
                            "description": "Canonical post wrapper",
                            "properties": {
                              "post": {
                                "type": "object",
                                "description": "Canonical Post object (unified across all platforms)",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "Platform-specific post ID (always a string; numeric upstream IDs are stringified)"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Direct URL to the post on the source platform"
                                  },
                                  "content": {
                                    "type": "object",
                                    "description": "Post content fields (text, media, thumbnail, duration)",
                                    "properties": {
                                      "text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Post caption, description, or text content"
                                      },
                                      "media_urls": {
                                        "type": [
                                          "string",
                                          "array",
                                          "null"
                                        ],
                                        "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels.",
                                        "items": {
                                          "type": "string",
                                          "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels."
                                        }
                                      },
                                      "thumbnail_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to thumbnail image"
                                      },
                                      "duration_seconds": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Video/clip duration in seconds (null for non-video posts)"
                                      }
                                    }
                                  },
                                  "author": {
                                    "type": "object",
                                    "description": "Subset of Author fields for the post creator",
                                    "properties": {
                                      "username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author username"
                                      },
                                      "display_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author display name"
                                      },
                                      "avatar_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to author profile picture"
                                      },
                                      "verified": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Whether the author account is verified"
                                      }
                                    }
                                  },
                                  "engagement": {
                                    "type": "object",
                                    "description": "Engagement counts",
                                    "properties": {
                                      "views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "View count (if available). For Instagram video/reels this is the play count: the headline 'Views' the IG app shows. Instagram removed per-post play counts from its public web pages in August 2026, so `GET /v1/instagram/post` now fills the count automatically from a second source within the same call: videos and reels keep a numeric `views` with no extra endpoint or workaround. Note: since mid-July 2026 Instagram's play count is Instagram-only. It no longer includes Facebook crosspost views (Meta-side change; the app UI changed identically). For combined reach, also fetch the Facebook crosspost via `/v1/facebook/post`."
                                      },
                                      "likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Like / reaction count"
                                      },
                                      "comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Comment count. Note: on `GET /v1/instagram/post` this is Instagram's `edge_media_to_parent_comment.count` (top-level comments); the IG list endpoints report the mobile `comment_count` total (includes replies). Both land on this same field."
                                      },
                                      "shares": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Share / repost / retweet count. On Instagram this is `reshare_count` (the paper-plane Share / Send count) and it exists only on Instagram's mobile surface, so it is returned by `/v1/instagram/post/stats`, `/v1/instagram/profile/reels/full`, and `/v1/instagram/profile/posts/full`. The web-sourced Instagram list and search endpoints return `null` (never fabricated)."
                                      },
                                      "saves": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Save / bookmark count. `null` on Instagram: the save count is platform-private and Instagram exposes no numeric save metric on any surface (never fabricated)."
                                      }
                                    }
                                  },
                                  "flags": {
                                    "type": "object",
                                    "description": "Boolean flags on the post",
                                    "properties": {
                                      "nsfw": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "NSFW flag (null when platform does not surface)"
                                      },
                                      "spoiler": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Spoiler flag (null when platform does not surface)"
                                      },
                                      "pinned": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Pinned-to-profile flag (null when platform does not surface)"
                                      },
                                      "deleted": {
                                        "type": "boolean",
                                        "description": "Whether the post is tombstoned (always present)"
                                      },
                                      "likes_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the creator has hidden the like count. `engagement.likes` is `null` in that case (never the platform's decoy preview number). Absent on normal posts."
                                      },
                                      "comments_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the upstream reports the comment count as hidden. `engagement.comments` is `null` in that case. Absent on normal posts."
                                      },
                                      "shares_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.shares_hidden"
                                      },
                                      "views_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.views_hidden"
                                      },
                                      "saves_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.saves_hidden"
                                      }
                                    }
                                  },
                                  "published_at": {
                                    "type": [
                                      "string",
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Post creation timestamp as an ISO 8601 UTC string. When the upstream sent a Unix epoch it is converted here and the raw epoch is preserved under `post.ext.published_at_epoch` for one deprecation cycle."
                                  },
                                  "ext": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Platform-specific passthrough fields for cross-endpoint chains (present only on platforms that surface them)",
                                    "properties": {
                                      "music_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok music/clip id (exact string): pass to `/v1/tiktok/song/videos?clipId=` to find videos using the same sound"
                                      },
                                      "matched_song_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The catalogue song TikTok matched the video's sound to, as an exact digit string. An official clip and the original sounds creators upload with it have different `music_id` values and the same `matched_song_id`, so group rows on it to count every use of one song. It is not a clipId: `/v1/tiktok/song` and `/v1/tiktok/song/videos` do not accept it. `/v1/tiktok/search/music` carries it on each sound, so a search on the song's title and artist, kept to the sounds with the same `matched_song_id`, gives the song's official sounds and their `video_count`. Absent when TikTok matched the sound to no song, and on rows served from a source that does not report the match."
                                      },
                                      "matched_song_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the song in `matched_song_id`. Absent when there is no matched song."
                                      },
                                      "matched_song_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist of the song in `matched_song_id`, as TikTok's catalogue names it. Absent when there is no matched song."
                                      },
                                      "music_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the video's own sound (`music_id`). An uploaded sound is titled like `original sound - <handle>`; the song it plays, when TikTok recognised one, is `matched_song_title`."
                                      },
                                      "music_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist TikTok shows for the video's own sound. On an original sound this is the uploader's display name, not the song's artist; use `matched_song_artist` for that."
                                      },
                                      "music_is_original": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "TikTok only. `true` when the video's sound is an original sound a creator uploaded, `false` when it is a catalogue track. Absent when the source does not say."
                                      },
                                      "author_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's platform-native numeric user id. On TikTok search and list items, pass to `/v1/tiktok/profile?user_id=` for the creator's current follower count (survives username changes). On Instagram `/v1/instagram/search/reels`, `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` items it is present on every row, accepted by `/v1/instagram/profile/country?user_id=` and `/v1/instagram/basic-profile?userId=`. On Facebook it appears when the upstream exposed a numeric actor id and no real handle."
                                      },
                                      "author_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The posting account's profile URL, so a matching post can be followed to its account. Present on `/v1/facebook/search/posts` rows: the vanity or `/people/<name>/<id>/` URL when Facebook sends one, otherwise `https://www.facebook.com/profile.php?id=<numeric id>` built from the account id. Pass it as `url` to `/v1/facebook/profile` (or to `/v1/prism/profiles` with `platform: facebook`). Null when the row names neither an account URL nor a numeric account id. Absent on other endpoints."
                                      },
                                      "author_followers": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "The creator's follower count as embedded in the search payload itself, when the search source happens to carry one. On Instagram `search/reels` it is null on a plain call, because Instagram stopped sending follower counts in its search payload in August 2026; send `include=creator` (or `country`) and it is filled from the creator's profile, 2 credits per creator looked up. It stays null when that lookup does not resolve."
                                      },
                                      "author_following": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_following"
                                      },
                                      "author_posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_posts_count"
                                      },
                                      "author_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The free text the author wrote in their profile's location field, exactly as written (for example `Johannesburg, South Africa`). It is not a country code and is not checked. Present on X tweet and reply rows; null or absent when the author left it blank."
                                      },
                                      "in_reply_to_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_id"
                                      },
                                      "in_reply_to_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_username"
                                      },
                                      "conversation_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.conversation_id"
                                      },
                                      "author_country": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's country. On Instagram it is the country the creator declares on the About this account panel, as a country name (for example `Spain`), and it is not where the post was filmed. It is present on `/v1/instagram/search/reels` when the request sends `include=creator`, `include=country` or `country`, and on `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` when it sends `include=country`, filled by looking the creator up. On YouTube rows joined with `include=channel` it is the channel's own country as an ISO 3166-1 alpha-2 code (for example `ZA`). Null when the platform publishes no country for the creator or the lookup did not resolve, and nothing is guessed; absent on a plain call."
                                      },
                                      "author_public_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact email on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public email or the lookup did not resolve; absent on a plain call."
                                      },
                                      "author_public_phone": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact phone number on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public phone or the lookup did not resolve; absent on a plain call."
                                      },
                                      "download_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "How many times the video has been saved to a device. TikTok only, and distinct from `engagement.saves`: a save keeps the video in a private collection on the platform, a download takes a copy off it, and TikTok counts the two separately. Present on TikTok post, search and post-list responses; absent everywhere else."
                                      },
                                      "region": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only: the country TikTok registers the video to, as an ISO 3166-1 alpha-2 code (normally the creator's account country when they posted). It is not the viewer's country, not the `region` you requested, and not a language. On `/v1/tiktok/trending`, `/v1/tiktok/search`, `/v1/tiktok/search/top`, `/v1/tiktok/profile/videos`, `/v1/tiktok/search/hashtag` and `/v1/tiktok/song/videos` it is how you tell which rows are from a given country: filter on it when you need only that country. A row whose source omits the country stays null. The `region` request parameter still only sets the proxy."
                                      },
                                      "subreddit": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Reddit subreddit name (search/list items): pass to `/v1/reddit/subreddit/details?subreddit=`"
                                      },
                                      "title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.title"
                                      },
                                      "selftext": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.selftext"
                                      },
                                      "upvote_ratio": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Reddit only: the share of a post's votes that are upvotes, as a fraction from 0 to 1 and usually close to 1 (six live rows measured 1, 1, 1, 0.86, 0.75, 1). Fractional despite the integer type this schema emits for every numeric leaf, the same caveat as `author.ext.average_rating`. Populated on `/v1/reddit/search` rows whose source carries it, and null everywhere else on Reddit including `/v1/reddit/post` and `/v1/reddit/subreddit`."
                                      },
                                      "flair": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.flair"
                                      },
                                      "content_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The language the platform itself tags the post with, when it sends one: Reddit's own language tag on Reddit lanes, and TikTok's caption-language tag (for example `de`) on `/v1/tiktok/trending?feed=local`. Null when the platform could not tell (Reddit `und`, TikTok `un`, common on short or emoji-only captions); absent where the source sends no tag. Never inferred from the text by us: that is `post.computed.language`."
                                      },
                                      "type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.type"
                                      },
                                      "content_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.content_type"
                                      },
                                      "ticker_symbols": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.ticker_symbols",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.ticker_symbols"
                                        }
                                      },
                                      "video_view_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram's legacy 3-second-view count. Historical: Instagram stopped serving it in August 2026 (removed from its web post surface along with the web play count), so fresh `/v1/instagram/post` lookups no longer carry it and no source can restore it. Use `engagement.views` (the play count) instead."
                                      },
                                      "ig_play_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram-only play count (`ig_play_count`). Since mid-July 2026 Instagram's headline play count (`engagement.views`) no longer includes Facebook crosspost views and equals this value; it is surfaced explicitly so you can tell the Instagram-only figure apart and detect any future re-divergence. For combined Instagram + Facebook reach, also fetch the Facebook crosspost via `/v1/facebook/post`. Present on `/v1/instagram/post/stats` and, since the August 2026 views fix, on `/v1/instagram/post` for video posts."
                                      },
                                      "repost_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.repost_count"
                                      },
                                      "media_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.media_type"
                                      },
                                      "text_truncated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.text_truncated"
                                      },
                                      "ip_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.ip_location"
                                      },
                                      "carousel_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.carousel_count"
                                      },
                                      "remix_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.remix_count"
                                      },
                                      "audio_cluster_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram's audio cluster for a reel, as an exact digit string: the id Instagram uses to group different uploads of the same sound. Present on `/v1/instagram/audio/reels` rows and on `/v1/instagram/profile/reels` with `include=stats`; absent on a row when it is not available and on every other surface."
                                      },
                                      "facebook_likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.likes` on this row. A post shared to Facebook arrives from some sources with its Facebook likes already folded into the Instagram count, so the share is subtracted and published here, which keeps `engagement.likes` the Instagram-only figure instagram.com shows on the post. Add the two together for the combined number. Absent when the read carried no Facebook share, and absent on a post whose owner hides the like count, because nothing can be subtracted from a null. A response that excluded a share also carries a note in `data._warnings`."
                                      },
                                      "facebook_comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.comments` on this row, the comment counterpart of `post.ext.facebook_likes`. Each leaf appears only for the count it actually changed, so a post whose likes are hidden but whose comments were reconciled carries this one alone."
                                      },
                                      "instagram_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Instagram-only play count of a video, the same figure on every Instagram endpoint. `engagement.views` keeps each endpoint's established meaning: on `/v1/instagram/profile/reels`, `/v1/instagram/audio/reels`, `/v1/instagram/search/reels` and `/v1/instagram/search/hashtag` it can include the post's Facebook cross-post views, while on `/v1/instagram/post` and `/v1/instagram/post/stats` it is Instagram-only. Read this leaf when you compare one post across endpoints. Absent on photos and when the source did not report the Instagram-only figure."
                                      },
                                      "facebook_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post part of a video's play count, the counterpart of `post.ext.instagram_views`. Present only when the source reported the Facebook part, or a combined total above the Instagram figure. Absent does not mean zero: some sources report the Instagram figure alone even for a cross-posted video."
                                      },
                                      "published_at_epoch": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Raw Unix epoch for `published_at` (seconds, or milliseconds when the upstream sent millis). Present only when the upstream sent a numeric epoch that was normalised to the ISO 8601 `published_at` string. Kept for one deprecation cycle for integrations pinned to the numeric form."
                                      },
                                      "usertags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.usertags",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.usertags"
                                        }
                                      },
                                      "coauthors": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post).",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post)."
                                        }
                                      },
                                      "music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.music"
                                      },
                                      "sponsor_tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                        }
                                      },
                                      "sponsored_disclosed": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "The platform's own disclosure that the post is paid or promotional: on Instagram the paid-partnership label (`is_paid_partnership`) or a tagged brand partner, on TikTok the label TikTok shows viewers (\"Paid partnership\", \"Commission paid\", \"Promotional content\"). `false` when the post carries the flag unset, null when it carries none. Present on `/v1/instagram/post/stats`, `/v1/instagram/search/reels` and `/v1/tiktok/search`; absent on every other endpoint."
                                      },
                                      "ai_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram only: Instagram's AI-content label on the post, as the method Instagram reports: `classifier_score_high` (Instagram detected it, shown as \"Likely made with AI\"), `ai_created` or `ai_edited` (declared or detected as made or edited with AI). Null when the post carries no AI label. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                      },
                                      "story_mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "story_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint."
                                        }
                                      },
                                      "story_reshared_posts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.location"
                                      },
                                      "media": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.media",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.media",
                                          "properties": {
                                            "type": {
                                              "type": "string",
                                              "description": "Leaf at post.ext.media.type"
                                            },
                                            "url": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.media.url"
                                            },
                                            "width": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.width"
                                            },
                                            "height": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.height"
                                            }
                                          }
                                        }
                                      },
                                      "top_comments": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.top_comments",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.top_comments",
                                          "properties": {
                                            "id": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.id"
                                            },
                                            "text": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.text"
                                            },
                                            "username": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.username"
                                            },
                                            "likes": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.top_comments.likes"
                                            },
                                            "published_at": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.published_at"
                                            }
                                          }
                                        }
                                      },
                                      "hashtags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.hashtags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.hashtags"
                                        }
                                      },
                                      "mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentions",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentions"
                                        }
                                      },
                                      "mentioned_user_ids": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentioned_user_ids",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentioned_user_ids"
                                        }
                                      },
                                      "quoted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Threads quote posts: the post this one quotes, as `{ id, url, author: { id, username }, text, media_urls, thumbnail_url }`. A quote post usually carries no caption or media of its own, and the text and video you see on the post's page belong to this attachment, by a different author. It is returned here rather than merged into `post.content`, so `content.*` always stays the outer post's own content and one account's media is never attributed to another. Absent on posts that are not quote posts."
                                      },
                                      "retweeted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.retweeted_post"
                                      },
                                      "quote_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.quote_count"
                                      },
                                      "all_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.all_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.all_media_urls"
                                        }
                                      },
                                      "reaction_counts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.reaction_counts",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.reaction_counts"
                                        }
                                      },
                                      "share_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.share_urn"
                                      },
                                      "post_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.post_type"
                                      },
                                      "activity_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.activity_id"
                                      },
                                      "published_at_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_at_precision"
                                      },
                                      "author_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_urn"
                                      },
                                      "author_headline": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_headline"
                                      },
                                      "author_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_type"
                                      },
                                      "is_repost_quote": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.is_repost_quote"
                                      },
                                      "article": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.article"
                                      },
                                      "reaction_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.reaction_type"
                                      },
                                      "download_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.download_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.download_media_urls"
                                        }
                                      },
                                      "tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.tags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.tags"
                                        }
                                      },
                                      "categoryId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryId"
                                      },
                                      "categoryTitle": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryTitle"
                                      },
                                      "topicCategories": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.topicCategories",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.topicCategories"
                                        }
                                      },
                                      "duration": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.duration"
                                      },
                                      "license": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.license"
                                      },
                                      "madeForKids": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.madeForKids"
                                      },
                                      "defaultAudioLanguage": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.defaultAudioLanguage"
                                      },
                                      "hasPaidProductPlacement": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.hasPaidProductPlacement"
                                      },
                                      "caption": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.caption"
                                      },
                                      "position": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.position"
                                      },
                                      "playlistId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlistId"
                                      },
                                      "videoOwnerChannelId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoOwnerChannelId"
                                      },
                                      "videoPublishedAt": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoPublishedAt"
                                      },
                                      "description": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.description"
                                      },
                                      "default_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.default_language"
                                      },
                                      "localizations": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.localizations"
                                      },
                                      "playlist_item_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_item_id"
                                      },
                                      "playlist_owner_channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_channel_id"
                                      },
                                      "playlist_owner_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_title"
                                      },
                                      "channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.channel_id"
                                      },
                                      "published_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_label"
                                      },
                                      "published_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.published_precision"
                                      },
                                      "title_maybe_translated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.title_maybe_translated"
                                      },
                                      "video_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.video_count"
                                      },
                                      "posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "`/v1/instagram/hashtag` only: the exact number of public posts Instagram counts under the hashtag. Live: it moves between calls minutes apart."
                                      },
                                      "commerce": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.commerce"
                                      },
                                      "on_screen_texts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.on_screen_texts",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.on_screen_texts"
                                        }
                                      },
                                      "topic_tag": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag"
                                      },
                                      "reshare_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.reshare_count"
                                      },
                                      "dsp_ids": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.dsp_ids"
                                      },
                                      "topic_tag_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag_id"
                                      },
                                      "amazon_shop_lists": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_lists",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_lists"
                                        }
                                      },
                                      "amazon_shop_trending_picks": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_trending_picks",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_trending_picks"
                                        }
                                      },
                                      "amazon_shop_curations": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_curations",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_curations"
                                        }
                                      },
                                      "amazon_shop_socials": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_socials",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.amazon_shop_socials"
                                        }
                                      },
                                      "ad": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Ad Library envelope (Facebook `adlibrary/ad` and `adlibrary/company/ads` items): page_id, currency, spend, reach_estimate, publisher_platforms, categories, targeted_or_reached_countries, cta_text, cta_type, link_url, is_active, end_date_iso, display_format, title, video_hd_url, video_sd_url. Absent on every non-ad surface."
                                      },
                                      "apple_music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.apple_music"
                                      },
                                      "feedback_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.feedback_id"
                                      },
                                      "question_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN (`/v1/naver/kin/search`) only: the question's id (Naver's `docId`), read from the row's link. Kin returns one row per answer, so several rows can share it; send `group=question` for one row per question."
                                      },
                                      "answer_no": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: which answer of the question this row is (Naver's `answerNo`), read from the row's link."
                                      },
                                      "answer_nos": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first.",
                                        "items": {
                                          "type": "integer",
                                          "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first."
                                        }
                                      },
                                      "published_at_est": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: the question's date ESTIMATED from its id (`YYYY-MM-DD`, Korea time), never a published date, so `published_at` stays null. Absent for questions older than the calibration table."
                                      },
                                      "date_basis": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "How `post.ext.published_at_est` was derived. `kin_docid_estimate`: interpolated from the question id against question pages whose posted date was read."
                                      },
                                      "event": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.event"
                                      },
                                      "trend": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Trend-board envelope: what TikTok's own trend board says about the row. On `/v1/tiktok/hashtags/popular`: `rank`, `country_code`, `period_days`, `posts` and `views` for the window (not lifetime totals), `industry` / `industry_id` / `industry_label` for the first board the hashtag was read from (null for the overall board), `boards` listing EVERY board it ranks on as `{ industry, industry_id, industry_label, rank }` in board order (so a hashtag in the top 3 overall and on an industry board shows both), `popularity_curve` as `{ date, value }` with value 0 to 100 relative to the window's peak, and `top_creators`. On `/v1/tiktok/videos/popular`: `rank`, `country_code`, `period_days`, `order_by`, `period_views`, `organic_views`, `engagement_rate`, `six_second_view_through_rate`, `content_tags`. Absent on every non-board surface."
                                      },
                                      "updated_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.updated_at"
                                      },
                                      "alt_text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.alt_text"
                                      },
                                      "board_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.board_name"
                                      }
                                    }
                                  }
                                }
                              },
                              "computed": {
                                "type": "object",
                                "description": "Server-computed analytics fields (consistent across platforms)",
                                "properties": {
                                  "engagement_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Computed engagement rate (0..1). Null when the upstream lacks enough signal."
                                  },
                                  "language": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "ISO 639-1 language code detected from the post text. Null when undetectable."
                                  },
                                  "content_category": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Keyword-classified content category (e.g. tech, food, gaming). Null when undetectable."
                                  },
                                  "estimated_reach": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Estimated reach based on views or follower count. Null when uncomputable."
                                  },
                                  "save_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at computed.save_rate"
                                  },
                                  "relevance": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Nested object: computed.relevance",
                                    "properties": {
                                      "p": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.p"
                                      },
                                      "sense": {
                                        "type": "string",
                                        "description": "Leaf at computed.relevance.sense"
                                      },
                                      "depth": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.depth"
                                      },
                                      "spam": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.spam"
                                      }
                                    }
                                  },
                                  "labels": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels"
                                  },
                                  "labels_evidence": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels_evidence"
                                  }
                                }
                              }
                            }
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/profile/posts",
                  "data": {
                    "items": [
                      {
                        "post": {
                          "id": "3998430248382584993",
                          "url": "https://www.instagram.com/instagram/p/Dd9RyBWBVih/",
                          "content": {
                            "text": "DIY fish squishy 🐟⁣\n⁣\n@yano4kaa.a made this squishy using stuff she already had at home like paper, tape and a balloon.⁣\n⁣\n“You don’t need a lot of specialized materials to be creative. I love showing people that even simple, everyday things can be turned into something fun and unique.”⁣\n⁣\nVideo by @yano4kaa.a⁣\n⁣\nMusic by @stuckinreboot",
                            "media_urls": "https://scontent-lga3-1.cdninstagram.com/user_2352da/v/t2/f2/m86/AQPSpP2QuNVX3DLKJj_iVnYb1-7O4TvN-6jnTrP6GilIPrOETMuukhTDS4u1TIP4bPclqcmkRt5xRhf_riabqCVglEj4OOOd7urAGH4.mp4?_nc_cat=1&_nc_sid=5e9851&_nc_ht=scontent-lga3-1.cdninstagram.com&_nc_ohc=KOrZ8GyXaWAQ7kNvwF0Qd_1&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MjU1MzkwMTk1ODM2NDg1MywiYXNzZXRfYWdlX2RheXMiOjAsInZpX3VzZWNhc2VfaWQiOjEwMDk5LCJkdXJhdGlvbl9zIjoxNiwidXJsZ2VuX3NvdXJjZSI6Ind3dyJ9&ccb=17-1&vs=c75ac1ac96fb374e&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC8xNkRGOEU0RDYwODg0OTE3OEJERDEyREJBMUI5MDJCRV92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyL0VGMkI3RUJGRkJDMzQyNjZCRjg4ODhCMEU1MzBFMzU4X2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACbq-qew1LCJCRUCKAJDMywXQDC7peNT988YEmRhc2hfYmFzZWxpbmVfMV92MREAdf4HZeadAQA&_nc_gid=G3uMBN09BK9EqSVNHLn79w&_nc_ss=7a3ba&_nc_zt=28&oh=00_AQM73m7l70TnxGhZdIHtm0tElD_rkP0hp0IxwdvsbUR_KA&oe=6AC132A4",
                            "thumbnail_url": "https://scontent-lga3-1.cdninstagram.com/user_4c9448/t51.82787-15/830594125_18798964129001321_5625309391674938800_n.jpg?stp=dst-jpg_e15_p480x480_tt6&_nc_cat=1&ig_cache_key=Mzk5ODQzMDI0ODM4MjU4NDk5MzE4Nzk4OTY0MTI2MDAxMzIx.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjEwODAuc2RyLnZpZGVvX2RlZmF1bHRfY292ZXJfZnJhbWUuQzMifQ%3D%3D&_nc_ohc=96cE-ef30S0Q7kNvwHGr9Kl&_nc_oc=Adr0sX7ZPbPM3cFgNKkRAzrGPna4jH-mGW_UqPU6wKOnqQPm3pft9dKzpqRr_u7qMow&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-lga3-1.cdninstagram.com&_nc_gid=G3uMBN09BK9EqSVNHLn79w&_nc_ss=7a3ba&oh=00_AQN_OuJN18aiFezdriVwh5-QqdzuOynH1LD3yY26gXNAIA&oe=6AC54485",
                            "duration_seconds": 16.74
                          },
                          "author": {
                            "username": "instagram",
                            "display_name": "Instagram",
                            "avatar_url": "https://example.com/redacted",
                            "verified": true
                          },
                          "engagement": {
                            "views": 72071593,
                            "likes": 328198,
                            "comments": 4498,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false
                          },
                          "published_at": "2026-10-01T15:59:45.000Z",
                          "ext": {
                            "author_id": "user_040e32",
                            "media_type": "video",
                            "published_at_epoch": 1790870385,
                            "coauthors": []
                          }
                        },
                        "computed": {
                          "engagement_rate": 0.004616,
                          "language": "en",
                          "content_category": "lifestyle",
                          "estimated_reach": 86485912,
                          "vs_creator": {
                            "ratio": null,
                            "metric": "views",
                            "reason": "too_young"
                          },
                          "labels": {
                            "sponsored": {
                              "p": 0.03,
                              "disclosed": false,
                              "undisclosed": false,
                              "brand": null
                            },
                            "intent": {
                              "label": null,
                              "confidence": 0.45,
                              "buyer": false,
                              "seller": 0.18,
                              "fits_offer": null,
                              "urgency": 0.01
                            },
                            "niche": {
                              "label": "diy_crafts",
                              "confidence": 1,
                              "taxonomy": "sc-niche-v1"
                            }
                          }
                        }
                      },
                      {
                        "post": {
                          "id": "3997798548002238943",
                          "url": "https://www.instagram.com/instagram/p/Dd7CJkhPvHf/",
                          "content": {
                            "text": "Four dancers, one crew 🔥💃⁣\n⁣\n@hook_dancekorea mixes Korean traditional culture, K-pop and hip-hop into their own style.⁣\n⁣\n“We capture a lot of the free-spirited vibes that naturally emerge during our practice sessions. Since our members have diverse hobbies outside of dance, we bring a rich variety of styles into our work.”⁣\n⁣\nVideo by @hook_dancekorea⁣\n⁣\nMusic by @xuminghao_o⁣ and @vernonline\n⁣\nChoreography by @teamsame_official",
                            "media_urls": "https://scontent-lga3-1.cdninstagram.com/user_2352da/v/t2/f2/m86/AQOXIkIK55DzAi2_DogPBk6_wrFDq3NlAAmqrvawi52g7mxe5kqFrQwSNR_rZc8vWAtbyKzIR4K9CHxAhzKfICYK_a3sydtZtRnmDE4.mp4?_nc_cat=1&_nc_sid=5e9851&_nc_ht=scontent-lga3-1.cdninstagram.com&_nc_ohc=to3rRxWBcRsQ7kNvwF6Gyvz&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTA4MjYwMzQ5MTAzMjI5MSwiYXNzZXRfYWdlX2RheXMiOjEsInZpX3VzZWNhc2VfaWQiOjEwMDk5LCJkdXJhdGlvbl9zIjoxOSwidXJsZ2VuX3NvdXJjZSI6Ind3dyJ9&ccb=17-1&vs=6debc38ce296c7dd&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC8xRTdBODY2M0Q2MEQ0QjU3ODg0MUVENEY1Qjc5QUZBRV92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyLzU1RDRGQTgzNzQ2MDQ5RUY5QkI1NTU3NEY2OTkzNDlBX2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACbG85_I6KfsAxUCKAJDMywXQDM7peNT988YEmRhc2hfYmFzZWxpbmVfMV92MREAdf4HZeadAQA&_nc_gid=G3uMBN09BK9EqSVNHLn79w&_nc_ss=7a3ba&_nc_zt=28&oh=00_AQN618Yr0iG64BVsraQbKpygXq5AIjV_w80QI72hRddhTQ&oe=6AC15183",
                            "thumbnail_url": "https://scontent-lga3-1.cdninstagram.com/user_4c9448/t51.82787-15/830434625_18798675220001321_2218595363940657891_n.jpg?stp=dst-jpg_e15_p480x480_tt6&_nc_cat=1&ig_cache_key=Mzk5Nzc5ODU0ODAwMjIzODk0MzE4Nzk4Njc1MjE3MDAxMzIx.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjEwODAuc2RyLnZpZGVvX2RlZmF1bHRfY292ZXJfZnJhbWUuQzMifQ%3D%3D&_nc_ohc=9ZwQwwKfriMQ7kNvwE2MbNk&_nc_oc=AdpRD9nYhmsx6I_RwJ6iCkbSsrmevou8dSGfJt6kndpdDdSsxqyQ4fyhcV3BfTfz5ws&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-lga3-1.cdninstagram.com&_nc_gid=G3uMBN09BK9EqSVNHLn79w&_nc_ss=7a3ba&oh=00_AQMSFhlbr0Zy1lDOVyVxq_iRp2QCSOsJTzeVKE2llECQ2A&oe=6AC546AD",
                            "duration_seconds": 19.248
                          },
                          "author": {
                            "username": "instagram",
                            "display_name": "Instagram",
                            "avatar_url": "https://example.com/redacted",
                            "verified": true
                          },
                          "engagement": {
                            "views": 74760320,
                            "likes": 609412,
                            "comments": 6808,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false
                          },
                          "published_at": "2026-09-30T19:04:54.000Z",
                          "ext": {
                            "author_id": "user_040e32",
                            "media_type": "video",
                            "published_at_epoch": 1790795094,
                            "coauthors": []
                          }
                        },
                        "computed": {
                          "engagement_rate": 0.008243,
                          "language": "en",
                          "content_category": "other",
                          "estimated_reach": 89712384,
                          "vs_creator": {
                            "ratio": null,
                            "metric": "views",
                            "reason": "too_young"
                          },
                          "labels": {
                            "sponsored": {
                              "p": 0.03,
                              "disclosed": false,
                              "undisclosed": false,
                              "brand": null
                            },
                            "intent": {
                              "label": "promoting",
                              "confidence": 0.63,
                              "buyer": false,
                              "seller": 0.25,
                              "fits_offer": null,
                              "urgency": 0
                            },
                            "niche": {
                              "label": "dance",
                              "confidence": 1,
                              "taxonomy": "sc-niche-v1"
                            }
                          }
                        }
                      }
                    ],
                    "next_cursor": "sc2.eyJzIjoiYiIsImMiOiIzOTkzNTU4MTg3MDAxMTkxMDc5XzI1MDI1MzIwIn0",
                    "total": null,
                    "creator_baseline": {
                      "baseline": {
                        "rows_used": 9,
                        "median_views": 49348093,
                        "median_likes": 257224,
                        "median_comments": 5814,
                        "median_gap_hours": 9.51,
                        "median_saves_per_view": null,
                        "median_shares_per_view": null
                      },
                      "reason": null,
                      "rows_used": 9,
                      "cadence": "measured"
                    },
                    "labels": {
                      "presets": [
                        "sponsored",
                        "intent"
                      ],
                      "rows": 12,
                      "labelled": 12,
                      "cached": 12,
                      "skipped": 0,
                      "unjudged": 0,
                      "dropped": 0,
                      "dropped_ids": [],
                      "extra_credits": 0,
                      "methodology_version": "labels/1",
                      "mode": "default",
                      "status": "complete",
                      "pending": 0,
                      "pending_ids": []
                    },
                    "dropped": 0
                  },
                  "credits_used": 1,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": "sc.eyJ2IjoyLCJjIjoic2MyLmV5SnpJam9pWWlJc0ltTWlPaUl6T1Rrek5UVTRNVGczTURBeE1Ua3hNRGM1WHpJMU1ESTFNekl3SW4wIiwiZSI6Imluc3RhZ3JhbS9wcm9maWxlL3Bvc3RzIiwicCI6Im5leHRfbWF4X2lkIn0",
                    "has_more": true,
                    "page_size": 12,
                    "stopped_at": null
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T07:22:40.039Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/post": {
      "get": {
        "summary": "Get Instagram post details",
        "description": "Returns detailed information about a specific Instagram post including view count on videos and reels, like count, comment count, caption, media URLs, media type, author info, and tagged users. The place the post is tagged at is `post.ext.location` (`{ id, name, lat, lng }`, null when it has none), the usernames tagged are `post.ext.usertags`, the comments Instagram shows under the post are `post.ext.top_comments` (`{ id, text, username, likes, published_at }`) when the primary source answers, a carousel lists its slides in `post.ext.media` (`{ type, url, width, height }`), and the `#tags` and `@handles` in the caption are `post.ext.hashtags` and `post.ext.mentions`. The view count is served resiliently: Instagram removed per-post play counts from its public web pages in August 2026, so when the primary source omits the count on a video the API automatically fills engagement.views (and ext.ig_play_count) from a second source within the same request. One call, one credit, no extra endpoint needed. Co-author data is the one thing this endpoint cannot give you: the public web page behind it reports an empty co-author list on every post, including genuine collaborative ones, so `post.ext.coauthors` is deliberately omitted here rather than returned as a misleading empty array. For the co-author list of a single post use /v1/instagram/post/stats, and for a whole feed use /v1/instagram/profile/posts or /v1/instagram/profile/reels.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_post",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 1,
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "Full URL of the Instagram post. A share link copied from the app (`instagram.com/share/...`) works too; a share link to a profile is refused at no charge with the handle to send, and a dead one is a free 404.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.instagram.com/p/DcCH2ZygIiP/"
          },
          {
            "name": "region",
            "in": "query",
            "required": false,
            "description": "2 letter country code to set the proxy in",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "trim",
            "in": "query",
            "required": false,
            "description": "Set to true to get a trimmed response",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "download_media",
            "in": "query",
            "required": false,
            "description": "Set to true to also download the video/images and get back durable hosted media URLs under `data.post.ext.download_media_urls` (`[{ post_id, cdn_url, type, cached }]`). Use these for archiving; the raw `media_urls` are short-lived signed CDN links that expire. Adds a few seconds of latency while the media is fetched. Not available on login-gated posts (age-restricted 18+ and similar), which are served by a source that cannot host durable copies: the post and its media still come back in full, and the response carries a `data._warnings` note telling you to read `data.post.content.media_urls` directly.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/post"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Platform-specific post ID (always a string; numeric upstream IDs are stringified)"
                        },
                        "url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Direct URL to the post on the source platform"
                        },
                        "content": {
                          "type": "object",
                          "description": "Post content fields (text, media, thumbnail, duration)",
                          "properties": {
                            "text": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Post caption, description, or text content"
                            },
                            "media_urls": {
                              "type": [
                                "string",
                                "array",
                                "null"
                              ],
                              "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels.",
                              "items": {
                                "type": "string",
                                "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels."
                              }
                            },
                            "thumbnail_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "URL to thumbnail image"
                            },
                            "duration_seconds": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Video/clip duration in seconds (null for non-video posts)"
                            }
                          }
                        },
                        "author": {
                          "type": "object",
                          "description": "Subset of Author fields for the post creator",
                          "properties": {
                            "username": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Author username"
                            },
                            "display_name": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Author display name"
                            },
                            "avatar_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "URL to author profile picture"
                            },
                            "verified": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Whether the author account is verified"
                            }
                          }
                        },
                        "engagement": {
                          "type": "object",
                          "description": "Engagement counts",
                          "properties": {
                            "views": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "View count (if available). For Instagram video/reels this is the play count: the headline 'Views' the IG app shows. Instagram removed per-post play counts from its public web pages in August 2026, so `GET /v1/instagram/post` now fills the count automatically from a second source within the same call: videos and reels keep a numeric `views` with no extra endpoint or workaround. Note: since mid-July 2026 Instagram's play count is Instagram-only. It no longer includes Facebook crosspost views (Meta-side change; the app UI changed identically). For combined reach, also fetch the Facebook crosspost via `/v1/facebook/post`."
                            },
                            "likes": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Like / reaction count"
                            },
                            "comments": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Comment count. Note: on `GET /v1/instagram/post` this is Instagram's `edge_media_to_parent_comment.count` (top-level comments); the IG list endpoints report the mobile `comment_count` total (includes replies). Both land on this same field."
                            },
                            "shares": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Share / repost / retweet count. On Instagram this is `reshare_count` (the paper-plane Share / Send count) and it exists only on Instagram's mobile surface, so it is returned by `/v1/instagram/post/stats`, `/v1/instagram/profile/reels/full`, and `/v1/instagram/profile/posts/full`. The web-sourced Instagram list and search endpoints return `null` (never fabricated)."
                            },
                            "saves": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Save / bookmark count. `null` on Instagram: the save count is platform-private and Instagram exposes no numeric save metric on any surface (never fabricated)."
                            }
                          }
                        },
                        "flags": {
                          "type": "object",
                          "description": "Boolean flags on the post",
                          "properties": {
                            "nsfw": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "NSFW flag (null when platform does not surface)"
                            },
                            "spoiler": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Spoiler flag (null when platform does not surface)"
                            },
                            "pinned": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Pinned-to-profile flag (null when platform does not surface)"
                            },
                            "deleted": {
                              "type": "boolean",
                              "description": "Whether the post is tombstoned (always present)"
                            },
                            "likes_hidden": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Present and `true` when the creator has hidden the like count. `engagement.likes` is `null` in that case (never the platform's decoy preview number). Absent on normal posts."
                            },
                            "comments_hidden": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Present and `true` when the upstream reports the comment count as hidden. `engagement.comments` is `null` in that case. Absent on normal posts."
                            },
                            "shares_hidden": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.flags.shares_hidden"
                            },
                            "views_hidden": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.flags.views_hidden"
                            },
                            "saves_hidden": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.flags.saves_hidden"
                            }
                          }
                        },
                        "published_at": {
                          "type": [
                            "string",
                            "integer",
                            "null"
                          ],
                          "description": "Post creation timestamp as an ISO 8601 UTC string. When the upstream sent a Unix epoch it is converted here and the raw epoch is preserved under `post.ext.published_at_epoch` for one deprecation cycle."
                        },
                        "ext": {
                          "type": [
                            "object",
                            "null"
                          ],
                          "description": "Platform-specific passthrough fields for cross-endpoint chains (present only on platforms that surface them)",
                          "properties": {
                            "music_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok music/clip id (exact string): pass to `/v1/tiktok/song/videos?clipId=` to find videos using the same sound"
                            },
                            "matched_song_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok only. The catalogue song TikTok matched the video's sound to, as an exact digit string. An official clip and the original sounds creators upload with it have different `music_id` values and the same `matched_song_id`, so group rows on it to count every use of one song. It is not a clipId: `/v1/tiktok/song` and `/v1/tiktok/song/videos` do not accept it. `/v1/tiktok/search/music` carries it on each sound, so a search on the song's title and artist, kept to the sounds with the same `matched_song_id`, gives the song's official sounds and their `video_count`. Absent when TikTok matched the sound to no song, and on rows served from a source that does not report the match."
                            },
                            "matched_song_title": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok only. The title of the song in `matched_song_id`. Absent when there is no matched song."
                            },
                            "matched_song_artist": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok only. The artist of the song in `matched_song_id`, as TikTok's catalogue names it. Absent when there is no matched song."
                            },
                            "music_title": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok only. The title of the video's own sound (`music_id`). An uploaded sound is titled like `original sound - <handle>`; the song it plays, when TikTok recognised one, is `matched_song_title`."
                            },
                            "music_artist": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok only. The artist TikTok shows for the video's own sound. On an original sound this is the uploader's display name, not the song's artist; use `matched_song_artist` for that."
                            },
                            "music_is_original": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "TikTok only. `true` when the video's sound is an original sound a creator uploaded, `false` when it is a catalogue track. Absent when the source does not say."
                            },
                            "author_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The creator's platform-native numeric user id. On TikTok search and list items, pass to `/v1/tiktok/profile?user_id=` for the creator's current follower count (survives username changes). On Instagram `/v1/instagram/search/reels`, `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` items it is present on every row, accepted by `/v1/instagram/profile/country?user_id=` and `/v1/instagram/basic-profile?userId=`. On Facebook it appears when the upstream exposed a numeric actor id and no real handle."
                            },
                            "author_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The posting account's profile URL, so a matching post can be followed to its account. Present on `/v1/facebook/search/posts` rows: the vanity or `/people/<name>/<id>/` URL when Facebook sends one, otherwise `https://www.facebook.com/profile.php?id=<numeric id>` built from the account id. Pass it as `url` to `/v1/facebook/profile` (or to `/v1/prism/profiles` with `platform: facebook`). Null when the row names neither an account URL nor a numeric account id. Absent on other endpoints."
                            },
                            "author_followers": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "The creator's follower count as embedded in the search payload itself, when the search source happens to carry one. On Instagram `search/reels` it is null on a plain call, because Instagram stopped sending follower counts in its search payload in August 2026; send `include=creator` (or `country`) and it is filled from the creator's profile, 2 credits per creator looked up. It stays null when that lookup does not resolve."
                            },
                            "author_following": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.author_following"
                            },
                            "author_posts_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.author_posts_count"
                            },
                            "author_location": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The free text the author wrote in their profile's location field, exactly as written (for example `Johannesburg, South Africa`). It is not a country code and is not checked. Present on X tweet and reply rows; null or absent when the author left it blank."
                            },
                            "in_reply_to_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.in_reply_to_id"
                            },
                            "in_reply_to_username": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.in_reply_to_username"
                            },
                            "conversation_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.conversation_id"
                            },
                            "author_country": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The creator's country. On Instagram it is the country the creator declares on the About this account panel, as a country name (for example `Spain`), and it is not where the post was filmed. It is present on `/v1/instagram/search/reels` when the request sends `include=creator`, `include=country` or `country`, and on `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` when it sends `include=country`, filled by looking the creator up. On YouTube rows joined with `include=channel` it is the channel's own country as an ISO 3166-1 alpha-2 code (for example `ZA`). Null when the platform publishes no country for the creator or the lookup did not resolve, and nothing is guessed; absent on a plain call."
                            },
                            "author_public_email": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The public contact email on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public email or the lookup did not resolve; absent on a plain call."
                            },
                            "author_public_phone": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The public contact phone number on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public phone or the lookup did not resolve; absent on a plain call."
                            },
                            "download_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "How many times the video has been saved to a device. TikTok only, and distinct from `engagement.saves`: a save keeps the video in a private collection on the platform, a download takes a copy off it, and TikTok counts the two separately. Present on TikTok post, search and post-list responses; absent everywhere else."
                            },
                            "region": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok only: the country TikTok registers the video to, as an ISO 3166-1 alpha-2 code (normally the creator's account country when they posted). It is not the viewer's country, not the `region` you requested, and not a language. On `/v1/tiktok/trending`, `/v1/tiktok/search`, `/v1/tiktok/search/top`, `/v1/tiktok/profile/videos`, `/v1/tiktok/search/hashtag` and `/v1/tiktok/song/videos` it is how you tell which rows are from a given country: filter on it when you need only that country. A row whose source omits the country stays null. The `region` request parameter still only sets the proxy."
                            },
                            "subreddit": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Reddit subreddit name (search/list items): pass to `/v1/reddit/subreddit/details?subreddit=`"
                            },
                            "title": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.title"
                            },
                            "selftext": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.selftext"
                            },
                            "upvote_ratio": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Reddit only: the share of a post's votes that are upvotes, as a fraction from 0 to 1 and usually close to 1 (six live rows measured 1, 1, 1, 0.86, 0.75, 1). Fractional despite the integer type this schema emits for every numeric leaf, the same caveat as `author.ext.average_rating`. Populated on `/v1/reddit/search` rows whose source carries it, and null everywhere else on Reddit including `/v1/reddit/post` and `/v1/reddit/subreddit`."
                            },
                            "flair": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.flair"
                            },
                            "content_language": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The language the platform itself tags the post with, when it sends one: Reddit's own language tag on Reddit lanes, and TikTok's caption-language tag (for example `de`) on `/v1/tiktok/trending?feed=local`. Null when the platform could not tell (Reddit `und`, TikTok `un`, common on short or emoji-only captions); absent where the source sends no tag. Never inferred from the text by us: that is `post.computed.language`."
                            },
                            "type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.type"
                            },
                            "content_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.content_type"
                            },
                            "ticker_symbols": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.ticker_symbols",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.ticker_symbols"
                              }
                            },
                            "video_view_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram's legacy 3-second-view count. Historical: Instagram stopped serving it in August 2026 (removed from its web post surface along with the web play count), so fresh `/v1/instagram/post` lookups no longer carry it and no source can restore it. Use `engagement.views` (the play count) instead."
                            },
                            "ig_play_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram-only play count (`ig_play_count`). Since mid-July 2026 Instagram's headline play count (`engagement.views`) no longer includes Facebook crosspost views and equals this value; it is surfaced explicitly so you can tell the Instagram-only figure apart and detect any future re-divergence. For combined Instagram + Facebook reach, also fetch the Facebook crosspost via `/v1/facebook/post`. Present on `/v1/instagram/post/stats` and, since the August 2026 views fix, on `/v1/instagram/post` for video posts."
                            },
                            "repost_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.repost_count"
                            },
                            "media_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.media_type"
                            },
                            "text_truncated": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.ext.text_truncated"
                            },
                            "ip_location": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.ip_location"
                            },
                            "carousel_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.carousel_count"
                            },
                            "remix_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.remix_count"
                            },
                            "audio_cluster_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Instagram's audio cluster for a reel, as an exact digit string: the id Instagram uses to group different uploads of the same sound. Present on `/v1/instagram/audio/reels` rows and on `/v1/instagram/profile/reels` with `include=stats`; absent on a row when it is not available and on every other surface."
                            },
                            "facebook_likes": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.likes` on this row. A post shared to Facebook arrives from some sources with its Facebook likes already folded into the Instagram count, so the share is subtracted and published here, which keeps `engagement.likes` the Instagram-only figure instagram.com shows on the post. Add the two together for the combined number. Absent when the read carried no Facebook share, and absent on a post whose owner hides the like count, because nothing can be subtracted from a null. A response that excluded a share also carries a note in `data._warnings`."
                            },
                            "facebook_comments": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.comments` on this row, the comment counterpart of `post.ext.facebook_likes`. Each leaf appears only for the count it actually changed, so a post whose likes are hidden but whose comments were reconciled carries this one alone."
                            },
                            "instagram_views": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram only: the Instagram-only play count of a video, the same figure on every Instagram endpoint. `engagement.views` keeps each endpoint's established meaning: on `/v1/instagram/profile/reels`, `/v1/instagram/audio/reels`, `/v1/instagram/search/reels` and `/v1/instagram/search/hashtag` it can include the post's Facebook cross-post views, while on `/v1/instagram/post` and `/v1/instagram/post/stats` it is Instagram-only. Read this leaf when you compare one post across endpoints. Absent on photos and when the source did not report the Instagram-only figure."
                            },
                            "facebook_views": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram only: the Facebook cross-post part of a video's play count, the counterpart of `post.ext.instagram_views`. Present only when the source reported the Facebook part, or a combined total above the Instagram figure. Absent does not mean zero: some sources report the Instagram figure alone even for a cross-posted video."
                            },
                            "published_at_epoch": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Raw Unix epoch for `published_at` (seconds, or milliseconds when the upstream sent millis). Present only when the upstream sent a numeric epoch that was normalised to the ISO 8601 `published_at` string. Kept for one deprecation cycle for integrations pinned to the numeric form."
                            },
                            "usertags": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.usertags",
                              "items": {
                                "type": "string",
                                "description": "Leaf at post.ext.usertags"
                              }
                            },
                            "coauthors": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post).",
                              "items": {
                                "type": "string",
                                "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post)."
                              }
                            },
                            "music": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.music"
                            },
                            "sponsor_tags": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint.",
                              "items": {
                                "type": "string",
                                "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                              }
                            },
                            "sponsored_disclosed": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "The platform's own disclosure that the post is paid or promotional: on Instagram the paid-partnership label (`is_paid_partnership`) or a tagged brand partner, on TikTok the label TikTok shows viewers (\"Paid partnership\", \"Commission paid\", \"Promotional content\"). `false` when the post carries the flag unset, null when it carries none. Present on `/v1/instagram/post/stats`, `/v1/instagram/search/reels` and `/v1/tiktok/search`; absent on every other endpoint."
                            },
                            "ai_label": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Instagram only: Instagram's AI-content label on the post, as the method Instagram reports: `classifier_score_high` (Instagram detected it, shown as \"Likely made with AI\"), `ai_created` or `ai_edited` (declared or detected as made or edited with AI). Null when the post carries no AI label. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                            },
                            "story_mentions": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                              "items": {
                                "type": "string",
                                "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint."
                              }
                            },
                            "story_links": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint.",
                              "items": {
                                "type": "string",
                                "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint."
                              }
                            },
                            "story_reshared_posts": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                              "items": {
                                "type": "string",
                                "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint."
                              }
                            },
                            "location": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.location"
                            },
                            "media": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.media",
                              "items": {
                                "type": "object",
                                "description": "Nested object: post.ext.media",
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "description": "Leaf at post.ext.media.type"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at post.ext.media.url"
                                  },
                                  "width": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at post.ext.media.width"
                                  },
                                  "height": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at post.ext.media.height"
                                  }
                                }
                              }
                            },
                            "top_comments": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.top_comments",
                              "items": {
                                "type": "object",
                                "description": "Nested object: post.ext.top_comments",
                                "properties": {
                                  "id": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at post.ext.top_comments.id"
                                  },
                                  "text": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at post.ext.top_comments.text"
                                  },
                                  "username": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at post.ext.top_comments.username"
                                  },
                                  "likes": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at post.ext.top_comments.likes"
                                  },
                                  "published_at": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at post.ext.top_comments.published_at"
                                  }
                                }
                              }
                            },
                            "hashtags": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.hashtags",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.hashtags"
                              }
                            },
                            "mentions": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.mentions",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.mentions"
                              }
                            },
                            "mentioned_user_ids": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.mentioned_user_ids",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.mentioned_user_ids"
                              }
                            },
                            "quoted_post": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Threads quote posts: the post this one quotes, as `{ id, url, author: { id, username }, text, media_urls, thumbnail_url }`. A quote post usually carries no caption or media of its own, and the text and video you see on the post's page belong to this attachment, by a different author. It is returned here rather than merged into `post.content`, so `content.*` always stays the outer post's own content and one account's media is never attributed to another. Absent on posts that are not quote posts."
                            },
                            "retweeted_post": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.retweeted_post"
                            },
                            "quote_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.quote_count"
                            },
                            "all_media_urls": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.all_media_urls",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.all_media_urls"
                              }
                            },
                            "reaction_counts": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.reaction_counts",
                              "items": {
                                "type": "string",
                                "description": "Leaf at post.ext.reaction_counts"
                              }
                            },
                            "share_urn": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.share_urn"
                            },
                            "post_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.post_type"
                            },
                            "activity_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.activity_id"
                            },
                            "published_at_precision": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.published_at_precision"
                            },
                            "author_urn": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.author_urn"
                            },
                            "author_headline": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.author_headline"
                            },
                            "author_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.author_type"
                            },
                            "is_repost_quote": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.ext.is_repost_quote"
                            },
                            "article": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.article"
                            },
                            "reaction_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.reaction_type"
                            },
                            "download_media_urls": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.download_media_urls",
                              "items": {
                                "type": "string",
                                "description": "Leaf at post.ext.download_media_urls"
                              }
                            },
                            "tags": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.tags",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.tags"
                              }
                            },
                            "categoryId": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.categoryId"
                            },
                            "categoryTitle": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.categoryTitle"
                            },
                            "topicCategories": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.topicCategories",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.topicCategories"
                              }
                            },
                            "duration": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.duration"
                            },
                            "license": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.license"
                            },
                            "madeForKids": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.ext.madeForKids"
                            },
                            "defaultAudioLanguage": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.defaultAudioLanguage"
                            },
                            "hasPaidProductPlacement": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.ext.hasPaidProductPlacement"
                            },
                            "caption": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.caption"
                            },
                            "position": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.position"
                            },
                            "playlistId": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.playlistId"
                            },
                            "videoOwnerChannelId": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.videoOwnerChannelId"
                            },
                            "videoPublishedAt": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.videoPublishedAt"
                            },
                            "description": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.description"
                            },
                            "default_language": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.default_language"
                            },
                            "localizations": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.localizations"
                            },
                            "playlist_item_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.playlist_item_id"
                            },
                            "playlist_owner_channel_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.playlist_owner_channel_id"
                            },
                            "playlist_owner_title": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.playlist_owner_title"
                            },
                            "channel_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.channel_id"
                            },
                            "published_label": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.published_label"
                            },
                            "published_precision": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.published_precision"
                            },
                            "title_maybe_translated": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.ext.title_maybe_translated"
                            },
                            "video_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.video_count"
                            },
                            "posts_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "`/v1/instagram/hashtag` only: the exact number of public posts Instagram counts under the hashtag. Live: it moves between calls minutes apart."
                            },
                            "commerce": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.commerce"
                            },
                            "on_screen_texts": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.on_screen_texts",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.on_screen_texts"
                              }
                            },
                            "topic_tag": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.topic_tag"
                            },
                            "reshare_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.reshare_count"
                            },
                            "dsp_ids": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.dsp_ids"
                            },
                            "topic_tag_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.topic_tag_id"
                            },
                            "amazon_shop_lists": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.amazon_shop_lists",
                              "items": {
                                "type": "string",
                                "description": "Leaf at post.ext.amazon_shop_lists"
                              }
                            },
                            "amazon_shop_trending_picks": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.amazon_shop_trending_picks",
                              "items": {
                                "type": "string",
                                "description": "Leaf at post.ext.amazon_shop_trending_picks"
                              }
                            },
                            "amazon_shop_curations": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.amazon_shop_curations",
                              "items": {
                                "type": "string",
                                "description": "Leaf at post.ext.amazon_shop_curations"
                              }
                            },
                            "amazon_shop_socials": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.amazon_shop_socials",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.amazon_shop_socials"
                              }
                            },
                            "ad": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Ad Library envelope (Facebook `adlibrary/ad` and `adlibrary/company/ads` items): page_id, currency, spend, reach_estimate, publisher_platforms, categories, targeted_or_reached_countries, cta_text, cta_type, link_url, is_active, end_date_iso, display_format, title, video_hd_url, video_sd_url. Absent on every non-ad surface."
                            },
                            "apple_music": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.apple_music"
                            },
                            "feedback_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.feedback_id"
                            },
                            "question_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Naver KnowledgeiN (`/v1/naver/kin/search`) only: the question's id (Naver's `docId`), read from the row's link. Kin returns one row per answer, so several rows can share it; send `group=question` for one row per question."
                            },
                            "answer_no": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Naver KnowledgeiN only: which answer of the question this row is (Naver's `answerNo`), read from the row's link."
                            },
                            "answer_nos": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first.",
                              "items": {
                                "type": "integer",
                                "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first."
                              }
                            },
                            "published_at_est": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Naver KnowledgeiN only: the question's date ESTIMATED from its id (`YYYY-MM-DD`, Korea time), never a published date, so `published_at` stays null. Absent for questions older than the calibration table."
                            },
                            "date_basis": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "How `post.ext.published_at_est` was derived. `kin_docid_estimate`: interpolated from the question id against question pages whose posted date was read."
                            },
                            "event": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.event"
                            },
                            "trend": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Trend-board envelope: what TikTok's own trend board says about the row. On `/v1/tiktok/hashtags/popular`: `rank`, `country_code`, `period_days`, `posts` and `views` for the window (not lifetime totals), `industry` / `industry_id` / `industry_label` for the first board the hashtag was read from (null for the overall board), `boards` listing EVERY board it ranks on as `{ industry, industry_id, industry_label, rank }` in board order (so a hashtag in the top 3 overall and on an industry board shows both), `popularity_curve` as `{ date, value }` with value 0 to 100 relative to the window's peak, and `top_creators`. On `/v1/tiktok/videos/popular`: `rank`, `country_code`, `period_days`, `order_by`, `period_views`, `organic_views`, `engagement_rate`, `six_second_view_through_rate`, `content_tags`. Absent on every non-board surface."
                            },
                            "updated_at": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.updated_at"
                            },
                            "alt_text": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.alt_text"
                            },
                            "board_name": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.board_name"
                            }
                          }
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      }
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/post",
                  "data": {
                    "post": {
                      "id": "3963765146907609231",
                      "url": "https://www.instagram.com/p/DcCH2ZygIiP/",
                      "content": {
                        "text": "America’s newest and most exciting aerospace technology expo and air show is landing at @NASAKennedy in Florida on Nov. 7-8. 👀\n \nIn honor of America’s 250th anniversary, NASA and external collaborators are hosting MAX POWER, a two-day air and space festival for families, aircraft and tech enthusiasts, and NASA fans of all ages to celebrate, explore, and be inspired. MAX POWER will feature air shows, tech displays, and astronaut appearances from some of our most famous missions.\n \nCheck the link in our bio for more details on how to join in the fun!\n \nCredit: NASA\n \n#NASA #MaxPower #America250",
                        "media_urls": "https://scontent-lga3-3.cdninstagram.com/o1/v/t2/f2/m86/AQNh2ps9dzDCDRClcPrhnvk6sadnkNozK88hj8XCQjaTtcB49RwRDoQ2l0Iti8mxK0d2XmCuHerOvHNcInNAw58SXGIQ4nS_K7ffZ9g.mp4?_nc_cat=102&_nc_sid=5e9851&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_ohc=9ysrcCn9-XsQ7kNvwFyrtZi&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTg2MzcxNTM1NDYwNDkxNTIsImFzc2V0X2FnZV9kYXlzIjo0OCwidmlfdXNlY2FzZV9pZCI6MTAwOTksImR1cmF0aW9uX3MiOjc2LCJ1cmxnZW5fc291cmNlIjoid3d3In0%3D&ccb=17-1&vs=7247492f2ff5e4ca&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC8xNDRERkFBMDczQjgzOTRGNThBRUNGRDU4MTlDQkE4MF92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyLzQzNDRGN0VEMDFFOEU3Nzc0NkNEMkU2QUIwODZGNjlFX2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACaA2uTLjpmbQhUCKAJDMywXQFMrQ5WBBiUYEmRhc2hfYmFzZWxpbmVfMV92MREAdf4HZeadAQA&_nc_gid=sKLjiiUqrCMimVojIAnidg&_nc_ss=78689&_nc_zt=28&oh=00_AQP9A_4HGpEeYC9zvN4MSVLWMn2fzeGmIQNV3V0Dh4FZ8Q&oe=6AC1BD03",
                        "thumbnail_url": "https://scontent-lga3-1.cdninstagram.com/v/t51.82787-15/773469429_18637153849049152_1501459325827939487_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=110&ig_cache_key=Mzk2Mzc2NTE0NjkwNzYwOTIzMTE4NjM3MTUzODQzMDQ5MTUy.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjQwNS5zZHIudmlkZW9fZGVmYXVsdF9jb3Zlcl9mcmFtZS5DMyJ9&_nc_ohc=aq4dxzpDhCoQ7kNvwG4GfgM&_nc_oc=AdpEBc2L4SKh0cvb7OU1bS6Mohe5XIW61Hu6QWRIKrpYuTdpwd2C2lmmaLeeHX5_tx4&_nc_zt=23&_nc_ht=scontent-lga3-1.cdninstagram.com&_nc_gid=sKLjiiUqrCMimVojIAnidg&_nc_ss=78689&oh=00_AQMTx2KBGXKj7C0AkdKBe3wtDcOeJtB9a-f0spiaFr62Iw&oe=6AC5ABAD",
                        "duration_seconds": 76.693
                      },
                      "author": {
                        "username": "nasa",
                        "display_name": "NASA",
                        "avatar_url": "https://scontent-lga3-3.cdninstagram.com/v/t51.2885-19/29090066_159271188110124_1152068159029641216_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=1&ccb=7-5&_nc_sid=f7ccc5&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLnd3dy4xMDgwLkMzIn0%3D&_nc_ohc=DDdvpkq-6dMQ7kNvwEzKitu&_nc_oc=AdqqjGJwpOKrnZIjJtuyC3uig6l4GPjCYLiva-oQVG74t-fd22C9JE2d4yW5vrYDCEY&_nc_zt=24&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_ss=78689&oh=00_AQNnHjBvTH2TIBJAmVuIIEXfEPOLRV5-pSD3zt75gI1o_w&oe=6AC58B69",
                        "verified": true
                      },
                      "engagement": {
                        "views": 6516112,
                        "likes": 100004,
                        "comments": 1070,
                        "shares": null,
                        "saves": null
                      },
                      "flags": {
                        "nsfw": null,
                        "spoiler": null,
                        "pinned": false,
                        "deleted": false
                      },
                      "published_at": "2026-08-14T20:01:26.000Z",
                      "ext": {
                        "music_id": "37739766162335392",
                        "video_view_count": null,
                        "media_type": "video",
                        "published_at_epoch": 1786737686,
                        "music": {
                          "id": "37739766162335392",
                          "track_title": "Original audio",
                          "artist": "nasa",
                          "is_original": true
                        }
                      }
                    },
                    "computed": {
                      "engagement_rate": 0.015511,
                      "language": "en",
                      "content_category": "other",
                      "estimated_reach": 7819334
                    }
                  },
                  "credits_used": 1,
                  "request_id": "req_example000000",
                  "cached": false,
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T15:37:15.363Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/post/comments": {
      "get": {
        "summary": "List Instagram post comments",
        "description": "Returns a list of comments on an Instagram post, ranked by the platform's own popularity order by default (`sort=top`) so the most-liked comments come first, or newest-first with `sort=recent`. Each comment includes the author, comment text, real like count, reply count, and creation timestamp. Page through with `cursor`. Note: comment.author.display_name is usually null, because the Instagram surface that serves this endpoint withholds commenter display names. Join on comment.author.username. `comment.flags.liked_by_creator` is true when the post's creator liked (hearted) the comment and false when not, and null when the source that served the call could not tell.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_post_comments",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "advanced",
        "x-credit-cost": 5,
        "x-credit-cost-min": 5,
        "x-credit-cost-max": 19,
        "x-credit-cost-formula": "5 credits per page, with the default labels (sentiment, question, purchase_intent, complaint) included free. label=spam, toxic or low_quality holds 4 extra credits and refunds down to 1 credit per started 25 comments that were newly judged: comments already labelled are free, a page where nothing could be judged refunds the whole extra, and a cached page is free. With `max_pages`, `max_items` or `max_credits`, each page walked is billed at this price (a cached page is free), and `max_credits` caps the total.",
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL of the Instagram post (a /p/, /reel/, /reels/, or /tv/ link). A share link copied from the app (`instagram.com/share/...`) works too; a share link to a profile is refused at no charge with the handle to send, and a dead one is a free 404.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.instagram.com/p/DXidPIVDU6M/"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Ordering: `top` (default) ranks by Instagram's popularity order (most-liked first); `recent` returns newest-first. Use `recent` when you are paging through a whole thread: Instagram ranks only the most-liked head, so a `top` walk starts repeating comments once you page past it.",
            "schema": {
              "type": "string",
              "enum": [
                "top",
                "recent"
              ]
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Pagination cursor. Use the `next_cursor` from the previous response to fetch the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "safe_url",
            "in": "query",
            "required": false,
            "description": "When true, returns URL-safe profile picture links suitable for embedding.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "scan_pages",
            "in": "query",
            "required": false,
            "description": "Optional, 1 to 3, default 1. With 2 or 3, the call reads that many pages, drops comments repeated across pages, and returns them all sorted by likes (sort=top) or newest first (sort=recent). Use it when the first page of a top-sorted thread is low-like comments. Costs 5 credits for each page that added comments; a page of repeats is not billed. data.scan reports the pages read and billed and whether the thread ended.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 3
            }
          },
          {
            "name": "label",
            "in": "query",
            "required": false,
            "description": "Optional CSV of SocialCrawl labels to add to every comment: sentiment, spam, question, purchase_intent, complaint, toxic, low_quality, injection. Without this param every page already carries sentiment, question, purchase_intent and complaint, free; label= adds the labels you name to them (the defaults keep running). Each comment gains computed.labels with probabilities (0 to 1), so you choose the cut-off; a comment that could not be judged carries labels: null. sentiment, question, purchase_intent and complaint are free when asked for too; spam, toxic, low_quality and injection add 1 credit per started 25 newly judged comments (comments already labelled for anyone are free, and so is a cached page). injection flags text that addresses an AI system and tries to direct it (flagged, p); it never drops or rewrites a row. judgments=off (or label=none) turns the default labels off. data.labels reports what was judged and billed.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "exclude",
            "in": "query",
            "required": false,
            "description": "Optional CSV (spam, low_quality), only with the same preset in label. Drops comments whose probability is 0.8 or higher and lists their ids in data.labels.dropped_ids. A comment that could not be judged is never dropped.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "judgments",
            "in": "query",
            "required": false,
            "description": "Optional, on (the default) or off. By default every row gains free SocialCrawl judgments (computed.labels, and computed.relevance on search endpoints), reported in data.labels (mode default) and data.relevance (origin default), each with a status (complete, partial or skipped) and pending: the rows still being judged when the page was sent, which carry null now and are filled on your next call or cached read. Default judgments never add credits, never change an existing field, and never drop or reorder a row. off returns the page exactly as before, with none of those keys. label=none does the same.",
            "schema": {
              "type": "string",
              "enum": [
                "on",
                "off"
              ]
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Optional. When 1, return a cost preview for this labelled or relevance-filtered request without fetching the page or judging any row. data.estimate reports rows_expected, rows_cached, label_credits_min, label_credits_max and base_credits. 0 credits charged.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ]
            }
          },
          {
            "name": "label_evidence",
            "in": "query",
            "required": false,
            "description": "Optional, only with label=. When 1, every labelled row also carries computed.labels_evidence.<preset> = { quote, sentence_index }: the sentence in the row that most clearly shows the label, copied verbatim. Absent or null when no single sentence shows it.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ]
            }
          },
          {
            "name": "fit",
            "in": "query",
            "required": false,
            "description": "Optional. When goal, keep the rows and fields needed for the goal you pass in goal= (plus any that are uncertain, and the first and last), and replace the rest with a stub. data.held_back lists the held ids and a recall id that re-reads the full page from cache at no extra charge. Without this param the page is unchanged.",
            "schema": {
              "type": "string",
              "enum": [
                "goal"
              ]
            }
          },
          {
            "name": "goal",
            "in": "query",
            "required": false,
            "description": "Required by fit=goal. What you are trying to do, in your own words, up to 300 characters.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fit_tokens",
            "in": "query",
            "required": false,
            "description": "Optional, only with fit=goal. Soft cap on how much of the page to keep, in tokens. Uncertain blocks and the first and last block are kept even if they exceed it.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "Only rows published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Rows older than it are left off the page, and the page that reaches one ends the walk: `next_cursor` is not returned and `pagination.stopped_at` is `since`. Sending it sets the newest-first sort shown in this endpoint's sort parameter (any other sort value is a free 400). The page still costs what a page costs, so you pay for the pages you walk and no more. A row with no date is kept. `published_after`, `start_date`, `from_date`, `publish_time` (`yesterday`, `this-week`, `this-month`, `last-3-months`, `last-6-months`) and `max_age_days` are accepted and applied as `since`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "description": "Only rows published on or before this date: YYYY-MM-DD (that whole UTC day is included) or an ISO 8601 timestamp. Newer rows are left off each page and the walk does not stop, so older pages follow. A row with no date is kept. `published_before`, `end_date` and `to_date` are accepted and applied as `until`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max_pages",
            "in": "query",
            "required": false,
            "description": "1 to 50 (default 1, or 50 when `max_items` or `max_credits` is sent). Walk up to this many pages in one call and return the rows from all of them. Each page walked is billed exactly as one call to this endpoint (a cached page is free) and counts against your rate limit; its charge and any refund are recorded under the page's own request id, listed in `data.walk.request_ids`. The walk stops early at the last page, or when the request's time budget runs low; `data.walk.stopped` says why (`end`, `max_pages`, `max_items`, `max_credits`, `time_budget`, `page_error`) and `pagination.next_cursor` continues from where it stopped.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "max_items",
            "in": "query",
            "required": false,
            "description": "1 to 5000. Get more in one call: keep walking pages until the response holds at least this many rows, then stop with `data.walk.stopped: \"max_items\"`. The last page is returned whole (it was billed), so `data.items` can hold up to one page more than this, and `pagination.next_cursor` resumes right after it without skipping a row. Walks up to 50 pages unless `max_pages` says fewer; each page is billed as one call (a cached page is free). Add `max_credits` to cap the spend. A long walk can stop on the time budget first (`\"time_budget\"`): send the returned cursor with the same params to continue.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5000
            }
          },
          {
            "name": "max_credits",
            "in": "query",
            "required": false,
            "description": "1 to 100000. The most this call may spend, across every page it walks. A page starts only while the credits already spent plus that page's price (or, when higher, the most any page of this walk has cost) still fit, so the call never goes past it; the walk then stops with `data.walk.stopped: \"max_credits\"` and the cursor to resume. Sent alone, it walks as far as the budget goes (up to 50 pages). A value below the price of one page is a free 400 whose `error.details.page_credits` names that price. Credits a row join (`include=`) adds are known only once a page has run, so page 1 is checked against its own price.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100000
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/post/comments"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of canonical comment wrappers ({ comment })",
                          "items": {
                            "type": "object",
                            "description": "Canonical comment wrapper",
                            "properties": {
                              "comment": {
                                "type": "object",
                                "description": "Canonical Comment object (unified across all platforms)",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "Platform-specific comment ID (always a string)"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Direct URL to the comment on the source platform"
                                  },
                                  "parent_id": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Parent comment ID for nested replies, or null for top-level comments"
                                  },
                                  "post_id": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "ID of the post this comment belongs to"
                                  },
                                  "text": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Comment body. Tombstone sentinels ([deleted] / [removed]) are collapsed to null upstream: customers never see them."
                                  },
                                  "author": {
                                    "type": "object",
                                    "description": "Subset of Author fields for the comment author",
                                    "properties": {
                                      "username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Comment author username (null when tombstoned)"
                                      },
                                      "display_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Comment author display name"
                                      },
                                      "avatar_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to comment author profile picture"
                                      },
                                      "verified": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Whether the comment author is verified"
                                      }
                                    }
                                  },
                                  "engagement": {
                                    "type": "object",
                                    "description": "Engagement counts on the comment",
                                    "properties": {
                                      "likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Like / upvote count"
                                      },
                                      "replies": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Reply / child-comment count. `0` when the upstream structurally reports the count and the comment has no replies; `null` only when the upstream does not surface a reply count at all."
                                      }
                                    }
                                  },
                                  "flags": {
                                    "type": "object",
                                    "description": "Boolean flags on the comment",
                                    "properties": {
                                      "pinned": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Pinned flag (null when platform does not surface)"
                                      },
                                      "deleted": {
                                        "type": "boolean",
                                        "description": "Whether the comment is tombstoned (always present, even when false)"
                                      },
                                      "liked_by_creator": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "`/v1/instagram/post/comments` only: true when the post's creator liked (hearted) the comment, false when not, null when the source that served the call could not tell. Absent on every other endpoint."
                                      }
                                    }
                                  },
                                  "published_at": {
                                    "type": [
                                      "string",
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Comment creation timestamp as an ISO 8601 UTC string. When the upstream sent a Unix epoch it is converted here and the raw epoch is preserved under `comment.ext.published_at_epoch` for one deprecation cycle."
                                  },
                                  "ext": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Platform-specific passthrough tokens for reply expansion (present only on platforms that surface them)",
                                    "properties": {
                                      "replies_token": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "YouTube reply continuation token: pass to `/v1/youtube/video/comment/replies?continuationToken=`"
                                      },
                                      "replies_cursor": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Reddit reply-branch continuation cursor. Present when this comment's reply tree is truncated upstream: pass it back as `?cursor=` on `/v1/reddit/post/comments` to load the rest of the branch."
                                      },
                                      "depth": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Reddit comment nesting depth as the source reports it: 0 on a top-level comment, 1 on a direct reply, and so on. Present when the thread arrived flat and was re-nested into `replies[]`, so you can verify that nesting independently."
                                      },
                                      "published_at_epoch": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Raw Unix epoch for `published_at` (present only when the upstream sent a numeric epoch that was normalised to the ISO 8601 string)."
                                      },
                                      "feedback_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Facebook comment feedback id: feeds `/v1/facebook/post/comment/replies`"
                                      },
                                      "expansion_token": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Facebook comment expansion/paginator token: feeds `/v1/facebook/post/comment/replies`"
                                      },
                                      "author_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The commenter's platform-native numeric user id, where the upstream exposes one."
                                      },
                                      "ip_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.ip_location"
                                      },
                                      "urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.urn"
                                      },
                                      "reaction_counts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at comment.ext.reaction_counts",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at comment.ext.reaction_counts"
                                        }
                                      },
                                      "is_edited": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at comment.ext.is_edited"
                                      },
                                      "previous_replies_token": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.previous_replies_token"
                                      },
                                      "author_headline": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.author_headline"
                                      },
                                      "updated_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.updated_at"
                                      },
                                      "author_channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.author_channel_id"
                                      },
                                      "author_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.author_url"
                                      },
                                      "viewer_rating": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.viewer_rating"
                                      },
                                      "text_original": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.text_original"
                                      },
                                      "preview_replies": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at comment.ext.preview_replies",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at comment.ext.preview_replies"
                                        }
                                      },
                                      "lookup": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at comment.ext.lookup"
                                      },
                                      "post_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.post_title"
                                      },
                                      "post_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.post_url"
                                      },
                                      "subreddit": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.subreddit"
                                      },
                                      "subreddit_subscribers": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at comment.ext.subreddit_subscribers"
                                      },
                                      "post_score": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at comment.ext.post_score"
                                      },
                                      "post_comment_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at comment.ext.post_comment_count"
                                      },
                                      "post_author": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.post_author"
                                      },
                                      "post_published_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.post_published_at"
                                      },
                                      "post_flair": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.post_flair"
                                      },
                                      "is_submitter": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at comment.ext.is_submitter"
                                      },
                                      "edited_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.edited_at"
                                      },
                                      "controversiality": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at comment.ext.controversiality"
                                      },
                                      "content_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "ISO 639-1 language tag for this comment, when the source reports one. X writes `zxx` / `und` for no linguistic content; those collapse to null."
                                      },
                                      "author_followers": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "The commenter's follower count as embedded in this row. Snapshot as of whenever the replies source saw the account, not a live figure. On X this is present on every `tweet/replies` row."
                                      },
                                      "author_following": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "The commenter's following count as embedded in this row. Same snapshot caveat as `author_followers`."
                                      },
                                      "author_posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "The commenter's post count as embedded in this row. Same snapshot caveat as `author_followers`."
                                      },
                                      "author_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.author_location"
                                      },
                                      "quote_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "How many quote-posts this comment has, when the source reports it. On X a reply is a tweet, so this is the same figure `post.ext.quote_count` carries on tweet lanes."
                                      },
                                      "views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "View count for this comment, when the source reports it. On X a reply is a tweet and the count is public on posts from ~2022 onward."
                                      },
                                      "saves": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Bookmark / save count for this comment, when the source reports it. On X this is `legacy.bookmark_count`."
                                      }
                                    }
                                  },
                                  "replies": {
                                    "type": [
                                      "array",
                                      "null"
                                    ],
                                    "description": "Nested reply tree: array of child comments, each itself a full Comment object with its own `replies`. Populated on threaded platforms (Reddit); absent on flat-comment platforms, which thread only via `parent_id`.",
                                    "items": {
                                      "type": "object",
                                      "description": "Nested reply tree: array of child comments, each itself a full Comment object with its own `replies`. Populated on threaded platforms (Reddit); absent on flat-comment platforms, which thread only via `parent_id`."
                                    }
                                  }
                                }
                              }
                            }
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/post/comments",
                  "data": {
                    "items": [
                      {
                        "comment": {
                          "id": "18117485308668753",
                          "url": "https://example.com/redacted",
                          "parent_id": null,
                          "post_id": "DXidPIVDU6M",
                          "text": "Sample comment text (redacted).",
                          "author": {
                            "username": "user_fe6bf9",
                            "display_name": null,
                            "avatar_url": "https://example.com/avatars/user_6d63bb.png",
                            "verified": false
                          },
                          "engagement": {
                            "likes": 46932,
                            "replies": 125
                          },
                          "flags": {
                            "pinned": null,
                            "deleted": false
                          },
                          "published_at": "2026-05-02T19:24:27.000Z"
                        },
                        "computed": {
                          "language": "en",
                          "labels": {
                            "sentiment": {
                              "level": 3,
                              "score_0_1": 0.65,
                              "confidence": 0
                            },
                            "question": {
                              "p": 0.05
                            },
                            "purchase_intent": {
                              "p": 0.03
                            },
                            "complaint": {
                              "p": 0.05
                            }
                          }
                        }
                      },
                      {
                        "comment": {
                          "id": "18046487261746100",
                          "url": "https://example.com/redacted",
                          "parent_id": null,
                          "post_id": "DXidPIVDU6M",
                          "text": "Sample comment text (redacted).",
                          "author": {
                            "username": "user_65b398",
                            "display_name": null,
                            "avatar_url": "https://example.com/avatars/user_15dc3e.png",
                            "verified": false
                          },
                          "engagement": {
                            "likes": 30716,
                            "replies": 58
                          },
                          "flags": {
                            "pinned": null,
                            "deleted": false
                          },
                          "published_at": "2026-04-25T05:29:20.000Z"
                        },
                        "computed": {
                          "language": "en",
                          "labels": {
                            "sentiment": {
                              "level": 1,
                              "score_0_1": 0.35,
                              "confidence": 0.55
                            },
                            "question": {
                              "p": 0.04
                            },
                            "purchase_intent": {
                              "p": 0.02
                            },
                            "complaint": {
                              "p": 0.09
                            }
                          }
                        }
                      }
                    ],
                    "next_cursor": "sc2.eyJzIjoibCIsImMiOiJzYzEuZXlKaklqb2llMXdpWTJGamFHVmtYMk52YlcxbGJuUnpYMk4xY25OdmNsd2lPbHdpTVRnd05USTVOREk0TmpJM09EY3pPRGxjSWl4Y0ltSnBabWxzZEdWeVgzUnZhMlZ1WENJNlhDSkhaMWxaWjFGRlFUVXhiMUl3VkZWNlVVRkNValozZGtWM1ZqRkJRVXhSVkhKcU5IWklWVUZCV0hjM1FqbDFXbk5SUVVKWU0zWlplWFYzTVVKQlFXZFNNbE5EVUZkVlFVRTVUSGxyYjNSbmRGRkJSRGRyYlVaVGVuazVRVUZRZURkV1JsZElTVVZCUVVsUGRGRTJZVkZzVVVGRVZsZHNURTAyV0c5ZlFVdG9iV3h2Vm1oVGEwRkJhMnh2TTJneldtRlJRVU5DV1V4NVNrNUxUVjlCUW5KU1RqbFRTa2xGUVVGVWRXaEdNMDFxU2xCM1FVRmNJbjBpTENKeklqcGJJakU0TVRFM05EZzFNekE0TmpZNE56VXpJaXdpTVRnd05EWTBPRGN5TmpFM05EWXhNREFpTENJeE9EQTJORGd3TmprM05ETTNNekV3T0NJc0lqRTRNRFkyT1RZMU9UazJNelEwTURVNUlpd2lNVGd4TVRJNE5qazNOelUzTnpNNU5qQWlMQ0l4T0RBMU1ERTNORGcxTWpVeE9ERTNNQ0lzSWpFNE1EVXdNVFkwTVRNek56VTFPVEF3SWl3aU1UZ3pNVEE1TnpFeE5URXlOemMyTlRVaUxDSXhPREExTlRjNE9EY3lPRGMwTURZME1DSXNJakUzT1RVME56ZzRNRFU0T1RneU5EYzRJaXdpTVRjNU1USXpOamsxTnpjeU1qSXlOek1pTENJeE9EQTVOakU0TVRJeU1qazVNVFV5T0NJc0lqRTRNVEV6T0RZek5qTXdOamMwTlRjNElpd2lNVGd4TXpReE16YzNORGMyTURjeE16VWlMQ0l4TnpnMk9EQTJPREV3TmpZNE9USXpOeUpkZlEifQ",
                    "total": 3829,
                    "labels": {
                      "presets": [
                        "sentiment",
                        "question"
                      ],
                      "rows": 15,
                      "labelled": 15,
                      "cached": 15,
                      "skipped": 0,
                      "unjudged": 0,
                      "dropped": 0,
                      "dropped_ids": [],
                      "extra_credits": 0,
                      "methodology_version": "labels/1",
                      "mode": "default",
                      "status": "complete",
                      "pending": 0,
                      "pending_ids": []
                    },
                    "label_share": {
                      "policy_version": "share/1",
                      "presets": {
                        "question": {
                          "n": 15,
                          "counted": 0,
                          "abstained": 0,
                          "share": 0,
                          "low": 0,
                          "high": 0.1528,
                          "receipts": [],
                          "policy_version": "share/1",
                          "too_few": false,
                          "at_cut": 0,
                          "nulls": 0,
                          "low_confidence": 0
                        },
                        "purchase_intent": {
                          "n": 15,
                          "counted": 0,
                          "abstained": 0,
                          "share": 0,
                          "low": 0,
                          "high": 0.1528,
                          "receipts": [],
                          "policy_version": "share/1",
                          "too_few": false,
                          "at_cut": 0,
                          "nulls": 0,
                          "low_confidence": 0
                        },
                        "complaint": {
                          "n": 15,
                          "counted": 0,
                          "abstained": 0,
                          "share": 0,
                          "low": 0,
                          "high": 0.1528,
                          "receipts": [],
                          "policy_version": "share/1",
                          "too_few": false,
                          "at_cut": 0,
                          "nulls": 0,
                          "low_confidence": 0
                        },
                        "sentiment": {
                          "positive": {
                            "n": 15,
                            "counted": 3,
                            "abstained": 6,
                            "share": null,
                            "low": 0.142,
                            "high": 0.6017,
                            "receipts": [
                              {
                                "id": "18310971151277655",
                                "text": "Sample comment text (redacted)."
                              },
                              {
                                "id": "18096181222991528",
                                "text": "Sample comment text (redacted)."
                              }
                            ],
                            "policy_version": "share/1",
                            "too_few": true,
                            "at_cut": 3,
                            "nulls": 0,
                            "low_confidence": 6
                          },
                          "neutral": {
                            "n": 15,
                            "counted": 3,
                            "abstained": 6,
                            "share": null,
                            "low": 0.142,
                            "high": 0.6017,
                            "receipts": [
                              {
                                "id": "18064806974373108",
                                "text": "Sample comment text (redacted)."
                              },
                              {
                                "id": "18050174852518170",
                                "text": "Sample comment text (redacted)."
                              }
                            ],
                            "policy_version": "share/1",
                            "too_few": true,
                            "at_cut": 3,
                            "nulls": 0,
                            "low_confidence": 6
                          },
                          "negative": {
                            "n": 15,
                            "counted": 3,
                            "abstained": 6,
                            "share": null,
                            "low": 0.142,
                            "high": 0.6017,
                            "receipts": [
                              {
                                "id": "18046487261746100",
                                "text": "Sample comment text (redacted)."
                              },
                              {
                                "id": "18112869775773960",
                                "text": "Sample comment text (redacted)."
                              }
                            ],
                            "policy_version": "share/1",
                            "too_few": true,
                            "at_cut": 3,
                            "nulls": 0,
                            "low_confidence": 6
                          }
                        }
                      }
                    },
                    "comment_language": {
                      "policy_version": "share/1",
                      "n": 15,
                      "abstained": 1,
                      "judged_by": {
                        "script": 0,
                        "choice": 14
                      },
                      "shares": {
                        "en": {
                          "n": 15,
                          "counted": 14,
                          "abstained": 1,
                          "share": 1,
                          "low": 0.838,
                          "high": 1,
                          "receipts": [
                            {
                              "id": "18117485308668753",
                              "text": "Sample comment text (redacted)."
                            },
                            {
                              "id": "18046487261746100",
                              "text": "Sample comment text (redacted)."
                            }
                          ],
                          "policy_version": "share/1",
                          "too_few": false
                        }
                      }
                    },
                    "comment_recency": {
                      "policy_version": "d09-1",
                      "n": 15,
                      "counted": 15,
                      "abstained": 0,
                      "share_last_24h": 0,
                      "share_later_half": null,
                      "too_few": false,
                      "stage": "unknown",
                      "order": "top",
                      "recent_share_is_floor": true,
                      "receipts": []
                    },
                    "dropped": 0
                  },
                  "credits_used": 5,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": "sc.eyJ2IjoyLCJjIjoic2MyLmV5SnpJam9pYkNJc0ltTWlPaUp6WXpFdVpYbEtha2xxYjJsbE1YZHBXVEpHYW1GSFZtdFlNazUyWWxjeGJHSnVVbnBZTWs0eFkyNU9kbU5zZDJsUGJIZHBUVlJuZDA1VVNUVk9SRWswVG1wSk0wOUVZM3BQUkd4alNXbDRZMGx0U25CYWJXeHpaRWRXZVZnelVuWmhNbFoxV0VOSk5saERTa2hhTVd4YVdqRkdSbEZVVlhoaU1VbDNWa1pXTmxWVlJrTlZhbG96Wkd0V00xWnFSa0pSVlhoU1ZraEtjVTVJV2tsV1ZVWkNWMGhqTTFGcWJERlhiazVTVVZWS1dVMHpXbHBsV0ZZelRWVktRbEZYWkZOTmJFNUVWVVprVmxGVlJUVlVTR3h5WWpOU2JtUkdSa0pTUkdSeVlsVmFWR1Z1YXpWUlZVWlJaVVJrVjFKc1pFbFRWVlpDVVZWc1VHUkdSVEpaVmtaelZWVkdSVlpzWkhOVVJUQXlWMGM1WmxGVmRHOWlWM2gyVm0xb1ZHRXdSa0poTW5oMlRUSm5lbGR0UmxKUlZVNURWMVY0TlZOck5VeFVWamxDVVc1S1UxUnFiRlJUYTJ4R1VWVkdWV1JYYUVkTk1ERnhVMnhDTTFGVlJtTkpiakJwVEVOS2VrbHFjR0pKYWtVMFRWUkZNMDVFWnpGTmVrRTBUbXBaTkU1NlZYcEphWGRwVFZSbmQwNUVXVEJQUkdONVRtcEZNMDVFV1hoTlJFRnBURU5KZUU5RVFUSk9SR2QzVG1wck0wNUVUVE5OZWtWM1QwTkpjMGxxUlRSTlJGa3lUMVJaTVU5VWF6Sk5lbEV3VFVSVk5VbHBkMmxOVkdkNFRWUkpORTVxYXpOT2VsVXpUbnBOTlU1cVFXbE1RMGw0VDBSQk1VMUVSVE5PUkdjeFRXcFZlRTlFUlROTlEwbHpTV3BGTkUxRVZYZE5WRmt3VFZSTmVrNTZWVEZQVkVGM1NXbDNhVTFVWjNwTlZFRTFUbnBGZUU1VVJYbE9lbU15VGxSVmFVeERTWGhQUkVFeFRsUmpORTlFWTNsUFJHTXdUVVJaTUUxRFNYTkpha1V6VDFSVk1FNTZaelJOUkZVMFQxUm5lVTVFWXpSSmFYZHBUVlJqTlUxVVNYcE9hbXN4VG5wamVVMXFTWGxPZWsxcFRFTkplRTlFUVRWT2FrVTBUVlJKZVUxcWF6Vk5WRlY1VDBOSmMwbHFSVFJOVkVWNlQwUlplazVxVFhkT2FtTXdUbFJqTkVscGQybE5WR2Q0VFhwUmVFMTZZek5PUkdNeVRVUmplRTE2VldsTVEwbDRUbnBuTWs5RVFUSlBSRVYzVG1wWk5FOVVTWHBPZVVwa1psRWlmUSIsImUiOiJpbnN0YWdyYW0vcG9zdC9jb21tZW50cyIsInAiOiJjdXJzb3IifQ",
                    "has_more": true,
                    "page_size": 15
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T15:37:09.669Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/comment": {
      "get": {
        "summary": "Look up one Instagram comment by URL or id",
        "description": "Resolves a single Instagram comment to a live comment object (current like count, reply count, author, timestamp) without you paginating the comment section. Pass `comment_url` (an `https://www.instagram.com/p/{shortcode}/c/{commentId}/` permalink: reply permalinks `.../c/{parent}/r/{reply}/` are best-effort) OR `post_url` + `comment_id`. Instead of a comment id you can search the comment section: `author_username` or `text_contains` return up to `max` matches under `data.matches` (a search that matches nothing returns 404 and is fully refunded). The response includes `lookup.post_comment_count` (the post's true total, so you can reason about scan coverage) and a `lookup.position_hint`: pass it back on a later lookup to make the re-check faster (the price is the same). Instagram does not expose pinned status or full reply threads to any provider, so `flags.pinned` stays null and deep reply lookups can return `reply_not_resolvable`. Flat 5 credits (15 with `deep_scan=true`); a not-found returns 404 and is fully refunded.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_comment",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "advanced",
        "x-credit-cost": 5,
        "x-credit-cost-min": 5,
        "x-credit-cost-max": 15,
        "x-credit-cost-formula": "5 credits for a standard lookup, 15 with `deep_scan=true`, which keeps paging the thread when the comment is not in the first pages. Reach for deep_scan only after a standard lookup comes back not-found",
        "parameters": [
          {
            "name": "comment_url",
            "in": "query",
            "required": false,
            "description": "An Instagram comment permalink: `https://www.instagram.com/p/{shortcode}/c/{commentId}/` (or a reply permalink `.../c/{parent}/r/{reply}/`, best-effort). Mutually exclusive with `post_url`+`comment_id`.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.instagram.com/p/CnpPou9hWqq/c/18007013966365752/"
          },
          {
            "name": "post_url",
            "in": "query",
            "required": false,
            "description": "The post URL (a `/p/`, `/reel/`, `/reels/`, or `/tv/` link; an app share link `instagram.com/share/...` works too). Combine with `comment_id`, or with `author_username`/`text_contains` for a search.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "comment_id",
            "in": "query",
            "required": false,
            "description": "The target comment's numeric id (`pk`). Requires `post_url`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "author_username",
            "in": "query",
            "required": false,
            "description": "Return up to `max` comments authored by this username (no comment id needed). Mutually exclusive with `text_contains` and any comment id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "text_contains",
            "in": "query",
            "required": false,
            "description": "Return up to `max` comments whose text contains this snippet (case-insensitive). Mutually exclusive with `author_username` and any comment id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deep_scan",
            "in": "query",
            "required": false,
            "description": "Widen the scan budget for deeply-buried comments (raises the per-chain page ceiling and deadline). Bills 15 credits instead of 5.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "position_hint",
            "in": "query",
            "required": false,
            "description": "Opaque token from a prior lookup's `lookup.position_hint`. Passing it back replays just the last-known sort chain first, making a re-check of an already-found comment cheap.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max",
            "in": "query",
            "required": false,
            "description": "For `author_username`/`text_contains` search: max matches to return (1-20, default 5).",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/comment"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Platform-specific comment ID (always a string)"
                        },
                        "url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Direct URL to the comment on the source platform"
                        },
                        "parent_id": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Parent comment ID for nested replies, or null for top-level comments"
                        },
                        "post_id": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "ID of the post this comment belongs to"
                        },
                        "text": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Comment body. Tombstone sentinels ([deleted] / [removed]) are collapsed to null upstream: customers never see them."
                        },
                        "author": {
                          "type": "object",
                          "description": "Subset of Author fields for the comment author",
                          "properties": {
                            "username": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Comment author username (null when tombstoned)"
                            },
                            "display_name": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Comment author display name"
                            },
                            "avatar_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "URL to comment author profile picture"
                            },
                            "verified": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Whether the comment author is verified"
                            }
                          }
                        },
                        "engagement": {
                          "type": "object",
                          "description": "Engagement counts on the comment",
                          "properties": {
                            "likes": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Like / upvote count"
                            },
                            "replies": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Reply / child-comment count. `0` when the upstream structurally reports the count and the comment has no replies; `null` only when the upstream does not surface a reply count at all."
                            }
                          }
                        },
                        "flags": {
                          "type": "object",
                          "description": "Boolean flags on the comment",
                          "properties": {
                            "pinned": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Pinned flag (null when platform does not surface)"
                            },
                            "deleted": {
                              "type": "boolean",
                              "description": "Whether the comment is tombstoned (always present, even when false)"
                            },
                            "liked_by_creator": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "`/v1/instagram/post/comments` only: true when the post's creator liked (hearted) the comment, false when not, null when the source that served the call could not tell. Absent on every other endpoint."
                            }
                          }
                        },
                        "published_at": {
                          "type": [
                            "string",
                            "integer",
                            "null"
                          ],
                          "description": "Comment creation timestamp as an ISO 8601 UTC string. When the upstream sent a Unix epoch it is converted here and the raw epoch is preserved under `comment.ext.published_at_epoch` for one deprecation cycle."
                        },
                        "ext": {
                          "type": [
                            "object",
                            "null"
                          ],
                          "description": "Platform-specific passthrough tokens for reply expansion (present only on platforms that surface them)",
                          "properties": {
                            "replies_token": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "YouTube reply continuation token: pass to `/v1/youtube/video/comment/replies?continuationToken=`"
                            },
                            "replies_cursor": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Reddit reply-branch continuation cursor. Present when this comment's reply tree is truncated upstream: pass it back as `?cursor=` on `/v1/reddit/post/comments` to load the rest of the branch."
                            },
                            "depth": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Reddit comment nesting depth as the source reports it: 0 on a top-level comment, 1 on a direct reply, and so on. Present when the thread arrived flat and was re-nested into `replies[]`, so you can verify that nesting independently."
                            },
                            "published_at_epoch": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Raw Unix epoch for `published_at` (present only when the upstream sent a numeric epoch that was normalised to the ISO 8601 string)."
                            },
                            "feedback_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Facebook comment feedback id: feeds `/v1/facebook/post/comment/replies`"
                            },
                            "expansion_token": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Facebook comment expansion/paginator token: feeds `/v1/facebook/post/comment/replies`"
                            },
                            "author_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The commenter's platform-native numeric user id, where the upstream exposes one."
                            },
                            "ip_location": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at comment.ext.ip_location"
                            },
                            "urn": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at comment.ext.urn"
                            },
                            "reaction_counts": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at comment.ext.reaction_counts",
                              "items": {
                                "type": "string",
                                "description": "Leaf at comment.ext.reaction_counts"
                              }
                            },
                            "is_edited": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at comment.ext.is_edited"
                            },
                            "previous_replies_token": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at comment.ext.previous_replies_token"
                            },
                            "author_headline": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at comment.ext.author_headline"
                            },
                            "updated_at": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at comment.ext.updated_at"
                            },
                            "author_channel_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at comment.ext.author_channel_id"
                            },
                            "author_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at comment.ext.author_url"
                            },
                            "viewer_rating": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at comment.ext.viewer_rating"
                            },
                            "text_original": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at comment.ext.text_original"
                            },
                            "preview_replies": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at comment.ext.preview_replies",
                              "items": {
                                "type": "string",
                                "description": "Leaf at comment.ext.preview_replies"
                              }
                            },
                            "lookup": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at comment.ext.lookup"
                            },
                            "post_title": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at comment.ext.post_title"
                            },
                            "post_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at comment.ext.post_url"
                            },
                            "subreddit": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at comment.ext.subreddit"
                            },
                            "subreddit_subscribers": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at comment.ext.subreddit_subscribers"
                            },
                            "post_score": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at comment.ext.post_score"
                            },
                            "post_comment_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at comment.ext.post_comment_count"
                            },
                            "post_author": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at comment.ext.post_author"
                            },
                            "post_published_at": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at comment.ext.post_published_at"
                            },
                            "post_flair": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at comment.ext.post_flair"
                            },
                            "is_submitter": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at comment.ext.is_submitter"
                            },
                            "edited_at": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at comment.ext.edited_at"
                            },
                            "controversiality": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at comment.ext.controversiality"
                            },
                            "content_language": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "ISO 639-1 language tag for this comment, when the source reports one. X writes `zxx` / `und` for no linguistic content; those collapse to null."
                            },
                            "author_followers": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "The commenter's follower count as embedded in this row. Snapshot as of whenever the replies source saw the account, not a live figure. On X this is present on every `tweet/replies` row."
                            },
                            "author_following": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "The commenter's following count as embedded in this row. Same snapshot caveat as `author_followers`."
                            },
                            "author_posts_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "The commenter's post count as embedded in this row. Same snapshot caveat as `author_followers`."
                            },
                            "author_location": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at comment.ext.author_location"
                            },
                            "quote_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "How many quote-posts this comment has, when the source reports it. On X a reply is a tweet, so this is the same figure `post.ext.quote_count` carries on tweet lanes."
                            },
                            "views": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "View count for this comment, when the source reports it. On X a reply is a tweet and the count is public on posts from ~2022 onward."
                            },
                            "saves": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Bookmark / save count for this comment, when the source reports it. On X this is `legacy.bookmark_count`."
                            }
                          }
                        },
                        "replies": {
                          "type": [
                            "array",
                            "null"
                          ],
                          "description": "Nested reply tree: array of child comments, each itself a full Comment object with its own `replies`. Populated on threaded platforms (Reddit); absent on flat-comment platforms, which thread only via `parent_id`.",
                          "items": {
                            "type": "object",
                            "description": "Nested reply tree: array of child comments, each itself a full Comment object with its own `replies`. Populated on threaded platforms (Reddit); absent on flat-comment platforms, which thread only via `parent_id`."
                          }
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      }
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/comment",
                  "data": {
                    "comment": {
                      "id": "18007013966365752",
                      "url": "https://www.instagram.com/p/CnpPou9hWqq/c/18007013966365752/",
                      "parent_id": null,
                      "post_id": "CnpPou9hWqq",
                      "text": "Sample comment text (redacted).",
                      "author": {
                        "username": "user_bf5c1c",
                        "display_name": null,
                        "avatar_url": "https://example.com/avatars/user_0e787d.png",
                        "verified": false
                      },
                      "engagement": {
                        "likes": 27,
                        "replies": 0
                      },
                      "flags": {
                        "pinned": null,
                        "deleted": false
                      },
                      "published_at": "2024-03-04T06:07:32.000Z",
                      "ext": {
                        "lookup": {
                          "found_via": "id_scan",
                          "pages_fetched": 2,
                          "comments_scanned": 15,
                          "sort_basis": "popular",
                          "position_hint": "eyJ2IjoxLCJwbGF0Zm9ybSI6Imluc3RhZ3JhbSIsInNvcnQiOiJwb3B1bGFyIiwiY3Vyc29yIjpudWxsLCJwYWdlIjowfQ",
                          "post_comment_count": 16381
                        }
                      }
                    },
                    "lookup": {
                      "found_via": "id_scan",
                      "pages_fetched": 2,
                      "comments_scanned": 15,
                      "sort_basis": "popular",
                      "position_hint": "eyJ2IjoxLCJwbGF0Zm9ybSI6Imluc3RhZ3JhbSIsInNvcnQiOiJwb3B1bGFyIiwiY3Vyc29yIjpudWxsLCJwYWdlIjowfQ",
                      "post_comment_count": 16381
                    },
                    "computed": {
                      "language": null
                    }
                  },
                  "credits_used": 5,
                  "request_id": "req_example000000",
                  "cached": false,
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T15:36:59.743Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/basic-profile": {
      "get": {
        "summary": "Get Instagram basic profile",
        "description": "Returns basic public profile info for an Instagram user by user ID including username, full name, bio, avatar, verification status, and the follower, following and lifetime post counts.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_basic_profile",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 1,
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "required": false,
            "description": "Instagram numeric user ID",
            "schema": {
              "type": "string"
            },
            "example": "314216"
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/basic-profile"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Platform-specific user ID (always a string; platform-specific prefixes like `did:`, `spotify:artist:`, `t2_` are stripped)"
                        },
                        "username": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "User handle or username"
                        },
                        "display_name": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Display name or full name"
                        },
                        "avatar_url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "URL to profile picture"
                        },
                        "bio": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Profile biography or description"
                        },
                        "verified": {
                          "type": [
                            "boolean",
                            "null"
                          ],
                          "description": "Whether the account is verified"
                        },
                        "followers": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Follower or subscriber count as an integer. Exact on Instagram and on TikTok when the source exposes an unrounded figure. YouTube above 1,000 subscribers is YouTube's published three-significant-figure figure. When the integer is a published/rounded value, `author.ext.followers_approximate` is true."
                        },
                        "following": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Number of accounts followed"
                        },
                        "posts_count": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of posts / videos / tracks / episodes"
                        },
                        "likes_count": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total likes received across the author's content (when surfaced)"
                        },
                        "url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Direct URL to the profile page"
                        },
                        "location": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "ISO region code (e.g. `US`) or freeform location string when surfaced"
                        },
                        "external_url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Bio link / external website URL when surfaced by the platform"
                        },
                        "private": {
                          "type": [
                            "boolean",
                            "null"
                          ],
                          "description": "Boolean at author.private"
                        },
                        "joined_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "String at author.joined_at"
                        },
                        "last_post_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "String at author.last_post_at"
                        },
                        "ext": {
                          "type": [
                            "object",
                            "null"
                          ],
                          "description": "Nested object: author.ext",
                          "properties": {
                            "social_context": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.social_context"
                            },
                            "account_created": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.account_created"
                            },
                            "country": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.country"
                            },
                            "country_name": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.country_name"
                            },
                            "collects_received": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.collects_received"
                            },
                            "former_usernames": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.former_usernames",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.former_usernames"
                              }
                            },
                            "former_usernames_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram profile/about: how many former usernames Instagram's \"About this account\" panel lists for the account. 0 when the panel lists none, null when the panel could not be read on this call (the response then carries a note saying so). A count above 0 means the handle was renamed at least once; the names themselves are not published."
                            },
                            "verified_at": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Instagram profile/about, opt-in (`include=verified_at`): the month Instagram verified the account, as the panel shows it (\"April 2024\"). A month, not a date. Null when the account is not verified or the panel shows no verification date. Absent unless requested."
                            },
                            "public_email": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.public_email"
                            },
                            "contact_email": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Opt-in (`contact_email=1` on instagram/profile, youtube/channel and youtube/channel/about). When the bio lists two or more email addresses, the one the creator gives for contacting them personally, copied verbatim. Null when there is one address or none, when every address belongs to a manager, agency or brand, or when the choice was not confident. `author.ext.public_email` (the first address in the bio) is unchanged."
                            },
                            "public_phone": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.public_phone"
                            },
                            "similar_source": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.similar_source"
                            },
                            "instagram_username": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.instagram_username"
                            },
                            "similar_via": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.similar_via"
                            },
                            "business_category": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.business_category"
                            },
                            "bio_links": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.bio_links",
                              "items": {
                                "type": "object",
                                "description": "Nested object: author.ext.bio_links",
                                "properties": {
                                  "title": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.ext.bio_links.title"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.ext.bio_links.url"
                                  },
                                  "link_type": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.ext.bio_links.link_type"
                                  }
                                }
                              }
                            },
                            "is_business": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_business"
                            },
                            "is_professional": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_professional"
                            },
                            "creator_marketplace": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.creator_marketplace"
                            },
                            "verification_label": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.verification_label"
                            },
                            "fbid": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.fbid"
                            },
                            "hd_avatar_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.hd_avatar_url"
                            },
                            "website": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.website"
                            },
                            "cover_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.cover_url"
                            },
                            "page_active": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.page_active"
                            },
                            "employee_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.employee_count"
                            },
                            "employee_count_range": {
                              "type": [
                                "object",
                                "null"
                              ],
                              "description": "Nested object: author.ext.employee_count_range",
                              "properties": {
                                "start": {
                                  "type": [
                                    "integer",
                                    "null"
                                  ],
                                  "description": "Numeric at author.ext.employee_count_range.start"
                                },
                                "end": {
                                  "type": [
                                    "integer",
                                    "null"
                                  ],
                                  "description": "Numeric at author.ext.employee_count_range.end"
                                }
                              }
                            },
                            "founded_year": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.founded_year"
                            },
                            "company_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.company_type"
                            },
                            "tagline": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.tagline"
                            },
                            "specialities": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.specialities",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.specialities"
                              }
                            },
                            "industries": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.industries",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.industries"
                              }
                            },
                            "headquarters": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.headquarters"
                            },
                            "locations": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.locations",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.locations"
                              }
                            },
                            "hashtags": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.hashtags",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.hashtags"
                              }
                            },
                            "funding": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.funding"
                            },
                            "address": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.address"
                            },
                            "price_range": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.price_range"
                            },
                            "rating": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.rating"
                            },
                            "rating_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.rating_count"
                            },
                            "talking_about_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.talking_about_count"
                            },
                            "business_hours": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.business_hours",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.business_hours"
                              }
                            },
                            "links": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.links",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.links"
                              }
                            },
                            "ad_library_page_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.ad_library_page_id"
                            },
                            "ad_library_status": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.ad_library_status"
                            },
                            "urn": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.urn"
                            },
                            "is_top_voice": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_top_voice"
                            },
                            "is_premium": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_premium"
                            },
                            "is_creator": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_creator"
                            },
                            "is_influencer": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_influencer"
                            },
                            "is_open_to_work": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_open_to_work"
                            },
                            "is_hiring": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_hiring"
                            },
                            "member_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.member_id"
                            },
                            "company_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.company_id"
                            },
                            "reaction_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.reaction_type"
                            },
                            "followers_approximate": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "True when `author.followers` is a published or rounded figure rather than an unrounded census: LinkedIn people-list display buckets, TikTok `stats.followerCount` when the exact sibling is absent, and YouTube subscriber counts at or above 1,000. Null or absent on exact counts."
                            },
                            "counts_source": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok profile only. Which of TikTok's two live counter sets `author.followers`, `author.following`, `author.likes_count` and `author.posts_count` carry: `app` (TikTok's app counters, the default) or `web` (the website's `statsV2`, returned with `counts=web`). The two sets can differ by a few percent in either direction."
                            },
                            "keywords": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.keywords"
                            },
                            "total_views": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.total_views"
                            },
                            "joined_at_timestamp": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.joined_at_timestamp"
                            },
                            "topicCategories": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.topicCategories",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.topicCategories"
                              }
                            },
                            "bannerExternalUrl": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.bannerExternalUrl"
                            },
                            "madeForKids": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.madeForKids"
                            },
                            "hiddenSubscriberCount": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.hiddenSubscriberCount"
                            },
                            "related_playlists": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.related_playlists"
                            },
                            "topic_ids": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.topic_ids",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.topic_ids"
                              }
                            },
                            "unsubscribed_trailer": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.unsubscribed_trailer"
                            },
                            "localizations": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.localizations"
                            },
                            "monthly_listeners": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.monthly_listeners"
                            },
                            "total_ratings": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Spotify podcasts only: how many listeners have rated the show. Cumulative over the show's whole run, so it reflects longevity as well as size, and it is NOT an audience count (Spotify publishes no play, download, subscriber or follower count for a podcast)"
                            },
                            "average_rating": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Spotify podcasts only: mean listener rating from 0 to 5. Fractional (e.g. 4.66) despite the integer type this schema emits for every numeric leaf"
                            },
                            "creator_username": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.creator_username"
                            },
                            "join_policy": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.join_policy"
                            },
                            "is_nsfw": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_nsfw"
                            },
                            "rules": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.rules",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.rules"
                              }
                            },
                            "weekly_active_users": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.weekly_active_users"
                            },
                            "weekly_contributions": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.weekly_contributions"
                            },
                            "rules_text": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.rules_text"
                            },
                            "language": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.language"
                            },
                            "post_karma": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.post_karma"
                            },
                            "comment_karma": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.comment_karma"
                            },
                            "awardee_karma": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.awardee_karma"
                            },
                            "trophy_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.trophy_count"
                            },
                            "banner_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.banner_url"
                            },
                            "profile_title": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.profile_title"
                            },
                            "social_links": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.social_links",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.social_links"
                              }
                            },
                            "bio_link": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.bio_link"
                            },
                            "embed_html": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.embed_html"
                            },
                            "embed_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.embed_url"
                            },
                            "group": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.group"
                            },
                            "search_hit": {
                              "type": [
                                "object",
                                "null"
                              ],
                              "description": "Nested object: author.ext.search_hit",
                              "properties": {
                                "match": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "description": "Leaf at author.ext.search_hit.match"
                                },
                                "title": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "description": "String at author.ext.search_hit.title"
                                },
                                "snippet": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "description": "String at author.ext.search_hit.snippet"
                                },
                                "evidence_url": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "description": "String at author.ext.search_hit.evidence_url"
                                },
                                "matched_urls": {
                                  "type": [
                                    "array",
                                    "null"
                                  ],
                                  "description": "Array at author.ext.search_hit.matched_urls",
                                  "items": {
                                    "type": "string",
                                    "description": "String at author.ext.search_hit.matched_urls"
                                  }
                                }
                              }
                            },
                            "blog_name": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.blog_name"
                            },
                            "blog_no": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.blog_no"
                            },
                            "visitors_today": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.visitors_today"
                            },
                            "visitors_total": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.visitors_total"
                            },
                            "topic": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.topic"
                            },
                            "power_blog": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.power_blog"
                            },
                            "official_blog": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.official_blog"
                            }
                          }
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      }
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/profile",
                  "data": {
                    "author": {
                      "id": "528817151",
                      "username": "nasa",
                      "display_name": "NASA",
                      "avatar_url": "https://scontent-mia3-2.cdninstagram.com/v/t51.2885-19/29090066_159271188110124_1152068159029641216_n.jpg?stp=dst-jpg_s320x320_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-mia3-2.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2gF_ZOyacP2ZxvTwISAHsSMx5asgW1AxJ-EvdVyQnWaIqOoHbHMxaugucZE9K7U6iePJ5sy_AwBliYYR9brDmaTN&_nc_ohc=Nw8H9lTngQgQ7kNvwGnjtoO&_nc_gid=oVc10Bvl_SYb8NYf4N9zow&edm=AOQ1c0wBAAAA&ccb=7-5&oh=00_AQBRPsRNYH983CV3Cpi5GEmECZIFeJsRBFCxbj0YQVLw4A&oe=6A631B69&_nc_sid=8b3546",
                      "bio": "Making the seemingly impossible, possible. ✨",
                      "verified": true,
                      "followers": 104307425,
                      "following": 91,
                      "posts_count": 4853,
                      "likes_count": null,
                      "url": "https://www.nasa.gov/",
                      "private": false,
                      "joined_at": null
                    },
                    "computed": {
                      "engagement_rate": 0.00193,
                      "language": "en",
                      "content_category": "other",
                      "estimated_reach": null
                    }
                  },
                  "credits_used": 1,
                  "credits_remaining": 9999,
                  "request_id": "req_example000000",
                  "cached": false,
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/profile/reels": {
      "get": {
        "summary": "List Instagram user reels",
        "description": "Returns a list of reels posted by an Instagram user. Each reel includes view count, like count, comment count, and thumbnail. Every row carries `post.ext.media_type` (`video`) and the remix counter Instagram shows at `post.ext.remix_count`, the number of reels made from this one. A reel that uses licensed music carries `post.ext.music_id`, the id /v1/instagram/audio/reels takes, and `post.ext.music` (`{ id, track_title, artist, is_original }`) on the plain call; send `include=audio` to add the same two leaves on reels that use an original sound, for 1 extra credit per reel filled. Send `include=stats` for the full stat line on every reel of the page, for 1 extra credit a page: `engagement.shares`, `engagement.saves` and `post.ext.repost_count` beside views, likes, comments and the remix counter, `post.ext.music_id` for every reel whatever its sound, and `post.ext.audio_cluster_id`, Instagram's audio cluster for the reel (the id Instagram uses to group different uploads of the same sound; the plain call does not carry it). `exclude_pinned=true` leaves out the reels pinned to the top of the reels tab, and `recent_days=N` keeps only reels from the last N days and stops the pagination once a page reaches older reels. Collaborative reels (Instagram's native \"Collab\" feature) carry the full co-author list under `post.ext.coauthors` as `{ id, username, full_name, is_verified, profile_pic_url }`; `post.author` stays the producing account, which on a collab is not always the handle you queried. An empty array means Instagram reports the reel as not a collab; on a narrow record the key is absent rather than empty, which means the question was not answered for that row, so treat absent and `[]` as different. Note: engagement.shares is null on this endpoint (the upstream carries no per-post share count); to additionally merge in per-reel share counts where a second source exposes them (coverage varies by account), use /v1/instagram/profile/reels/full. With trim=true you get a lighter record: the engagement, the author, the caption, the timestamp and the reel URL are all still returned, but `post.content.media_urls` is null because the trimmed record carries no video file, `post.content.duration_seconds` is null, `post.ext.coauthors` is omitted and `post.flags.pinned` is null. The cover image is returned as `post.content.thumbnail_url` either way. Leave trim unset when you need the video URL or the duration. Instagram is currently serving two record shapes on this endpoint and one of them omits the caption, so `post.content.text` can be null on a page where the reel plainly has one; re-request to get a page from the fuller shape, or read the caption from /v1/instagram/post. Send `sort=most_viewed` for Instagram's own most viewed reels tab: the creator's reels in the order Instagram ranks them by plays, highest first, which reaches back years and can surface reels the default page leaves out. It is Instagram's ranking, served as it comes, so an occasional reel can sit out of strict order. Every row has the same fields as the default page. Only one source serves this order, so when it is unavailable the call returns an error at no charge rather than reels in another order, and its `next_cursor` only continues a `sort=most_viewed` walk. It cannot be combined with `include`, `trim`, `recent_days`, `since` or `stop_at_id`, which read the default newest-first page; that is a free 400. On a reel also posted to Facebook, `engagement.views` can include its Facebook views: `post.ext.instagram_views` is the Instagram-only figure, the same on every Instagram endpoint, and `post.ext.facebook_views` is the Facebook part when the source reports it.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_profile_reels",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 1,
        "x-credit-cost-min": 1,
        "x-credit-cost-max": 18,
        "x-credit-cost-formula": "1 credit per page. include=stats adds 1 credit a page. include=audio holds 1 more per row, up to 12, and keeps it only for each video whose sound came back, refunding the rest; with include=stats every reel already carries its sound, so the audio join costs nothing more. A page costs at most 14 credits. exclude_pinned and recent_days do not change the price of a page. sort=most_viewed costs the same 1 credit a page. The default labels (sponsored, intent, niche) are free. label=mention, quality, ai_style, ai_written, injection, or label=intent with offer=, holds 4 extra credits and refunds down to 1 credit per started 25 posts that were newly judged: posts already labelled are free, a page where nothing could be judged refunds the whole extra, and a cached page is free. With `max_pages`, `max_items` or `max_credits`, each page walked is billed at this price (a cached page is free), and `max_credits` caps the total.",
        "x-socialcrawl-oneOf": [
          [
            "user_id",
            "handle"
          ]
        ],
        "parameters": [
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "Only reels published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Older reels are left off the page, and the page that reaches one ends the walk: `next_cursor` is not returned and `pagination.stopped_at` is `since`. Pinned reels sit out of date order and never end the walk. The page still costs what a page costs, so a daily poll pays for the pages it walks and no more.",
            "schema": {
              "type": "string"
            },
            "example": "2026-09-01"
          },
          {
            "name": "stop_at_id",
            "in": "query",
            "required": false,
            "description": "The id (`post.id`) or URL (`post.url`) of the newest reel you already hold. The page stops just before it: that reel and everything after it are left off, `next_cursor` is not returned, and `pagination.stopped_at` is `known_id`. A pinned reel never counts as the stop point. If it is not on this page the page is returned in full with its cursor, so keep walking. `pagination.stopped_at` is `end` when the list ran out first and `null` while there is more to walk.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "user_id",
            "in": "query",
            "required": false,
            "description": "Instagram user id. Use this for faster response times. (one of: user_id, handle; at least one required)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Instagram username without the @ symbol (one of: user_id, handle; at least one required)",
            "schema": {
              "type": "string"
            },
            "example": "mrbeast"
          },
          {
            "name": "max_id",
            "in": "query",
            "required": false,
            "description": "Max id to get more reels. Get 'max_id' from previous response. Native upstream cursor param. Send the universal `cursor` instead: the API maps it to this name for you.",
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "trim",
            "in": "query",
            "required": false,
            "description": "Set to true to request the lighter upstream record: a smaller, faster page that keeps the engagement, the author, the caption, the timestamp and the reel URL. What it drops is `post.content.media_urls` (the video file), `post.content.duration_seconds`, `post.ext.coauthors` and `post.flags.pinned`. The cover image is returned as `post.content.thumbnail_url` either way. Leave it unset when you need the video URL or the duration.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "exclude_pinned",
            "in": "query",
            "required": false,
            "description": "Set to true to leave out the posts the owner pinned to the top of the profile. A row whose pin state is unknown, which is every row with trim=true, is kept.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "recent_days",
            "in": "query",
            "required": false,
            "description": "Keep only posts published in the last N days (1 to 3650). Older posts are removed from the page, pinned ones included, and once a page reaches posts older than the window `next_cursor` is not returned, so a walk back to a date window stops on its own. The page still costs what a page costs.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 3650
            }
          },
          {
            "name": "include",
            "in": "query",
            "required": false,
            "description": "`stats` returns the full stat line on every reel for 1 extra credit a page: `engagement.shares`, `engagement.saves` and `post.ext.repost_count` beside views, likes, comments, the remix counter, `post.ext.music_id` for original sounds and licensed music alike, and `post.ext.audio_cluster_id`, Instagram's audio cluster for the reel. It is served by a second source, so a cursor from a request without it cannot continue a walk with it; start from page 1. `audio` adds `post.ext.music_id` and `post.ext.music` to reels still missing them from a second lookup: 1 extra credit per reel filled, refunded when the sound could not be read. Both tokens can be combined (`include=audio,stats`).",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Send `most_viewed` for the creator's reels in Instagram's most viewed order (highest plays first) instead of newest first. Same price. Its cursors only continue a `sort=most_viewed` walk. Cannot be combined with `include`, `trim`, `recent_days`, `since` or `stop_at_id`.",
            "schema": {
              "type": "string",
              "enum": [
                "most_viewed"
              ]
            }
          },
          {
            "name": "label",
            "in": "query",
            "required": false,
            "description": "Optional CSV of SocialCrawl labels to add to every post. Without this param every page already carries sponsored, intent and niche, free; label= adds the labels you name to them (the defaults keep running). sponsored, intent and niche are free when asked for too; mention, quality, ai_style, intent with offer=, and injection add 1 credit per started 25 newly judged posts. judgments=off (or label=none) turns the default labels off. sponsored: is the post a paid or gifted promotion (p, 0 to 1), did it carry a disclosure marker such as #ad or 광고 (disclosed), is it likely paid with no marker (undisclosed), and which of the accounts it mentions does it promote (brand, or null). These are signals to review, never a finding. mention (needs brand=): is the post about that brand rather than something that shares its name (about_brand, 0 to 1), how it feels about the brand on five levels (sentiment_level 0 to 4 and sentiment_score 0 to 1, null when the post is not about the brand), is it sarcastic, which aspect it talks about (taste_or_quality, price_or_value, availability_or_delivery, health_or_safety, advertising_or_campaign, customer_service, none), and did the author buy or use it (first_hand). intent: what the author is mainly doing (label: asking_for_recommendation, comparing_options, switching_away, complaining, promoting, news_or_discussion, other, or null when unsure, with confidence), whether they read as a potential buyer rather than a seller (buyer, seller), how pressing the need is (urgency, 0 to 3), and, when you pass offer=, whether your offer would plausibly help them (fits_offer). niche: which of the 33 niches of the published taxonomy sc-niche-v1 the caption belongs to, or personal_no_niche, or other (label, confidence, taxonomy), with label null when the caption is too thin to tell or the pick is unsure. It reads the caption only, not the video. quality: how much checkable detail the caption carries (fact_density 0 to 3), whether it mainly asks for likes, replies, shares, follows or tags (engagement_bait, 0 to 1), whether it is written to provoke anger as a way to get engagement (rage_bait, 0 to 1; about the writing, never the side taken), whether it only repeats someone else's news or view (secondhand, 0 to 1), and what the post is mainly doing (post_aim: inform, opinion, sell, entertain, provoke, other). exclude=engagement_bait drops posts whose engagement_bait is 0.8 or higher. ai_style: writing patterns common in AI-generated text, judged on the text alone. It does not say who wrote the post, and a person who writes in this style is flagged too. Six patterns are judged, each a probability (0 to 1): binary_contrast (\"This is not X. It's Y.\"), faux_insight (\"Here's what nobody tells you\" and throat-clearing openers), colon_reveal (\"The best part: it learns.\"), profound_kicker (ends on an aphorism or mic-drop line), puffery (\"marks a pivotal moment\", \"highlighting the importance of\") and rhetorical_setup (\"What if I told you\", a question the post answers itself, \"Not a X. Not a Y. A Z.\"). Four are counted in the text: slop_words (words and phrases such as delve, leverage, robust, game changer, at the end of the day), em_dashes, emoji_bullets (lines that start with an emoji or a symbol bullet) and one_line_paragraphs (paragraphs that are one short line). pattern_count is how many patterns are present (a judged pattern at 0.8 or higher, slop_words 1 or more, em_dashes 2 or more, emoji_bullets 2 or more, one_line_paragraphs 5 or more) and markers lists their names, comma-separated. A post with less than about eight words of text is only counted, with every judged pattern 0. The judged patterns read the first 400 and the last 150 characters of a long post, and the counts read the whole post. exclude=ai_style drops posts with 2 or more patterns. ai_written: how likely the post was written by an AI model, from SocialCrawl's own text classifier, reading the opening of the post (about 1,000 characters): p (0 to 1, calibrated), level (likely (p 0.95 or higher), possible (p 0.71 or higher) or unlikely) and model (the model name; a new name means a new scale). A post under 8 words is too short to read: p null, level too_short. It is a probability, not proof: a person can be flagged and an AI-written post can pass, and the shorter the post the less certain it is. exclude=ai_written drops likely posts. injection flags text that addresses an AI system and tries to direct it (flagged, p); it never drops or rewrites a row. A post that could not be judged carries labels: null. Posts already labelled for anyone are free, and so is a cached page. data.labels reports what was judged and billed.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "exclude",
            "in": "query",
            "required": false,
            "description": "Optional CSV (engagement_bait, ai_style, ai_written). engagement_bait, only with label=quality, drops posts whose engagement_bait probability is 0.8 or higher. ai_style, only with label=ai_style, drops posts that show 2 or more of its writing patterns (pattern_count 2 or higher). ai_written, only with label=ai_written, drops posts whose level is likely (p 0.95 or higher), or whose p reaches your ai_written_threshold; a post too short to read is never dropped. Dropped posts are listed in data.labels.dropped_ids. A post that could not be judged is never dropped.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ai_written_threshold",
            "in": "query",
            "required": false,
            "description": "Optional, only with label=ai_written and exclude=ai_written. The p (0 to 1) at which exclude=ai_written drops a post. Default 0.95 (level likely). 0.71 also drops possible posts: more AI posts go, and more posts by people with them.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "brand",
            "in": "query",
            "required": false,
            "description": "Required by label=mention, ignored otherwise. The brand or product the posts are judged against, up to 300 characters, for example brand=Buldak. Without it label=mention is skipped with the warning label_mention_needs_brand and is not billed.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "brand_description",
            "in": "query",
            "required": false,
            "description": "Optional, with label=mention. One plain sentence saying what the brand is, for example brand_description=Samyang's spicy instant noodle brand. Use it when the name is also an ordinary word or another company's name.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "offer",
            "in": "query",
            "required": false,
            "description": "Optional, with label=intent. One or two plain sentences saying what you sell, up to 300 characters, for example offer=A web design agency that builds websites for small businesses. Adds fits_offer to every post; without it fits_offer is null.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "judgments",
            "in": "query",
            "required": false,
            "description": "Optional, on (the default) or off. By default every row gains free SocialCrawl judgments (computed.labels, and computed.relevance on search endpoints), reported in data.labels (mode default) and data.relevance (origin default), each with a status (complete, partial or skipped) and pending: the rows still being judged when the page was sent, which carry null now and are filled on your next call or cached read. Default judgments never add credits, never change an existing field, and never drop or reorder a row. off returns the page exactly as before, with none of those keys. label=none does the same.",
            "schema": {
              "type": "string",
              "enum": [
                "on",
                "off"
              ]
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Optional. When 1, return a cost preview for this labelled or relevance-filtered request without fetching the page or judging any row. data.estimate reports rows_expected, rows_cached, label_credits_min, label_credits_max and base_credits. 0 credits charged.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ]
            }
          },
          {
            "name": "label_evidence",
            "in": "query",
            "required": false,
            "description": "Optional, only with label=. When 1, every labelled row also carries computed.labels_evidence.<preset> = { quote, sentence_index }: the sentence in the row that most clearly shows the label, copied verbatim. Absent or null when no single sentence shows it.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ]
            }
          },
          {
            "name": "fit",
            "in": "query",
            "required": false,
            "description": "Optional. When goal, keep the rows and fields needed for the goal you pass in goal= (plus any that are uncertain, and the first and last), and replace the rest with a stub. data.held_back lists the held ids and a recall id that re-reads the full page from cache at no extra charge. Without this param the page is unchanged.",
            "schema": {
              "type": "string",
              "enum": [
                "goal"
              ]
            }
          },
          {
            "name": "goal",
            "in": "query",
            "required": false,
            "description": "Required by fit=goal. What you are trying to do, in your own words, up to 300 characters.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fit_tokens",
            "in": "query",
            "required": false,
            "description": "Optional, only with fit=goal. Soft cap on how much of the page to keep, in tokens. Uncertain blocks and the first and last block are kept even if they exceed it.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "description": "Only rows published on or before this date: YYYY-MM-DD (that whole UTC day is included) or an ISO 8601 timestamp. Newer rows are left off each page and the walk does not stop, so older pages follow. A row with no date is kept. `published_before`, `end_date` and `to_date` are accepted and applied as `until`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max_pages",
            "in": "query",
            "required": false,
            "description": "1 to 50 (default 1, or 50 when `max_items` or `max_credits` is sent). Walk up to this many pages in one call and return the rows from all of them. Each page walked is billed exactly as one call to this endpoint (a cached page is free) and counts against your rate limit; its charge and any refund are recorded under the page's own request id, listed in `data.walk.request_ids`. The walk stops early at the last page, or when the request's time budget runs low; `data.walk.stopped` says why (`end`, `max_pages`, `max_items`, `max_credits`, `time_budget`, `page_error`) and `pagination.next_cursor` continues from where it stopped.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "max_items",
            "in": "query",
            "required": false,
            "description": "1 to 5000. Get more in one call: keep walking pages until the response holds at least this many rows, then stop with `data.walk.stopped: \"max_items\"`. The last page is returned whole (it was billed), so `data.items` can hold up to one page more than this, and `pagination.next_cursor` resumes right after it without skipping a row. Walks up to 50 pages unless `max_pages` says fewer; each page is billed as one call (a cached page is free). Add `max_credits` to cap the spend. A long walk can stop on the time budget first (`\"time_budget\"`): send the returned cursor with the same params to continue.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5000
            }
          },
          {
            "name": "max_credits",
            "in": "query",
            "required": false,
            "description": "1 to 100000. The most this call may spend, across every page it walks. A page starts only while the credits already spent plus that page's price (or, when higher, the most any page of this walk has cost) still fit, so the call never goes past it; the walk then stops with `data.walk.stopped: \"max_credits\"` and the cursor to resume. Sent alone, it walks as far as the budget goes (up to 50 pages). A value below the price of one page is a free 400 whose `error.details.page_credits` names that price. Credits a row join (`include=`) adds are known only once a page has run, so page 1 is checked against its own price.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100000
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Universal pagination cursor. Send `pagination.next_cursor` from the previous response back verbatim: the API maps it to this endpoint's native `max_id` (cursor style). You never construct, decode, or look up a cursor. Omit it for page 1.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/profile/reels"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of canonical post wrappers ({ post, computed })",
                          "items": {
                            "type": "object",
                            "description": "Canonical post wrapper",
                            "properties": {
                              "post": {
                                "type": "object",
                                "description": "Canonical Post object (unified across all platforms)",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "Platform-specific post ID (always a string; numeric upstream IDs are stringified)"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Direct URL to the post on the source platform"
                                  },
                                  "content": {
                                    "type": "object",
                                    "description": "Post content fields (text, media, thumbnail, duration)",
                                    "properties": {
                                      "text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Post caption, description, or text content"
                                      },
                                      "media_urls": {
                                        "type": [
                                          "string",
                                          "array",
                                          "null"
                                        ],
                                        "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels.",
                                        "items": {
                                          "type": "string",
                                          "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels."
                                        }
                                      },
                                      "thumbnail_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to thumbnail image"
                                      },
                                      "duration_seconds": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Video/clip duration in seconds (null for non-video posts)"
                                      }
                                    }
                                  },
                                  "author": {
                                    "type": "object",
                                    "description": "Subset of Author fields for the post creator",
                                    "properties": {
                                      "username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author username"
                                      },
                                      "display_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author display name"
                                      },
                                      "avatar_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to author profile picture"
                                      },
                                      "verified": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Whether the author account is verified"
                                      }
                                    }
                                  },
                                  "engagement": {
                                    "type": "object",
                                    "description": "Engagement counts",
                                    "properties": {
                                      "views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "View count (if available). For Instagram video/reels this is the play count: the headline 'Views' the IG app shows. Instagram removed per-post play counts from its public web pages in August 2026, so `GET /v1/instagram/post` now fills the count automatically from a second source within the same call: videos and reels keep a numeric `views` with no extra endpoint or workaround. Note: since mid-July 2026 Instagram's play count is Instagram-only. It no longer includes Facebook crosspost views (Meta-side change; the app UI changed identically). For combined reach, also fetch the Facebook crosspost via `/v1/facebook/post`."
                                      },
                                      "likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Like / reaction count"
                                      },
                                      "comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Comment count. Note: on `GET /v1/instagram/post` this is Instagram's `edge_media_to_parent_comment.count` (top-level comments); the IG list endpoints report the mobile `comment_count` total (includes replies). Both land on this same field."
                                      },
                                      "shares": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Share / repost / retweet count. On Instagram this is `reshare_count` (the paper-plane Share / Send count) and it exists only on Instagram's mobile surface, so it is returned by `/v1/instagram/post/stats`, `/v1/instagram/profile/reels/full`, and `/v1/instagram/profile/posts/full`. The web-sourced Instagram list and search endpoints return `null` (never fabricated)."
                                      },
                                      "saves": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Save / bookmark count. `null` on Instagram: the save count is platform-private and Instagram exposes no numeric save metric on any surface (never fabricated)."
                                      }
                                    }
                                  },
                                  "flags": {
                                    "type": "object",
                                    "description": "Boolean flags on the post",
                                    "properties": {
                                      "nsfw": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "NSFW flag (null when platform does not surface)"
                                      },
                                      "spoiler": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Spoiler flag (null when platform does not surface)"
                                      },
                                      "pinned": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Pinned-to-profile flag (null when platform does not surface)"
                                      },
                                      "deleted": {
                                        "type": "boolean",
                                        "description": "Whether the post is tombstoned (always present)"
                                      },
                                      "likes_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the creator has hidden the like count. `engagement.likes` is `null` in that case (never the platform's decoy preview number). Absent on normal posts."
                                      },
                                      "comments_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the upstream reports the comment count as hidden. `engagement.comments` is `null` in that case. Absent on normal posts."
                                      },
                                      "shares_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.shares_hidden"
                                      },
                                      "views_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.views_hidden"
                                      },
                                      "saves_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.saves_hidden"
                                      }
                                    }
                                  },
                                  "published_at": {
                                    "type": [
                                      "string",
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Post creation timestamp as an ISO 8601 UTC string. When the upstream sent a Unix epoch it is converted here and the raw epoch is preserved under `post.ext.published_at_epoch` for one deprecation cycle."
                                  },
                                  "ext": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Platform-specific passthrough fields for cross-endpoint chains (present only on platforms that surface them)",
                                    "properties": {
                                      "music_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok music/clip id (exact string): pass to `/v1/tiktok/song/videos?clipId=` to find videos using the same sound"
                                      },
                                      "matched_song_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The catalogue song TikTok matched the video's sound to, as an exact digit string. An official clip and the original sounds creators upload with it have different `music_id` values and the same `matched_song_id`, so group rows on it to count every use of one song. It is not a clipId: `/v1/tiktok/song` and `/v1/tiktok/song/videos` do not accept it. `/v1/tiktok/search/music` carries it on each sound, so a search on the song's title and artist, kept to the sounds with the same `matched_song_id`, gives the song's official sounds and their `video_count`. Absent when TikTok matched the sound to no song, and on rows served from a source that does not report the match."
                                      },
                                      "matched_song_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the song in `matched_song_id`. Absent when there is no matched song."
                                      },
                                      "matched_song_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist of the song in `matched_song_id`, as TikTok's catalogue names it. Absent when there is no matched song."
                                      },
                                      "music_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the video's own sound (`music_id`). An uploaded sound is titled like `original sound - <handle>`; the song it plays, when TikTok recognised one, is `matched_song_title`."
                                      },
                                      "music_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist TikTok shows for the video's own sound. On an original sound this is the uploader's display name, not the song's artist; use `matched_song_artist` for that."
                                      },
                                      "music_is_original": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "TikTok only. `true` when the video's sound is an original sound a creator uploaded, `false` when it is a catalogue track. Absent when the source does not say."
                                      },
                                      "author_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's platform-native numeric user id. On TikTok search and list items, pass to `/v1/tiktok/profile?user_id=` for the creator's current follower count (survives username changes). On Instagram `/v1/instagram/search/reels`, `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` items it is present on every row, accepted by `/v1/instagram/profile/country?user_id=` and `/v1/instagram/basic-profile?userId=`. On Facebook it appears when the upstream exposed a numeric actor id and no real handle."
                                      },
                                      "author_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The posting account's profile URL, so a matching post can be followed to its account. Present on `/v1/facebook/search/posts` rows: the vanity or `/people/<name>/<id>/` URL when Facebook sends one, otherwise `https://www.facebook.com/profile.php?id=<numeric id>` built from the account id. Pass it as `url` to `/v1/facebook/profile` (or to `/v1/prism/profiles` with `platform: facebook`). Null when the row names neither an account URL nor a numeric account id. Absent on other endpoints."
                                      },
                                      "author_followers": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "The creator's follower count as embedded in the search payload itself, when the search source happens to carry one. On Instagram `search/reels` it is null on a plain call, because Instagram stopped sending follower counts in its search payload in August 2026; send `include=creator` (or `country`) and it is filled from the creator's profile, 2 credits per creator looked up. It stays null when that lookup does not resolve."
                                      },
                                      "author_following": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_following"
                                      },
                                      "author_posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_posts_count"
                                      },
                                      "author_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The free text the author wrote in their profile's location field, exactly as written (for example `Johannesburg, South Africa`). It is not a country code and is not checked. Present on X tweet and reply rows; null or absent when the author left it blank."
                                      },
                                      "in_reply_to_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_id"
                                      },
                                      "in_reply_to_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_username"
                                      },
                                      "conversation_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.conversation_id"
                                      },
                                      "author_country": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's country. On Instagram it is the country the creator declares on the About this account panel, as a country name (for example `Spain`), and it is not where the post was filmed. It is present on `/v1/instagram/search/reels` when the request sends `include=creator`, `include=country` or `country`, and on `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` when it sends `include=country`, filled by looking the creator up. On YouTube rows joined with `include=channel` it is the channel's own country as an ISO 3166-1 alpha-2 code (for example `ZA`). Null when the platform publishes no country for the creator or the lookup did not resolve, and nothing is guessed; absent on a plain call."
                                      },
                                      "author_public_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact email on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public email or the lookup did not resolve; absent on a plain call."
                                      },
                                      "author_public_phone": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact phone number on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public phone or the lookup did not resolve; absent on a plain call."
                                      },
                                      "download_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "How many times the video has been saved to a device. TikTok only, and distinct from `engagement.saves`: a save keeps the video in a private collection on the platform, a download takes a copy off it, and TikTok counts the two separately. Present on TikTok post, search and post-list responses; absent everywhere else."
                                      },
                                      "region": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only: the country TikTok registers the video to, as an ISO 3166-1 alpha-2 code (normally the creator's account country when they posted). It is not the viewer's country, not the `region` you requested, and not a language. On `/v1/tiktok/trending`, `/v1/tiktok/search`, `/v1/tiktok/search/top`, `/v1/tiktok/profile/videos`, `/v1/tiktok/search/hashtag` and `/v1/tiktok/song/videos` it is how you tell which rows are from a given country: filter on it when you need only that country. A row whose source omits the country stays null. The `region` request parameter still only sets the proxy."
                                      },
                                      "subreddit": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Reddit subreddit name (search/list items): pass to `/v1/reddit/subreddit/details?subreddit=`"
                                      },
                                      "title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.title"
                                      },
                                      "selftext": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.selftext"
                                      },
                                      "upvote_ratio": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Reddit only: the share of a post's votes that are upvotes, as a fraction from 0 to 1 and usually close to 1 (six live rows measured 1, 1, 1, 0.86, 0.75, 1). Fractional despite the integer type this schema emits for every numeric leaf, the same caveat as `author.ext.average_rating`. Populated on `/v1/reddit/search` rows whose source carries it, and null everywhere else on Reddit including `/v1/reddit/post` and `/v1/reddit/subreddit`."
                                      },
                                      "flair": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.flair"
                                      },
                                      "content_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The language the platform itself tags the post with, when it sends one: Reddit's own language tag on Reddit lanes, and TikTok's caption-language tag (for example `de`) on `/v1/tiktok/trending?feed=local`. Null when the platform could not tell (Reddit `und`, TikTok `un`, common on short or emoji-only captions); absent where the source sends no tag. Never inferred from the text by us: that is `post.computed.language`."
                                      },
                                      "type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.type"
                                      },
                                      "content_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.content_type"
                                      },
                                      "ticker_symbols": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.ticker_symbols",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.ticker_symbols"
                                        }
                                      },
                                      "video_view_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram's legacy 3-second-view count. Historical: Instagram stopped serving it in August 2026 (removed from its web post surface along with the web play count), so fresh `/v1/instagram/post` lookups no longer carry it and no source can restore it. Use `engagement.views` (the play count) instead."
                                      },
                                      "ig_play_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram-only play count (`ig_play_count`). Since mid-July 2026 Instagram's headline play count (`engagement.views`) no longer includes Facebook crosspost views and equals this value; it is surfaced explicitly so you can tell the Instagram-only figure apart and detect any future re-divergence. For combined Instagram + Facebook reach, also fetch the Facebook crosspost via `/v1/facebook/post`. Present on `/v1/instagram/post/stats` and, since the August 2026 views fix, on `/v1/instagram/post` for video posts."
                                      },
                                      "repost_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.repost_count"
                                      },
                                      "media_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.media_type"
                                      },
                                      "text_truncated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.text_truncated"
                                      },
                                      "ip_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.ip_location"
                                      },
                                      "carousel_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.carousel_count"
                                      },
                                      "remix_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.remix_count"
                                      },
                                      "audio_cluster_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram's audio cluster for a reel, as an exact digit string: the id Instagram uses to group different uploads of the same sound. Present on `/v1/instagram/audio/reels` rows and on `/v1/instagram/profile/reels` with `include=stats`; absent on a row when it is not available and on every other surface."
                                      },
                                      "facebook_likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.likes` on this row. A post shared to Facebook arrives from some sources with its Facebook likes already folded into the Instagram count, so the share is subtracted and published here, which keeps `engagement.likes` the Instagram-only figure instagram.com shows on the post. Add the two together for the combined number. Absent when the read carried no Facebook share, and absent on a post whose owner hides the like count, because nothing can be subtracted from a null. A response that excluded a share also carries a note in `data._warnings`."
                                      },
                                      "facebook_comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.comments` on this row, the comment counterpart of `post.ext.facebook_likes`. Each leaf appears only for the count it actually changed, so a post whose likes are hidden but whose comments were reconciled carries this one alone."
                                      },
                                      "instagram_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Instagram-only play count of a video, the same figure on every Instagram endpoint. `engagement.views` keeps each endpoint's established meaning: on `/v1/instagram/profile/reels`, `/v1/instagram/audio/reels`, `/v1/instagram/search/reels` and `/v1/instagram/search/hashtag` it can include the post's Facebook cross-post views, while on `/v1/instagram/post` and `/v1/instagram/post/stats` it is Instagram-only. Read this leaf when you compare one post across endpoints. Absent on photos and when the source did not report the Instagram-only figure."
                                      },
                                      "facebook_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post part of a video's play count, the counterpart of `post.ext.instagram_views`. Present only when the source reported the Facebook part, or a combined total above the Instagram figure. Absent does not mean zero: some sources report the Instagram figure alone even for a cross-posted video."
                                      },
                                      "published_at_epoch": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Raw Unix epoch for `published_at` (seconds, or milliseconds when the upstream sent millis). Present only when the upstream sent a numeric epoch that was normalised to the ISO 8601 `published_at` string. Kept for one deprecation cycle for integrations pinned to the numeric form."
                                      },
                                      "usertags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.usertags",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.usertags"
                                        }
                                      },
                                      "coauthors": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post).",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post)."
                                        }
                                      },
                                      "music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.music"
                                      },
                                      "sponsor_tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                        }
                                      },
                                      "sponsored_disclosed": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "The platform's own disclosure that the post is paid or promotional: on Instagram the paid-partnership label (`is_paid_partnership`) or a tagged brand partner, on TikTok the label TikTok shows viewers (\"Paid partnership\", \"Commission paid\", \"Promotional content\"). `false` when the post carries the flag unset, null when it carries none. Present on `/v1/instagram/post/stats`, `/v1/instagram/search/reels` and `/v1/tiktok/search`; absent on every other endpoint."
                                      },
                                      "ai_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram only: Instagram's AI-content label on the post, as the method Instagram reports: `classifier_score_high` (Instagram detected it, shown as \"Likely made with AI\"), `ai_created` or `ai_edited` (declared or detected as made or edited with AI). Null when the post carries no AI label. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                      },
                                      "story_mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "story_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint."
                                        }
                                      },
                                      "story_reshared_posts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.location"
                                      },
                                      "media": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.media",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.media",
                                          "properties": {
                                            "type": {
                                              "type": "string",
                                              "description": "Leaf at post.ext.media.type"
                                            },
                                            "url": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.media.url"
                                            },
                                            "width": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.width"
                                            },
                                            "height": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.height"
                                            }
                                          }
                                        }
                                      },
                                      "top_comments": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.top_comments",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.top_comments",
                                          "properties": {
                                            "id": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.id"
                                            },
                                            "text": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.text"
                                            },
                                            "username": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.username"
                                            },
                                            "likes": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.top_comments.likes"
                                            },
                                            "published_at": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.published_at"
                                            }
                                          }
                                        }
                                      },
                                      "hashtags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.hashtags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.hashtags"
                                        }
                                      },
                                      "mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentions",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentions"
                                        }
                                      },
                                      "mentioned_user_ids": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentioned_user_ids",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentioned_user_ids"
                                        }
                                      },
                                      "quoted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Threads quote posts: the post this one quotes, as `{ id, url, author: { id, username }, text, media_urls, thumbnail_url }`. A quote post usually carries no caption or media of its own, and the text and video you see on the post's page belong to this attachment, by a different author. It is returned here rather than merged into `post.content`, so `content.*` always stays the outer post's own content and one account's media is never attributed to another. Absent on posts that are not quote posts."
                                      },
                                      "retweeted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.retweeted_post"
                                      },
                                      "quote_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.quote_count"
                                      },
                                      "all_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.all_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.all_media_urls"
                                        }
                                      },
                                      "reaction_counts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.reaction_counts",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.reaction_counts"
                                        }
                                      },
                                      "share_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.share_urn"
                                      },
                                      "post_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.post_type"
                                      },
                                      "activity_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.activity_id"
                                      },
                                      "published_at_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_at_precision"
                                      },
                                      "author_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_urn"
                                      },
                                      "author_headline": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_headline"
                                      },
                                      "author_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_type"
                                      },
                                      "is_repost_quote": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.is_repost_quote"
                                      },
                                      "article": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.article"
                                      },
                                      "reaction_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.reaction_type"
                                      },
                                      "download_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.download_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.download_media_urls"
                                        }
                                      },
                                      "tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.tags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.tags"
                                        }
                                      },
                                      "categoryId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryId"
                                      },
                                      "categoryTitle": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryTitle"
                                      },
                                      "topicCategories": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.topicCategories",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.topicCategories"
                                        }
                                      },
                                      "duration": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.duration"
                                      },
                                      "license": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.license"
                                      },
                                      "madeForKids": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.madeForKids"
                                      },
                                      "defaultAudioLanguage": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.defaultAudioLanguage"
                                      },
                                      "hasPaidProductPlacement": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.hasPaidProductPlacement"
                                      },
                                      "caption": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.caption"
                                      },
                                      "position": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.position"
                                      },
                                      "playlistId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlistId"
                                      },
                                      "videoOwnerChannelId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoOwnerChannelId"
                                      },
                                      "videoPublishedAt": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoPublishedAt"
                                      },
                                      "description": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.description"
                                      },
                                      "default_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.default_language"
                                      },
                                      "localizations": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.localizations"
                                      },
                                      "playlist_item_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_item_id"
                                      },
                                      "playlist_owner_channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_channel_id"
                                      },
                                      "playlist_owner_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_title"
                                      },
                                      "channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.channel_id"
                                      },
                                      "published_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_label"
                                      },
                                      "published_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.published_precision"
                                      },
                                      "title_maybe_translated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.title_maybe_translated"
                                      },
                                      "video_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.video_count"
                                      },
                                      "posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "`/v1/instagram/hashtag` only: the exact number of public posts Instagram counts under the hashtag. Live: it moves between calls minutes apart."
                                      },
                                      "commerce": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.commerce"
                                      },
                                      "on_screen_texts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.on_screen_texts",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.on_screen_texts"
                                        }
                                      },
                                      "topic_tag": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag"
                                      },
                                      "reshare_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.reshare_count"
                                      },
                                      "dsp_ids": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.dsp_ids"
                                      },
                                      "topic_tag_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag_id"
                                      },
                                      "amazon_shop_lists": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_lists",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_lists"
                                        }
                                      },
                                      "amazon_shop_trending_picks": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_trending_picks",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_trending_picks"
                                        }
                                      },
                                      "amazon_shop_curations": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_curations",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_curations"
                                        }
                                      },
                                      "amazon_shop_socials": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_socials",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.amazon_shop_socials"
                                        }
                                      },
                                      "ad": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Ad Library envelope (Facebook `adlibrary/ad` and `adlibrary/company/ads` items): page_id, currency, spend, reach_estimate, publisher_platforms, categories, targeted_or_reached_countries, cta_text, cta_type, link_url, is_active, end_date_iso, display_format, title, video_hd_url, video_sd_url. Absent on every non-ad surface."
                                      },
                                      "apple_music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.apple_music"
                                      },
                                      "feedback_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.feedback_id"
                                      },
                                      "question_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN (`/v1/naver/kin/search`) only: the question's id (Naver's `docId`), read from the row's link. Kin returns one row per answer, so several rows can share it; send `group=question` for one row per question."
                                      },
                                      "answer_no": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: which answer of the question this row is (Naver's `answerNo`), read from the row's link."
                                      },
                                      "answer_nos": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first.",
                                        "items": {
                                          "type": "integer",
                                          "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first."
                                        }
                                      },
                                      "published_at_est": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: the question's date ESTIMATED from its id (`YYYY-MM-DD`, Korea time), never a published date, so `published_at` stays null. Absent for questions older than the calibration table."
                                      },
                                      "date_basis": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "How `post.ext.published_at_est` was derived. `kin_docid_estimate`: interpolated from the question id against question pages whose posted date was read."
                                      },
                                      "event": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.event"
                                      },
                                      "trend": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Trend-board envelope: what TikTok's own trend board says about the row. On `/v1/tiktok/hashtags/popular`: `rank`, `country_code`, `period_days`, `posts` and `views` for the window (not lifetime totals), `industry` / `industry_id` / `industry_label` for the first board the hashtag was read from (null for the overall board), `boards` listing EVERY board it ranks on as `{ industry, industry_id, industry_label, rank }` in board order (so a hashtag in the top 3 overall and on an industry board shows both), `popularity_curve` as `{ date, value }` with value 0 to 100 relative to the window's peak, and `top_creators`. On `/v1/tiktok/videos/popular`: `rank`, `country_code`, `period_days`, `order_by`, `period_views`, `organic_views`, `engagement_rate`, `six_second_view_through_rate`, `content_tags`. Absent on every non-board surface."
                                      },
                                      "updated_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.updated_at"
                                      },
                                      "alt_text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.alt_text"
                                      },
                                      "board_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.board_name"
                                      }
                                    }
                                  }
                                }
                              },
                              "computed": {
                                "type": "object",
                                "description": "Server-computed analytics fields (consistent across platforms)",
                                "properties": {
                                  "engagement_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Computed engagement rate (0..1). Null when the upstream lacks enough signal."
                                  },
                                  "language": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "ISO 639-1 language code detected from the post text. Null when undetectable."
                                  },
                                  "content_category": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Keyword-classified content category (e.g. tech, food, gaming). Null when undetectable."
                                  },
                                  "estimated_reach": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Estimated reach based on views or follower count. Null when uncomputable."
                                  },
                                  "save_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at computed.save_rate"
                                  },
                                  "relevance": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Nested object: computed.relevance",
                                    "properties": {
                                      "p": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.p"
                                      },
                                      "sense": {
                                        "type": "string",
                                        "description": "Leaf at computed.relevance.sense"
                                      },
                                      "depth": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.depth"
                                      },
                                      "spam": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.spam"
                                      }
                                    }
                                  },
                                  "labels": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels"
                                  },
                                  "labels_evidence": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels_evidence"
                                  }
                                }
                              }
                            }
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/profile/reels",
                  "data": {
                    "items": [
                      {
                        "post": {
                          "id": "3996190725544752691",
                          "url": "https://www.instagram.com/reel/Dd1UkrKzjYz/",
                          "content": {
                            "text": "Sample comment text (redacted).",
                            "media_urls": "https://scontent-lga3-1.cdninstagram.com/user_2352da/v/t2/f2/m86/AQP6I_83AhxGqjjW33i3Zmw5lw6esEtCPtKEKmnd1u6ragE6VABS43EG7dJDHr1DiiQOJ1AUQy7XRtVth3QnhKK6Bt5-71ch2Rzn8o4.mp4?_nc_cat=111&_nc_sid=5e9851&_nc_ht=scontent-lga3-1.cdninstagram.com&_nc_ohc=0xk71hHn5asQ7kNvwHj3j7Q&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTExOTM0NTYzNzU0OTg1MSwiYXNzZXRfYWdlX2RheXMiOjMsInZpX3VzZWNhc2VfaWQiOjEwMDk5LCJkdXJhdGlvbl9zIjoxNCwidXJsZ2VuX3NvdXJjZSI6Ind3dyJ9&ccb=17-1&vs=78125e9b1113878e&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC81QTQ0Mzc0Mjk4OTY0NUI0QkVCNjQzRTZBNDEyMzBBM192aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyL0IwNDk0ODMxQzQ2QjJEMUNFMjBFNUEyOUUyNjZCMzg2X2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACa2nNvxvoL9AxUCKAJDMywXQCzdsi0OVgQYEmRhc2hfYmFzZWxpbmVfMV92MREAdf4HZeadAQA&_nc_gid=9b5mvUV27ZGBchP2A0sMxg&_nc_ss=7a3ba&_nc_zt=28&oh=00_AQN72Ronw5B7R4PwXHHKPIRmfI0YlMyBGRmQ19RWLe_Q4A&oe=6AC151B0",
                            "thumbnail_url": "https://scontent-lga3-3.cdninstagram.com/user_4c9448/t51.82787-15/825323711_18439493704178345_1834553489188448132_n.jpg?stp=dst-jpg_e15_p480x480_tt6&_nc_cat=1&ig_cache_key=Mzk5NjE5MDcyNTU0NDc1MjY5MTE4NDM5NDkzNzAxMTc4MzQ1.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjEzMjAuc2RyLnZpZGVvX2RlZmF1bHRfY292ZXJfZnJhbWUuQzMifQ%3D%3D&_nc_ohc=b41NlUUHnqwQ7kNvwFYbe_d&_nc_oc=AdqbAt-aIDazSjybKnnxHRKw_03ptJ5mXhbu1g8TXiwuNK8mwvEtfNyN96uRAeIdzrk&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_gid=9b5mvUV27ZGBchP2A0sMxg&_nc_ss=7a3ba&oh=00_AQOaNj6sKGs93EoV6wVGt09TbK3FB9f36JHfEmO2UpEQXA&oe=6AC52213",
                            "duration_seconds": 14.441
                          },
                          "author": {
                            "username": "user_899a89",
                            "display_name": "user_49ee61",
                            "avatar_url": "https://example.com/avatars/user_1a9b29.png",
                            "verified": true
                          },
                          "engagement": {
                            "views": 40254034,
                            "likes": 1834597,
                            "comments": 18911,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false
                          },
                          "published_at": "2026-09-28T13:45:31.000Z",
                          "ext": {
                            "music_id": "2626182550756681",
                            "author_id": "user_6908f1",
                            "media_type": "video",
                            "remix_count": 7,
                            "published_at_epoch": 1790603131,
                            "coauthors": [
                              {
                                "id": "user_9c655b",
                                "username": "mrbeast",
                                "full_name": "user_6a0622",
                                "is_verified": true,
                                "profile_pic_url": "https://example.com/user_ce8fdd"
                              }
                            ],
                            "music": {
                              "id": "2626182550756681",
                              "track_title": "Pour It Up (feat. Rihanna)",
                              "artist": "Mike WiLL Made-It",
                              "is_original": false
                            }
                          }
                        },
                        "computed": {
                          "engagement_rate": 0.046045,
                          "language": null,
                          "content_category": "other",
                          "estimated_reach": 48304841,
                          "vs_creator": {
                            "ratio": 2.12,
                            "metric": "views",
                            "reason": null
                          },
                          "labels": {
                            "sponsored": {
                              "p": 0.32,
                              "disclosed": false,
                              "undisclosed": false,
                              "brand": null
                            },
                            "intent": {
                              "label": "promoting",
                              "confidence": 0.52,
                              "buyer": false,
                              "seller": 0.14,
                              "fits_offer": null,
                              "urgency": 0.07
                            },
                            "niche": {
                              "label": "gaming",
                              "confidence": 0.77,
                              "taxonomy": "sc-niche-v1"
                            }
                          }
                        }
                      },
                      {
                        "post": {
                          "id": "3993360039878572887",
                          "url": "https://www.instagram.com/reel/DdrQ8xtM7tX/",
                          "content": {
                            "text": "Sample comment text (redacted).",
                            "media_urls": "https://scontent-lga3-1.cdninstagram.com/user_2352da/v/t2/f2/m86/AQOgdfnwu9TmEpHBlgHbWrXkc3FTIAxq02RSCj-1M-aYcTlwEr9V4iKCnGNqguycaaZVOo7YaqkRBLrwZLMmkdm0O8ZpzF6qmlNUlQE.mp4?_nc_cat=110&_nc_sid=5e9851&_nc_ht=scontent-lga3-1.cdninstagram.com&_nc_ohc=GP4YWM9RDgcQ7kNvwE79VYz&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTA5NzcxNDU3Mjc0MDY5MSwiYXNzZXRfYWdlX2RheXMiOjcsInZpX3VzZWNhc2VfaWQiOjEwMDk5LCJkdXJhdGlvbl9zIjo1NywidXJsZ2VuX3NvdXJjZSI6Ind3dyJ9&ccb=17-1&vs=baae1040fd739e22&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC9CMDQ5RjVCRkQxMzdDQzBGODkyNjI0RkNCMTE3NThCQ192aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyLzdBNDkwMUM0NUM5NUE1NUI2Rjk2QzMyRUJEMEEwNDgwX2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACamoeLyspfzAxUCKAJDMywXQEziDEm6XjUYEmRhc2hfYmFzZWxpbmVfMV92MREAdf4HZeadAQA&_nc_gid=9b5mvUV27ZGBchP2A0sMxg&_nc_ss=7a3ba&_nc_zt=28&oh=00_AQMvnbj30BS9PJaTygnjQiDdvqYL71VwufJ4iB68-25dHg&oe=6AC1355B",
                            "thumbnail_url": "https://scontent-lga3-1.cdninstagram.com/user_4c9448/t51.71878-15/820093558_1418016730278395_1100905836033529355_n.jpg?stp=dst-jpg_e15_p480x480_tt6&_nc_cat=109&ig_cache_key=Mzk5MzM2MDAzOTg3ODU3Mjg4Nw%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjY0MC5zZHIudmlkZW9fZGVmYXVsdF9jb3Zlcl9mcmFtZS5DMyJ9&_nc_ohc=H7U_AbVNjpQQ7kNvwF8YZfk&_nc_oc=AdpbpHhi6qSmpOhl88Fe8nfLDxkISn5QxVBXgPpDIvBKEqKv5BKRRrR81YG02ZU1SCs&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-lga3-1.cdninstagram.com&_nc_gid=9b5mvUV27ZGBchP2A0sMxg&_nc_ss=7a3ba&oh=00_AQP26zs0Jgj5STelO5JVMPjIKoowOWEiWhcHVthjGgtTHA&oe=6AC51FD5",
                            "duration_seconds": 57.769
                          },
                          "author": {
                            "username": "mrbeast",
                            "display_name": "user_6a0622",
                            "avatar_url": "https://example.com/avatars/user_749988.png",
                            "verified": true
                          },
                          "engagement": {
                            "views": 13590073,
                            "likes": 216456,
                            "comments": 15892,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false
                          },
                          "published_at": "2026-09-24T16:00:27.000Z",
                          "ext": {
                            "author_id": "user_9c655b",
                            "media_type": "video",
                            "remix_count": 10,
                            "published_at_epoch": 1790265627,
                            "coauthors": []
                          }
                        },
                        "computed": {
                          "engagement_rate": 0.017097,
                          "language": null,
                          "content_category": "other",
                          "estimated_reach": 16308088,
                          "vs_creator": {
                            "ratio": 0.46,
                            "metric": "views",
                            "reason": null
                          },
                          "labels": {
                            "sponsored": {
                              "p": 0.1,
                              "disclosed": false,
                              "undisclosed": false,
                              "brand": null
                            },
                            "intent": {
                              "label": "other",
                              "confidence": 0.98,
                              "buyer": false,
                              "seller": 0.06,
                              "fits_offer": null,
                              "urgency": 0
                            },
                            "niche": {
                              "label": "celebrities_fandom",
                              "confidence": 0.79,
                              "taxonomy": "sc-niche-v1"
                            }
                          }
                        }
                      }
                    ],
                    "total": null,
                    "creator_baseline": {
                      "baseline": null,
                      "reason": "fewer_than_eight",
                      "rows_used": 7,
                      "cadence": "measured"
                    },
                    "labels": {
                      "presets": [
                        "sponsored",
                        "intent"
                      ],
                      "rows": 7,
                      "labelled": 7,
                      "cached": 7,
                      "skipped": 0,
                      "unjudged": 0,
                      "dropped": 0,
                      "dropped_ids": [],
                      "extra_credits": 0,
                      "methodology_version": "labels/1",
                      "mode": "default",
                      "status": "complete",
                      "pending": 0,
                      "pending_ids": []
                    },
                    "dropped": 0,
                    "_warnings": [
                      "post.engagement.likes: the Facebook cross-post share was excluded on 2 of 11 rows, so likes and comments are Instagram's own counts, matching what instagram.com shows. The excluded share is on post.ext.facebook_likes and post.ext.facebook_comments."
                    ]
                  },
                  "credits_used": 1,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": null,
                    "has_more": false,
                    "page_size": 7,
                    "stopped_at": "since"
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T07:28:10.915Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/highlights": {
      "get": {
        "summary": "List Instagram story highlights",
        "description": "Returns a list of story highlight collections for an Instagram user including highlight titles, cover images, and item counts.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_highlights",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 1,
        "x-socialcrawl-oneOf": [
          [
            "user_id",
            "handle"
          ]
        ],
        "parameters": [
          {
            "name": "user_id",
            "in": "query",
            "required": false,
            "description": "Instagram user id. Use for faster response times. (one of: user_id, handle; at least one required)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Instagram username without the @ symbol (one of: user_id, handle; at least one required)",
            "schema": {
              "type": "string"
            },
            "example": "instagram"
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "Only rows published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Rows older than it are left off each page. This list is not in date order, so the walk does not stop at the date: keep following `next_cursor`, and each page costs what a page costs even when every row on it is filtered out. A row with no date is kept. `published_after`, `start_date`, `from_date`, `publish_time` (`yesterday`, `this-week`, `this-month`, `last-3-months`, `last-6-months`) and `max_age_days` are accepted and applied as `since`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "description": "Only rows published on or before this date: YYYY-MM-DD (that whole UTC day is included) or an ISO 8601 timestamp. Newer rows are left off each page and the walk does not stop, so older pages follow. A row with no date is kept. `published_before`, `end_date` and `to_date` are accepted and applied as `until`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/highlights"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of canonical post wrappers ({ post, computed })",
                          "items": {
                            "type": "object",
                            "description": "Canonical post wrapper",
                            "properties": {
                              "post": {
                                "type": "object",
                                "description": "Canonical Post object (unified across all platforms)",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "Platform-specific post ID (always a string; numeric upstream IDs are stringified)"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Direct URL to the post on the source platform"
                                  },
                                  "content": {
                                    "type": "object",
                                    "description": "Post content fields (text, media, thumbnail, duration)",
                                    "properties": {
                                      "text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Post caption, description, or text content"
                                      },
                                      "media_urls": {
                                        "type": [
                                          "string",
                                          "array",
                                          "null"
                                        ],
                                        "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels.",
                                        "items": {
                                          "type": "string",
                                          "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels."
                                        }
                                      },
                                      "thumbnail_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to thumbnail image"
                                      },
                                      "duration_seconds": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Video/clip duration in seconds (null for non-video posts)"
                                      }
                                    }
                                  },
                                  "author": {
                                    "type": "object",
                                    "description": "Subset of Author fields for the post creator",
                                    "properties": {
                                      "username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author username"
                                      },
                                      "display_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author display name"
                                      },
                                      "avatar_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to author profile picture"
                                      },
                                      "verified": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Whether the author account is verified"
                                      }
                                    }
                                  },
                                  "engagement": {
                                    "type": "object",
                                    "description": "Engagement counts",
                                    "properties": {
                                      "views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "View count (if available). For Instagram video/reels this is the play count: the headline 'Views' the IG app shows. Instagram removed per-post play counts from its public web pages in August 2026, so `GET /v1/instagram/post` now fills the count automatically from a second source within the same call: videos and reels keep a numeric `views` with no extra endpoint or workaround. Note: since mid-July 2026 Instagram's play count is Instagram-only. It no longer includes Facebook crosspost views (Meta-side change; the app UI changed identically). For combined reach, also fetch the Facebook crosspost via `/v1/facebook/post`."
                                      },
                                      "likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Like / reaction count"
                                      },
                                      "comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Comment count. Note: on `GET /v1/instagram/post` this is Instagram's `edge_media_to_parent_comment.count` (top-level comments); the IG list endpoints report the mobile `comment_count` total (includes replies). Both land on this same field."
                                      },
                                      "shares": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Share / repost / retweet count. On Instagram this is `reshare_count` (the paper-plane Share / Send count) and it exists only on Instagram's mobile surface, so it is returned by `/v1/instagram/post/stats`, `/v1/instagram/profile/reels/full`, and `/v1/instagram/profile/posts/full`. The web-sourced Instagram list and search endpoints return `null` (never fabricated)."
                                      },
                                      "saves": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Save / bookmark count. `null` on Instagram: the save count is platform-private and Instagram exposes no numeric save metric on any surface (never fabricated)."
                                      }
                                    }
                                  },
                                  "flags": {
                                    "type": "object",
                                    "description": "Boolean flags on the post",
                                    "properties": {
                                      "nsfw": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "NSFW flag (null when platform does not surface)"
                                      },
                                      "spoiler": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Spoiler flag (null when platform does not surface)"
                                      },
                                      "pinned": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Pinned-to-profile flag (null when platform does not surface)"
                                      },
                                      "deleted": {
                                        "type": "boolean",
                                        "description": "Whether the post is tombstoned (always present)"
                                      },
                                      "likes_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the creator has hidden the like count. `engagement.likes` is `null` in that case (never the platform's decoy preview number). Absent on normal posts."
                                      },
                                      "comments_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the upstream reports the comment count as hidden. `engagement.comments` is `null` in that case. Absent on normal posts."
                                      },
                                      "shares_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.shares_hidden"
                                      },
                                      "views_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.views_hidden"
                                      },
                                      "saves_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.saves_hidden"
                                      }
                                    }
                                  },
                                  "published_at": {
                                    "type": [
                                      "string",
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Post creation timestamp as an ISO 8601 UTC string. When the upstream sent a Unix epoch it is converted here and the raw epoch is preserved under `post.ext.published_at_epoch` for one deprecation cycle."
                                  },
                                  "ext": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Platform-specific passthrough fields for cross-endpoint chains (present only on platforms that surface them)",
                                    "properties": {
                                      "music_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok music/clip id (exact string): pass to `/v1/tiktok/song/videos?clipId=` to find videos using the same sound"
                                      },
                                      "matched_song_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The catalogue song TikTok matched the video's sound to, as an exact digit string. An official clip and the original sounds creators upload with it have different `music_id` values and the same `matched_song_id`, so group rows on it to count every use of one song. It is not a clipId: `/v1/tiktok/song` and `/v1/tiktok/song/videos` do not accept it. `/v1/tiktok/search/music` carries it on each sound, so a search on the song's title and artist, kept to the sounds with the same `matched_song_id`, gives the song's official sounds and their `video_count`. Absent when TikTok matched the sound to no song, and on rows served from a source that does not report the match."
                                      },
                                      "matched_song_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the song in `matched_song_id`. Absent when there is no matched song."
                                      },
                                      "matched_song_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist of the song in `matched_song_id`, as TikTok's catalogue names it. Absent when there is no matched song."
                                      },
                                      "music_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the video's own sound (`music_id`). An uploaded sound is titled like `original sound - <handle>`; the song it plays, when TikTok recognised one, is `matched_song_title`."
                                      },
                                      "music_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist TikTok shows for the video's own sound. On an original sound this is the uploader's display name, not the song's artist; use `matched_song_artist` for that."
                                      },
                                      "music_is_original": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "TikTok only. `true` when the video's sound is an original sound a creator uploaded, `false` when it is a catalogue track. Absent when the source does not say."
                                      },
                                      "author_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's platform-native numeric user id. On TikTok search and list items, pass to `/v1/tiktok/profile?user_id=` for the creator's current follower count (survives username changes). On Instagram `/v1/instagram/search/reels`, `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` items it is present on every row, accepted by `/v1/instagram/profile/country?user_id=` and `/v1/instagram/basic-profile?userId=`. On Facebook it appears when the upstream exposed a numeric actor id and no real handle."
                                      },
                                      "author_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The posting account's profile URL, so a matching post can be followed to its account. Present on `/v1/facebook/search/posts` rows: the vanity or `/people/<name>/<id>/` URL when Facebook sends one, otherwise `https://www.facebook.com/profile.php?id=<numeric id>` built from the account id. Pass it as `url` to `/v1/facebook/profile` (or to `/v1/prism/profiles` with `platform: facebook`). Null when the row names neither an account URL nor a numeric account id. Absent on other endpoints."
                                      },
                                      "author_followers": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "The creator's follower count as embedded in the search payload itself, when the search source happens to carry one. On Instagram `search/reels` it is null on a plain call, because Instagram stopped sending follower counts in its search payload in August 2026; send `include=creator` (or `country`) and it is filled from the creator's profile, 2 credits per creator looked up. It stays null when that lookup does not resolve."
                                      },
                                      "author_following": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_following"
                                      },
                                      "author_posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_posts_count"
                                      },
                                      "author_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The free text the author wrote in their profile's location field, exactly as written (for example `Johannesburg, South Africa`). It is not a country code and is not checked. Present on X tweet and reply rows; null or absent when the author left it blank."
                                      },
                                      "in_reply_to_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_id"
                                      },
                                      "in_reply_to_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_username"
                                      },
                                      "conversation_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.conversation_id"
                                      },
                                      "author_country": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's country. On Instagram it is the country the creator declares on the About this account panel, as a country name (for example `Spain`), and it is not where the post was filmed. It is present on `/v1/instagram/search/reels` when the request sends `include=creator`, `include=country` or `country`, and on `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` when it sends `include=country`, filled by looking the creator up. On YouTube rows joined with `include=channel` it is the channel's own country as an ISO 3166-1 alpha-2 code (for example `ZA`). Null when the platform publishes no country for the creator or the lookup did not resolve, and nothing is guessed; absent on a plain call."
                                      },
                                      "author_public_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact email on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public email or the lookup did not resolve; absent on a plain call."
                                      },
                                      "author_public_phone": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact phone number on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public phone or the lookup did not resolve; absent on a plain call."
                                      },
                                      "download_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "How many times the video has been saved to a device. TikTok only, and distinct from `engagement.saves`: a save keeps the video in a private collection on the platform, a download takes a copy off it, and TikTok counts the two separately. Present on TikTok post, search and post-list responses; absent everywhere else."
                                      },
                                      "region": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only: the country TikTok registers the video to, as an ISO 3166-1 alpha-2 code (normally the creator's account country when they posted). It is not the viewer's country, not the `region` you requested, and not a language. On `/v1/tiktok/trending`, `/v1/tiktok/search`, `/v1/tiktok/search/top`, `/v1/tiktok/profile/videos`, `/v1/tiktok/search/hashtag` and `/v1/tiktok/song/videos` it is how you tell which rows are from a given country: filter on it when you need only that country. A row whose source omits the country stays null. The `region` request parameter still only sets the proxy."
                                      },
                                      "subreddit": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Reddit subreddit name (search/list items): pass to `/v1/reddit/subreddit/details?subreddit=`"
                                      },
                                      "title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.title"
                                      },
                                      "selftext": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.selftext"
                                      },
                                      "upvote_ratio": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Reddit only: the share of a post's votes that are upvotes, as a fraction from 0 to 1 and usually close to 1 (six live rows measured 1, 1, 1, 0.86, 0.75, 1). Fractional despite the integer type this schema emits for every numeric leaf, the same caveat as `author.ext.average_rating`. Populated on `/v1/reddit/search` rows whose source carries it, and null everywhere else on Reddit including `/v1/reddit/post` and `/v1/reddit/subreddit`."
                                      },
                                      "flair": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.flair"
                                      },
                                      "content_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The language the platform itself tags the post with, when it sends one: Reddit's own language tag on Reddit lanes, and TikTok's caption-language tag (for example `de`) on `/v1/tiktok/trending?feed=local`. Null when the platform could not tell (Reddit `und`, TikTok `un`, common on short or emoji-only captions); absent where the source sends no tag. Never inferred from the text by us: that is `post.computed.language`."
                                      },
                                      "type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.type"
                                      },
                                      "content_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.content_type"
                                      },
                                      "ticker_symbols": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.ticker_symbols",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.ticker_symbols"
                                        }
                                      },
                                      "video_view_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram's legacy 3-second-view count. Historical: Instagram stopped serving it in August 2026 (removed from its web post surface along with the web play count), so fresh `/v1/instagram/post` lookups no longer carry it and no source can restore it. Use `engagement.views` (the play count) instead."
                                      },
                                      "ig_play_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram-only play count (`ig_play_count`). Since mid-July 2026 Instagram's headline play count (`engagement.views`) no longer includes Facebook crosspost views and equals this value; it is surfaced explicitly so you can tell the Instagram-only figure apart and detect any future re-divergence. For combined Instagram + Facebook reach, also fetch the Facebook crosspost via `/v1/facebook/post`. Present on `/v1/instagram/post/stats` and, since the August 2026 views fix, on `/v1/instagram/post` for video posts."
                                      },
                                      "repost_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.repost_count"
                                      },
                                      "media_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.media_type"
                                      },
                                      "text_truncated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.text_truncated"
                                      },
                                      "ip_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.ip_location"
                                      },
                                      "carousel_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.carousel_count"
                                      },
                                      "remix_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.remix_count"
                                      },
                                      "audio_cluster_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram's audio cluster for a reel, as an exact digit string: the id Instagram uses to group different uploads of the same sound. Present on `/v1/instagram/audio/reels` rows and on `/v1/instagram/profile/reels` with `include=stats`; absent on a row when it is not available and on every other surface."
                                      },
                                      "facebook_likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.likes` on this row. A post shared to Facebook arrives from some sources with its Facebook likes already folded into the Instagram count, so the share is subtracted and published here, which keeps `engagement.likes` the Instagram-only figure instagram.com shows on the post. Add the two together for the combined number. Absent when the read carried no Facebook share, and absent on a post whose owner hides the like count, because nothing can be subtracted from a null. A response that excluded a share also carries a note in `data._warnings`."
                                      },
                                      "facebook_comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.comments` on this row, the comment counterpart of `post.ext.facebook_likes`. Each leaf appears only for the count it actually changed, so a post whose likes are hidden but whose comments were reconciled carries this one alone."
                                      },
                                      "instagram_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Instagram-only play count of a video, the same figure on every Instagram endpoint. `engagement.views` keeps each endpoint's established meaning: on `/v1/instagram/profile/reels`, `/v1/instagram/audio/reels`, `/v1/instagram/search/reels` and `/v1/instagram/search/hashtag` it can include the post's Facebook cross-post views, while on `/v1/instagram/post` and `/v1/instagram/post/stats` it is Instagram-only. Read this leaf when you compare one post across endpoints. Absent on photos and when the source did not report the Instagram-only figure."
                                      },
                                      "facebook_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post part of a video's play count, the counterpart of `post.ext.instagram_views`. Present only when the source reported the Facebook part, or a combined total above the Instagram figure. Absent does not mean zero: some sources report the Instagram figure alone even for a cross-posted video."
                                      },
                                      "published_at_epoch": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Raw Unix epoch for `published_at` (seconds, or milliseconds when the upstream sent millis). Present only when the upstream sent a numeric epoch that was normalised to the ISO 8601 `published_at` string. Kept for one deprecation cycle for integrations pinned to the numeric form."
                                      },
                                      "usertags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.usertags",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.usertags"
                                        }
                                      },
                                      "coauthors": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post).",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post)."
                                        }
                                      },
                                      "music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.music"
                                      },
                                      "sponsor_tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                        }
                                      },
                                      "sponsored_disclosed": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "The platform's own disclosure that the post is paid or promotional: on Instagram the paid-partnership label (`is_paid_partnership`) or a tagged brand partner, on TikTok the label TikTok shows viewers (\"Paid partnership\", \"Commission paid\", \"Promotional content\"). `false` when the post carries the flag unset, null when it carries none. Present on `/v1/instagram/post/stats`, `/v1/instagram/search/reels` and `/v1/tiktok/search`; absent on every other endpoint."
                                      },
                                      "ai_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram only: Instagram's AI-content label on the post, as the method Instagram reports: `classifier_score_high` (Instagram detected it, shown as \"Likely made with AI\"), `ai_created` or `ai_edited` (declared or detected as made or edited with AI). Null when the post carries no AI label. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                      },
                                      "story_mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "story_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint."
                                        }
                                      },
                                      "story_reshared_posts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.location"
                                      },
                                      "media": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.media",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.media",
                                          "properties": {
                                            "type": {
                                              "type": "string",
                                              "description": "Leaf at post.ext.media.type"
                                            },
                                            "url": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.media.url"
                                            },
                                            "width": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.width"
                                            },
                                            "height": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.height"
                                            }
                                          }
                                        }
                                      },
                                      "top_comments": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.top_comments",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.top_comments",
                                          "properties": {
                                            "id": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.id"
                                            },
                                            "text": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.text"
                                            },
                                            "username": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.username"
                                            },
                                            "likes": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.top_comments.likes"
                                            },
                                            "published_at": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.published_at"
                                            }
                                          }
                                        }
                                      },
                                      "hashtags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.hashtags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.hashtags"
                                        }
                                      },
                                      "mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentions",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentions"
                                        }
                                      },
                                      "mentioned_user_ids": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentioned_user_ids",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentioned_user_ids"
                                        }
                                      },
                                      "quoted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Threads quote posts: the post this one quotes, as `{ id, url, author: { id, username }, text, media_urls, thumbnail_url }`. A quote post usually carries no caption or media of its own, and the text and video you see on the post's page belong to this attachment, by a different author. It is returned here rather than merged into `post.content`, so `content.*` always stays the outer post's own content and one account's media is never attributed to another. Absent on posts that are not quote posts."
                                      },
                                      "retweeted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.retweeted_post"
                                      },
                                      "quote_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.quote_count"
                                      },
                                      "all_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.all_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.all_media_urls"
                                        }
                                      },
                                      "reaction_counts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.reaction_counts",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.reaction_counts"
                                        }
                                      },
                                      "share_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.share_urn"
                                      },
                                      "post_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.post_type"
                                      },
                                      "activity_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.activity_id"
                                      },
                                      "published_at_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_at_precision"
                                      },
                                      "author_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_urn"
                                      },
                                      "author_headline": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_headline"
                                      },
                                      "author_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_type"
                                      },
                                      "is_repost_quote": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.is_repost_quote"
                                      },
                                      "article": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.article"
                                      },
                                      "reaction_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.reaction_type"
                                      },
                                      "download_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.download_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.download_media_urls"
                                        }
                                      },
                                      "tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.tags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.tags"
                                        }
                                      },
                                      "categoryId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryId"
                                      },
                                      "categoryTitle": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryTitle"
                                      },
                                      "topicCategories": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.topicCategories",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.topicCategories"
                                        }
                                      },
                                      "duration": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.duration"
                                      },
                                      "license": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.license"
                                      },
                                      "madeForKids": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.madeForKids"
                                      },
                                      "defaultAudioLanguage": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.defaultAudioLanguage"
                                      },
                                      "hasPaidProductPlacement": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.hasPaidProductPlacement"
                                      },
                                      "caption": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.caption"
                                      },
                                      "position": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.position"
                                      },
                                      "playlistId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlistId"
                                      },
                                      "videoOwnerChannelId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoOwnerChannelId"
                                      },
                                      "videoPublishedAt": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoPublishedAt"
                                      },
                                      "description": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.description"
                                      },
                                      "default_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.default_language"
                                      },
                                      "localizations": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.localizations"
                                      },
                                      "playlist_item_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_item_id"
                                      },
                                      "playlist_owner_channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_channel_id"
                                      },
                                      "playlist_owner_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_title"
                                      },
                                      "channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.channel_id"
                                      },
                                      "published_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_label"
                                      },
                                      "published_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.published_precision"
                                      },
                                      "title_maybe_translated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.title_maybe_translated"
                                      },
                                      "video_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.video_count"
                                      },
                                      "posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "`/v1/instagram/hashtag` only: the exact number of public posts Instagram counts under the hashtag. Live: it moves between calls minutes apart."
                                      },
                                      "commerce": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.commerce"
                                      },
                                      "on_screen_texts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.on_screen_texts",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.on_screen_texts"
                                        }
                                      },
                                      "topic_tag": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag"
                                      },
                                      "reshare_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.reshare_count"
                                      },
                                      "dsp_ids": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.dsp_ids"
                                      },
                                      "topic_tag_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag_id"
                                      },
                                      "amazon_shop_lists": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_lists",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_lists"
                                        }
                                      },
                                      "amazon_shop_trending_picks": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_trending_picks",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_trending_picks"
                                        }
                                      },
                                      "amazon_shop_curations": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_curations",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_curations"
                                        }
                                      },
                                      "amazon_shop_socials": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_socials",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.amazon_shop_socials"
                                        }
                                      },
                                      "ad": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Ad Library envelope (Facebook `adlibrary/ad` and `adlibrary/company/ads` items): page_id, currency, spend, reach_estimate, publisher_platforms, categories, targeted_or_reached_countries, cta_text, cta_type, link_url, is_active, end_date_iso, display_format, title, video_hd_url, video_sd_url. Absent on every non-ad surface."
                                      },
                                      "apple_music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.apple_music"
                                      },
                                      "feedback_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.feedback_id"
                                      },
                                      "question_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN (`/v1/naver/kin/search`) only: the question's id (Naver's `docId`), read from the row's link. Kin returns one row per answer, so several rows can share it; send `group=question` for one row per question."
                                      },
                                      "answer_no": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: which answer of the question this row is (Naver's `answerNo`), read from the row's link."
                                      },
                                      "answer_nos": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first.",
                                        "items": {
                                          "type": "integer",
                                          "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first."
                                        }
                                      },
                                      "published_at_est": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: the question's date ESTIMATED from its id (`YYYY-MM-DD`, Korea time), never a published date, so `published_at` stays null. Absent for questions older than the calibration table."
                                      },
                                      "date_basis": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "How `post.ext.published_at_est` was derived. `kin_docid_estimate`: interpolated from the question id against question pages whose posted date was read."
                                      },
                                      "event": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.event"
                                      },
                                      "trend": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Trend-board envelope: what TikTok's own trend board says about the row. On `/v1/tiktok/hashtags/popular`: `rank`, `country_code`, `period_days`, `posts` and `views` for the window (not lifetime totals), `industry` / `industry_id` / `industry_label` for the first board the hashtag was read from (null for the overall board), `boards` listing EVERY board it ranks on as `{ industry, industry_id, industry_label, rank }` in board order (so a hashtag in the top 3 overall and on an industry board shows both), `popularity_curve` as `{ date, value }` with value 0 to 100 relative to the window's peak, and `top_creators`. On `/v1/tiktok/videos/popular`: `rank`, `country_code`, `period_days`, `order_by`, `period_views`, `organic_views`, `engagement_rate`, `six_second_view_through_rate`, `content_tags`. Absent on every non-board surface."
                                      },
                                      "updated_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.updated_at"
                                      },
                                      "alt_text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.alt_text"
                                      },
                                      "board_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.board_name"
                                      }
                                    }
                                  }
                                }
                              },
                              "computed": {
                                "type": "object",
                                "description": "Server-computed analytics fields (consistent across platforms)",
                                "properties": {
                                  "engagement_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Computed engagement rate (0..1). Null when the upstream lacks enough signal."
                                  },
                                  "language": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "ISO 639-1 language code detected from the post text. Null when undetectable."
                                  },
                                  "content_category": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Keyword-classified content category (e.g. tech, food, gaming). Null when undetectable."
                                  },
                                  "estimated_reach": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Estimated reach based on views or follower count. Null when uncomputable."
                                  },
                                  "save_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at computed.save_rate"
                                  },
                                  "relevance": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Nested object: computed.relevance",
                                    "properties": {
                                      "p": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.p"
                                      },
                                      "sense": {
                                        "type": "string",
                                        "description": "Leaf at computed.relevance.sense"
                                      },
                                      "depth": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.depth"
                                      },
                                      "spam": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.spam"
                                      }
                                    }
                                  },
                                  "labels": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels"
                                  },
                                  "labels_evidence": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels_evidence"
                                  }
                                }
                              }
                            }
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/highlights",
                  "data": {
                    "items": [
                      {
                        "post": {
                          "id": "18223279177302854",
                          "url": null,
                          "content": {
                            "text": "Sample comment text (redacted).",
                            "media_urls": "https://scontent-mia5-1.cdninstagram.com/user_4c9448/t51.71878-15/553371552_1466879574367694_447362504004074224_n.jpg?stp=c0.248.640.640a_dst-jpg_e15_tt6&_nc_ht=scontent-mia5-1.cdninstagram.com&_nc_cat=102&_nc_oc=Q6cZ2gEImiK0W-OjcMwV3FiVd0jxZz3A9osrhv1NirL4GF11BxnGweTplDVx5ZLasWGVuh4&_nc_ohc=TnkcVK3vw1sQ7kNvwGwyc5V&_nc_gid=VJlMi_fqo_ahrZMFKsetbA&edm=AGW0Xe4BAAAA&ccb=7-5&oh=00_AQN7gqFgfbdTVzgK5RP9oqYa0MR2JwfxNJT0lmSnNW6OLg&oe=6AC574C1&_nc_sid=94fea1",
                            "thumbnail_url": "https://scontent-mia5-1.cdninstagram.com/user_4c9448/t51.71878-15/756700225_1653985762331725_8429300849500507026_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_ht=scontent-mia5-1.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2gEImiK0W-OjcMwV3FiVd0jxZz3A9osrhv1NirL4GF11BxnGweTplDVx5ZLasWGVuh4&_nc_ohc=-ux7gvv_RroQ7kNvwH0o7-W&_nc_gid=VJlMi_fqo_ahrZMFKsetbA&edm=AGW0Xe4BAAAA&ccb=7-5&oh=00_AQPoN3DG4J-FRw9KyZIdlBDcbiYn-T-kEKhBB3NBT4lByg&oe=6AC5837E&_nc_sid=94fea1",
                            "duration_seconds": null
                          },
                          "author": {
                            "username": "instagram",
                            "display_name": null,
                            "avatar_url": "https://example.com/avatars/user_c40407.png",
                            "verified": null
                          },
                          "engagement": {
                            "views": null,
                            "likes": null,
                            "comments": null,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": null,
                            "deleted": false
                          },
                          "published_at": null
                        },
                        "computed": {
                          "engagement_rate": null,
                          "language": null,
                          "content_category": "other",
                          "estimated_reach": null
                        }
                      },
                      {
                        "post": {
                          "id": "18612622252018257",
                          "url": null,
                          "content": {
                            "text": "Sample comment text (redacted).",
                            "media_urls": "https://scontent-mia3-1.cdninstagram.com/user_4c9448/t51.71878-15/482124655_1343736183417119_8930605826702082105_n.jpg?stp=c0.248.640.640a_dst-jpg_e15_tt6&_nc_ht=scontent-mia3-1.cdninstagram.com&_nc_cat=111&_nc_oc=Q6cZ2gEImiK0W-OjcMwV3FiVd0jxZz3A9osrhv1NirL4GF11BxnGweTplDVx5ZLasWGVuh4&_nc_ohc=7Atx9f5idIoQ7kNvwHvbDFh&_nc_gid=VJlMi_fqo_ahrZMFKsetbA&edm=AGW0Xe4BAAAA&ccb=7-5&oh=00_AQNrzk0IDowoVwAxHkySNIEbLa0JefP-U40OvBU0z3QwLw&oe=6AC59240&_nc_sid=94fea1",
                            "thumbnail_url": "https://scontent-mia5-1.cdninstagram.com/user_4c9448/t51.71878-15/755867844_1751720619182762_5430881549273743299_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_ht=scontent-mia5-1.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2gEImiK0W-OjcMwV3FiVd0jxZz3A9osrhv1NirL4GF11BxnGweTplDVx5ZLasWGVuh4&_nc_ohc=JxMqGZ35NKYQ7kNvwHfJkmW&_nc_gid=VJlMi_fqo_ahrZMFKsetbA&edm=AGW0Xe4BAAAA&ccb=7-5&oh=00_AQNDP4_7y-CJeo-roiW-812P8iDxHNJoLJ5H8Y1Wkszd9g&oe=6AC587AF&_nc_sid=94fea1",
                            "duration_seconds": null
                          },
                          "author": {
                            "username": "instagram",
                            "display_name": null,
                            "avatar_url": "https://example.com/avatars/user_c40407.png",
                            "verified": null
                          },
                          "engagement": {
                            "views": null,
                            "likes": null,
                            "comments": null,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": null,
                            "deleted": false
                          },
                          "published_at": null
                        },
                        "computed": {
                          "engagement_rate": null,
                          "language": null,
                          "content_category": null,
                          "estimated_reach": null
                        }
                      }
                    ],
                    "total": null,
                    "dropped": 0
                  },
                  "credits_used": 1,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": null,
                    "has_more": false,
                    "page_size": 7
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T13:09:21.614Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/highlight/detail": {
      "get": {
        "summary": "Get Instagram highlight detail",
        "description": "Returns the items within a specific Instagram story highlight including media URLs, thumbnails, durations, and capture timestamps. Highlights are archived story frames, so they carry no public caption and no public like, comment, or view count. Instagram shows story engagement only to the account owner, and it is never fabricated here.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_highlight_detail",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 1,
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Instagram highlight ID: the numeric id, with or without the `highlight:` prefix. Get it from `/v1/instagram/highlights`.",
            "schema": {
              "type": "string"
            },
            "example": "18067016518767507"
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "Only rows published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Rows older than it are left off each page. This list is not in date order, so the walk does not stop at the date: keep following `next_cursor`, and each page costs what a page costs even when every row on it is filtered out. A row with no date is kept. `published_after`, `start_date`, `from_date`, `publish_time` (`yesterday`, `this-week`, `this-month`, `last-3-months`, `last-6-months`) and `max_age_days` are accepted and applied as `since`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "description": "Only rows published on or before this date: YYYY-MM-DD (that whole UTC day is included) or an ISO 8601 timestamp. Newer rows are left off each page and the walk does not stop, so older pages follow. A row with no date is kept. `published_before`, `end_date` and `to_date` are accepted and applied as `until`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/highlight/detail"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of canonical post wrappers ({ post, computed })",
                          "items": {
                            "type": "object",
                            "description": "Canonical post wrapper",
                            "properties": {
                              "post": {
                                "type": "object",
                                "description": "Canonical Post object (unified across all platforms)",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "Platform-specific post ID (always a string; numeric upstream IDs are stringified)"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Direct URL to the post on the source platform"
                                  },
                                  "content": {
                                    "type": "object",
                                    "description": "Post content fields (text, media, thumbnail, duration)",
                                    "properties": {
                                      "text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Post caption, description, or text content"
                                      },
                                      "media_urls": {
                                        "type": [
                                          "string",
                                          "array",
                                          "null"
                                        ],
                                        "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels.",
                                        "items": {
                                          "type": "string",
                                          "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels."
                                        }
                                      },
                                      "thumbnail_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to thumbnail image"
                                      },
                                      "duration_seconds": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Video/clip duration in seconds (null for non-video posts)"
                                      }
                                    }
                                  },
                                  "author": {
                                    "type": "object",
                                    "description": "Subset of Author fields for the post creator",
                                    "properties": {
                                      "username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author username"
                                      },
                                      "display_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author display name"
                                      },
                                      "avatar_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to author profile picture"
                                      },
                                      "verified": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Whether the author account is verified"
                                      }
                                    }
                                  },
                                  "engagement": {
                                    "type": "object",
                                    "description": "Engagement counts",
                                    "properties": {
                                      "views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "View count (if available). For Instagram video/reels this is the play count: the headline 'Views' the IG app shows. Instagram removed per-post play counts from its public web pages in August 2026, so `GET /v1/instagram/post` now fills the count automatically from a second source within the same call: videos and reels keep a numeric `views` with no extra endpoint or workaround. Note: since mid-July 2026 Instagram's play count is Instagram-only. It no longer includes Facebook crosspost views (Meta-side change; the app UI changed identically). For combined reach, also fetch the Facebook crosspost via `/v1/facebook/post`."
                                      },
                                      "likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Like / reaction count"
                                      },
                                      "comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Comment count. Note: on `GET /v1/instagram/post` this is Instagram's `edge_media_to_parent_comment.count` (top-level comments); the IG list endpoints report the mobile `comment_count` total (includes replies). Both land on this same field."
                                      },
                                      "shares": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Share / repost / retweet count. On Instagram this is `reshare_count` (the paper-plane Share / Send count) and it exists only on Instagram's mobile surface, so it is returned by `/v1/instagram/post/stats`, `/v1/instagram/profile/reels/full`, and `/v1/instagram/profile/posts/full`. The web-sourced Instagram list and search endpoints return `null` (never fabricated)."
                                      },
                                      "saves": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Save / bookmark count. `null` on Instagram: the save count is platform-private and Instagram exposes no numeric save metric on any surface (never fabricated)."
                                      }
                                    }
                                  },
                                  "flags": {
                                    "type": "object",
                                    "description": "Boolean flags on the post",
                                    "properties": {
                                      "nsfw": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "NSFW flag (null when platform does not surface)"
                                      },
                                      "spoiler": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Spoiler flag (null when platform does not surface)"
                                      },
                                      "pinned": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Pinned-to-profile flag (null when platform does not surface)"
                                      },
                                      "deleted": {
                                        "type": "boolean",
                                        "description": "Whether the post is tombstoned (always present)"
                                      },
                                      "likes_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the creator has hidden the like count. `engagement.likes` is `null` in that case (never the platform's decoy preview number). Absent on normal posts."
                                      },
                                      "comments_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the upstream reports the comment count as hidden. `engagement.comments` is `null` in that case. Absent on normal posts."
                                      },
                                      "shares_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.shares_hidden"
                                      },
                                      "views_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.views_hidden"
                                      },
                                      "saves_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.saves_hidden"
                                      }
                                    }
                                  },
                                  "published_at": {
                                    "type": [
                                      "string",
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Post creation timestamp as an ISO 8601 UTC string. When the upstream sent a Unix epoch it is converted here and the raw epoch is preserved under `post.ext.published_at_epoch` for one deprecation cycle."
                                  },
                                  "ext": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Platform-specific passthrough fields for cross-endpoint chains (present only on platforms that surface them)",
                                    "properties": {
                                      "music_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok music/clip id (exact string): pass to `/v1/tiktok/song/videos?clipId=` to find videos using the same sound"
                                      },
                                      "matched_song_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The catalogue song TikTok matched the video's sound to, as an exact digit string. An official clip and the original sounds creators upload with it have different `music_id` values and the same `matched_song_id`, so group rows on it to count every use of one song. It is not a clipId: `/v1/tiktok/song` and `/v1/tiktok/song/videos` do not accept it. `/v1/tiktok/search/music` carries it on each sound, so a search on the song's title and artist, kept to the sounds with the same `matched_song_id`, gives the song's official sounds and their `video_count`. Absent when TikTok matched the sound to no song, and on rows served from a source that does not report the match."
                                      },
                                      "matched_song_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the song in `matched_song_id`. Absent when there is no matched song."
                                      },
                                      "matched_song_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist of the song in `matched_song_id`, as TikTok's catalogue names it. Absent when there is no matched song."
                                      },
                                      "music_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the video's own sound (`music_id`). An uploaded sound is titled like `original sound - <handle>`; the song it plays, when TikTok recognised one, is `matched_song_title`."
                                      },
                                      "music_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist TikTok shows for the video's own sound. On an original sound this is the uploader's display name, not the song's artist; use `matched_song_artist` for that."
                                      },
                                      "music_is_original": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "TikTok only. `true` when the video's sound is an original sound a creator uploaded, `false` when it is a catalogue track. Absent when the source does not say."
                                      },
                                      "author_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's platform-native numeric user id. On TikTok search and list items, pass to `/v1/tiktok/profile?user_id=` for the creator's current follower count (survives username changes). On Instagram `/v1/instagram/search/reels`, `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` items it is present on every row, accepted by `/v1/instagram/profile/country?user_id=` and `/v1/instagram/basic-profile?userId=`. On Facebook it appears when the upstream exposed a numeric actor id and no real handle."
                                      },
                                      "author_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The posting account's profile URL, so a matching post can be followed to its account. Present on `/v1/facebook/search/posts` rows: the vanity or `/people/<name>/<id>/` URL when Facebook sends one, otherwise `https://www.facebook.com/profile.php?id=<numeric id>` built from the account id. Pass it as `url` to `/v1/facebook/profile` (or to `/v1/prism/profiles` with `platform: facebook`). Null when the row names neither an account URL nor a numeric account id. Absent on other endpoints."
                                      },
                                      "author_followers": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "The creator's follower count as embedded in the search payload itself, when the search source happens to carry one. On Instagram `search/reels` it is null on a plain call, because Instagram stopped sending follower counts in its search payload in August 2026; send `include=creator` (or `country`) and it is filled from the creator's profile, 2 credits per creator looked up. It stays null when that lookup does not resolve."
                                      },
                                      "author_following": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_following"
                                      },
                                      "author_posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_posts_count"
                                      },
                                      "author_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The free text the author wrote in their profile's location field, exactly as written (for example `Johannesburg, South Africa`). It is not a country code and is not checked. Present on X tweet and reply rows; null or absent when the author left it blank."
                                      },
                                      "in_reply_to_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_id"
                                      },
                                      "in_reply_to_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_username"
                                      },
                                      "conversation_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.conversation_id"
                                      },
                                      "author_country": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's country. On Instagram it is the country the creator declares on the About this account panel, as a country name (for example `Spain`), and it is not where the post was filmed. It is present on `/v1/instagram/search/reels` when the request sends `include=creator`, `include=country` or `country`, and on `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` when it sends `include=country`, filled by looking the creator up. On YouTube rows joined with `include=channel` it is the channel's own country as an ISO 3166-1 alpha-2 code (for example `ZA`). Null when the platform publishes no country for the creator or the lookup did not resolve, and nothing is guessed; absent on a plain call."
                                      },
                                      "author_public_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact email on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public email or the lookup did not resolve; absent on a plain call."
                                      },
                                      "author_public_phone": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact phone number on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public phone or the lookup did not resolve; absent on a plain call."
                                      },
                                      "download_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "How many times the video has been saved to a device. TikTok only, and distinct from `engagement.saves`: a save keeps the video in a private collection on the platform, a download takes a copy off it, and TikTok counts the two separately. Present on TikTok post, search and post-list responses; absent everywhere else."
                                      },
                                      "region": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only: the country TikTok registers the video to, as an ISO 3166-1 alpha-2 code (normally the creator's account country when they posted). It is not the viewer's country, not the `region` you requested, and not a language. On `/v1/tiktok/trending`, `/v1/tiktok/search`, `/v1/tiktok/search/top`, `/v1/tiktok/profile/videos`, `/v1/tiktok/search/hashtag` and `/v1/tiktok/song/videos` it is how you tell which rows are from a given country: filter on it when you need only that country. A row whose source omits the country stays null. The `region` request parameter still only sets the proxy."
                                      },
                                      "subreddit": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Reddit subreddit name (search/list items): pass to `/v1/reddit/subreddit/details?subreddit=`"
                                      },
                                      "title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.title"
                                      },
                                      "selftext": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.selftext"
                                      },
                                      "upvote_ratio": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Reddit only: the share of a post's votes that are upvotes, as a fraction from 0 to 1 and usually close to 1 (six live rows measured 1, 1, 1, 0.86, 0.75, 1). Fractional despite the integer type this schema emits for every numeric leaf, the same caveat as `author.ext.average_rating`. Populated on `/v1/reddit/search` rows whose source carries it, and null everywhere else on Reddit including `/v1/reddit/post` and `/v1/reddit/subreddit`."
                                      },
                                      "flair": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.flair"
                                      },
                                      "content_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The language the platform itself tags the post with, when it sends one: Reddit's own language tag on Reddit lanes, and TikTok's caption-language tag (for example `de`) on `/v1/tiktok/trending?feed=local`. Null when the platform could not tell (Reddit `und`, TikTok `un`, common on short or emoji-only captions); absent where the source sends no tag. Never inferred from the text by us: that is `post.computed.language`."
                                      },
                                      "type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.type"
                                      },
                                      "content_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.content_type"
                                      },
                                      "ticker_symbols": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.ticker_symbols",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.ticker_symbols"
                                        }
                                      },
                                      "video_view_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram's legacy 3-second-view count. Historical: Instagram stopped serving it in August 2026 (removed from its web post surface along with the web play count), so fresh `/v1/instagram/post` lookups no longer carry it and no source can restore it. Use `engagement.views` (the play count) instead."
                                      },
                                      "ig_play_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram-only play count (`ig_play_count`). Since mid-July 2026 Instagram's headline play count (`engagement.views`) no longer includes Facebook crosspost views and equals this value; it is surfaced explicitly so you can tell the Instagram-only figure apart and detect any future re-divergence. For combined Instagram + Facebook reach, also fetch the Facebook crosspost via `/v1/facebook/post`. Present on `/v1/instagram/post/stats` and, since the August 2026 views fix, on `/v1/instagram/post` for video posts."
                                      },
                                      "repost_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.repost_count"
                                      },
                                      "media_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.media_type"
                                      },
                                      "text_truncated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.text_truncated"
                                      },
                                      "ip_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.ip_location"
                                      },
                                      "carousel_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.carousel_count"
                                      },
                                      "remix_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.remix_count"
                                      },
                                      "audio_cluster_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram's audio cluster for a reel, as an exact digit string: the id Instagram uses to group different uploads of the same sound. Present on `/v1/instagram/audio/reels` rows and on `/v1/instagram/profile/reels` with `include=stats`; absent on a row when it is not available and on every other surface."
                                      },
                                      "facebook_likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.likes` on this row. A post shared to Facebook arrives from some sources with its Facebook likes already folded into the Instagram count, so the share is subtracted and published here, which keeps `engagement.likes` the Instagram-only figure instagram.com shows on the post. Add the two together for the combined number. Absent when the read carried no Facebook share, and absent on a post whose owner hides the like count, because nothing can be subtracted from a null. A response that excluded a share also carries a note in `data._warnings`."
                                      },
                                      "facebook_comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.comments` on this row, the comment counterpart of `post.ext.facebook_likes`. Each leaf appears only for the count it actually changed, so a post whose likes are hidden but whose comments were reconciled carries this one alone."
                                      },
                                      "instagram_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Instagram-only play count of a video, the same figure on every Instagram endpoint. `engagement.views` keeps each endpoint's established meaning: on `/v1/instagram/profile/reels`, `/v1/instagram/audio/reels`, `/v1/instagram/search/reels` and `/v1/instagram/search/hashtag` it can include the post's Facebook cross-post views, while on `/v1/instagram/post` and `/v1/instagram/post/stats` it is Instagram-only. Read this leaf when you compare one post across endpoints. Absent on photos and when the source did not report the Instagram-only figure."
                                      },
                                      "facebook_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post part of a video's play count, the counterpart of `post.ext.instagram_views`. Present only when the source reported the Facebook part, or a combined total above the Instagram figure. Absent does not mean zero: some sources report the Instagram figure alone even for a cross-posted video."
                                      },
                                      "published_at_epoch": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Raw Unix epoch for `published_at` (seconds, or milliseconds when the upstream sent millis). Present only when the upstream sent a numeric epoch that was normalised to the ISO 8601 `published_at` string. Kept for one deprecation cycle for integrations pinned to the numeric form."
                                      },
                                      "usertags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.usertags",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.usertags"
                                        }
                                      },
                                      "coauthors": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post).",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post)."
                                        }
                                      },
                                      "music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.music"
                                      },
                                      "sponsor_tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                        }
                                      },
                                      "sponsored_disclosed": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "The platform's own disclosure that the post is paid or promotional: on Instagram the paid-partnership label (`is_paid_partnership`) or a tagged brand partner, on TikTok the label TikTok shows viewers (\"Paid partnership\", \"Commission paid\", \"Promotional content\"). `false` when the post carries the flag unset, null when it carries none. Present on `/v1/instagram/post/stats`, `/v1/instagram/search/reels` and `/v1/tiktok/search`; absent on every other endpoint."
                                      },
                                      "ai_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram only: Instagram's AI-content label on the post, as the method Instagram reports: `classifier_score_high` (Instagram detected it, shown as \"Likely made with AI\"), `ai_created` or `ai_edited` (declared or detected as made or edited with AI). Null when the post carries no AI label. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                      },
                                      "story_mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "story_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint."
                                        }
                                      },
                                      "story_reshared_posts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.location"
                                      },
                                      "media": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.media",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.media",
                                          "properties": {
                                            "type": {
                                              "type": "string",
                                              "description": "Leaf at post.ext.media.type"
                                            },
                                            "url": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.media.url"
                                            },
                                            "width": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.width"
                                            },
                                            "height": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.height"
                                            }
                                          }
                                        }
                                      },
                                      "top_comments": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.top_comments",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.top_comments",
                                          "properties": {
                                            "id": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.id"
                                            },
                                            "text": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.text"
                                            },
                                            "username": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.username"
                                            },
                                            "likes": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.top_comments.likes"
                                            },
                                            "published_at": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.published_at"
                                            }
                                          }
                                        }
                                      },
                                      "hashtags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.hashtags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.hashtags"
                                        }
                                      },
                                      "mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentions",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentions"
                                        }
                                      },
                                      "mentioned_user_ids": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentioned_user_ids",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentioned_user_ids"
                                        }
                                      },
                                      "quoted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Threads quote posts: the post this one quotes, as `{ id, url, author: { id, username }, text, media_urls, thumbnail_url }`. A quote post usually carries no caption or media of its own, and the text and video you see on the post's page belong to this attachment, by a different author. It is returned here rather than merged into `post.content`, so `content.*` always stays the outer post's own content and one account's media is never attributed to another. Absent on posts that are not quote posts."
                                      },
                                      "retweeted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.retweeted_post"
                                      },
                                      "quote_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.quote_count"
                                      },
                                      "all_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.all_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.all_media_urls"
                                        }
                                      },
                                      "reaction_counts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.reaction_counts",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.reaction_counts"
                                        }
                                      },
                                      "share_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.share_urn"
                                      },
                                      "post_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.post_type"
                                      },
                                      "activity_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.activity_id"
                                      },
                                      "published_at_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_at_precision"
                                      },
                                      "author_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_urn"
                                      },
                                      "author_headline": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_headline"
                                      },
                                      "author_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_type"
                                      },
                                      "is_repost_quote": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.is_repost_quote"
                                      },
                                      "article": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.article"
                                      },
                                      "reaction_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.reaction_type"
                                      },
                                      "download_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.download_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.download_media_urls"
                                        }
                                      },
                                      "tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.tags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.tags"
                                        }
                                      },
                                      "categoryId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryId"
                                      },
                                      "categoryTitle": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryTitle"
                                      },
                                      "topicCategories": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.topicCategories",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.topicCategories"
                                        }
                                      },
                                      "duration": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.duration"
                                      },
                                      "license": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.license"
                                      },
                                      "madeForKids": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.madeForKids"
                                      },
                                      "defaultAudioLanguage": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.defaultAudioLanguage"
                                      },
                                      "hasPaidProductPlacement": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.hasPaidProductPlacement"
                                      },
                                      "caption": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.caption"
                                      },
                                      "position": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.position"
                                      },
                                      "playlistId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlistId"
                                      },
                                      "videoOwnerChannelId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoOwnerChannelId"
                                      },
                                      "videoPublishedAt": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoPublishedAt"
                                      },
                                      "description": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.description"
                                      },
                                      "default_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.default_language"
                                      },
                                      "localizations": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.localizations"
                                      },
                                      "playlist_item_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_item_id"
                                      },
                                      "playlist_owner_channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_channel_id"
                                      },
                                      "playlist_owner_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_title"
                                      },
                                      "channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.channel_id"
                                      },
                                      "published_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_label"
                                      },
                                      "published_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.published_precision"
                                      },
                                      "title_maybe_translated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.title_maybe_translated"
                                      },
                                      "video_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.video_count"
                                      },
                                      "posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "`/v1/instagram/hashtag` only: the exact number of public posts Instagram counts under the hashtag. Live: it moves between calls minutes apart."
                                      },
                                      "commerce": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.commerce"
                                      },
                                      "on_screen_texts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.on_screen_texts",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.on_screen_texts"
                                        }
                                      },
                                      "topic_tag": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag"
                                      },
                                      "reshare_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.reshare_count"
                                      },
                                      "dsp_ids": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.dsp_ids"
                                      },
                                      "topic_tag_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag_id"
                                      },
                                      "amazon_shop_lists": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_lists",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_lists"
                                        }
                                      },
                                      "amazon_shop_trending_picks": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_trending_picks",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_trending_picks"
                                        }
                                      },
                                      "amazon_shop_curations": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_curations",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_curations"
                                        }
                                      },
                                      "amazon_shop_socials": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_socials",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.amazon_shop_socials"
                                        }
                                      },
                                      "ad": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Ad Library envelope (Facebook `adlibrary/ad` and `adlibrary/company/ads` items): page_id, currency, spend, reach_estimate, publisher_platforms, categories, targeted_or_reached_countries, cta_text, cta_type, link_url, is_active, end_date_iso, display_format, title, video_hd_url, video_sd_url. Absent on every non-ad surface."
                                      },
                                      "apple_music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.apple_music"
                                      },
                                      "feedback_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.feedback_id"
                                      },
                                      "question_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN (`/v1/naver/kin/search`) only: the question's id (Naver's `docId`), read from the row's link. Kin returns one row per answer, so several rows can share it; send `group=question` for one row per question."
                                      },
                                      "answer_no": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: which answer of the question this row is (Naver's `answerNo`), read from the row's link."
                                      },
                                      "answer_nos": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first.",
                                        "items": {
                                          "type": "integer",
                                          "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first."
                                        }
                                      },
                                      "published_at_est": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: the question's date ESTIMATED from its id (`YYYY-MM-DD`, Korea time), never a published date, so `published_at` stays null. Absent for questions older than the calibration table."
                                      },
                                      "date_basis": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "How `post.ext.published_at_est` was derived. `kin_docid_estimate`: interpolated from the question id against question pages whose posted date was read."
                                      },
                                      "event": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.event"
                                      },
                                      "trend": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Trend-board envelope: what TikTok's own trend board says about the row. On `/v1/tiktok/hashtags/popular`: `rank`, `country_code`, `period_days`, `posts` and `views` for the window (not lifetime totals), `industry` / `industry_id` / `industry_label` for the first board the hashtag was read from (null for the overall board), `boards` listing EVERY board it ranks on as `{ industry, industry_id, industry_label, rank }` in board order (so a hashtag in the top 3 overall and on an industry board shows both), `popularity_curve` as `{ date, value }` with value 0 to 100 relative to the window's peak, and `top_creators`. On `/v1/tiktok/videos/popular`: `rank`, `country_code`, `period_days`, `order_by`, `period_views`, `organic_views`, `engagement_rate`, `six_second_view_through_rate`, `content_tags`. Absent on every non-board surface."
                                      },
                                      "updated_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.updated_at"
                                      },
                                      "alt_text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.alt_text"
                                      },
                                      "board_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.board_name"
                                      }
                                    }
                                  }
                                }
                              },
                              "computed": {
                                "type": "object",
                                "description": "Server-computed analytics fields (consistent across platforms)",
                                "properties": {
                                  "engagement_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Computed engagement rate (0..1). Null when the upstream lacks enough signal."
                                  },
                                  "language": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "ISO 639-1 language code detected from the post text. Null when undetectable."
                                  },
                                  "content_category": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Keyword-classified content category (e.g. tech, food, gaming). Null when undetectable."
                                  },
                                  "estimated_reach": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Estimated reach based on views or follower count. Null when uncomputable."
                                  },
                                  "save_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at computed.save_rate"
                                  },
                                  "relevance": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Nested object: computed.relevance",
                                    "properties": {
                                      "p": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.p"
                                      },
                                      "sense": {
                                        "type": "string",
                                        "description": "Leaf at computed.relevance.sense"
                                      },
                                      "depth": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.depth"
                                      },
                                      "spam": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.spam"
                                      }
                                    }
                                  },
                                  "labels": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels"
                                  },
                                  "labels_evidence": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels_evidence"
                                  }
                                }
                              }
                            }
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/highlight/detail",
                  "data": {
                    "items": [
                      {
                        "post": {
                          "id": "3573813516152622297",
                          "url": "https://www.instagram.com/reel/DGYvHVDxEzZ/",
                          "content": {
                            "text": null,
                            "media_urls": "https://scontent-ord5-1.cdninstagram.com/user_2352da/v/t2/f2/m78/AQPu9r3DIgup4ayW8dDpzojNCb429I8XHU4GCPQ_wIwRJE8GMPTioEGSRY5NfpOXhKktqFuMMsHAD6a6VuXxL3KXabr1ymx4A-dILdw.mp4?_nc_cat=111&_nc_sid=5e9851&_nc_ht=scontent-ord5-1.cdninstagram.com&_nc_ohc=xnvl9o_cM0UQ7kNvwEg3Nkp&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uU1RPUlkuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6OTM4NjQ2NDYxODA2NjI4MCwiYXNzZXRfYWdlX2RheXMiOjU4NiwidmlfdXNlY2FzZV9pZCI6MTA4MjYsImR1cmF0aW9uX3MiOjQ3LCJ1cmxnZW5fc291cmNlIjoid3d3In0%3D&ccb=17-1&vs=681b3a201be0b0c8&_nc_vs=HBksFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyL0ZFNDI4ODE1QjM5QTlDMDkwRjkxMjdEMjZFNTQ4RkEzX3ZpZGVvX2Rhc2hpbml0Lm1wNBUAAsgBEgAVAhg6cGFzc3Rocm91Z2hfZXZlcnN0b3JlL0dLSWxyUnkweVR2NFV5Z0NBRjRNVXFPLVNBUUZicGt3QUFBRhUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACbQxY2Uk7ysIRUCKAJDMywXQEfzMzMzMzMYEmRhc2hfYmFzZWxpbmVfMV92MREAdegHZZSpAQA&_nc_gid=Ydgm0RTgAKdEiJ8Kh7F2Aw&_nc_ss=7a22e&_nc_zt=28&oh=00_AQNgNsoBqsWbHD67CZ10goE_ER6AelzS67CWJYmA-4Jm9A&oe=6AC17994",
                            "thumbnail_url": "https://scontent-ord5-2.cdninstagram.com/user_4c9448/t51.71878-15/481586587_9291097321007644_1710183569038278353_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=103&ig_cache_key=MzU3MzgxMzUxNjE1MjYyMjI5Nw%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IlNUT1JZLnhwaWRzLjY0MC5zZHIudmlkZW9fZGVmYXVsdF9jb3Zlcl9mcmFtZS5DMyJ9&_nc_ohc=K_Nln0cgDt4Q7kNvwGXDF0Z&_nc_oc=Adp02XO5wl6RZXZkc7wKfcW2NY9pjTOOEGsgaCPho2n87f90d_o9ZF3W6OCGMF9uIY0&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ord5-2.cdninstagram.com&_nc_gid=Ydgm0RTgAKdEiJ8Kh7F2Aw&_nc_ss=7a22e&oh=00_AQPA9GlHPTyBqorA30Z01zyR6iFe1vHiDXggh7-kKX6c4g&oe=6AC5657F",
                            "duration_seconds": 47.883
                          },
                          "author": {
                            "username": "user_81f8f6",
                            "display_name": "user_ca451b",
                            "avatar_url": "https://example.com/avatars/user_3723d3.png",
                            "verified": true
                          },
                          "engagement": {
                            "views": null,
                            "likes": null,
                            "comments": null,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": null,
                            "deleted": false
                          },
                          "published_at": "2025-02-22T19:16:21.000Z",
                          "ext": {
                            "media_type": "video",
                            "published_at_epoch": 1740251781,
                            "coauthors": []
                          }
                        },
                        "computed": {
                          "engagement_rate": null,
                          "language": null,
                          "content_category": null,
                          "estimated_reach": null
                        }
                      },
                      {
                        "post": {
                          "id": "3574665805209826888",
                          "url": "https://www.instagram.com/reel/DGbw5xGRHZI/",
                          "content": {
                            "text": null,
                            "media_urls": "https://scontent-ord5-2.cdninstagram.com/user_2352da/v/t2/f2/m78/AQOJyLyS8dbSUnIte847RsTXSX8p_zD88l0oxwOPS1uhvyezFVxOtiSsGZRZYeu793wMPdmpiP_M37_itNsNOB5UCxjt2fj_B4m3MGg.mp4?_nc_cat=107&_nc_sid=5e9851&_nc_ht=scontent-ord5-2.cdninstagram.com&_nc_ohc=qBlIq0jNuKEQ7kNvwFvI6mR&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uU1RPUlkuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTM5ODk5ODY5ODE0MjAyNiwiYXNzZXRfYWdlX2RheXMiOjU4NSwidmlfdXNlY2FzZV9pZCI6MTA4MjYsImR1cmF0aW9uX3MiOjE0LCJ1cmxnZW5fc291cmNlIjoid3d3In0%3D&ccb=17-1&vs=adbf2198c4acf8a2&_nc_vs=HBksFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyL0FDNDY3Q0ZBRTc2QjFDMDJGRTcyOEU4RDlEQTQ3RkJEX3ZpZGVvX2Rhc2hpbml0Lm1wNBUAAsgBEgAVAhg6cGFzc3Rocm91Z2hfZXZlcnN0b3JlL0dENUpvaHcwaWttb2c4TUZBQWtzU0JwcFBuWW5icGt3QUFBRhUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACaUpY3HuJj8BBUCKAJDMywXQCwQ5WBBiTcYEmRhc2hfYmFzZWxpbmVfMV92MREAdegHZZSpAQA&_nc_gid=Ydgm0RTgAKdEiJ8Kh7F2Aw&_nc_ss=7a22e&_nc_zt=28&oh=00_AQMa2NzDEd9XVRE9adtDGys7RJrIf_rFDMRXZPVSIy52PQ&oe=6AC19D44",
                            "thumbnail_url": "https://scontent-ord5-1.cdninstagram.com/user_4c9448/t51.71878-15/479737232_1405856350793820_7928432152706230890_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=111&ig_cache_key=MzU3NDY2NTgwNTIwOTgyNjg4OA%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IlNUT1JZLnhwaWRzLjY0MC5zZHIudmlkZW9fZGVmYXVsdF9jb3Zlcl9mcmFtZS5DMyJ9&_nc_ohc=MiaBd1n8FfwQ7kNvwHQ_-IH&_nc_oc=Adp4f2y5n5_gQZcW2dXJ88wkNudneOkvlAuA4eufDzKxZvzmagxjEAhi5ZJM4NkdRdo&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ord5-1.cdninstagram.com&_nc_gid=Ydgm0RTgAKdEiJ8Kh7F2Aw&_nc_ss=7a22e&oh=00_AQNN1yWVAdoqzmSCg6jh81yH1Q9bGQRVzGDEprXo44ifyg&oe=6AC582B8",
                            "duration_seconds": 14.016
                          },
                          "author": {
                            "username": "user_81f8f6",
                            "display_name": "user_ca451b",
                            "avatar_url": "https://example.com/avatars/user_3723d3.png",
                            "verified": true
                          },
                          "engagement": {
                            "views": null,
                            "likes": null,
                            "comments": null,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": null,
                            "deleted": false
                          },
                          "published_at": "2025-02-23T23:29:49.000Z",
                          "ext": {
                            "media_type": "video",
                            "published_at_epoch": 1740353389,
                            "coauthors": []
                          }
                        },
                        "computed": {
                          "engagement_rate": null,
                          "language": null,
                          "content_category": null,
                          "estimated_reach": null
                        }
                      }
                    ],
                    "total": null,
                    "dropped": 0
                  },
                  "credits_used": 1,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": null,
                    "has_more": false,
                    "page_size": 31
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T13:10:45.452Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/search/reels": {
      "get": {
        "summary": "Search Instagram posts by keyword or topic: reels about a brand, phrase or subject, with view counts (1 credit a page)",
        "description": "Searches Instagram for reels matching a keyword query. Returns matching reels with view counts (engagement.views, the play count), like counts, comment counts, and author info, sourced from the Instagram surface that still carries play counts. Each row carries post.ext.author_id (the creator's numeric user id) and post.author.username. `post.ext.author_followers` is null on a plain call, because Instagram stopped sending follower counts in its search payload in August 2026; `include=creator` fills it. Three optional params add what the search itself lacks. Each works alone, and they combine; without them the call is unchanged. `region` (ES, MX, DE, BR, KR, FR, ZA, NG, KE, AE or SA) localises the results. Instagram does not rank search by country, so the market's own name is added to your query (`fitness` becomes `fitness españa`), unless the query already names the market or is already written in the market's own script (Hangul for KR), which Instagram localises by itself. The response reports what ran in `data.region`: `{ requested, method: \"localised_query\", query_sent }`. `region` favours creators from that market but does not promise that every creator is from it; `country` does. `include=creator` adds each reel's creator card, read from the creator's About this account panel: `post.ext.author_country`, `author_followers`, `author_following`, `author_posts_count`, `author_public_email` and `author_public_phone`, plus the name, avatar and verified flag where the row lacks them. It labels rows and never drops, adds or reorders them. `include=country` adds only `post.ext.author_country`, the same value, read from the creator's panel by `post.ext.author_id` for 1 credit per creator whose country came back, and `include=creator,country` is the same call as `include=creator`. `author_country` is the country the creator declares on that panel, not where the reel was filmed. A null means Instagram does not publish one for that creator, and nothing is guessed. `country` keeps only the reels whose creator declares that market. It adds the creator card, and when `region` is not sent it localises the query for the same market. `data.country` reports `{ requested, kept, dropped_other, dropped_unknown }`: rows from another country, and rows whose creator publishes none, are dropped and counted. Topics about a place, such as travel or eSIMs, are often made by visitors, so the localised query finds fewer local creators there. A phrasing locals use helps (`esim móvil` rather than `esim`), and `country` keeps only the market's creators. `region` and `country` mean what they mean on TikTok search. Only the mechanism of `region` differs: TikTok searches from the market, while Instagram, which ignores where a search comes from, gets a localised query. Price: `region` costs nothing extra. The creator card costs 2 credits per creator looked up. Two reels by one creator are one lookup, a creator that cannot be found is refunded, and a creator looked up in the last 15 minutes is free. Time: `region` adds nothing. The creator card typically adds about 5 to 17 seconds on a fresh page (the lookups run 12 at a time), and little when the creators were looked up in the last 15 minutes. `data.hydration` reports the rows, lookups, cache hits, credits held and kept, and the time. On a `max_pages` walk each creator is looked up once, the report sums every page, and `from_earlier_pages` counts rows filled free from a creator already looked up earlier in the walk. A walk starts another page with the creator card only while at least 30 seconds of its time remain, so a `max_pages` walk with `include=creator` or `country` often stops after its first fresh page with `stopped: \"time_budget\"`; pages whose creators are cached go further. `data._warnings` carries `creator_partial` when some creators could not be read (they are refunded) and `creator_unavailable` when none could. With `country`, a page where no creator matches is `items: []` with the warning `country_no_match`, and its lookups are still billed. A page left empty only because the creator lookups failed costs nothing. `format=raw` cannot be combined with `include=creator` or `country`; that is a free 400. Note: engagement.shares carries the reel's share count on most rows; it is null where Instagram's search surface omits it, on date-filtered searches, and on pages served while that surface is unavailable. For a share count on every reel, pass a result URL to /v1/instagram/post/stats, or use /v1/instagram/profile/reels/full to get a whole creator's reels with share counts merged in. engagement.saves is null: saves are platform-private. Instagram exposes no numeric save metric on any surface, and it is never fabricated. Result ordering is Instagram's own relevance ranking and is not stable between calls: the same query re-run minutes later can return a different, overlapping set. Rank on engagement.views client-side rather than relying on result order, and deduplicate by post.id across pages. Note on date_posted: filtered searches are served by the only Instagram surface that offers a date filter, and that surface no longer carries play counts, so engagement.views is null when date_posted is set. If you need both a date window and view counts, omit date_posted and filter on published_at yourself. Pagination: forward `pagination.next_cursor` back as `cursor` and keep calling while `pagination.has_more` is true. Page 1 holds up to 30 reels, and each later page is filled with up to 30 reels the walk has not returned, usually 25 or more. Once Instagram's results for the query run out, the walk ends with `has_more: false` on a shorter page, or on an empty `items` list charged 0 credits. A short or empty page that still says `has_more: true` is not the end (an empty one costs 0 credits), so keep going while `has_more` is true. Follow `next_cursor` in preference to requesting page numbers yourself: the cursor carries the reels already delivered, so repeats are dropped and a page with nothing new is not charged, while a bare `page=3` can return reels from an earlier page. A query with no matches returns an empty list rather than an error. A short keyword query such as `esim europa` usually pages with view counts on every page. A long phrase or a question often matches only on a surface that returns one page with view counts, so its later pages come back with engagement.views null. Note that a date-filtered search draws on a much smaller pool of about 110 reels: a page holds about 30 and the walk ends after about four pages, against far greater depth when date_posted is omitted. On a reel also posted to Facebook, `engagement.views` can include its Facebook views: `post.ext.instagram_views` is the Instagram-only figure, the same on every Instagram endpoint, and `post.ext.facebook_views` is the Facebook part when the source reports it.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_search_reels",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 1,
        "x-credit-cost-min": 1,
        "x-credit-cost-max": 69,
        "x-credit-cost-formula": "1 credit per page on a plain call or with `region`; `include=creator` or `country` makes it up to 61 (1 plus 2 per creator looked up). `region` costs nothing extra. `include=country` makes it up to 31: 1 extra credit per creator whose declared country came back, refunded for a creator who publishes none or cannot be found. `include=creator` adds 2 credits per creator looked up: it holds 60 extra credits for a full page of 30 and refunds every creator it did not look up or could not find. Two reels by one creator are one lookup, a creator looked up in the last 15 minutes is free, and on a `max_pages` walk each creator is looked up and billed once. `country` runs the same creator lookup, because it needs each creator's declared country, at the same price, charged for every creator looked up, kept or not; `data.hydration.implied_by` says so on the response. `include=creator,country` is priced as `include=creator` alone, because the creator card already carries the country. Relevance against your query (by default, or with relevance=) is free. Adding relevant_to= holds 4 extra credits and refunds down to 1 credit per started 25 rows that were newly judged: rows already judged for the same topic are free, a page where nothing could be judged refunds the whole extra, and a cached page is free. The default labels (sponsored, intent, niche) are free. label=mention, quality, ai_style, ai_written, injection, or label=intent with offer=, holds 4 extra credits and refunds down to 1 credit per started 25 posts that were newly judged: posts already labelled are free, a page where nothing could be judged refunds the whole extra, and a cached page is free. With `max_pages`, `max_items` or `max_credits`, each page walked is billed at this price (a cached page is free), and `max_credits` caps the total. With `seen`, a page's price falls with its share of rows you already received under that id; credits for joined data (`include=`) are never discounted.",
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Search keyword or phrase to find Instagram reels",
            "schema": {
              "type": "string"
            },
            "example": "workout routine"
          },
          {
            "name": "date_posted",
            "in": "query",
            "required": false,
            "description": "Date posted",
            "schema": {
              "type": "string",
              "enum": [
                "last-week",
                "last-month",
                "last-year"
              ]
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "The page number to return. Native upstream cursor param. Send the universal `cursor` instead: the API maps it to this name for you.",
            "deprecated": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "region",
            "in": "query",
            "required": false,
            "description": "Two-letter market code (ES, MX, DE, BR, KR, FR, ZA, NG, KE, AE, SA) to localise the results. Instagram does not rank search by country, so the market's own name is appended to your query (`fitness` with `ES` searches `fitness españa`), unless the query already names the market or is already written in the market's own script (Hangul for KR), which Instagram localises by itself. The query actually searched is returned in `data.region.query_sent`. It favours creators from the market but does not promise that every creator is from it; send `country` for that. For a topic about a place, such as eSIMs or travel, a phrasing locals use works better (`esim móvil` rather than `esim`). Same price as a plain call. Only these markets are supported; any other code is refused with the list, at no charge. A typo is a free 400.",
            "schema": {
              "type": "string",
              "enum": [
                "ES",
                "MX",
                "DE",
                "BR",
                "KR",
                "FR",
                "ZA",
                "NG",
                "KE",
                "AE",
                "SA"
              ]
            }
          },
          {
            "name": "include",
            "in": "query",
            "required": false,
            "description": "Send `creator` to add each reel's creator card, read from the creator's About this account panel: `post.ext.author_country`, `author_followers`, `author_following`, `author_posts_count`, `author_public_email` and `author_public_phone`, plus the creator's name, avatar and verified flag where the row lacks them. `author_country` is the country the creator declares there, not where the reel was filmed; it is null when Instagram does not publish one, and nothing is guessed. 2 extra credits per creator looked up; two reels by one creator cost one lookup, a creator that cannot be found is refunded, and a creator looked up in the last 15 minutes is free. Send `country` for the declared country alone (`post.ext.author_country`, the same value): 1 extra credit per creator whose country came back, refunded for a creator who publishes none or cannot be found, and free for a creator looked up in the last 30 days, with no counts or contact. `creator,country` is the same call as `creator`. A typo is a free 400.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "description": "Two-letter market code (ES, MX, DE, BR, KR, FR, ZA, NG, KE, AE, SA) to keep only reels whose creator is based in that market. Costs up to 61 credits a page, not 1: 1 credit plus 2 per creator looked up, kept or not, because the country is read from each creator's own profile (`post.ext.author_country`). It therefore adds the creator card (`include=creator`, reported as `data.hydration.implied_by: \"country\"`) and, when `region` is not sent, localises the query for the same market. To localise without the lookups, send `region` alone (1 credit). Rows from another country, or whose creator publishes none, are dropped and counted in `data.country` (`kept`, `dropped_other`, `dropped_unknown`); kept rows keep their order. When no row matches, the page is `items: []` with the warning `country_no_match`, and the lookups are still billed. A page left empty only because the creator lookups failed costs nothing. Works with `max_pages`. A typo is a free 400.",
            "schema": {
              "type": "string",
              "enum": [
                "ES",
                "MX",
                "DE",
                "BR",
                "KR",
                "FR",
                "ZA",
                "NG",
                "KE",
                "AE",
                "SA"
              ]
            }
          },
          {
            "name": "relevance",
            "in": "query",
            "required": false,
            "description": "Optional. Without this param every row already carries computed.relevance against your query, free ({ p, sense, depth, spam }: is this row about what your query means, or a different thing that shares its words?), and nothing is dropped or reordered. score asks for it explicitly and waits for every row; filter also drops the rows that are not about your query, and lists their ids in data.relevance.dropped_ids. Your query is the topic; nothing to configure. A row that could not be judged is never dropped and carries relevance: null. Pagination is unchanged, so a filtered page can hold fewer rows. Free with your query as the topic; with relevant_to it adds 1 credit per started 25 newly judged rows (rows already judged for the same topic are free, and so is a cached page).",
            "schema": {
              "type": "string",
              "enum": [
                "score",
                "filter"
              ]
            }
          },
          {
            "name": "relevance_threshold",
            "in": "query",
            "required": false,
            "description": "Optional, only with relevance. The probability (0 to 1) a row must reach to be kept by relevance=filter. Default 0.5. Lower keeps more rows, higher keeps fewer.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "relevant_to",
            "in": "query",
            "required": false,
            "description": "Optional, only with relevance. Up to 200 characters describing what you mean, used as the topic instead of the query. Use it when the query is ambiguous, for example query=cleopatra with relevant_to=Cleopatra, the IGT slot game.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "judgments",
            "in": "query",
            "required": false,
            "description": "Optional, on (the default) or off. By default every row gains free SocialCrawl judgments (computed.labels, and computed.relevance on search endpoints), reported in data.labels (mode default) and data.relevance (origin default), each with a status (complete, partial or skipped) and pending: the rows still being judged when the page was sent, which carry null now and are filled on your next call or cached read. Default judgments never add credits, never change an existing field, and never drop or reorder a row. off returns the page exactly as before, with none of those keys. label=none does the same.",
            "schema": {
              "type": "string",
              "enum": [
                "on",
                "off"
              ]
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Optional. When 1, return a cost preview for this labelled or relevance-filtered request without fetching the page or judging any row. data.estimate reports rows_expected, rows_cached, label_credits_min, label_credits_max and base_credits. 0 credits charged.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ]
            }
          },
          {
            "name": "fit",
            "in": "query",
            "required": false,
            "description": "Optional. When goal, keep the rows and fields needed for the goal you pass in goal= (plus any that are uncertain, and the first and last), and replace the rest with a stub. data.held_back lists the held ids and a recall id that re-reads the full page from cache at no extra charge. Without this param the page is unchanged.",
            "schema": {
              "type": "string",
              "enum": [
                "goal"
              ]
            }
          },
          {
            "name": "goal",
            "in": "query",
            "required": false,
            "description": "Required by fit=goal. What you are trying to do, in your own words, up to 300 characters.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fit_tokens",
            "in": "query",
            "required": false,
            "description": "Optional, only with fit=goal. Soft cap on how much of the page to keep, in tokens. Uncertain blocks and the first and last block are kept even if they exceed it.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "label",
            "in": "query",
            "required": false,
            "description": "Optional CSV of SocialCrawl labels to add to every post. Without this param every page already carries sponsored, intent and niche, free; label= adds the labels you name to them (the defaults keep running). sponsored, intent and niche are free when asked for too; mention, quality, ai_style, intent with offer=, and injection add 1 credit per started 25 newly judged posts. judgments=off (or label=none) turns the default labels off. sponsored: is the post a paid or gifted promotion (p, 0 to 1), did it carry a disclosure marker such as #ad or 광고 (disclosed), is it likely paid with no marker (undisclosed), and which of the accounts it mentions does it promote (brand, or null). These are signals to review, never a finding. mention (needs brand=): is the post about that brand rather than something that shares its name (about_brand, 0 to 1), how it feels about the brand on five levels (sentiment_level 0 to 4 and sentiment_score 0 to 1, null when the post is not about the brand), is it sarcastic, which aspect it talks about (taste_or_quality, price_or_value, availability_or_delivery, health_or_safety, advertising_or_campaign, customer_service, none), and did the author buy or use it (first_hand). intent: what the author is mainly doing (label: asking_for_recommendation, comparing_options, switching_away, complaining, promoting, news_or_discussion, other, or null when unsure, with confidence), whether they read as a potential buyer rather than a seller (buyer, seller), how pressing the need is (urgency, 0 to 3), and, when you pass offer=, whether your offer would plausibly help them (fits_offer). niche: which of the 33 niches of the published taxonomy sc-niche-v1 the caption belongs to, or personal_no_niche, or other (label, confidence, taxonomy), with label null when the caption is too thin to tell or the pick is unsure. It reads the caption only, not the video. quality: how much checkable detail the caption carries (fact_density 0 to 3), whether it mainly asks for likes, replies, shares, follows or tags (engagement_bait, 0 to 1), whether it is written to provoke anger as a way to get engagement (rage_bait, 0 to 1; about the writing, never the side taken), whether it only repeats someone else's news or view (secondhand, 0 to 1), and what the post is mainly doing (post_aim: inform, opinion, sell, entertain, provoke, other). exclude=engagement_bait drops posts whose engagement_bait is 0.8 or higher. ai_style: writing patterns common in AI-generated text, judged on the text alone. It does not say who wrote the post, and a person who writes in this style is flagged too. Six patterns are judged, each a probability (0 to 1): binary_contrast (\"This is not X. It's Y.\"), faux_insight (\"Here's what nobody tells you\" and throat-clearing openers), colon_reveal (\"The best part: it learns.\"), profound_kicker (ends on an aphorism or mic-drop line), puffery (\"marks a pivotal moment\", \"highlighting the importance of\") and rhetorical_setup (\"What if I told you\", a question the post answers itself, \"Not a X. Not a Y. A Z.\"). Four are counted in the text: slop_words (words and phrases such as delve, leverage, robust, game changer, at the end of the day), em_dashes, emoji_bullets (lines that start with an emoji or a symbol bullet) and one_line_paragraphs (paragraphs that are one short line). pattern_count is how many patterns are present (a judged pattern at 0.8 or higher, slop_words 1 or more, em_dashes 2 or more, emoji_bullets 2 or more, one_line_paragraphs 5 or more) and markers lists their names, comma-separated. A post with less than about eight words of text is only counted, with every judged pattern 0. The judged patterns read the first 400 and the last 150 characters of a long post, and the counts read the whole post. exclude=ai_style drops posts with 2 or more patterns. ai_written: how likely the post was written by an AI model, from SocialCrawl's own text classifier, reading the opening of the post (about 1,000 characters): p (0 to 1, calibrated), level (likely (p 0.95 or higher), possible (p 0.71 or higher) or unlikely) and model (the model name; a new name means a new scale). A post under 8 words is too short to read: p null, level too_short. It is a probability, not proof: a person can be flagged and an AI-written post can pass, and the shorter the post the less certain it is. exclude=ai_written drops likely posts. injection flags text that addresses an AI system and tries to direct it (flagged, p); it never drops or rewrites a row. A post that could not be judged carries labels: null. Posts already labelled for anyone are free, and so is a cached page. data.labels reports what was judged and billed.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "exclude",
            "in": "query",
            "required": false,
            "description": "Optional CSV (engagement_bait, ai_style, ai_written). engagement_bait, only with label=quality, drops posts whose engagement_bait probability is 0.8 or higher. ai_style, only with label=ai_style, drops posts that show 2 or more of its writing patterns (pattern_count 2 or higher). ai_written, only with label=ai_written, drops posts whose level is likely (p 0.95 or higher), or whose p reaches your ai_written_threshold; a post too short to read is never dropped. Dropped posts are listed in data.labels.dropped_ids. A post that could not be judged is never dropped.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ai_written_threshold",
            "in": "query",
            "required": false,
            "description": "Optional, only with label=ai_written and exclude=ai_written. The p (0 to 1) at which exclude=ai_written drops a post. Default 0.95 (level likely). 0.71 also drops possible posts: more AI posts go, and more posts by people with them.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "brand",
            "in": "query",
            "required": false,
            "description": "Required by label=mention, ignored otherwise. The brand or product the posts are judged against, up to 300 characters, for example brand=Buldak. Without it label=mention is skipped with the warning label_mention_needs_brand and is not billed.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "brand_description",
            "in": "query",
            "required": false,
            "description": "Optional, with label=mention. One plain sentence saying what the brand is, for example brand_description=Samyang's spicy instant noodle brand. Use it when the name is also an ordinary word or another company's name.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "offer",
            "in": "query",
            "required": false,
            "description": "Optional, with label=intent. One or two plain sentences saying what you sell, up to 300 characters, for example offer=A web design agency that builds websites for small businesses. Adds fits_offer to every post; without it fits_offer is null.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "label_evidence",
            "in": "query",
            "required": false,
            "description": "Optional, only with label=. When 1, every labelled row also carries computed.labels_evidence.<preset> = { quote, sentence_index }: the sentence in the row that most clearly shows the label, copied verbatim. Absent or null when no single sentence shows it.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ]
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "Only rows published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Rows older than it are left off each page. This list is not in date order, so the walk does not stop at the date: keep following `next_cursor`, and each page costs what a page costs even when every row on it is filtered out. A row with no date is kept. `published_after`, `start_date`, `from_date`, `publish_time` (`yesterday`, `this-week`, `this-month`, `last-3-months`, `last-6-months`) and `max_age_days` are accepted and applied as `since`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "description": "Only rows published on or before this date: YYYY-MM-DD (that whole UTC day is included) or an ISO 8601 timestamp. Newer rows are left off each page and the walk does not stop, so older pages follow. A row with no date is kept. `published_before`, `end_date` and `to_date` are accepted and applied as `until`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "min_views",
            "in": "query",
            "required": false,
            "description": "Keep only rows with at least this many views (`post.engagement.views`). A row whose view count is unknown is discarded, so every returned row meets the floor. Filtering runs on our side after each page is fetched, so every page walked is billed as usual; `data.walk.discarded` counts what was removed and why. Each page is its own entry in `GET /v1/credits/transactions`, under the page's request id listed in `data.walk.request_ids`.",
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          },
          {
            "name": "max_age_days",
            "in": "query",
            "required": false,
            "description": "Keep only rows published within this many days (`post.published_at`), 1 to 3650. A row with no date is discarded. Filtering runs on our side after each page is fetched, so every page walked is billed as usual; `data.walk.discarded` counts what was removed and why. Each page is its own entry in `GET /v1/credits/transactions`, under the page's request id listed in `data.walk.request_ids`.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 3650
            }
          },
          {
            "name": "sort_rows",
            "in": "query",
            "required": false,
            "description": "`views`: return the kept rows ordered by view count, highest first, across every page walked. Rows without a view count go last.",
            "schema": {
              "type": "string",
              "enum": [
                "views"
              ]
            }
          },
          {
            "name": "max_pages",
            "in": "query",
            "required": false,
            "description": "1 to 50 (default 1, or 50 when `max_items` or `max_credits` is sent). Walk up to this many pages in one call and return the rows from all of them (after any filter). Each page walked is billed exactly as one call to this endpoint (a cached page is free) and counts against your rate limit; its charge and any refund are recorded under the page's own request id, listed in `data.walk.request_ids`. The walk stops early at the last page, or when the request's time budget runs low; `data.walk.stopped` says why (`end`, `max_pages`, `max_items`, `max_credits`, `time_budget`, `page_error`) and `pagination.next_cursor` continues from where it stopped.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "max_items",
            "in": "query",
            "required": false,
            "description": "1 to 5000. Get more in one call: keep walking pages until the response holds at least this many rows (after any filter), then stop with `data.walk.stopped: \"max_items\"`. The last page is returned whole (it was billed), so `data.items` can hold up to one page more than this, and `pagination.next_cursor` resumes right after it without skipping a row. Walks up to 50 pages unless `max_pages` says fewer; each page is billed as one call (a cached page is free). Add `max_credits` to cap the spend. A long walk can stop on the time budget first (`\"time_budget\"`): send the returned cursor with the same params to continue.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5000
            }
          },
          {
            "name": "max_credits",
            "in": "query",
            "required": false,
            "description": "1 to 100000. The most this call may spend, across every page it walks. A page starts only while the credits already spent plus that page's price (or, when higher, the most any page of this walk has cost) still fit, so the call never goes past it; the walk then stops with `data.walk.stopped: \"max_credits\"` and the cursor to resume. Sent alone, it walks as far as the budget goes (up to 50 pages). A value below the price of one page is a free 400 whose `error.details.page_credits` names that price. Credits a row join (`include=`) adds are known only once a page has run, so page 1 is checked against its own price.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100000
            }
          },
          {
            "name": "seen",
            "in": "query",
            "required": false,
            "description": "An id you choose (1 to 64 letters, digits, `.`, `_` or `-`). Rows your account already received under the same `seen` id are removed from the page, and the page price falls with the share of repeats: page credits x new rows / rows on the page, rounded up, so a page of nothing but repeats is free. Only the page's own price is discounted: credits for joined data (`include=`) are charged only for rows you have not received, and are never discounted. The memory lasts 24 hours from the last call that used the id, holds row ids only, and is private to your account. Use one id across a set of related searches; `data.walk.repeats` counts what was removed.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Universal pagination cursor. Send `pagination.next_cursor` from the previous response back verbatim: the API maps it to this endpoint's native `page` (page style). You never construct, decode, or look up a cursor. Omit it for page 1.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/search/reels"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of canonical post wrappers ({ post, computed })",
                          "items": {
                            "type": "object",
                            "description": "Canonical post wrapper",
                            "properties": {
                              "post": {
                                "type": "object",
                                "description": "Canonical Post object (unified across all platforms)",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "Platform-specific post ID (always a string; numeric upstream IDs are stringified)"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Direct URL to the post on the source platform"
                                  },
                                  "content": {
                                    "type": "object",
                                    "description": "Post content fields (text, media, thumbnail, duration)",
                                    "properties": {
                                      "text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Post caption, description, or text content"
                                      },
                                      "media_urls": {
                                        "type": [
                                          "string",
                                          "array",
                                          "null"
                                        ],
                                        "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels.",
                                        "items": {
                                          "type": "string",
                                          "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels."
                                        }
                                      },
                                      "thumbnail_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to thumbnail image"
                                      },
                                      "duration_seconds": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Video/clip duration in seconds (null for non-video posts)"
                                      }
                                    }
                                  },
                                  "author": {
                                    "type": "object",
                                    "description": "Subset of Author fields for the post creator",
                                    "properties": {
                                      "username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author username"
                                      },
                                      "display_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author display name"
                                      },
                                      "avatar_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to author profile picture"
                                      },
                                      "verified": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Whether the author account is verified"
                                      }
                                    }
                                  },
                                  "engagement": {
                                    "type": "object",
                                    "description": "Engagement counts",
                                    "properties": {
                                      "views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "View count (if available). For Instagram video/reels this is the play count: the headline 'Views' the IG app shows. Instagram removed per-post play counts from its public web pages in August 2026, so `GET /v1/instagram/post` now fills the count automatically from a second source within the same call: videos and reels keep a numeric `views` with no extra endpoint or workaround. Note: since mid-July 2026 Instagram's play count is Instagram-only. It no longer includes Facebook crosspost views (Meta-side change; the app UI changed identically). For combined reach, also fetch the Facebook crosspost via `/v1/facebook/post`."
                                      },
                                      "likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Like / reaction count"
                                      },
                                      "comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Comment count. Note: on `GET /v1/instagram/post` this is Instagram's `edge_media_to_parent_comment.count` (top-level comments); the IG list endpoints report the mobile `comment_count` total (includes replies). Both land on this same field."
                                      },
                                      "shares": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Share / repost / retweet count. On Instagram this is `reshare_count` (the paper-plane Share / Send count) and it exists only on Instagram's mobile surface, so it is returned by `/v1/instagram/post/stats`, `/v1/instagram/profile/reels/full`, and `/v1/instagram/profile/posts/full`. The web-sourced Instagram list and search endpoints return `null` (never fabricated)."
                                      },
                                      "saves": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Save / bookmark count. `null` on Instagram: the save count is platform-private and Instagram exposes no numeric save metric on any surface (never fabricated)."
                                      }
                                    }
                                  },
                                  "flags": {
                                    "type": "object",
                                    "description": "Boolean flags on the post",
                                    "properties": {
                                      "nsfw": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "NSFW flag (null when platform does not surface)"
                                      },
                                      "spoiler": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Spoiler flag (null when platform does not surface)"
                                      },
                                      "pinned": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Pinned-to-profile flag (null when platform does not surface)"
                                      },
                                      "deleted": {
                                        "type": "boolean",
                                        "description": "Whether the post is tombstoned (always present)"
                                      },
                                      "likes_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the creator has hidden the like count. `engagement.likes` is `null` in that case (never the platform's decoy preview number). Absent on normal posts."
                                      },
                                      "comments_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the upstream reports the comment count as hidden. `engagement.comments` is `null` in that case. Absent on normal posts."
                                      },
                                      "shares_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.shares_hidden"
                                      },
                                      "views_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.views_hidden"
                                      },
                                      "saves_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.saves_hidden"
                                      }
                                    }
                                  },
                                  "published_at": {
                                    "type": [
                                      "string",
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Post creation timestamp as an ISO 8601 UTC string. When the upstream sent a Unix epoch it is converted here and the raw epoch is preserved under `post.ext.published_at_epoch` for one deprecation cycle."
                                  },
                                  "ext": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Platform-specific passthrough fields for cross-endpoint chains (present only on platforms that surface them)",
                                    "properties": {
                                      "music_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok music/clip id (exact string): pass to `/v1/tiktok/song/videos?clipId=` to find videos using the same sound"
                                      },
                                      "matched_song_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The catalogue song TikTok matched the video's sound to, as an exact digit string. An official clip and the original sounds creators upload with it have different `music_id` values and the same `matched_song_id`, so group rows on it to count every use of one song. It is not a clipId: `/v1/tiktok/song` and `/v1/tiktok/song/videos` do not accept it. `/v1/tiktok/search/music` carries it on each sound, so a search on the song's title and artist, kept to the sounds with the same `matched_song_id`, gives the song's official sounds and their `video_count`. Absent when TikTok matched the sound to no song, and on rows served from a source that does not report the match."
                                      },
                                      "matched_song_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the song in `matched_song_id`. Absent when there is no matched song."
                                      },
                                      "matched_song_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist of the song in `matched_song_id`, as TikTok's catalogue names it. Absent when there is no matched song."
                                      },
                                      "music_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the video's own sound (`music_id`). An uploaded sound is titled like `original sound - <handle>`; the song it plays, when TikTok recognised one, is `matched_song_title`."
                                      },
                                      "music_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist TikTok shows for the video's own sound. On an original sound this is the uploader's display name, not the song's artist; use `matched_song_artist` for that."
                                      },
                                      "music_is_original": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "TikTok only. `true` when the video's sound is an original sound a creator uploaded, `false` when it is a catalogue track. Absent when the source does not say."
                                      },
                                      "author_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's platform-native numeric user id. On TikTok search and list items, pass to `/v1/tiktok/profile?user_id=` for the creator's current follower count (survives username changes). On Instagram `/v1/instagram/search/reels`, `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` items it is present on every row, accepted by `/v1/instagram/profile/country?user_id=` and `/v1/instagram/basic-profile?userId=`. On Facebook it appears when the upstream exposed a numeric actor id and no real handle."
                                      },
                                      "author_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The posting account's profile URL, so a matching post can be followed to its account. Present on `/v1/facebook/search/posts` rows: the vanity or `/people/<name>/<id>/` URL when Facebook sends one, otherwise `https://www.facebook.com/profile.php?id=<numeric id>` built from the account id. Pass it as `url` to `/v1/facebook/profile` (or to `/v1/prism/profiles` with `platform: facebook`). Null when the row names neither an account URL nor a numeric account id. Absent on other endpoints."
                                      },
                                      "author_followers": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "The creator's follower count as embedded in the search payload itself, when the search source happens to carry one. On Instagram `search/reels` it is null on a plain call, because Instagram stopped sending follower counts in its search payload in August 2026; send `include=creator` (or `country`) and it is filled from the creator's profile, 2 credits per creator looked up. It stays null when that lookup does not resolve."
                                      },
                                      "author_following": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_following"
                                      },
                                      "author_posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_posts_count"
                                      },
                                      "author_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The free text the author wrote in their profile's location field, exactly as written (for example `Johannesburg, South Africa`). It is not a country code and is not checked. Present on X tweet and reply rows; null or absent when the author left it blank."
                                      },
                                      "in_reply_to_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_id"
                                      },
                                      "in_reply_to_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_username"
                                      },
                                      "conversation_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.conversation_id"
                                      },
                                      "author_country": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's country. On Instagram it is the country the creator declares on the About this account panel, as a country name (for example `Spain`), and it is not where the post was filmed. It is present on `/v1/instagram/search/reels` when the request sends `include=creator`, `include=country` or `country`, and on `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` when it sends `include=country`, filled by looking the creator up. On YouTube rows joined with `include=channel` it is the channel's own country as an ISO 3166-1 alpha-2 code (for example `ZA`). Null when the platform publishes no country for the creator or the lookup did not resolve, and nothing is guessed; absent on a plain call."
                                      },
                                      "author_public_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact email on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public email or the lookup did not resolve; absent on a plain call."
                                      },
                                      "author_public_phone": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact phone number on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public phone or the lookup did not resolve; absent on a plain call."
                                      },
                                      "download_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "How many times the video has been saved to a device. TikTok only, and distinct from `engagement.saves`: a save keeps the video in a private collection on the platform, a download takes a copy off it, and TikTok counts the two separately. Present on TikTok post, search and post-list responses; absent everywhere else."
                                      },
                                      "region": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only: the country TikTok registers the video to, as an ISO 3166-1 alpha-2 code (normally the creator's account country when they posted). It is not the viewer's country, not the `region` you requested, and not a language. On `/v1/tiktok/trending`, `/v1/tiktok/search`, `/v1/tiktok/search/top`, `/v1/tiktok/profile/videos`, `/v1/tiktok/search/hashtag` and `/v1/tiktok/song/videos` it is how you tell which rows are from a given country: filter on it when you need only that country. A row whose source omits the country stays null. The `region` request parameter still only sets the proxy."
                                      },
                                      "subreddit": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Reddit subreddit name (search/list items): pass to `/v1/reddit/subreddit/details?subreddit=`"
                                      },
                                      "title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.title"
                                      },
                                      "selftext": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.selftext"
                                      },
                                      "upvote_ratio": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Reddit only: the share of a post's votes that are upvotes, as a fraction from 0 to 1 and usually close to 1 (six live rows measured 1, 1, 1, 0.86, 0.75, 1). Fractional despite the integer type this schema emits for every numeric leaf, the same caveat as `author.ext.average_rating`. Populated on `/v1/reddit/search` rows whose source carries it, and null everywhere else on Reddit including `/v1/reddit/post` and `/v1/reddit/subreddit`."
                                      },
                                      "flair": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.flair"
                                      },
                                      "content_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The language the platform itself tags the post with, when it sends one: Reddit's own language tag on Reddit lanes, and TikTok's caption-language tag (for example `de`) on `/v1/tiktok/trending?feed=local`. Null when the platform could not tell (Reddit `und`, TikTok `un`, common on short or emoji-only captions); absent where the source sends no tag. Never inferred from the text by us: that is `post.computed.language`."
                                      },
                                      "type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.type"
                                      },
                                      "content_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.content_type"
                                      },
                                      "ticker_symbols": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.ticker_symbols",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.ticker_symbols"
                                        }
                                      },
                                      "video_view_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram's legacy 3-second-view count. Historical: Instagram stopped serving it in August 2026 (removed from its web post surface along with the web play count), so fresh `/v1/instagram/post` lookups no longer carry it and no source can restore it. Use `engagement.views` (the play count) instead."
                                      },
                                      "ig_play_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram-only play count (`ig_play_count`). Since mid-July 2026 Instagram's headline play count (`engagement.views`) no longer includes Facebook crosspost views and equals this value; it is surfaced explicitly so you can tell the Instagram-only figure apart and detect any future re-divergence. For combined Instagram + Facebook reach, also fetch the Facebook crosspost via `/v1/facebook/post`. Present on `/v1/instagram/post/stats` and, since the August 2026 views fix, on `/v1/instagram/post` for video posts."
                                      },
                                      "repost_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.repost_count"
                                      },
                                      "media_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.media_type"
                                      },
                                      "text_truncated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.text_truncated"
                                      },
                                      "ip_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.ip_location"
                                      },
                                      "carousel_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.carousel_count"
                                      },
                                      "remix_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.remix_count"
                                      },
                                      "audio_cluster_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram's audio cluster for a reel, as an exact digit string: the id Instagram uses to group different uploads of the same sound. Present on `/v1/instagram/audio/reels` rows and on `/v1/instagram/profile/reels` with `include=stats`; absent on a row when it is not available and on every other surface."
                                      },
                                      "facebook_likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.likes` on this row. A post shared to Facebook arrives from some sources with its Facebook likes already folded into the Instagram count, so the share is subtracted and published here, which keeps `engagement.likes` the Instagram-only figure instagram.com shows on the post. Add the two together for the combined number. Absent when the read carried no Facebook share, and absent on a post whose owner hides the like count, because nothing can be subtracted from a null. A response that excluded a share also carries a note in `data._warnings`."
                                      },
                                      "facebook_comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.comments` on this row, the comment counterpart of `post.ext.facebook_likes`. Each leaf appears only for the count it actually changed, so a post whose likes are hidden but whose comments were reconciled carries this one alone."
                                      },
                                      "instagram_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Instagram-only play count of a video, the same figure on every Instagram endpoint. `engagement.views` keeps each endpoint's established meaning: on `/v1/instagram/profile/reels`, `/v1/instagram/audio/reels`, `/v1/instagram/search/reels` and `/v1/instagram/search/hashtag` it can include the post's Facebook cross-post views, while on `/v1/instagram/post` and `/v1/instagram/post/stats` it is Instagram-only. Read this leaf when you compare one post across endpoints. Absent on photos and when the source did not report the Instagram-only figure."
                                      },
                                      "facebook_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post part of a video's play count, the counterpart of `post.ext.instagram_views`. Present only when the source reported the Facebook part, or a combined total above the Instagram figure. Absent does not mean zero: some sources report the Instagram figure alone even for a cross-posted video."
                                      },
                                      "published_at_epoch": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Raw Unix epoch for `published_at` (seconds, or milliseconds when the upstream sent millis). Present only when the upstream sent a numeric epoch that was normalised to the ISO 8601 `published_at` string. Kept for one deprecation cycle for integrations pinned to the numeric form."
                                      },
                                      "usertags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.usertags",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.usertags"
                                        }
                                      },
                                      "coauthors": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post).",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post)."
                                        }
                                      },
                                      "music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.music"
                                      },
                                      "sponsor_tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                        }
                                      },
                                      "sponsored_disclosed": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "The platform's own disclosure that the post is paid or promotional: on Instagram the paid-partnership label (`is_paid_partnership`) or a tagged brand partner, on TikTok the label TikTok shows viewers (\"Paid partnership\", \"Commission paid\", \"Promotional content\"). `false` when the post carries the flag unset, null when it carries none. Present on `/v1/instagram/post/stats`, `/v1/instagram/search/reels` and `/v1/tiktok/search`; absent on every other endpoint."
                                      },
                                      "ai_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram only: Instagram's AI-content label on the post, as the method Instagram reports: `classifier_score_high` (Instagram detected it, shown as \"Likely made with AI\"), `ai_created` or `ai_edited` (declared or detected as made or edited with AI). Null when the post carries no AI label. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                      },
                                      "story_mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "story_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint."
                                        }
                                      },
                                      "story_reshared_posts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.location"
                                      },
                                      "media": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.media",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.media",
                                          "properties": {
                                            "type": {
                                              "type": "string",
                                              "description": "Leaf at post.ext.media.type"
                                            },
                                            "url": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.media.url"
                                            },
                                            "width": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.width"
                                            },
                                            "height": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.height"
                                            }
                                          }
                                        }
                                      },
                                      "top_comments": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.top_comments",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.top_comments",
                                          "properties": {
                                            "id": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.id"
                                            },
                                            "text": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.text"
                                            },
                                            "username": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.username"
                                            },
                                            "likes": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.top_comments.likes"
                                            },
                                            "published_at": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.published_at"
                                            }
                                          }
                                        }
                                      },
                                      "hashtags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.hashtags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.hashtags"
                                        }
                                      },
                                      "mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentions",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentions"
                                        }
                                      },
                                      "mentioned_user_ids": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentioned_user_ids",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentioned_user_ids"
                                        }
                                      },
                                      "quoted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Threads quote posts: the post this one quotes, as `{ id, url, author: { id, username }, text, media_urls, thumbnail_url }`. A quote post usually carries no caption or media of its own, and the text and video you see on the post's page belong to this attachment, by a different author. It is returned here rather than merged into `post.content`, so `content.*` always stays the outer post's own content and one account's media is never attributed to another. Absent on posts that are not quote posts."
                                      },
                                      "retweeted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.retweeted_post"
                                      },
                                      "quote_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.quote_count"
                                      },
                                      "all_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.all_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.all_media_urls"
                                        }
                                      },
                                      "reaction_counts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.reaction_counts",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.reaction_counts"
                                        }
                                      },
                                      "share_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.share_urn"
                                      },
                                      "post_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.post_type"
                                      },
                                      "activity_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.activity_id"
                                      },
                                      "published_at_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_at_precision"
                                      },
                                      "author_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_urn"
                                      },
                                      "author_headline": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_headline"
                                      },
                                      "author_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_type"
                                      },
                                      "is_repost_quote": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.is_repost_quote"
                                      },
                                      "article": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.article"
                                      },
                                      "reaction_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.reaction_type"
                                      },
                                      "download_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.download_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.download_media_urls"
                                        }
                                      },
                                      "tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.tags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.tags"
                                        }
                                      },
                                      "categoryId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryId"
                                      },
                                      "categoryTitle": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryTitle"
                                      },
                                      "topicCategories": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.topicCategories",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.topicCategories"
                                        }
                                      },
                                      "duration": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.duration"
                                      },
                                      "license": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.license"
                                      },
                                      "madeForKids": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.madeForKids"
                                      },
                                      "defaultAudioLanguage": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.defaultAudioLanguage"
                                      },
                                      "hasPaidProductPlacement": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.hasPaidProductPlacement"
                                      },
                                      "caption": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.caption"
                                      },
                                      "position": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.position"
                                      },
                                      "playlistId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlistId"
                                      },
                                      "videoOwnerChannelId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoOwnerChannelId"
                                      },
                                      "videoPublishedAt": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoPublishedAt"
                                      },
                                      "description": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.description"
                                      },
                                      "default_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.default_language"
                                      },
                                      "localizations": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.localizations"
                                      },
                                      "playlist_item_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_item_id"
                                      },
                                      "playlist_owner_channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_channel_id"
                                      },
                                      "playlist_owner_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_title"
                                      },
                                      "channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.channel_id"
                                      },
                                      "published_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_label"
                                      },
                                      "published_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.published_precision"
                                      },
                                      "title_maybe_translated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.title_maybe_translated"
                                      },
                                      "video_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.video_count"
                                      },
                                      "posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "`/v1/instagram/hashtag` only: the exact number of public posts Instagram counts under the hashtag. Live: it moves between calls minutes apart."
                                      },
                                      "commerce": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.commerce"
                                      },
                                      "on_screen_texts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.on_screen_texts",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.on_screen_texts"
                                        }
                                      },
                                      "topic_tag": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag"
                                      },
                                      "reshare_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.reshare_count"
                                      },
                                      "dsp_ids": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.dsp_ids"
                                      },
                                      "topic_tag_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag_id"
                                      },
                                      "amazon_shop_lists": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_lists",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_lists"
                                        }
                                      },
                                      "amazon_shop_trending_picks": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_trending_picks",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_trending_picks"
                                        }
                                      },
                                      "amazon_shop_curations": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_curations",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_curations"
                                        }
                                      },
                                      "amazon_shop_socials": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_socials",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.amazon_shop_socials"
                                        }
                                      },
                                      "ad": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Ad Library envelope (Facebook `adlibrary/ad` and `adlibrary/company/ads` items): page_id, currency, spend, reach_estimate, publisher_platforms, categories, targeted_or_reached_countries, cta_text, cta_type, link_url, is_active, end_date_iso, display_format, title, video_hd_url, video_sd_url. Absent on every non-ad surface."
                                      },
                                      "apple_music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.apple_music"
                                      },
                                      "feedback_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.feedback_id"
                                      },
                                      "question_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN (`/v1/naver/kin/search`) only: the question's id (Naver's `docId`), read from the row's link. Kin returns one row per answer, so several rows can share it; send `group=question` for one row per question."
                                      },
                                      "answer_no": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: which answer of the question this row is (Naver's `answerNo`), read from the row's link."
                                      },
                                      "answer_nos": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first.",
                                        "items": {
                                          "type": "integer",
                                          "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first."
                                        }
                                      },
                                      "published_at_est": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: the question's date ESTIMATED from its id (`YYYY-MM-DD`, Korea time), never a published date, so `published_at` stays null. Absent for questions older than the calibration table."
                                      },
                                      "date_basis": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "How `post.ext.published_at_est` was derived. `kin_docid_estimate`: interpolated from the question id against question pages whose posted date was read."
                                      },
                                      "event": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.event"
                                      },
                                      "trend": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Trend-board envelope: what TikTok's own trend board says about the row. On `/v1/tiktok/hashtags/popular`: `rank`, `country_code`, `period_days`, `posts` and `views` for the window (not lifetime totals), `industry` / `industry_id` / `industry_label` for the first board the hashtag was read from (null for the overall board), `boards` listing EVERY board it ranks on as `{ industry, industry_id, industry_label, rank }` in board order (so a hashtag in the top 3 overall and on an industry board shows both), `popularity_curve` as `{ date, value }` with value 0 to 100 relative to the window's peak, and `top_creators`. On `/v1/tiktok/videos/popular`: `rank`, `country_code`, `period_days`, `order_by`, `period_views`, `organic_views`, `engagement_rate`, `six_second_view_through_rate`, `content_tags`. Absent on every non-board surface."
                                      },
                                      "updated_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.updated_at"
                                      },
                                      "alt_text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.alt_text"
                                      },
                                      "board_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.board_name"
                                      }
                                    }
                                  }
                                }
                              },
                              "computed": {
                                "type": "object",
                                "description": "Server-computed analytics fields (consistent across platforms)",
                                "properties": {
                                  "engagement_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Computed engagement rate (0..1). Null when the upstream lacks enough signal."
                                  },
                                  "language": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "ISO 639-1 language code detected from the post text. Null when undetectable."
                                  },
                                  "content_category": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Keyword-classified content category (e.g. tech, food, gaming). Null when undetectable."
                                  },
                                  "estimated_reach": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Estimated reach based on views or follower count. Null when uncomputable."
                                  },
                                  "save_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at computed.save_rate"
                                  },
                                  "relevance": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Nested object: computed.relevance",
                                    "properties": {
                                      "p": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.p"
                                      },
                                      "sense": {
                                        "type": "string",
                                        "description": "Leaf at computed.relevance.sense"
                                      },
                                      "depth": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.depth"
                                      },
                                      "spam": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.spam"
                                      }
                                    }
                                  },
                                  "labels": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels"
                                  },
                                  "labels_evidence": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels_evidence"
                                  }
                                }
                              }
                            }
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "region": {
                          "type": "object",
                          "description": "Present when the request sent `region`, or `country` without `region`. What the localisation did: Instagram does not rank search by country, so the market's own name is added to the query unless the query already names the market or is already written in the market's own script (Hangul for KR), which Instagram localises by itself.",
                          "properties": {
                            "requested": {
                              "type": "string",
                              "description": "The two-letter market code that was applied.",
                              "example": "ES"
                            },
                            "method": {
                              "type": "string",
                              "enum": [
                                "localised_query"
                              ],
                              "description": "How the market was applied. `localised_query`: the market's local name was added to the query.",
                              "example": "localised_query"
                            },
                            "query_sent": {
                              "type": "string",
                              "description": "The query actually searched. Equal to your query when it already named the market.",
                              "example": "restaurantes españa"
                            }
                          },
                          "required": [
                            "requested",
                            "method",
                            "query_sent"
                          ]
                        },
                        "country": {
                          "type": "object",
                          "description": "Present when the request sent `country`. Only reels whose creator declares that market on Instagram's About this account panel are kept; the rest are dropped and counted here. Kept rows keep their order.",
                          "properties": {
                            "requested": {
                              "type": "string",
                              "description": "The two-letter market code rows were kept for.",
                              "example": "ES"
                            },
                            "kept": {
                              "type": "integer",
                              "description": "Rows returned.",
                              "example": 27
                            },
                            "dropped_other": {
                              "type": "integer",
                              "description": "Rows dropped because the creator declares another country.",
                              "example": 0
                            },
                            "dropped_unknown": {
                              "type": "integer",
                              "description": "Rows dropped because the creator publishes no country, or because the creator lookup did not resolve. Nothing is guessed.",
                              "example": 0
                            }
                          },
                          "required": [
                            "requested",
                            "kept",
                            "dropped_other",
                            "dropped_unknown"
                          ]
                        },
                        "hydration": {
                          "type": "object",
                          "description": "Present when the request sent `include=creator` or `country`. What the creator card join did and cost. On a `max_pages` walk it sums every page walked.",
                          "properties": {
                            "include": {
                              "type": "string",
                              "description": "The token that switched the join on.",
                              "example": "creator"
                            },
                            "implied_by": {
                              "type": "string",
                              "description": "Present when you did not send `include` and another param switched the join on: `country`, which needs each creator's declared country and so looks every creator up. The join's credits (`extra_credits`) are then part of `credits_used`. Absent when you sent `include=creator` yourself.",
                              "example": "country"
                            },
                            "rows": {
                              "type": "integer",
                              "description": "Rows the join looked at.",
                              "example": 27
                            },
                            "looked_up": {
                              "type": "integer",
                              "description": "Rows that needed a creator lookup.",
                              "example": 26
                            },
                            "filled": {
                              "type": "integer",
                              "description": "Rows that received at least one creator field.",
                              "example": 26
                            },
                            "cached": {
                              "type": "integer",
                              "description": "Of `filled`, rows filled from a creator looked up in the last 15 minutes, at no charge.",
                              "example": 0
                            },
                            "unfilled": {
                              "type": "integer",
                              "description": "Rows that needed a lookup and were not filled. Their credits are refunded.",
                              "example": 0
                            },
                            "credits_held": {
                              "type": "integer",
                              "description": "Credits held up front for the join, on top of the page's own price.",
                              "example": 60
                            },
                            "extra_credits": {
                              "type": "integer",
                              "description": "Of `credits_held`, the credits kept: 2 per creator filled from a fresh lookup. The rest was refunded.",
                              "example": 52
                            },
                            "ms": {
                              "type": "integer",
                              "description": "Time the join added, in milliseconds.",
                              "example": 6800
                            },
                            "from_earlier_pages": {
                              "type": "integer",
                              "description": "`max_pages` walks only: rows filled free from a creator already looked up on an earlier page of the same walk. Not counted in `looked_up`, `filled` or `cached`. Absent when zero.",
                              "example": 3
                            },
                            "cached_page": {
                              "type": "boolean",
                              "description": "True when the whole page was served from cache, so the join cost nothing on this call.",
                              "example": true
                            }
                          }
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/search/reels",
                  "data": {
                    "items": [
                      {
                        "post": {
                          "id": "3998582049703195659",
                          "url": "https://www.instagram.com/reel/Dd90TBVz_QL/",
                          "content": {
                            "text": "Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted).",
                            "media_urls": "https://scontent-hel3-1.cdninstagram.com/user_2352da/v/t2/f2/m86/AQM6zJvRT1n1JTmYRTMl6-CkrdrGrST8XlVIoJRWPVy08cuHr2mWFKrpb70nRlZTWxEmtB4TQ_EReEcz6NqcxZQ8DgduhELqZew3Jzw.mp4?_nc_cat=107&_nc_sid=5e9851&_nc_ht=scontent-hel3-1.cdninstagram.com&_nc_ohc=2ET97cMcfPIQ7kNvwFqDASN&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTM3MjMyMDYwNzk5Mjk5MCwiYXNzZXRfYWdlX2RheXMiOjAsInZpX3VzZWNhc2VfaWQiOjEwMDk5LCJkdXJhdGlvbl9zIjozMCwidXJsZ2VuX3NvdXJjZSI6Ind3dyJ9&ccb=17-1&vs=974fce545ca1be96&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC8wRjk0RUZDNDIwNzY0OTgzOTM2RUE4NkZCMDYyMkQ5Rl92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyLzY0NDU4N0JDRTAwMDRFMjc5RDE2NUY5ODBDMDVBMzMzX2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACa88tulyYfwBBUCKAJDMywXQD5EGJN0vGoYEmRhc2hfYmFzZWxpbmVfMV92MREAdf4HZeadAQA&_nc_gid=tvGBLqhyOgUZSPiqPkZWmQ&_nc_ss=7a3ba&_nc_zt=28&oh=00_AQNdt5Vc4sZ_SUyuRZXXx4Kvd2g7v1f-Pw4qDXybu_4cDw&oe=6AC14E04",
                            "thumbnail_url": "https://scontent-hel3-1.cdninstagram.com/user_4c9448/t51.82787-15/828938818_18019239569926323_865501003644035376_n.jpg?stp=dst-jpg_e15_p480x480_tt6&_nc_cat=106&ig_cache_key=Mzk5ODU4MjA0OTcwMzE5NTY1OTE4MDE5MjM5NTY2OTI2MzIz.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjcyMC5zZHIudmlkZW9fdXNlcl9zZWxlY3RlZF90aHVtYm5haWwuQzMifQ%3D%3D&_nc_ohc=NtKHDaBBS7YQ7kNvwFw4Ttz&_nc_oc=AdoTOxexygzV_C8LdLtFHpnYIzZlXRc8CX6E6EGib1Y60TwIWltjBWX_5kRXYDr-SiY&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-hel3-1.cdninstagram.com&_nc_gid=tvGBLqhyOgUZSPiqPkZWmQ&_nc_ss=7a3ba&oh=00_AQO9hfq_JmkiE92lVotmFqZ6ScIqIQ-WlTH-bQkwvgBgqg&oe=6AC53170",
                            "duration_seconds": 30.277
                          },
                          "author": {
                            "username": "user_f9a50a",
                            "display_name": null,
                            "avatar_url": "https://example.com/avatars/user_785902.png",
                            "verified": false
                          },
                          "engagement": {
                            "views": 3483,
                            "likes": 407,
                            "comments": 20,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false
                          },
                          "published_at": "2026-10-01T21:00:22.000Z",
                          "ext": {
                            "author_id": "user_7906dd",
                            "media_type": "video",
                            "published_at_epoch": 1790888422,
                            "coauthors": []
                          }
                        },
                        "computed": {
                          "engagement_rate": 0.122595,
                          "language": "fr",
                          "content_category": "other",
                          "estimated_reach": 4180,
                          "relevance": null,
                          "labels": null
                        }
                      },
                      {
                        "post": {
                          "id": "3997495296476933260",
                          "url": "https://www.instagram.com/reel/Dd59MrhzWyM/",
                          "content": {
                            "text": "Sample comment text (redacted).",
                            "media_urls": "https://scontent-hel3-1.cdninstagram.com/user_2352da/v/t16/f2/m84/AQPcFYuDNoHsWZpRF6j0o22ylOZuStVKoq9uNFYTD0ZCHutxkEfC89HZn3DjoDtHutG2elANJ86xYgW7iW_u_9yyzOUXIJAjcgItVHE.mp4?_nc_cat=103&_nc_sid=5e9851&_nc_ht=scontent-hel3-1.cdninstagram.com&_nc_ohc=DWo9lBEozboQ7kNvwHdZQIj&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTYxNzE4ODgxOTgwODk0MiwiYXNzZXRfYWdlX2RheXMiOjEsInZpX3VzZWNhc2VfaWQiOjEwODI3LCJkdXJhdGlvbl9zIjozMCwidXJsZ2VuX3NvdXJjZSI6Ind3dyJ9&ccb=17-1&vs=ffaf7d07a5d16ff9&_nc_vs=HBksFQIYTGlnX2JhY2tmaWxsX3RpbWVsaW5lX3ZvZC9CODFDRTkxNEQyRDA0MjgxOUNCRkJGRjFBODFEMTlEOV92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyL0QzMjZGNUZCQ0ZFMzRDNjI5QjQzOURFRjgxQzg3Qzk5X2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACbcyp3S47TfBRUCKAJDMywXQD7VP3ztkWgYEmRhc2hfYmFzZWxpbmVfMV92MREAdf4HZZapAQA&_nc_gid=tvGBLqhyOgUZSPiqPkZWmQ&_nc_ss=7a3ba&_nc_zt=28&oh=00_AQNWi_fmUp83nQFAbEQ7lkE_2sDfpNG7-D0cxBEQuZWCCA&oe=6AC14ABD",
                            "thumbnail_url": "https://scontent-hel3-1.cdninstagram.com/user_4c9448/t15.5256-10/830564076_2402972563566842_6315726862023546957_n.jpg?stp=dst-jpg_e15_p480x480_tt6&_nc_cat=101&ig_cache_key=Mzk5NzQ5NTI5NjQ3NjkzMzI2MA%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjY0MC5zZHIudmlkZW9fZmlyc3RfZnJhbWVfdGh1bWJuYWlsLkMzIn0%3D&_nc_ohc=N06MhLht_XAQ7kNvwEJl1L9&_nc_oc=AdrrBicWedI2hIXzgP9KsFXhEoGrjHSWD-zPsswL7ySIlKK2QUGCQoNDBd_am8xnmXo&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-hel3-1.cdninstagram.com&_nc_gid=tvGBLqhyOgUZSPiqPkZWmQ&_nc_ss=7a3ba&oh=00_AQM8tSamtmARPPJdVDyQFXc6cSMOsloAJeDwhN8KBEImrg&oe=6AC51485",
                            "duration_seconds": 30.834
                          },
                          "author": {
                            "username": "user_c57b43",
                            "display_name": null,
                            "avatar_url": "https://example.com/avatars/user_8edc51.png",
                            "verified": false
                          },
                          "engagement": {
                            "views": 10340,
                            "likes": 309,
                            "comments": 9,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false
                          },
                          "published_at": "2026-09-30T08:58:17.000Z",
                          "ext": {
                            "author_id": "user_67972f",
                            "media_type": "video",
                            "published_at_epoch": 1790758697,
                            "coauthors": [
                              {
                                "id": "user_ed96d2",
                                "username": "user_9a5c42",
                                "full_name": null,
                                "is_verified": false,
                                "profile_pic_url": "https://example.com/user_076162"
                              }
                            ]
                          }
                        },
                        "computed": {
                          "engagement_rate": 0.030754,
                          "language": null,
                          "content_category": "other",
                          "estimated_reach": 12408,
                          "relevance": null,
                          "labels": null
                        }
                      }
                    ],
                    "total": null,
                    "relevance": {
                      "mode": "score",
                      "topic_source": "query",
                      "rows": 30,
                      "scored": 18,
                      "cached": 12,
                      "kept": 30,
                      "dropped": 0,
                      "dropped_ids": [],
                      "unjudged": 0,
                      "too_short": 0,
                      "threshold": 0.5,
                      "extra_credits": 0,
                      "methodology_version": "relevance/2",
                      "origin": "default",
                      "pending": 12,
                      "pending_ids": [
                        "3998582049703195659",
                        "3997495296476933260"
                      ],
                      "status": "partial"
                    },
                    "labels": {
                      "presets": [
                        "sponsored",
                        "intent"
                      ],
                      "rows": 30,
                      "labelled": 18,
                      "cached": 10,
                      "skipped": 0,
                      "unjudged": 0,
                      "dropped": 0,
                      "dropped_ids": [],
                      "extra_credits": 0,
                      "methodology_version": "labels/1",
                      "mode": "default",
                      "status": "partial",
                      "pending": 12,
                      "pending_ids": [
                        "3998582049703195659",
                        "3997495296476933260"
                      ]
                    },
                    "dropped": 0
                  },
                  "credits_used": 1,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": "sc.eyJ2IjoyLCJjIjoic2MxLmV5SmpJam9pTWlJc0ltc2lPaUl3TkdvMlltOTJNR1ppTm1ZMU9ERjJiVE0zYnpRd2VtZzFOR1JuTVd0eWJEUmhiVEJ0YXpkcE1td3hNSEE0ZG1sb01EZGhlWGRoYlRGclptVmpOWGt3YzJsMk56QTFNV2wxYldObmJURnRielUyWnpRd016VjZZelEzTUc4NWRUbDVjREF3Y0dReWJXMHdjWEl3Y1RCNk1URTFOelUyYlRBMWIzbDRlR2N4YUhFemEyUnlNWFp5WW1WaGF6QnNhRzVoZURJeGJYaGphMjFwTVhSbE5YVXpiakUwYm5GdWRHb3hOSFpoY1d0MU1EbG5ObTR5T0RCb2NYSXdjV293TkRFNWIzcDJNVzVoTmpKamJqRjViMkkxT1RVaWZRIiwiZSI6Imluc3RhZ3JhbS9zZWFyY2gvcmVlbHMiLCJwIjoicGFnZSIsInMiOiJpIn0",
                    "has_more": true,
                    "page_size": 30
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T07:28:19.681Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/media/transcript": {
      "get": {
        "summary": "Get Instagram media transcript",
        "description": "Returns an AI-generated transcript of the spoken words in an Instagram video or reel. The audio itself is transcribed; when that cannot be done, the captions Instagram generates for some videos are used instead, as the same plain text. A video with music, sound effects or on-screen text but no speech has nothing to transcribe. Videos up to 10 minutes (600 seconds) are supported. Every outcome below is deterministic for a given URL, so retrying returns the same answer, and none of them costs credits. A video with no speech returns 404 RESOURCE_NOT_FOUND with `error.details.reason: no_speech` (the video exists). A photo post, a carousel of photos, or a URL that no longer resolves returns 404 with `reason: no_video_or_gone`, because Instagram answers those identically. A video longer than 10 minutes returns 400 INVALID_REQUEST with `error.details.reason: video_too_long`, `duration_seconds` and `max_seconds`, and a message giving its length. A video over 2 minutes is transcribed on demand and can take a minute or more, so allow up to 300 seconds before your HTTP client times out.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_media_transcript",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "premium",
        "x-credit-cost": 10,
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "Full URL of the Instagram video or reel (a `/reel/`, `/p/` or `/tv/` link to a video post). Photo posts have no audio to transcribe. A share link copied from the app (`instagram.com/share/...`) works too; a share link to a profile is refused at no charge with the handle to send, and a dead one is a free 404.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.instagram.com/reel/DHsD6HGqJhp/"
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/media/transcript"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "transcript": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Full transcript text. Plain string for TikTok/Facebook/Twitter; see `transcripts` for Instagram and the segmented YouTube shape."
                        },
                        "transcript_format": {
                          "type": "string",
                          "enum": [
                            "webvtt",
                            "text"
                          ],
                          "description": "TikTok only: the form of the `transcript` string. `webvtt` is WebVTT cues with timestamps (a caption track, or AI transcription of a longer video); `text` is plain text (AI transcription of a shorter video, which also returns `duration_seconds` and `duration_minutes`). Absent on other platforms and when there is no transcript."
                        },
                        "transcripts": {
                          "type": [
                            "array",
                            "null"
                          ],
                          "description": "Instagram transcript entries. Each item has a `text` field with the full transcript for that track.",
                          "items": {
                            "type": "object",
                            "description": "Transcript track",
                            "properties": {
                              "text": {
                                "type": "string",
                                "description": "Transcript text"
                              }
                            }
                          }
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      }
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/media/transcript",
                  "data": {
                    "transcripts": [
                      {
                        "id": "3597267389859272809",
                        "shortcode": "DHsD6HGqJhp",
                        "text": "Let's fry up the perfect Banh Xeo. Beautiful. Everybody. Shh. The perfect Banh Xeo. Let me show you my Banh Xeo. When it comes down to Banh Xeo, we make it the crispiest. Hear the crunch? Heaven."
                      }
                    ]
                  },
                  "credits_used": 0,
                  "request_id": "req_example000000",
                  "cached": true,
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T12:51:32.156Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/media/screen-text": {
      "get": {
        "summary": "Get Instagram post on-screen text",
        "description": "Reads the text shown on an Instagram post: the headlines, list items, place names, captions and meme text creators design into a photo, a carousel slide or a reel, which the post caption never carries. What is read depends on the post. On a photo, the photo itself. On a carousel, every slide in order, 10 slides a call: the first 10 by default, and the next 10 with `slide_offset=10`; a longer carousel's response carries a warning giving its full slide count, and `next_slide_offset` names the offset that reads the rest (null when every slide has been read). On a reel or video, the cover frame by default, so it does not read text that appears only later in the video; with `frames=all` the whole video is read instead, up to 3 minutes (180 seconds), and the response adds `subtitles` (on-screen captions of the speech, kept apart from `texts`), a `timeline` of every text block with `at_seconds`, the second it first appears, and `kind` (text or subtitle), and `duration_seconds`. This is AI OCR of the published media. On a reel whose text was typed in Instagram's own editor, that text is also read from the post's data, exactly as typed and for every moment of the reel, and returned in `native_texts` (null when the reel has none; text added in another app is only in the pixels). `texts` is the deduplicated union of every image's text in slide order, `images` lists each image read with its own `texts` and its 0-based `index` in the post's media list (so a carousel caller knows which slide said what), `media_type` is image, video or carousel, and `source` says which layers produced text: native, native+ocr, ocr or none. A post with no text on it returns empty arrays (that is a real answer, not an error). If some slides cannot be read, those slides carry `texts: null` and the response carries a warning.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_media_screen_text",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "advanced",
        "x-credit-cost": 5,
        "x-credit-cost-min": 5,
        "x-credit-cost-max": 10,
        "x-credit-cost-formula": "5 credits a call, the same for a photo, a reel's cover or a carousel page of 10 slides. 10 credits with `frames=all` on a reel; when the post has no video to read, or the video cannot be read and the cover is read instead, the call costs 5 and the response says so in `warnings`. Refunded when the post cannot be found, when nothing on it could be read, or when a parameter does not fit the post (a `slide_offset` past the last slide, a reel over 180 seconds with `frames=all`).",
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "Full URL of the Instagram post, reel or video (a `/p/`, `/reel/`, `/reels/` or `/tv/` link). A share link copied from the app (`instagram.com/share/...`) works too; a share link to a profile is refused at no charge with the handle to send, and a dead one is a free 404.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.instagram.com/p/DdEqEl5Dl-S/"
          },
          {
            "name": "frames",
            "in": "query",
            "required": false,
            "description": "What to read on a reel or video. `cover` (the default) reads the cover frame for 5 credits. `all` reads the whole video, up to 180 seconds, for 10 credits, and adds `subtitles`, `timeline` and `duration_seconds`. Has no effect on photos and carousels, which are read as usual for 5 credits.",
            "schema": {
              "type": "string",
              "enum": [
                "cover",
                "all"
              ]
            }
          },
          {
            "name": "slide_offset",
            "in": "query",
            "required": false,
            "description": "Carousels only: the 0-based index of the first slide to read, 10 slides a call. Default 0. `slide_offset=10` reads slides 11 to 20. Each image in `images` keeps its index in the whole carousel, and `next_slide_offset` gives the value for the next call.",
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/media/screen-text"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "metrics": {
                          "type": "object",
                          "description": "Key performance metrics",
                          "properties": {
                            "total_views": {
                              "type": "integer",
                              "description": "Total view count"
                            },
                            "total_likes": {
                              "type": "integer",
                              "description": "Total like count"
                            },
                            "total_comments": {
                              "type": "integer",
                              "description": "Total comment count"
                            },
                            "engagement_rate": {
                              "type": "number",
                              "description": "Computed engagement rate (0-1)"
                            }
                          }
                        },
                        "period": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Time period for the analytics data"
                        },
                        "breakdown": {
                          "type": [
                            "array",
                            "null"
                          ],
                          "description": "Per-item or per-period breakdown",
                          "items": {
                            "type": "object",
                            "description": "Breakdown entry"
                          }
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      }
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/media/screen-text",
                  "data": {
                    "post_id": "3982493004019425170",
                    "shortcode": "DdEqEl5Dl-S",
                    "url": "https://www.instagram.com/p/DdEqEl5Dl-S/",
                    "media_type": "carousel",
                    "texts": [
                      "\"Ana, dein Speicherplatz ist voll.",
                      "Du musst Fotos löschen\"",
                      "Happy Birthday"
                    ],
                    "images": [
                      {
                        "index": 0,
                        "image_url": "https://scontent-lga3-1.cdninstagram.com/v/t51.82787-15/799346912_18623911903058728_4053280514596937734_n.jpg?stp=dst-jpg_e35_tt6",
                        "texts": [
                          "\"Ana, dein Speicherplatz ist voll.",
                          "Du musst Fotos löschen\""
                        ]
                      },
                      {
                        "index": 2,
                        "image_url": "https://scontent-lga3-3.cdninstagram.com/v/t51.82787-15/801354824_18623911930058728_5458856566718637155_n.jpg?stp=dst-jpg_e35_tt6",
                        "texts": []
                      },
                      {
                        "index": 6,
                        "image_url": "https://scontent-lga3-1.cdninstagram.com/v/t51.82787-15/800469821_18623912011058728_2315837409654874183_n.jpg?stp=dst-jpg_e35_tt6",
                        "texts": [
                          "Happy Birthday"
                        ]
                      }
                    ],
                    "source": "ocr",
                    "frame": null,
                    "slide_count": 20,
                    "warnings": [
                      "This carousel has 20 slides; text was read from the first 10 only."
                    ]
                  },
                  "credits_used": 5,
                  "credits_remaining": 95,
                  "request_id": "req-hrAEsSJeTaFgF3fD",
                  "cached": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/user/embed": {
      "get": {
        "summary": "Get Instagram user embed HTML",
        "description": "Returns the embed for a public Instagram profile. `author.ext.embed_html` is Instagram's own embed code for the profile (a `blockquote` plus the `embed.js` script tag), ready to paste into a page on your site, where it renders the profile card with its latest posts. `author.ext.embed_url` is the address of the frame that script loads (`https://www.instagram.com/<username>/embed/`), for placing the frame yourself. The response also carries the profile the embed shows: username, display name, picture, verification, exact follower count, post count and the account id. The embed does not show the bio or the following count, so those are null; call /v1/instagram/profile for them. Private accounts, accounts that do not allow embeds and handles that do not exist have no embed: they return 404 at no charge, and Instagram's page does not say which of the three it is.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_user_embed",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 1,
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": true,
            "description": "Instagram username without the @ symbol",
            "schema": {
              "type": "string"
            },
            "example": "instagram"
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/user/embed"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Platform-specific user ID (always a string; platform-specific prefixes like `did:`, `spotify:artist:`, `t2_` are stripped)"
                        },
                        "username": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "User handle or username"
                        },
                        "display_name": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Display name or full name"
                        },
                        "avatar_url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "URL to profile picture"
                        },
                        "bio": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Profile biography or description"
                        },
                        "verified": {
                          "type": [
                            "boolean",
                            "null"
                          ],
                          "description": "Whether the account is verified"
                        },
                        "followers": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Follower or subscriber count as an integer. Exact on Instagram and on TikTok when the source exposes an unrounded figure. YouTube above 1,000 subscribers is YouTube's published three-significant-figure figure. When the integer is a published/rounded value, `author.ext.followers_approximate` is true."
                        },
                        "following": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Number of accounts followed"
                        },
                        "posts_count": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of posts / videos / tracks / episodes"
                        },
                        "likes_count": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total likes received across the author's content (when surfaced)"
                        },
                        "url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Direct URL to the profile page"
                        },
                        "location": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "ISO region code (e.g. `US`) or freeform location string when surfaced"
                        },
                        "external_url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Bio link / external website URL when surfaced by the platform"
                        },
                        "private": {
                          "type": [
                            "boolean",
                            "null"
                          ],
                          "description": "Boolean at author.private"
                        },
                        "joined_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "String at author.joined_at"
                        },
                        "last_post_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "String at author.last_post_at"
                        },
                        "ext": {
                          "type": [
                            "object",
                            "null"
                          ],
                          "description": "Nested object: author.ext",
                          "properties": {
                            "social_context": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.social_context"
                            },
                            "account_created": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.account_created"
                            },
                            "country": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.country"
                            },
                            "country_name": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.country_name"
                            },
                            "collects_received": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.collects_received"
                            },
                            "former_usernames": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.former_usernames",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.former_usernames"
                              }
                            },
                            "former_usernames_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram profile/about: how many former usernames Instagram's \"About this account\" panel lists for the account. 0 when the panel lists none, null when the panel could not be read on this call (the response then carries a note saying so). A count above 0 means the handle was renamed at least once; the names themselves are not published."
                            },
                            "verified_at": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Instagram profile/about, opt-in (`include=verified_at`): the month Instagram verified the account, as the panel shows it (\"April 2024\"). A month, not a date. Null when the account is not verified or the panel shows no verification date. Absent unless requested."
                            },
                            "public_email": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.public_email"
                            },
                            "contact_email": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Opt-in (`contact_email=1` on instagram/profile, youtube/channel and youtube/channel/about). When the bio lists two or more email addresses, the one the creator gives for contacting them personally, copied verbatim. Null when there is one address or none, when every address belongs to a manager, agency or brand, or when the choice was not confident. `author.ext.public_email` (the first address in the bio) is unchanged."
                            },
                            "public_phone": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.public_phone"
                            },
                            "similar_source": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.similar_source"
                            },
                            "instagram_username": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.instagram_username"
                            },
                            "similar_via": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.similar_via"
                            },
                            "business_category": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.business_category"
                            },
                            "bio_links": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.bio_links",
                              "items": {
                                "type": "object",
                                "description": "Nested object: author.ext.bio_links",
                                "properties": {
                                  "title": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.ext.bio_links.title"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.ext.bio_links.url"
                                  },
                                  "link_type": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.ext.bio_links.link_type"
                                  }
                                }
                              }
                            },
                            "is_business": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_business"
                            },
                            "is_professional": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_professional"
                            },
                            "creator_marketplace": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.creator_marketplace"
                            },
                            "verification_label": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.verification_label"
                            },
                            "fbid": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.fbid"
                            },
                            "hd_avatar_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.hd_avatar_url"
                            },
                            "website": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.website"
                            },
                            "cover_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.cover_url"
                            },
                            "page_active": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.page_active"
                            },
                            "employee_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.employee_count"
                            },
                            "employee_count_range": {
                              "type": [
                                "object",
                                "null"
                              ],
                              "description": "Nested object: author.ext.employee_count_range",
                              "properties": {
                                "start": {
                                  "type": [
                                    "integer",
                                    "null"
                                  ],
                                  "description": "Numeric at author.ext.employee_count_range.start"
                                },
                                "end": {
                                  "type": [
                                    "integer",
                                    "null"
                                  ],
                                  "description": "Numeric at author.ext.employee_count_range.end"
                                }
                              }
                            },
                            "founded_year": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.founded_year"
                            },
                            "company_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.company_type"
                            },
                            "tagline": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.tagline"
                            },
                            "specialities": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.specialities",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.specialities"
                              }
                            },
                            "industries": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.industries",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.industries"
                              }
                            },
                            "headquarters": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.headquarters"
                            },
                            "locations": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.locations",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.locations"
                              }
                            },
                            "hashtags": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.hashtags",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.hashtags"
                              }
                            },
                            "funding": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.funding"
                            },
                            "address": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.address"
                            },
                            "price_range": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.price_range"
                            },
                            "rating": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.rating"
                            },
                            "rating_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.rating_count"
                            },
                            "talking_about_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.talking_about_count"
                            },
                            "business_hours": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.business_hours",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.business_hours"
                              }
                            },
                            "links": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.links",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.links"
                              }
                            },
                            "ad_library_page_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.ad_library_page_id"
                            },
                            "ad_library_status": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.ad_library_status"
                            },
                            "urn": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.urn"
                            },
                            "is_top_voice": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_top_voice"
                            },
                            "is_premium": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_premium"
                            },
                            "is_creator": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_creator"
                            },
                            "is_influencer": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_influencer"
                            },
                            "is_open_to_work": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_open_to_work"
                            },
                            "is_hiring": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_hiring"
                            },
                            "member_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.member_id"
                            },
                            "company_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.company_id"
                            },
                            "reaction_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.reaction_type"
                            },
                            "followers_approximate": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "True when `author.followers` is a published or rounded figure rather than an unrounded census: LinkedIn people-list display buckets, TikTok `stats.followerCount` when the exact sibling is absent, and YouTube subscriber counts at or above 1,000. Null or absent on exact counts."
                            },
                            "counts_source": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok profile only. Which of TikTok's two live counter sets `author.followers`, `author.following`, `author.likes_count` and `author.posts_count` carry: `app` (TikTok's app counters, the default) or `web` (the website's `statsV2`, returned with `counts=web`). The two sets can differ by a few percent in either direction."
                            },
                            "keywords": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.keywords"
                            },
                            "total_views": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.total_views"
                            },
                            "joined_at_timestamp": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.joined_at_timestamp"
                            },
                            "topicCategories": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.topicCategories",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.topicCategories"
                              }
                            },
                            "bannerExternalUrl": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.bannerExternalUrl"
                            },
                            "madeForKids": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.madeForKids"
                            },
                            "hiddenSubscriberCount": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.hiddenSubscriberCount"
                            },
                            "related_playlists": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.related_playlists"
                            },
                            "topic_ids": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.topic_ids",
                              "items": {
                                "type": "string",
                                "description": "String at author.ext.topic_ids"
                              }
                            },
                            "unsubscribed_trailer": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.unsubscribed_trailer"
                            },
                            "localizations": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.localizations"
                            },
                            "monthly_listeners": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.monthly_listeners"
                            },
                            "total_ratings": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Spotify podcasts only: how many listeners have rated the show. Cumulative over the show's whole run, so it reflects longevity as well as size, and it is NOT an audience count (Spotify publishes no play, download, subscriber or follower count for a podcast)"
                            },
                            "average_rating": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Spotify podcasts only: mean listener rating from 0 to 5. Fractional (e.g. 4.66) despite the integer type this schema emits for every numeric leaf"
                            },
                            "creator_username": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.creator_username"
                            },
                            "join_policy": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.join_policy"
                            },
                            "is_nsfw": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.is_nsfw"
                            },
                            "rules": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.rules",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.rules"
                              }
                            },
                            "weekly_active_users": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.weekly_active_users"
                            },
                            "weekly_contributions": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.weekly_contributions"
                            },
                            "rules_text": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.rules_text"
                            },
                            "language": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.language"
                            },
                            "post_karma": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.post_karma"
                            },
                            "comment_karma": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.comment_karma"
                            },
                            "awardee_karma": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.awardee_karma"
                            },
                            "trophy_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.trophy_count"
                            },
                            "banner_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.banner_url"
                            },
                            "profile_title": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.profile_title"
                            },
                            "social_links": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at author.ext.social_links",
                              "items": {
                                "type": "string",
                                "description": "Leaf at author.ext.social_links"
                              }
                            },
                            "bio_link": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.bio_link"
                            },
                            "embed_html": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.embed_html"
                            },
                            "embed_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.embed_url"
                            },
                            "group": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at author.ext.group"
                            },
                            "search_hit": {
                              "type": [
                                "object",
                                "null"
                              ],
                              "description": "Nested object: author.ext.search_hit",
                              "properties": {
                                "match": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "description": "Leaf at author.ext.search_hit.match"
                                },
                                "title": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "description": "String at author.ext.search_hit.title"
                                },
                                "snippet": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "description": "String at author.ext.search_hit.snippet"
                                },
                                "evidence_url": {
                                  "type": [
                                    "string",
                                    "null"
                                  ],
                                  "description": "String at author.ext.search_hit.evidence_url"
                                },
                                "matched_urls": {
                                  "type": [
                                    "array",
                                    "null"
                                  ],
                                  "description": "Array at author.ext.search_hit.matched_urls",
                                  "items": {
                                    "type": "string",
                                    "description": "String at author.ext.search_hit.matched_urls"
                                  }
                                }
                              }
                            },
                            "blog_name": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.blog_name"
                            },
                            "blog_no": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.blog_no"
                            },
                            "visitors_today": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.visitors_today"
                            },
                            "visitors_total": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at author.ext.visitors_total"
                            },
                            "topic": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at author.ext.topic"
                            },
                            "power_blog": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.power_blog"
                            },
                            "official_blog": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at author.ext.official_blog"
                            }
                          }
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      }
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/profile",
                  "data": {
                    "author": {
                      "id": "528817151",
                      "username": "nasa",
                      "display_name": "NASA",
                      "avatar_url": "https://scontent-mia3-2.cdninstagram.com/v/t51.2885-19/29090066_159271188110124_1152068159029641216_n.jpg?stp=dst-jpg_s320x320_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby4xMDgwLmMyIn0&_nc_ht=scontent-mia3-2.cdninstagram.com&_nc_cat=1&_nc_oc=Q6cZ2gF_ZOyacP2ZxvTwISAHsSMx5asgW1AxJ-EvdVyQnWaIqOoHbHMxaugucZE9K7U6iePJ5sy_AwBliYYR9brDmaTN&_nc_ohc=Nw8H9lTngQgQ7kNvwGnjtoO&_nc_gid=oVc10Bvl_SYb8NYf4N9zow&edm=AOQ1c0wBAAAA&ccb=7-5&oh=00_AQBRPsRNYH983CV3Cpi5GEmECZIFeJsRBFCxbj0YQVLw4A&oe=6A631B69&_nc_sid=8b3546",
                      "bio": "Making the seemingly impossible, possible. ✨",
                      "verified": true,
                      "followers": 104307425,
                      "following": 91,
                      "posts_count": 4853,
                      "likes_count": null,
                      "url": "https://www.nasa.gov/",
                      "private": false,
                      "joined_at": null
                    },
                    "computed": {
                      "engagement_rate": 0.00193,
                      "language": "en",
                      "content_category": "other",
                      "estimated_reach": null
                    }
                  },
                  "credits_used": 1,
                  "credits_remaining": 9999,
                  "request_id": "req_example000000",
                  "cached": false,
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/audio/reels": {
      "get": {
        "summary": "List Instagram reels using an audio track",
        "description": "Returns reels that use a specific audio track on Instagram. Each reel includes engagement metrics and author info. The `audio_id` is the `post.ext.music_id` a reel carries on /v1/instagram/post and /v1/instagram/profile/reels, or on /v1/instagram/profile/posts with include=audio, so reels that share a sound can be expanded into every other reel using it. On the first page `data.total` is the number of reels Instagram shows for the sound, or null when that count is not available, and later pages leave it null. On the first page `data.is_trending` is `true` when Instagram currently marks the sound as trending in Reels and `false` when it does not; it changes over time, later pages leave it null, and it is null when that signal is not available. On the first page `data.sound` describes the sound itself as `{ track_title, artist, is_original, creator_username, created_at, duration_seconds, is_explicit, spotify_track_id, first_reel_url }`: on an original sound `creator_username` is the account that created it, `created_at` is when it was created and `first_reel_url` is the reel it was first used on, while on a licensed track those three are null and `spotify_track_id` is filled when Instagram links the track to Spotify; `data.sound` is null on later pages and when the sound's details are not available. When `audio_id` is a cluster id, `data.total` counts every upload in the cluster and `data.sound` describes the one upload Instagram shows for it, so its creator is not necessarily the cluster's first user. To record `data.total` every day, create a Monitor that tracks `total`; see /docs/recipes/track-sound-growth. Each reel carries `post.ext.audio_cluster_id`, Instagram's audio cluster for that reel: the id Instagram uses to group different uploads of the same sound. It is absent on a reel when it is not available. A page carries up to about 12 reels, in the order Instagram's own audio page lists them, which is not by date. Pass `pagination.next_cursor` back as `cursor` to request the next page. A page that comes back empty is not charged. On a reel also posted to Facebook, `engagement.views` can include its Facebook views: `post.ext.instagram_views` is the Instagram-only figure, the same on every Instagram endpoint, and `post.ext.facebook_views` is the Facebook part when the source reports it.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_audio_reels",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 1,
        "parameters": [
          {
            "name": "audio_id",
            "in": "query",
            "required": true,
            "description": "Instagram audio ID: the numeric id from an instagram.com/reels/audio/{audio_id}/ URL",
            "schema": {
              "type": "string"
            },
            "example": "1392969992841787"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Pagination cursor. Use the `next_cursor` from the previous response to fetch the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "Only rows published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Rows older than it are left off each page. This list is not in date order, so the walk does not stop at the date: keep following `next_cursor`, and each page costs what a page costs even when every row on it is filtered out. A row with no date is kept. `published_after`, `start_date`, `from_date`, `publish_time` (`yesterday`, `this-week`, `this-month`, `last-3-months`, `last-6-months`) and `max_age_days` are accepted and applied as `since`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "description": "Only rows published on or before this date: YYYY-MM-DD (that whole UTC day is included) or an ISO 8601 timestamp. Newer rows are left off each page and the walk does not stop, so older pages follow. A row with no date is kept. `published_before`, `end_date` and `to_date` are accepted and applied as `until`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max_pages",
            "in": "query",
            "required": false,
            "description": "1 to 50 (default 1, or 50 when `max_items` or `max_credits` is sent). Walk up to this many pages in one call and return the rows from all of them. Each page walked is billed exactly as one call to this endpoint (a cached page is free) and counts against your rate limit; its charge and any refund are recorded under the page's own request id, listed in `data.walk.request_ids`. The walk stops early at the last page, or when the request's time budget runs low; `data.walk.stopped` says why (`end`, `max_pages`, `max_items`, `max_credits`, `time_budget`, `page_error`) and `pagination.next_cursor` continues from where it stopped.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "max_items",
            "in": "query",
            "required": false,
            "description": "1 to 5000. Get more in one call: keep walking pages until the response holds at least this many rows, then stop with `data.walk.stopped: \"max_items\"`. The last page is returned whole (it was billed), so `data.items` can hold up to one page more than this, and `pagination.next_cursor` resumes right after it without skipping a row. Walks up to 50 pages unless `max_pages` says fewer; each page is billed as one call (a cached page is free). Add `max_credits` to cap the spend. A long walk can stop on the time budget first (`\"time_budget\"`): send the returned cursor with the same params to continue.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5000
            }
          },
          {
            "name": "max_credits",
            "in": "query",
            "required": false,
            "description": "1 to 100000. The most this call may spend, across every page it walks. A page starts only while the credits already spent plus that page's price (or, when higher, the most any page of this walk has cost) still fit, so the call never goes past it; the walk then stops with `data.walk.stopped: \"max_credits\"` and the cursor to resume. Sent alone, it walks as far as the budget goes (up to 50 pages). A value below the price of one page is a free 400 whose `error.details.page_credits` names that price. Credits a row join (`include=`) adds are known only once a page has run, so page 1 is checked against its own price.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100000
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/audio/reels"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of canonical post wrappers ({ post, computed })",
                          "items": {
                            "type": "object",
                            "description": "Canonical post wrapper",
                            "properties": {
                              "post": {
                                "type": "object",
                                "description": "Canonical Post object (unified across all platforms)",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "Platform-specific post ID (always a string; numeric upstream IDs are stringified)"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Direct URL to the post on the source platform"
                                  },
                                  "content": {
                                    "type": "object",
                                    "description": "Post content fields (text, media, thumbnail, duration)",
                                    "properties": {
                                      "text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Post caption, description, or text content"
                                      },
                                      "media_urls": {
                                        "type": [
                                          "string",
                                          "array",
                                          "null"
                                        ],
                                        "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels.",
                                        "items": {
                                          "type": "string",
                                          "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels."
                                        }
                                      },
                                      "thumbnail_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to thumbnail image"
                                      },
                                      "duration_seconds": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Video/clip duration in seconds (null for non-video posts)"
                                      }
                                    }
                                  },
                                  "author": {
                                    "type": "object",
                                    "description": "Subset of Author fields for the post creator",
                                    "properties": {
                                      "username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author username"
                                      },
                                      "display_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author display name"
                                      },
                                      "avatar_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to author profile picture"
                                      },
                                      "verified": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Whether the author account is verified"
                                      }
                                    }
                                  },
                                  "engagement": {
                                    "type": "object",
                                    "description": "Engagement counts",
                                    "properties": {
                                      "views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "View count (if available). For Instagram video/reels this is the play count: the headline 'Views' the IG app shows. Instagram removed per-post play counts from its public web pages in August 2026, so `GET /v1/instagram/post` now fills the count automatically from a second source within the same call: videos and reels keep a numeric `views` with no extra endpoint or workaround. Note: since mid-July 2026 Instagram's play count is Instagram-only. It no longer includes Facebook crosspost views (Meta-side change; the app UI changed identically). For combined reach, also fetch the Facebook crosspost via `/v1/facebook/post`."
                                      },
                                      "likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Like / reaction count"
                                      },
                                      "comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Comment count. Note: on `GET /v1/instagram/post` this is Instagram's `edge_media_to_parent_comment.count` (top-level comments); the IG list endpoints report the mobile `comment_count` total (includes replies). Both land on this same field."
                                      },
                                      "shares": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Share / repost / retweet count. On Instagram this is `reshare_count` (the paper-plane Share / Send count) and it exists only on Instagram's mobile surface, so it is returned by `/v1/instagram/post/stats`, `/v1/instagram/profile/reels/full`, and `/v1/instagram/profile/posts/full`. The web-sourced Instagram list and search endpoints return `null` (never fabricated)."
                                      },
                                      "saves": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Save / bookmark count. `null` on Instagram: the save count is platform-private and Instagram exposes no numeric save metric on any surface (never fabricated)."
                                      }
                                    }
                                  },
                                  "flags": {
                                    "type": "object",
                                    "description": "Boolean flags on the post",
                                    "properties": {
                                      "nsfw": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "NSFW flag (null when platform does not surface)"
                                      },
                                      "spoiler": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Spoiler flag (null when platform does not surface)"
                                      },
                                      "pinned": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Pinned-to-profile flag (null when platform does not surface)"
                                      },
                                      "deleted": {
                                        "type": "boolean",
                                        "description": "Whether the post is tombstoned (always present)"
                                      },
                                      "likes_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the creator has hidden the like count. `engagement.likes` is `null` in that case (never the platform's decoy preview number). Absent on normal posts."
                                      },
                                      "comments_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the upstream reports the comment count as hidden. `engagement.comments` is `null` in that case. Absent on normal posts."
                                      },
                                      "shares_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.shares_hidden"
                                      },
                                      "views_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.views_hidden"
                                      },
                                      "saves_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.saves_hidden"
                                      }
                                    }
                                  },
                                  "published_at": {
                                    "type": [
                                      "string",
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Post creation timestamp as an ISO 8601 UTC string. When the upstream sent a Unix epoch it is converted here and the raw epoch is preserved under `post.ext.published_at_epoch` for one deprecation cycle."
                                  },
                                  "ext": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Platform-specific passthrough fields for cross-endpoint chains (present only on platforms that surface them)",
                                    "properties": {
                                      "music_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok music/clip id (exact string): pass to `/v1/tiktok/song/videos?clipId=` to find videos using the same sound"
                                      },
                                      "matched_song_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The catalogue song TikTok matched the video's sound to, as an exact digit string. An official clip and the original sounds creators upload with it have different `music_id` values and the same `matched_song_id`, so group rows on it to count every use of one song. It is not a clipId: `/v1/tiktok/song` and `/v1/tiktok/song/videos` do not accept it. `/v1/tiktok/search/music` carries it on each sound, so a search on the song's title and artist, kept to the sounds with the same `matched_song_id`, gives the song's official sounds and their `video_count`. Absent when TikTok matched the sound to no song, and on rows served from a source that does not report the match."
                                      },
                                      "matched_song_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the song in `matched_song_id`. Absent when there is no matched song."
                                      },
                                      "matched_song_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist of the song in `matched_song_id`, as TikTok's catalogue names it. Absent when there is no matched song."
                                      },
                                      "music_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the video's own sound (`music_id`). An uploaded sound is titled like `original sound - <handle>`; the song it plays, when TikTok recognised one, is `matched_song_title`."
                                      },
                                      "music_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist TikTok shows for the video's own sound. On an original sound this is the uploader's display name, not the song's artist; use `matched_song_artist` for that."
                                      },
                                      "music_is_original": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "TikTok only. `true` when the video's sound is an original sound a creator uploaded, `false` when it is a catalogue track. Absent when the source does not say."
                                      },
                                      "author_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's platform-native numeric user id. On TikTok search and list items, pass to `/v1/tiktok/profile?user_id=` for the creator's current follower count (survives username changes). On Instagram `/v1/instagram/search/reels`, `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` items it is present on every row, accepted by `/v1/instagram/profile/country?user_id=` and `/v1/instagram/basic-profile?userId=`. On Facebook it appears when the upstream exposed a numeric actor id and no real handle."
                                      },
                                      "author_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The posting account's profile URL, so a matching post can be followed to its account. Present on `/v1/facebook/search/posts` rows: the vanity or `/people/<name>/<id>/` URL when Facebook sends one, otherwise `https://www.facebook.com/profile.php?id=<numeric id>` built from the account id. Pass it as `url` to `/v1/facebook/profile` (or to `/v1/prism/profiles` with `platform: facebook`). Null when the row names neither an account URL nor a numeric account id. Absent on other endpoints."
                                      },
                                      "author_followers": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "The creator's follower count as embedded in the search payload itself, when the search source happens to carry one. On Instagram `search/reels` it is null on a plain call, because Instagram stopped sending follower counts in its search payload in August 2026; send `include=creator` (or `country`) and it is filled from the creator's profile, 2 credits per creator looked up. It stays null when that lookup does not resolve."
                                      },
                                      "author_following": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_following"
                                      },
                                      "author_posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_posts_count"
                                      },
                                      "author_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The free text the author wrote in their profile's location field, exactly as written (for example `Johannesburg, South Africa`). It is not a country code and is not checked. Present on X tweet and reply rows; null or absent when the author left it blank."
                                      },
                                      "in_reply_to_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_id"
                                      },
                                      "in_reply_to_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_username"
                                      },
                                      "conversation_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.conversation_id"
                                      },
                                      "author_country": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's country. On Instagram it is the country the creator declares on the About this account panel, as a country name (for example `Spain`), and it is not where the post was filmed. It is present on `/v1/instagram/search/reels` when the request sends `include=creator`, `include=country` or `country`, and on `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` when it sends `include=country`, filled by looking the creator up. On YouTube rows joined with `include=channel` it is the channel's own country as an ISO 3166-1 alpha-2 code (for example `ZA`). Null when the platform publishes no country for the creator or the lookup did not resolve, and nothing is guessed; absent on a plain call."
                                      },
                                      "author_public_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact email on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public email or the lookup did not resolve; absent on a plain call."
                                      },
                                      "author_public_phone": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact phone number on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public phone or the lookup did not resolve; absent on a plain call."
                                      },
                                      "download_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "How many times the video has been saved to a device. TikTok only, and distinct from `engagement.saves`: a save keeps the video in a private collection on the platform, a download takes a copy off it, and TikTok counts the two separately. Present on TikTok post, search and post-list responses; absent everywhere else."
                                      },
                                      "region": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only: the country TikTok registers the video to, as an ISO 3166-1 alpha-2 code (normally the creator's account country when they posted). It is not the viewer's country, not the `region` you requested, and not a language. On `/v1/tiktok/trending`, `/v1/tiktok/search`, `/v1/tiktok/search/top`, `/v1/tiktok/profile/videos`, `/v1/tiktok/search/hashtag` and `/v1/tiktok/song/videos` it is how you tell which rows are from a given country: filter on it when you need only that country. A row whose source omits the country stays null. The `region` request parameter still only sets the proxy."
                                      },
                                      "subreddit": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Reddit subreddit name (search/list items): pass to `/v1/reddit/subreddit/details?subreddit=`"
                                      },
                                      "title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.title"
                                      },
                                      "selftext": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.selftext"
                                      },
                                      "upvote_ratio": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Reddit only: the share of a post's votes that are upvotes, as a fraction from 0 to 1 and usually close to 1 (six live rows measured 1, 1, 1, 0.86, 0.75, 1). Fractional despite the integer type this schema emits for every numeric leaf, the same caveat as `author.ext.average_rating`. Populated on `/v1/reddit/search` rows whose source carries it, and null everywhere else on Reddit including `/v1/reddit/post` and `/v1/reddit/subreddit`."
                                      },
                                      "flair": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.flair"
                                      },
                                      "content_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The language the platform itself tags the post with, when it sends one: Reddit's own language tag on Reddit lanes, and TikTok's caption-language tag (for example `de`) on `/v1/tiktok/trending?feed=local`. Null when the platform could not tell (Reddit `und`, TikTok `un`, common on short or emoji-only captions); absent where the source sends no tag. Never inferred from the text by us: that is `post.computed.language`."
                                      },
                                      "type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.type"
                                      },
                                      "content_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.content_type"
                                      },
                                      "ticker_symbols": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.ticker_symbols",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.ticker_symbols"
                                        }
                                      },
                                      "video_view_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram's legacy 3-second-view count. Historical: Instagram stopped serving it in August 2026 (removed from its web post surface along with the web play count), so fresh `/v1/instagram/post` lookups no longer carry it and no source can restore it. Use `engagement.views` (the play count) instead."
                                      },
                                      "ig_play_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram-only play count (`ig_play_count`). Since mid-July 2026 Instagram's headline play count (`engagement.views`) no longer includes Facebook crosspost views and equals this value; it is surfaced explicitly so you can tell the Instagram-only figure apart and detect any future re-divergence. For combined Instagram + Facebook reach, also fetch the Facebook crosspost via `/v1/facebook/post`. Present on `/v1/instagram/post/stats` and, since the August 2026 views fix, on `/v1/instagram/post` for video posts."
                                      },
                                      "repost_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.repost_count"
                                      },
                                      "media_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.media_type"
                                      },
                                      "text_truncated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.text_truncated"
                                      },
                                      "ip_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.ip_location"
                                      },
                                      "carousel_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.carousel_count"
                                      },
                                      "remix_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.remix_count"
                                      },
                                      "audio_cluster_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram's audio cluster for a reel, as an exact digit string: the id Instagram uses to group different uploads of the same sound. Present on `/v1/instagram/audio/reels` rows and on `/v1/instagram/profile/reels` with `include=stats`; absent on a row when it is not available and on every other surface."
                                      },
                                      "facebook_likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.likes` on this row. A post shared to Facebook arrives from some sources with its Facebook likes already folded into the Instagram count, so the share is subtracted and published here, which keeps `engagement.likes` the Instagram-only figure instagram.com shows on the post. Add the two together for the combined number. Absent when the read carried no Facebook share, and absent on a post whose owner hides the like count, because nothing can be subtracted from a null. A response that excluded a share also carries a note in `data._warnings`."
                                      },
                                      "facebook_comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.comments` on this row, the comment counterpart of `post.ext.facebook_likes`. Each leaf appears only for the count it actually changed, so a post whose likes are hidden but whose comments were reconciled carries this one alone."
                                      },
                                      "instagram_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Instagram-only play count of a video, the same figure on every Instagram endpoint. `engagement.views` keeps each endpoint's established meaning: on `/v1/instagram/profile/reels`, `/v1/instagram/audio/reels`, `/v1/instagram/search/reels` and `/v1/instagram/search/hashtag` it can include the post's Facebook cross-post views, while on `/v1/instagram/post` and `/v1/instagram/post/stats` it is Instagram-only. Read this leaf when you compare one post across endpoints. Absent on photos and when the source did not report the Instagram-only figure."
                                      },
                                      "facebook_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post part of a video's play count, the counterpart of `post.ext.instagram_views`. Present only when the source reported the Facebook part, or a combined total above the Instagram figure. Absent does not mean zero: some sources report the Instagram figure alone even for a cross-posted video."
                                      },
                                      "published_at_epoch": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Raw Unix epoch for `published_at` (seconds, or milliseconds when the upstream sent millis). Present only when the upstream sent a numeric epoch that was normalised to the ISO 8601 `published_at` string. Kept for one deprecation cycle for integrations pinned to the numeric form."
                                      },
                                      "usertags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.usertags",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.usertags"
                                        }
                                      },
                                      "coauthors": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post).",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post)."
                                        }
                                      },
                                      "music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.music"
                                      },
                                      "sponsor_tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                        }
                                      },
                                      "sponsored_disclosed": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "The platform's own disclosure that the post is paid or promotional: on Instagram the paid-partnership label (`is_paid_partnership`) or a tagged brand partner, on TikTok the label TikTok shows viewers (\"Paid partnership\", \"Commission paid\", \"Promotional content\"). `false` when the post carries the flag unset, null when it carries none. Present on `/v1/instagram/post/stats`, `/v1/instagram/search/reels` and `/v1/tiktok/search`; absent on every other endpoint."
                                      },
                                      "ai_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram only: Instagram's AI-content label on the post, as the method Instagram reports: `classifier_score_high` (Instagram detected it, shown as \"Likely made with AI\"), `ai_created` or `ai_edited` (declared or detected as made or edited with AI). Null when the post carries no AI label. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                      },
                                      "story_mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "story_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint."
                                        }
                                      },
                                      "story_reshared_posts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.location"
                                      },
                                      "media": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.media",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.media",
                                          "properties": {
                                            "type": {
                                              "type": "string",
                                              "description": "Leaf at post.ext.media.type"
                                            },
                                            "url": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.media.url"
                                            },
                                            "width": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.width"
                                            },
                                            "height": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.height"
                                            }
                                          }
                                        }
                                      },
                                      "top_comments": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.top_comments",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.top_comments",
                                          "properties": {
                                            "id": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.id"
                                            },
                                            "text": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.text"
                                            },
                                            "username": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.username"
                                            },
                                            "likes": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.top_comments.likes"
                                            },
                                            "published_at": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.published_at"
                                            }
                                          }
                                        }
                                      },
                                      "hashtags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.hashtags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.hashtags"
                                        }
                                      },
                                      "mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentions",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentions"
                                        }
                                      },
                                      "mentioned_user_ids": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentioned_user_ids",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentioned_user_ids"
                                        }
                                      },
                                      "quoted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Threads quote posts: the post this one quotes, as `{ id, url, author: { id, username }, text, media_urls, thumbnail_url }`. A quote post usually carries no caption or media of its own, and the text and video you see on the post's page belong to this attachment, by a different author. It is returned here rather than merged into `post.content`, so `content.*` always stays the outer post's own content and one account's media is never attributed to another. Absent on posts that are not quote posts."
                                      },
                                      "retweeted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.retweeted_post"
                                      },
                                      "quote_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.quote_count"
                                      },
                                      "all_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.all_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.all_media_urls"
                                        }
                                      },
                                      "reaction_counts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.reaction_counts",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.reaction_counts"
                                        }
                                      },
                                      "share_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.share_urn"
                                      },
                                      "post_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.post_type"
                                      },
                                      "activity_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.activity_id"
                                      },
                                      "published_at_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_at_precision"
                                      },
                                      "author_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_urn"
                                      },
                                      "author_headline": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_headline"
                                      },
                                      "author_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_type"
                                      },
                                      "is_repost_quote": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.is_repost_quote"
                                      },
                                      "article": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.article"
                                      },
                                      "reaction_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.reaction_type"
                                      },
                                      "download_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.download_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.download_media_urls"
                                        }
                                      },
                                      "tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.tags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.tags"
                                        }
                                      },
                                      "categoryId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryId"
                                      },
                                      "categoryTitle": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryTitle"
                                      },
                                      "topicCategories": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.topicCategories",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.topicCategories"
                                        }
                                      },
                                      "duration": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.duration"
                                      },
                                      "license": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.license"
                                      },
                                      "madeForKids": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.madeForKids"
                                      },
                                      "defaultAudioLanguage": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.defaultAudioLanguage"
                                      },
                                      "hasPaidProductPlacement": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.hasPaidProductPlacement"
                                      },
                                      "caption": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.caption"
                                      },
                                      "position": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.position"
                                      },
                                      "playlistId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlistId"
                                      },
                                      "videoOwnerChannelId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoOwnerChannelId"
                                      },
                                      "videoPublishedAt": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoPublishedAt"
                                      },
                                      "description": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.description"
                                      },
                                      "default_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.default_language"
                                      },
                                      "localizations": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.localizations"
                                      },
                                      "playlist_item_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_item_id"
                                      },
                                      "playlist_owner_channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_channel_id"
                                      },
                                      "playlist_owner_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_title"
                                      },
                                      "channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.channel_id"
                                      },
                                      "published_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_label"
                                      },
                                      "published_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.published_precision"
                                      },
                                      "title_maybe_translated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.title_maybe_translated"
                                      },
                                      "video_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.video_count"
                                      },
                                      "posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "`/v1/instagram/hashtag` only: the exact number of public posts Instagram counts under the hashtag. Live: it moves between calls minutes apart."
                                      },
                                      "commerce": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.commerce"
                                      },
                                      "on_screen_texts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.on_screen_texts",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.on_screen_texts"
                                        }
                                      },
                                      "topic_tag": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag"
                                      },
                                      "reshare_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.reshare_count"
                                      },
                                      "dsp_ids": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.dsp_ids"
                                      },
                                      "topic_tag_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag_id"
                                      },
                                      "amazon_shop_lists": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_lists",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_lists"
                                        }
                                      },
                                      "amazon_shop_trending_picks": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_trending_picks",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_trending_picks"
                                        }
                                      },
                                      "amazon_shop_curations": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_curations",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_curations"
                                        }
                                      },
                                      "amazon_shop_socials": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_socials",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.amazon_shop_socials"
                                        }
                                      },
                                      "ad": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Ad Library envelope (Facebook `adlibrary/ad` and `adlibrary/company/ads` items): page_id, currency, spend, reach_estimate, publisher_platforms, categories, targeted_or_reached_countries, cta_text, cta_type, link_url, is_active, end_date_iso, display_format, title, video_hd_url, video_sd_url. Absent on every non-ad surface."
                                      },
                                      "apple_music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.apple_music"
                                      },
                                      "feedback_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.feedback_id"
                                      },
                                      "question_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN (`/v1/naver/kin/search`) only: the question's id (Naver's `docId`), read from the row's link. Kin returns one row per answer, so several rows can share it; send `group=question` for one row per question."
                                      },
                                      "answer_no": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: which answer of the question this row is (Naver's `answerNo`), read from the row's link."
                                      },
                                      "answer_nos": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first.",
                                        "items": {
                                          "type": "integer",
                                          "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first."
                                        }
                                      },
                                      "published_at_est": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: the question's date ESTIMATED from its id (`YYYY-MM-DD`, Korea time), never a published date, so `published_at` stays null. Absent for questions older than the calibration table."
                                      },
                                      "date_basis": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "How `post.ext.published_at_est` was derived. `kin_docid_estimate`: interpolated from the question id against question pages whose posted date was read."
                                      },
                                      "event": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.event"
                                      },
                                      "trend": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Trend-board envelope: what TikTok's own trend board says about the row. On `/v1/tiktok/hashtags/popular`: `rank`, `country_code`, `period_days`, `posts` and `views` for the window (not lifetime totals), `industry` / `industry_id` / `industry_label` for the first board the hashtag was read from (null for the overall board), `boards` listing EVERY board it ranks on as `{ industry, industry_id, industry_label, rank }` in board order (so a hashtag in the top 3 overall and on an industry board shows both), `popularity_curve` as `{ date, value }` with value 0 to 100 relative to the window's peak, and `top_creators`. On `/v1/tiktok/videos/popular`: `rank`, `country_code`, `period_days`, `order_by`, `period_views`, `organic_views`, `engagement_rate`, `six_second_view_through_rate`, `content_tags`. Absent on every non-board surface."
                                      },
                                      "updated_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.updated_at"
                                      },
                                      "alt_text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.alt_text"
                                      },
                                      "board_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.board_name"
                                      }
                                    }
                                  }
                                }
                              },
                              "computed": {
                                "type": "object",
                                "description": "Server-computed analytics fields (consistent across platforms)",
                                "properties": {
                                  "engagement_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Computed engagement rate (0..1). Null when the upstream lacks enough signal."
                                  },
                                  "language": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "ISO 639-1 language code detected from the post text. Null when undetectable."
                                  },
                                  "content_category": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Keyword-classified content category (e.g. tech, food, gaming). Null when undetectable."
                                  },
                                  "estimated_reach": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Estimated reach based on views or follower count. Null when uncomputable."
                                  },
                                  "save_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at computed.save_rate"
                                  },
                                  "relevance": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Nested object: computed.relevance",
                                    "properties": {
                                      "p": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.p"
                                      },
                                      "sense": {
                                        "type": "string",
                                        "description": "Leaf at computed.relevance.sense"
                                      },
                                      "depth": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.depth"
                                      },
                                      "spam": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.spam"
                                      }
                                    }
                                  },
                                  "labels": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels"
                                  },
                                  "labels_evidence": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels_evidence"
                                  }
                                }
                              }
                            }
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/audio/reels",
                  "data": {
                    "items": [
                      {
                        "post": {
                          "id": "3916378119790708418",
                          "url": "https://www.instagram.com/reel/DZZxSZsPMbC/",
                          "content": {
                            "text": "Sample comment text (redacted).",
                            "media_urls": "https://scontent-lhr11-1.cdninstagram.com/user_2352da/v/t2/f2/m86/AQMX9YkXpYcag0BMKV8mgFH9IOCQOsRbYeVLWyHW6TJpI9iDgFYp1F4OHFlohf2lkLWYcO8k8GMLr8l0lCnRb3SL49dbmGMgbwoJX6E.mp4?_nc_cat=110&_nc_sid=5e9851&_nc_ht=scontent-lhr11-1.cdninstagram.com&_nc_ohc=ghyYqF9R3rUQ7kNvwGZbVFw&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTg0NzY2NjE3Mjg1OTU0MywiYXNzZXRfYWdlX2RheXMiOjExMywidmlfdXNlY2FzZV9pZCI6MTA4MjcsImR1cmF0aW9uX3MiOjE2LCJ1cmxnZW5fc291cmNlIjoid3d3In0%3D&ccb=17-1&vs=d8a6f0956312d10f&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC9DRDQzQjBCQTEzMTc5NzNEOEJFMzg1MkIyNDg1Q0FCOF92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyLzQ2NEFDNzY2RTc0NUY0NjE2REE1NjlEMkUzOEIwMUJBX2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACau0qzeqZzIBhUCKAJDMywXQDBmZmZmZmYYEmRhc2hfYmFzZWxpbmVfMV92MREAdf4HZZapAQA&_nc_gid=Xn0PJLX8LYla4YVx-mF0lw&_nc_ss=733ba&_nc_zt=28&oh=00_AQNyonJJ18JP4BgfQGpBaH71nsH8c2UuIDI0trL2anka7A&oe=6AC13997",
                            "thumbnail_url": "https://scontent-lhr11-1.cdninstagram.com/user_4c9448/t51.71878-15/718092388_1924325031618594_1979720858354430666_n.jpg?stp=dst-jpegr_e15_tt6&_nc_cat=100&ig_cache_key=MzkxNjM3ODExOTc5MDcwODQxOA%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjY0MC5oZHIudmlkZW9fZGVmYXVsdF9jb3Zlcl9mcmFtZS5DMyJ9&_nc_ohc=MJZHGrz_LwoQ7kNvwFp-Rl2&_nc_oc=AdqzezlTW9288bq_5w9vCOR8_uVpywJRyQenGkPbR0e-m5w36cmMgY5yNo8InFYmuro&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&se=-1&_nc_ht=scontent-lhr11-1.cdninstagram.com&_nc_gid=Xn0PJLX8LYla4YVx-mF0lw&_nc_ss=733ba&oh=00_AQMDPexRw7mdyc-eaTyI-T4WalJeTVhLPQ9Jnj0z8A-7Hg&oe=6AC5256F",
                            "duration_seconds": 16.415
                          },
                          "author": {
                            "username": "user_cde129",
                            "display_name": "user_460978",
                            "avatar_url": "https://example.com/avatars/user_a1d6df.png",
                            "verified": false
                          },
                          "engagement": {
                            "views": 140775,
                            "likes": 5623,
                            "comments": 81,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false
                          },
                          "published_at": "2026-06-10T10:52:09.000Z",
                          "ext": {
                            "media_type": "video",
                            "audio_cluster_id": "1392969992841787",
                            "published_at_epoch": 1781088729,
                            "coauthors": []
                          }
                        },
                        "computed": {
                          "engagement_rate": 0.040519,
                          "language": "pt",
                          "content_category": "other",
                          "estimated_reach": 168930
                        }
                      },
                      {
                        "post": {
                          "id": "3911033752398445653",
                          "url": "https://www.instagram.com/reel/DZGyHnsRbxV/",
                          "content": {
                            "text": "Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted).",
                            "media_urls": "https://scontent-lhr6-2.cdninstagram.com/user_2352da/v/t2/f2/m86/AQPANVGwKMOALa4MQy3hQIcwpwoHM14O_kjkiYCsMJcpkGnG0U8UmTqGV_FT2EPUKFYlVcwUlkLMQRGJJxeRwJDDq_1jUqVGAQiFFqI.mp4?_nc_cat=103&_nc_sid=5e9851&_nc_ht=scontent-lhr6-2.cdninstagram.com&_nc_ohc=ySh_9yuecqMQ7kNvwH217iN&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTUxMzY0MzU5MDI1NzU1OCwiYXNzZXRfYWdlX2RheXMiOjEyMSwidmlfdXNlY2FzZV9pZCI6MTA4MjcsImR1cmF0aW9uX3MiOjgsInVybGdlbl9zb3VyY2UiOiJ3d3cifQ%3D%3D&ccb=17-1&vs=2ebd4a0cc45eefae&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC9BNzRCRTA0MThGOTAzNTQ2RjIzMEM4QUNFQUY2NUVCNl92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyL0ZCNDcwNjVBMzEwNzA0MDAwNDEwNjA1QzhFRjNBRkFEX2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACasrpzI06mwBRUCKAJDMywXQCCqfvnbItEYEmRhc2hfYmFzZWxpbmVfMV92MREAdf4HZZapAQA&_nc_gid=Xn0PJLX8LYla4YVx-mF0lw&_nc_ss=733ba&_nc_zt=28&oh=00_AQOYV5wv0uGKu7l-0my7a5LQKKAN1P7AtirK5kB_H_1D_w&oe=6AC13194",
                            "thumbnail_url": "https://scontent-lhr11-1.cdninstagram.com/user_4c9448/t51.82787-15/723190854_18467060782109823_6554603917680349539_n.jpg?stp=dst-jpg_e35_p750x750_sh2.08_tt6&_nc_cat=107&ig_cache_key=MzkxMTAzMzc1MjM5ODQ0NTY1MzE4NDY3MDYwNzc5MTA5ODIz.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjEyMTUuc2RyLnZpZGVvX2RlZmF1bHRfY292ZXJfZnJhbWUuQzMifQ%3D%3D&_nc_ohc=_YyrN-EochYQ7kNvwEj_Gs5&_nc_oc=AdrimKgyGK_7tquRlM-eFosC0Yu-Nan8LN-mYcrww6rnd6fPldiOzZpIJxokQ5kTCwU&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-lhr11-1.cdninstagram.com&_nc_gid=Xn0PJLX8LYla4YVx-mF0lw&_nc_ss=733ba&oh=00_AQPRX_0h1AkCQLtsUFzic3g_7POvzm6iMRWSpw8aw0RFRQ&oe=6AC5306F",
                            "duration_seconds": 8.334
                          },
                          "author": {
                            "username": "user_c1c683",
                            "display_name": "user_bb3970",
                            "avatar_url": "https://example.com/avatars/user_46edcf.png",
                            "verified": true
                          },
                          "engagement": {
                            "views": 59571,
                            "likes": 2771,
                            "comments": 21,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false
                          },
                          "published_at": "2026-06-04T21:36:17.000Z",
                          "ext": {
                            "media_type": "video",
                            "audio_cluster_id": "1392969992841787",
                            "published_at_epoch": 1780608977,
                            "coauthors": [
                              {
                                "id": "user_d623d8",
                                "username": "user_bb33eb",
                                "full_name": "user_9052c0",
                                "is_verified": false,
                                "profile_pic_url": "https://example.com/user_0635a3"
                              }
                            ]
                          }
                        },
                        "computed": {
                          "engagement_rate": 0.046868,
                          "language": "pt",
                          "content_category": "other",
                          "estimated_reach": 71485
                        }
                      }
                    ],
                    "next_cursor": "sc2.eyJzIjoiViIsImMiOiI2OGY0YjYzODVkM2YxYTRjZDk2MzU5YTE5NTQzOWQ5MWUzYTlmMGQ5YjJhODRiMDEwZGFlZTA5ZTc5NWNkMmMyIn0",
                    "total": 273734,
                    "is_trending": true,
                    "sound": {
                      "track_title": "Freakin’ Out",
                      "artist": "Dexter and The Moonrocks",
                      "is_original": false,
                      "creator_username": null,
                      "created_at": null,
                      "duration_seconds": 217.897,
                      "is_explicit": false,
                      "spotify_track_id": "27uVDSmTHBbQ148konTkt8",
                      "first_reel_url": null
                    },
                    "dropped": 0,
                    "_warnings": [
                      "post.engagement.likes: the Facebook cross-post share was excluded on 4 of 12 rows, so likes and comments are Instagram's own counts, matching what instagram.com shows. The excluded share is on post.ext.facebook_likes and post.ext.facebook_comments."
                    ]
                  },
                  "credits_used": 1,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": "sc.eyJ2IjoyLCJjIjoic2MyLmV5SnpJam9pVmlJc0ltTWlPaUkyT0dZMFlqWXpPRFZrTTJZeFlUUmpaRGsyTXpVNVlURTVOVFF6T1dRNU1XVXpZVGxtTUdRNVlqSmhPRFJpTURFd1pHRmxaVEE1WlRjNU5XTmtNbU15SW4wIiwiZSI6Imluc3RhZ3JhbS9hdWRpby9yZWVscyIsInAiOiJjdXJzb3IifQ",
                    "has_more": true,
                    "page_size": 12
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T07:28:24.274Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/search/hashtag": {
      "get": {
        "summary": "Feed of a known hashtag, 1 credit a page, every ranking paginates (for keyword or topic discovery use instagram/search/reels)",
        "description": "1 credit a page (plus 1 per creator with `include=country`). For keyword, topic or brand discovery (posts about a phrase), use `GET /v1/instagram/search/reels?query=` instead. Use this endpoint when you already have a specific hashtag. For the hashtag's exact post count, call /v1/instagram/hashtag?hashtag=<tag> (1 credit). Returns public Instagram posts for a hashtag from Instagram's native hashtag feed. Each post includes shortcode, URL, caption, media URLs, engagement counts, and the author. Pass `type` to choose the ranking (`top`, `recent`, or `clips` for reels only). All three rankings paginate: pass `pagination.next_cursor` back as `cursor` with the same `type` to page deeper. `recent` walks back through the feed newest first, `top` and `clips` page through Instagram's ranked posts and reels, and the walk ends when Instagram has no more for that ranking (`has_more: false`). Instagram's own post count (`instagram/hashtag`) counts every post ever tagged, and its feeds expose only part of that, so a walk ends well before that number on a large tag. To get many pages in one call, send `max_items` (up to 5000) or `max_pages` (up to 50), each page billed at 1 credit, with `max_credits` to cap the spend. A hashtag feed mixes photos and reels, so engagement.views is a number on the video rows and null on the photo rows. Pass `type=clips` for a reels-only page where every row carries a view count. Note: post.author.display_name is not available on this endpoint, so join on post.author.username, or pass it to /v1/instagram/profile?handle= for the name. Note: engagement.shares and engagement.saves are null on this endpoint (neither hashtag upstream carries a per-post share or save count); for a per-post share count pass a result URL to /v1/instagram/post/stats. Saves are platform-private. Instagram exposes no numeric save metric on any surface, and it is never fabricated. On a reel also posted to Facebook, `engagement.views` can include its Facebook views: `post.ext.instagram_views` is the Instagram-only figure, the same on every Instagram endpoint, and `post.ext.facebook_views` is the Facebook part when the source reports it.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_search_hashtag",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 1,
        "x-credit-cost-min": 1,
        "x-credit-cost-max": 31,
        "x-credit-cost-formula": "1 credit per page, on every `type`. `max_items` and `max_pages` walk more pages in one call at 1 credit each, and `max_credits` caps the total. A page Instagram returns empty is not charged. `include=country` holds 30 more credits a page and keeps 1 per creator whose declared country came back, refunding a creator who publishes none or cannot be found, so a page with it costs 1 to 31. With `max_pages`, `max_items` or `max_credits`, each page walked is billed at this price (a cached page is free), and `max_credits` caps the total. With `seen`, a page's price falls with its share of rows you already received under that id; credits for joined data (`include=`) are never discounted.",
        "parameters": [
          {
            "name": "hashtag",
            "in": "query",
            "required": true,
            "description": "The hashtag to search for. The leading # is optional.",
            "schema": {
              "type": "string"
            },
            "example": "makeup"
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Ranking of the returned posts: `top` (default), `recent` (newest first), or `clips` (reels only). Every ranking paginates.",
            "schema": {
              "type": "string",
              "enum": [
                "top",
                "recent",
                "clips"
              ]
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Pagination cursor. Use the `next_cursor` from the previous response and send the same `type` again.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "safe_url",
            "in": "query",
            "required": false,
            "description": "When true, returns URL-safe media links suitable for embedding.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "include",
            "in": "query",
            "required": false,
            "description": "Send `country` to add each post's creator country as `post.ext.author_country`: the country the creator declares on Instagram's About this account panel, not where the post was filmed, and null when the creator publishes none. Every row carries the creator's numeric id as `post.ext.author_id`, which is what it is read by. 1 extra credit per creator whose country came back; two posts by one creator cost one lookup, a creator looked up in the last 30 days is free, and a creator who publishes none or cannot be found is refunded. A typo is a free 400.",
            "schema": {
              "type": "string",
              "enum": [
                "country"
              ]
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "Only rows published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Rows older than it are left off the page. With `type=recent` the pages run from newest to oldest (the posts inside one page are not in date order), so the first page with no post on or after the date ends the walk. It comes back empty,`next_cursor` is not returned and `pagination.stopped_at` is `since`, and you pay for the pages you walk and no more. Other `type` values are not in date order, so there the walk does not stop at the date and each page costs what a page costs even when every row on it is filtered out. A row with no date is kept. `published_after`, `start_date`, `from_date`, `publish_time` (`yesterday`, `this-week`, `this-month`, `last-3-months`, `last-6-months`) and `max_age_days` are accepted and applied as `since`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "description": "Only rows published on or before this date: YYYY-MM-DD (that whole UTC day is included) or an ISO 8601 timestamp. Newer rows are left off each page and the walk does not stop, so older pages follow. A row with no date is kept. `published_before`, `end_date` and `to_date` are accepted and applied as `until`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "min_views",
            "in": "query",
            "required": false,
            "description": "Keep only rows with at least this many views (`post.engagement.views`). A row whose view count is unknown is discarded, so every returned row meets the floor. Filtering runs on our side after each page is fetched, so every page walked is billed as usual; `data.walk.discarded` counts what was removed and why. Each page is its own entry in `GET /v1/credits/transactions`, under the page's request id listed in `data.walk.request_ids`.",
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          },
          {
            "name": "max_age_days",
            "in": "query",
            "required": false,
            "description": "Keep only rows published within this many days (`post.published_at`), 1 to 3650. A row with no date is discarded. Filtering runs on our side after each page is fetched, so every page walked is billed as usual; `data.walk.discarded` counts what was removed and why. Each page is its own entry in `GET /v1/credits/transactions`, under the page's request id listed in `data.walk.request_ids`.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 3650
            }
          },
          {
            "name": "sort_rows",
            "in": "query",
            "required": false,
            "description": "`views`: return the kept rows ordered by view count, highest first, across every page walked. Rows without a view count go last.",
            "schema": {
              "type": "string",
              "enum": [
                "views"
              ]
            }
          },
          {
            "name": "max_pages",
            "in": "query",
            "required": false,
            "description": "1 to 50 (default 1, or 50 when `max_items` or `max_credits` is sent). Walk up to this many pages in one call and return the rows from all of them (after any filter). Each page walked is billed exactly as one call to this endpoint (a cached page is free) and counts against your rate limit; its charge and any refund are recorded under the page's own request id, listed in `data.walk.request_ids`. The walk stops early at the last page, or when the request's time budget runs low; `data.walk.stopped` says why (`end`, `max_pages`, `max_items`, `max_credits`, `time_budget`, `page_error`) and `pagination.next_cursor` continues from where it stopped.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "max_items",
            "in": "query",
            "required": false,
            "description": "1 to 5000. Get more in one call: keep walking pages until the response holds at least this many rows (after any filter), then stop with `data.walk.stopped: \"max_items\"`. The last page is returned whole (it was billed), so `data.items` can hold up to one page more than this, and `pagination.next_cursor` resumes right after it without skipping a row. Walks up to 50 pages unless `max_pages` says fewer; each page is billed as one call (a cached page is free). Add `max_credits` to cap the spend. A long walk can stop on the time budget first (`\"time_budget\"`): send the returned cursor with the same params to continue.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5000
            }
          },
          {
            "name": "max_credits",
            "in": "query",
            "required": false,
            "description": "1 to 100000. The most this call may spend, across every page it walks. A page starts only while the credits already spent plus that page's price (or, when higher, the most any page of this walk has cost) still fit, so the call never goes past it; the walk then stops with `data.walk.stopped: \"max_credits\"` and the cursor to resume. Sent alone, it walks as far as the budget goes (up to 50 pages). A value below the price of one page is a free 400 whose `error.details.page_credits` names that price. Credits a row join (`include=`) adds are known only once a page has run, so page 1 is checked against its own price.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100000
            }
          },
          {
            "name": "seen",
            "in": "query",
            "required": false,
            "description": "An id you choose (1 to 64 letters, digits, `.`, `_` or `-`). Rows your account already received under the same `seen` id are removed from the page, and the page price falls with the share of repeats: page credits x new rows / rows on the page, rounded up, so a page of nothing but repeats is free. Only the page's own price is discounted: credits for joined data (`include=`) are charged only for rows you have not received, and are never discounted. The memory lasts 24 hours from the last call that used the id, holds row ids only, and is private to your account. Use one id across a set of related searches; `data.walk.repeats` counts what was removed.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/search/hashtag"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of canonical post wrappers ({ post, computed })",
                          "items": {
                            "type": "object",
                            "description": "Canonical post wrapper",
                            "properties": {
                              "post": {
                                "type": "object",
                                "description": "Canonical Post object (unified across all platforms)",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "Platform-specific post ID (always a string; numeric upstream IDs are stringified)"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Direct URL to the post on the source platform"
                                  },
                                  "content": {
                                    "type": "object",
                                    "description": "Post content fields (text, media, thumbnail, duration)",
                                    "properties": {
                                      "text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Post caption, description, or text content"
                                      },
                                      "media_urls": {
                                        "type": [
                                          "string",
                                          "array",
                                          "null"
                                        ],
                                        "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels.",
                                        "items": {
                                          "type": "string",
                                          "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels."
                                        }
                                      },
                                      "thumbnail_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to thumbnail image"
                                      },
                                      "duration_seconds": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Video/clip duration in seconds (null for non-video posts)"
                                      }
                                    }
                                  },
                                  "author": {
                                    "type": "object",
                                    "description": "Subset of Author fields for the post creator",
                                    "properties": {
                                      "username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author username"
                                      },
                                      "display_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author display name"
                                      },
                                      "avatar_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to author profile picture"
                                      },
                                      "verified": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Whether the author account is verified"
                                      }
                                    }
                                  },
                                  "engagement": {
                                    "type": "object",
                                    "description": "Engagement counts",
                                    "properties": {
                                      "views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "View count (if available). For Instagram video/reels this is the play count: the headline 'Views' the IG app shows. Instagram removed per-post play counts from its public web pages in August 2026, so `GET /v1/instagram/post` now fills the count automatically from a second source within the same call: videos and reels keep a numeric `views` with no extra endpoint or workaround. Note: since mid-July 2026 Instagram's play count is Instagram-only. It no longer includes Facebook crosspost views (Meta-side change; the app UI changed identically). For combined reach, also fetch the Facebook crosspost via `/v1/facebook/post`."
                                      },
                                      "likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Like / reaction count"
                                      },
                                      "comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Comment count. Note: on `GET /v1/instagram/post` this is Instagram's `edge_media_to_parent_comment.count` (top-level comments); the IG list endpoints report the mobile `comment_count` total (includes replies). Both land on this same field."
                                      },
                                      "shares": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Share / repost / retweet count. On Instagram this is `reshare_count` (the paper-plane Share / Send count) and it exists only on Instagram's mobile surface, so it is returned by `/v1/instagram/post/stats`, `/v1/instagram/profile/reels/full`, and `/v1/instagram/profile/posts/full`. The web-sourced Instagram list and search endpoints return `null` (never fabricated)."
                                      },
                                      "saves": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Save / bookmark count. `null` on Instagram: the save count is platform-private and Instagram exposes no numeric save metric on any surface (never fabricated)."
                                      }
                                    }
                                  },
                                  "flags": {
                                    "type": "object",
                                    "description": "Boolean flags on the post",
                                    "properties": {
                                      "nsfw": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "NSFW flag (null when platform does not surface)"
                                      },
                                      "spoiler": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Spoiler flag (null when platform does not surface)"
                                      },
                                      "pinned": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Pinned-to-profile flag (null when platform does not surface)"
                                      },
                                      "deleted": {
                                        "type": "boolean",
                                        "description": "Whether the post is tombstoned (always present)"
                                      },
                                      "likes_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the creator has hidden the like count. `engagement.likes` is `null` in that case (never the platform's decoy preview number). Absent on normal posts."
                                      },
                                      "comments_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the upstream reports the comment count as hidden. `engagement.comments` is `null` in that case. Absent on normal posts."
                                      },
                                      "shares_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.shares_hidden"
                                      },
                                      "views_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.views_hidden"
                                      },
                                      "saves_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.saves_hidden"
                                      }
                                    }
                                  },
                                  "published_at": {
                                    "type": [
                                      "string",
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Post creation timestamp as an ISO 8601 UTC string. When the upstream sent a Unix epoch it is converted here and the raw epoch is preserved under `post.ext.published_at_epoch` for one deprecation cycle."
                                  },
                                  "ext": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Platform-specific passthrough fields for cross-endpoint chains (present only on platforms that surface them)",
                                    "properties": {
                                      "music_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok music/clip id (exact string): pass to `/v1/tiktok/song/videos?clipId=` to find videos using the same sound"
                                      },
                                      "matched_song_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The catalogue song TikTok matched the video's sound to, as an exact digit string. An official clip and the original sounds creators upload with it have different `music_id` values and the same `matched_song_id`, so group rows on it to count every use of one song. It is not a clipId: `/v1/tiktok/song` and `/v1/tiktok/song/videos` do not accept it. `/v1/tiktok/search/music` carries it on each sound, so a search on the song's title and artist, kept to the sounds with the same `matched_song_id`, gives the song's official sounds and their `video_count`. Absent when TikTok matched the sound to no song, and on rows served from a source that does not report the match."
                                      },
                                      "matched_song_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the song in `matched_song_id`. Absent when there is no matched song."
                                      },
                                      "matched_song_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist of the song in `matched_song_id`, as TikTok's catalogue names it. Absent when there is no matched song."
                                      },
                                      "music_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the video's own sound (`music_id`). An uploaded sound is titled like `original sound - <handle>`; the song it plays, when TikTok recognised one, is `matched_song_title`."
                                      },
                                      "music_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist TikTok shows for the video's own sound. On an original sound this is the uploader's display name, not the song's artist; use `matched_song_artist` for that."
                                      },
                                      "music_is_original": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "TikTok only. `true` when the video's sound is an original sound a creator uploaded, `false` when it is a catalogue track. Absent when the source does not say."
                                      },
                                      "author_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's platform-native numeric user id. On TikTok search and list items, pass to `/v1/tiktok/profile?user_id=` for the creator's current follower count (survives username changes). On Instagram `/v1/instagram/search/reels`, `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` items it is present on every row, accepted by `/v1/instagram/profile/country?user_id=` and `/v1/instagram/basic-profile?userId=`. On Facebook it appears when the upstream exposed a numeric actor id and no real handle."
                                      },
                                      "author_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The posting account's profile URL, so a matching post can be followed to its account. Present on `/v1/facebook/search/posts` rows: the vanity or `/people/<name>/<id>/` URL when Facebook sends one, otherwise `https://www.facebook.com/profile.php?id=<numeric id>` built from the account id. Pass it as `url` to `/v1/facebook/profile` (or to `/v1/prism/profiles` with `platform: facebook`). Null when the row names neither an account URL nor a numeric account id. Absent on other endpoints."
                                      },
                                      "author_followers": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "The creator's follower count as embedded in the search payload itself, when the search source happens to carry one. On Instagram `search/reels` it is null on a plain call, because Instagram stopped sending follower counts in its search payload in August 2026; send `include=creator` (or `country`) and it is filled from the creator's profile, 2 credits per creator looked up. It stays null when that lookup does not resolve."
                                      },
                                      "author_following": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_following"
                                      },
                                      "author_posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_posts_count"
                                      },
                                      "author_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The free text the author wrote in their profile's location field, exactly as written (for example `Johannesburg, South Africa`). It is not a country code and is not checked. Present on X tweet and reply rows; null or absent when the author left it blank."
                                      },
                                      "in_reply_to_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_id"
                                      },
                                      "in_reply_to_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_username"
                                      },
                                      "conversation_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.conversation_id"
                                      },
                                      "author_country": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's country. On Instagram it is the country the creator declares on the About this account panel, as a country name (for example `Spain`), and it is not where the post was filmed. It is present on `/v1/instagram/search/reels` when the request sends `include=creator`, `include=country` or `country`, and on `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` when it sends `include=country`, filled by looking the creator up. On YouTube rows joined with `include=channel` it is the channel's own country as an ISO 3166-1 alpha-2 code (for example `ZA`). Null when the platform publishes no country for the creator or the lookup did not resolve, and nothing is guessed; absent on a plain call."
                                      },
                                      "author_public_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact email on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public email or the lookup did not resolve; absent on a plain call."
                                      },
                                      "author_public_phone": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact phone number on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public phone or the lookup did not resolve; absent on a plain call."
                                      },
                                      "download_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "How many times the video has been saved to a device. TikTok only, and distinct from `engagement.saves`: a save keeps the video in a private collection on the platform, a download takes a copy off it, and TikTok counts the two separately. Present on TikTok post, search and post-list responses; absent everywhere else."
                                      },
                                      "region": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only: the country TikTok registers the video to, as an ISO 3166-1 alpha-2 code (normally the creator's account country when they posted). It is not the viewer's country, not the `region` you requested, and not a language. On `/v1/tiktok/trending`, `/v1/tiktok/search`, `/v1/tiktok/search/top`, `/v1/tiktok/profile/videos`, `/v1/tiktok/search/hashtag` and `/v1/tiktok/song/videos` it is how you tell which rows are from a given country: filter on it when you need only that country. A row whose source omits the country stays null. The `region` request parameter still only sets the proxy."
                                      },
                                      "subreddit": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Reddit subreddit name (search/list items): pass to `/v1/reddit/subreddit/details?subreddit=`"
                                      },
                                      "title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.title"
                                      },
                                      "selftext": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.selftext"
                                      },
                                      "upvote_ratio": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Reddit only: the share of a post's votes that are upvotes, as a fraction from 0 to 1 and usually close to 1 (six live rows measured 1, 1, 1, 0.86, 0.75, 1). Fractional despite the integer type this schema emits for every numeric leaf, the same caveat as `author.ext.average_rating`. Populated on `/v1/reddit/search` rows whose source carries it, and null everywhere else on Reddit including `/v1/reddit/post` and `/v1/reddit/subreddit`."
                                      },
                                      "flair": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.flair"
                                      },
                                      "content_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The language the platform itself tags the post with, when it sends one: Reddit's own language tag on Reddit lanes, and TikTok's caption-language tag (for example `de`) on `/v1/tiktok/trending?feed=local`. Null when the platform could not tell (Reddit `und`, TikTok `un`, common on short or emoji-only captions); absent where the source sends no tag. Never inferred from the text by us: that is `post.computed.language`."
                                      },
                                      "type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.type"
                                      },
                                      "content_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.content_type"
                                      },
                                      "ticker_symbols": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.ticker_symbols",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.ticker_symbols"
                                        }
                                      },
                                      "video_view_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram's legacy 3-second-view count. Historical: Instagram stopped serving it in August 2026 (removed from its web post surface along with the web play count), so fresh `/v1/instagram/post` lookups no longer carry it and no source can restore it. Use `engagement.views` (the play count) instead."
                                      },
                                      "ig_play_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram-only play count (`ig_play_count`). Since mid-July 2026 Instagram's headline play count (`engagement.views`) no longer includes Facebook crosspost views and equals this value; it is surfaced explicitly so you can tell the Instagram-only figure apart and detect any future re-divergence. For combined Instagram + Facebook reach, also fetch the Facebook crosspost via `/v1/facebook/post`. Present on `/v1/instagram/post/stats` and, since the August 2026 views fix, on `/v1/instagram/post` for video posts."
                                      },
                                      "repost_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.repost_count"
                                      },
                                      "media_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.media_type"
                                      },
                                      "text_truncated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.text_truncated"
                                      },
                                      "ip_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.ip_location"
                                      },
                                      "carousel_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.carousel_count"
                                      },
                                      "remix_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.remix_count"
                                      },
                                      "audio_cluster_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram's audio cluster for a reel, as an exact digit string: the id Instagram uses to group different uploads of the same sound. Present on `/v1/instagram/audio/reels` rows and on `/v1/instagram/profile/reels` with `include=stats`; absent on a row when it is not available and on every other surface."
                                      },
                                      "facebook_likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.likes` on this row. A post shared to Facebook arrives from some sources with its Facebook likes already folded into the Instagram count, so the share is subtracted and published here, which keeps `engagement.likes` the Instagram-only figure instagram.com shows on the post. Add the two together for the combined number. Absent when the read carried no Facebook share, and absent on a post whose owner hides the like count, because nothing can be subtracted from a null. A response that excluded a share also carries a note in `data._warnings`."
                                      },
                                      "facebook_comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.comments` on this row, the comment counterpart of `post.ext.facebook_likes`. Each leaf appears only for the count it actually changed, so a post whose likes are hidden but whose comments were reconciled carries this one alone."
                                      },
                                      "instagram_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Instagram-only play count of a video, the same figure on every Instagram endpoint. `engagement.views` keeps each endpoint's established meaning: on `/v1/instagram/profile/reels`, `/v1/instagram/audio/reels`, `/v1/instagram/search/reels` and `/v1/instagram/search/hashtag` it can include the post's Facebook cross-post views, while on `/v1/instagram/post` and `/v1/instagram/post/stats` it is Instagram-only. Read this leaf when you compare one post across endpoints. Absent on photos and when the source did not report the Instagram-only figure."
                                      },
                                      "facebook_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post part of a video's play count, the counterpart of `post.ext.instagram_views`. Present only when the source reported the Facebook part, or a combined total above the Instagram figure. Absent does not mean zero: some sources report the Instagram figure alone even for a cross-posted video."
                                      },
                                      "published_at_epoch": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Raw Unix epoch for `published_at` (seconds, or milliseconds when the upstream sent millis). Present only when the upstream sent a numeric epoch that was normalised to the ISO 8601 `published_at` string. Kept for one deprecation cycle for integrations pinned to the numeric form."
                                      },
                                      "usertags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.usertags",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.usertags"
                                        }
                                      },
                                      "coauthors": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post).",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post)."
                                        }
                                      },
                                      "music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.music"
                                      },
                                      "sponsor_tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                        }
                                      },
                                      "sponsored_disclosed": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "The platform's own disclosure that the post is paid or promotional: on Instagram the paid-partnership label (`is_paid_partnership`) or a tagged brand partner, on TikTok the label TikTok shows viewers (\"Paid partnership\", \"Commission paid\", \"Promotional content\"). `false` when the post carries the flag unset, null when it carries none. Present on `/v1/instagram/post/stats`, `/v1/instagram/search/reels` and `/v1/tiktok/search`; absent on every other endpoint."
                                      },
                                      "ai_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram only: Instagram's AI-content label on the post, as the method Instagram reports: `classifier_score_high` (Instagram detected it, shown as \"Likely made with AI\"), `ai_created` or `ai_edited` (declared or detected as made or edited with AI). Null when the post carries no AI label. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                      },
                                      "story_mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "story_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint."
                                        }
                                      },
                                      "story_reshared_posts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.location"
                                      },
                                      "media": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.media",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.media",
                                          "properties": {
                                            "type": {
                                              "type": "string",
                                              "description": "Leaf at post.ext.media.type"
                                            },
                                            "url": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.media.url"
                                            },
                                            "width": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.width"
                                            },
                                            "height": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.height"
                                            }
                                          }
                                        }
                                      },
                                      "top_comments": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.top_comments",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.top_comments",
                                          "properties": {
                                            "id": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.id"
                                            },
                                            "text": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.text"
                                            },
                                            "username": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.username"
                                            },
                                            "likes": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.top_comments.likes"
                                            },
                                            "published_at": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.published_at"
                                            }
                                          }
                                        }
                                      },
                                      "hashtags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.hashtags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.hashtags"
                                        }
                                      },
                                      "mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentions",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentions"
                                        }
                                      },
                                      "mentioned_user_ids": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentioned_user_ids",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentioned_user_ids"
                                        }
                                      },
                                      "quoted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Threads quote posts: the post this one quotes, as `{ id, url, author: { id, username }, text, media_urls, thumbnail_url }`. A quote post usually carries no caption or media of its own, and the text and video you see on the post's page belong to this attachment, by a different author. It is returned here rather than merged into `post.content`, so `content.*` always stays the outer post's own content and one account's media is never attributed to another. Absent on posts that are not quote posts."
                                      },
                                      "retweeted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.retweeted_post"
                                      },
                                      "quote_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.quote_count"
                                      },
                                      "all_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.all_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.all_media_urls"
                                        }
                                      },
                                      "reaction_counts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.reaction_counts",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.reaction_counts"
                                        }
                                      },
                                      "share_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.share_urn"
                                      },
                                      "post_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.post_type"
                                      },
                                      "activity_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.activity_id"
                                      },
                                      "published_at_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_at_precision"
                                      },
                                      "author_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_urn"
                                      },
                                      "author_headline": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_headline"
                                      },
                                      "author_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_type"
                                      },
                                      "is_repost_quote": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.is_repost_quote"
                                      },
                                      "article": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.article"
                                      },
                                      "reaction_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.reaction_type"
                                      },
                                      "download_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.download_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.download_media_urls"
                                        }
                                      },
                                      "tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.tags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.tags"
                                        }
                                      },
                                      "categoryId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryId"
                                      },
                                      "categoryTitle": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryTitle"
                                      },
                                      "topicCategories": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.topicCategories",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.topicCategories"
                                        }
                                      },
                                      "duration": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.duration"
                                      },
                                      "license": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.license"
                                      },
                                      "madeForKids": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.madeForKids"
                                      },
                                      "defaultAudioLanguage": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.defaultAudioLanguage"
                                      },
                                      "hasPaidProductPlacement": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.hasPaidProductPlacement"
                                      },
                                      "caption": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.caption"
                                      },
                                      "position": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.position"
                                      },
                                      "playlistId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlistId"
                                      },
                                      "videoOwnerChannelId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoOwnerChannelId"
                                      },
                                      "videoPublishedAt": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoPublishedAt"
                                      },
                                      "description": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.description"
                                      },
                                      "default_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.default_language"
                                      },
                                      "localizations": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.localizations"
                                      },
                                      "playlist_item_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_item_id"
                                      },
                                      "playlist_owner_channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_channel_id"
                                      },
                                      "playlist_owner_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_title"
                                      },
                                      "channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.channel_id"
                                      },
                                      "published_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_label"
                                      },
                                      "published_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.published_precision"
                                      },
                                      "title_maybe_translated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.title_maybe_translated"
                                      },
                                      "video_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.video_count"
                                      },
                                      "posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "`/v1/instagram/hashtag` only: the exact number of public posts Instagram counts under the hashtag. Live: it moves between calls minutes apart."
                                      },
                                      "commerce": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.commerce"
                                      },
                                      "on_screen_texts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.on_screen_texts",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.on_screen_texts"
                                        }
                                      },
                                      "topic_tag": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag"
                                      },
                                      "reshare_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.reshare_count"
                                      },
                                      "dsp_ids": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.dsp_ids"
                                      },
                                      "topic_tag_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag_id"
                                      },
                                      "amazon_shop_lists": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_lists",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_lists"
                                        }
                                      },
                                      "amazon_shop_trending_picks": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_trending_picks",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_trending_picks"
                                        }
                                      },
                                      "amazon_shop_curations": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_curations",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_curations"
                                        }
                                      },
                                      "amazon_shop_socials": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_socials",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.amazon_shop_socials"
                                        }
                                      },
                                      "ad": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Ad Library envelope (Facebook `adlibrary/ad` and `adlibrary/company/ads` items): page_id, currency, spend, reach_estimate, publisher_platforms, categories, targeted_or_reached_countries, cta_text, cta_type, link_url, is_active, end_date_iso, display_format, title, video_hd_url, video_sd_url. Absent on every non-ad surface."
                                      },
                                      "apple_music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.apple_music"
                                      },
                                      "feedback_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.feedback_id"
                                      },
                                      "question_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN (`/v1/naver/kin/search`) only: the question's id (Naver's `docId`), read from the row's link. Kin returns one row per answer, so several rows can share it; send `group=question` for one row per question."
                                      },
                                      "answer_no": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: which answer of the question this row is (Naver's `answerNo`), read from the row's link."
                                      },
                                      "answer_nos": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first.",
                                        "items": {
                                          "type": "integer",
                                          "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first."
                                        }
                                      },
                                      "published_at_est": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: the question's date ESTIMATED from its id (`YYYY-MM-DD`, Korea time), never a published date, so `published_at` stays null. Absent for questions older than the calibration table."
                                      },
                                      "date_basis": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "How `post.ext.published_at_est` was derived. `kin_docid_estimate`: interpolated from the question id against question pages whose posted date was read."
                                      },
                                      "event": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.event"
                                      },
                                      "trend": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Trend-board envelope: what TikTok's own trend board says about the row. On `/v1/tiktok/hashtags/popular`: `rank`, `country_code`, `period_days`, `posts` and `views` for the window (not lifetime totals), `industry` / `industry_id` / `industry_label` for the first board the hashtag was read from (null for the overall board), `boards` listing EVERY board it ranks on as `{ industry, industry_id, industry_label, rank }` in board order (so a hashtag in the top 3 overall and on an industry board shows both), `popularity_curve` as `{ date, value }` with value 0 to 100 relative to the window's peak, and `top_creators`. On `/v1/tiktok/videos/popular`: `rank`, `country_code`, `period_days`, `order_by`, `period_views`, `organic_views`, `engagement_rate`, `six_second_view_through_rate`, `content_tags`. Absent on every non-board surface."
                                      },
                                      "updated_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.updated_at"
                                      },
                                      "alt_text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.alt_text"
                                      },
                                      "board_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.board_name"
                                      }
                                    }
                                  }
                                }
                              },
                              "computed": {
                                "type": "object",
                                "description": "Server-computed analytics fields (consistent across platforms)",
                                "properties": {
                                  "engagement_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Computed engagement rate (0..1). Null when the upstream lacks enough signal."
                                  },
                                  "language": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "ISO 639-1 language code detected from the post text. Null when undetectable."
                                  },
                                  "content_category": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Keyword-classified content category (e.g. tech, food, gaming). Null when undetectable."
                                  },
                                  "estimated_reach": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Estimated reach based on views or follower count. Null when uncomputable."
                                  },
                                  "save_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at computed.save_rate"
                                  },
                                  "relevance": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Nested object: computed.relevance",
                                    "properties": {
                                      "p": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.p"
                                      },
                                      "sense": {
                                        "type": "string",
                                        "description": "Leaf at computed.relevance.sense"
                                      },
                                      "depth": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.depth"
                                      },
                                      "spam": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.spam"
                                      }
                                    }
                                  },
                                  "labels": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels"
                                  },
                                  "labels_evidence": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels_evidence"
                                  }
                                }
                              }
                            }
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/search/hashtag",
                  "data": {
                    "items": [
                      {
                        "post": {
                          "id": "3998350771829297052",
                          "url": "https://www.instagram.com/reel/Dd8_tfCS0-c/",
                          "content": {
                            "text": "Sample comment text (redacted).",
                            "media_urls": "https://instagram.fkiv8-1.fna.fbcdn.net/o1/v/t2/f2/m86/AQNXPl0G7EUHNskHsVgpSKe81MtQ17ivavBXvNF9pJgsGr3MVGsB8KBzVP8hv4JFnExfQi8g6EE_wBu1p07wSnrlCXJ6VwfVKarorLk.mp4?_nc_cat=101&_nc_oc=AdopBMfdA8V74wg4oJX7NmAUSO8-W7aCgndQXFL2jDw5w8ajZDO41ALsG-pgPOeGphw&_nc_sid=5e9851&_nc_ht=instagram.fkiv8-1.fna.fbcdn.net&_nc_ohc=_A2lIC1CZnwQ7kNvwEOLJEM&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MjE2ODcyOTQ1MDY5MzEzOCwiYXNzZXRfYWdlX2RheXMiOjAsInZpX3VzZWNhc2VfaWQiOjEwMDk5LCJkdXJhdGlvbl9zIjoxNywidXJsZ2VuX3NvdXJjZSI6Ind3dyJ9&ccb=17-1&vs=88eb515386baff01&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC84N0RGOTkyNzYxQjU0RTQ2OUJBNTVDQkI1QzE5QTU2Ql92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyLzZEMTM2RUNBQjBFNzRBNDg4NzRENzE4RjRGOUQ1M0Y2X2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACakiK7I1ZzaBxUCKAJDMywXQDHMzMzMzM0YEmRhc2hfYmFzZWxpbmVfMV92MREAdf4HZeadAQA&_nc_gid=PN6gW5al852s8Tp9W-f7Rw&_nc_ss=7a3ba&_nc_map=urlgen_bucketless&_nc_zt=28&oh=00_AQNR0XjiHgOLgFdcbYQxPNP9WIyqn-wekapUqmL5kLzJQg&oe=6AC15132",
                            "thumbnail_url": "https://instagram.fkiv8-1.fna.fbcdn.net/v/t51.82787-15/829123155_18091289087667107_1371823688893101614_n.jpg?stp=dst-jpg_e15_p480x480_tt6&_nc_cat=109&_nc_map=urlgen_bucketless&ig_cache_key=Mzk5ODM1MDc3MTgyOTI5NzA1MjE4MDkxMjg5MDg0NjY3MTA3.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjcyMC5zZHIudmlkZW9fdXNlcl9zZWxlY3RlZF90aHVtYm5haWwuQzMifQ%3D%3D&_nc_ohc=8uJEHkk0F5IQ7kNvwHyci9t&_nc_oc=Adqy1IBGshxwlNjgfFJQk3nTSII4sMnypPLZBo7tqAQj5q6HPLBVzvEq_5JdsjKP55g&_nc_ad=z-m&_nc_cid=1396&_nc_zt=23&_nc_ht=instagram.fkiv8-1.fna&_nc_gid=PN6gW5al852s8Tp9W-f7Rw&_nc_ss=7a3ba&oh=00_AQNp2T_ClvkivIaOL6JrcPBZcK7GNpLPRqo60mb_3hGvwg&oe=6AC516CE",
                            "duration_seconds": 17.808
                          },
                          "author": {
                            "username": "user_eab41e",
                            "display_name": null,
                            "avatar_url": "https://example.com/avatars/user_55156a.png",
                            "verified": false
                          },
                          "engagement": {
                            "views": 11098,
                            "likes": 1071,
                            "comments": 11,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false
                          },
                          "published_at": "2026-10-01T13:18:05.000Z",
                          "ext": {
                            "media_type": "video",
                            "published_at_epoch": 1790860685,
                            "coauthors": []
                          }
                        },
                        "computed": {
                          "engagement_rate": 0.097495,
                          "language": "th",
                          "content_category": "other",
                          "estimated_reach": 13318
                        }
                      },
                      {
                        "post": {
                          "id": "3998504631129285200",
                          "url": "https://www.instagram.com/reel/Dd9isbrNyJQ/",
                          "content": {
                            "text": "Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted).",
                            "media_urls": "https://instagram.fkiv8-1.fna.fbcdn.net/o1/v/t2/f2/m86/AQO4Ndfc2CyR3NYTD2vyMVc5Fw2FIqeIZLhdYGYL44e6bcEA5EisuuABZ6rQLTPvvkLrsUljbag6lxyHeDUEeBj4hK3B90ZfXfAMa1E.mp4?_nc_cat=101&_nc_oc=AdpWpTfzjebRepxXh7-9Tf9XfRAwx7v9K6k1UJA639oViwBy5RgPl1gI-j9bvJktY6U&_nc_sid=5e9851&_nc_ht=instagram.fkiv8-1.fna.fbcdn.net&_nc_ohc=jhFbgiQU75oQ7kNvwHIkjMU&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTc0MzcyMzY0MzU1MzYwOSwiYXNzZXRfYWdlX2RheXMiOjAsInZpX3VzZWNhc2VfaWQiOjEwMDk5LCJkdXJhdGlvbl9zIjoyMiwidXJsZ2VuX3NvdXJjZSI6Ind3dyJ9&ccb=17-1&vs=3fed09f2d01e05fb&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC8wNTFGMzI5QTVDQjE0NUEzODYzODA3MzEwNkU3MkMzQV92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyLzZEMDI1RTZEMUY0RDRFMkFCNkQxOENGREYzRjY0REE3X2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACaSneLFifqYBhUCKAJDMywXQDbu2RaHKwIYEmRhc2hfYmFzZWxpbmVfMV92MREAdf4HZeadAQA&_nc_gid=PN6gW5al852s8Tp9W-f7Rw&_nc_ss=7a3ba&_nc_map=urlgen_bucketless&_nc_zt=28&oh=00_AQPgarCNPhPBREE3pBgXP24xCiG6wa4TMpvnsF5io8DwGA&oe=6AC1419A",
                            "thumbnail_url": "https://instagram.fkiv8-1.fna.fbcdn.net/v/t51.71878-15/829710993_956857563565456_3089849406617576568_n.jpg?stp=dst-jpg_e15_p480x480_tt6&_nc_cat=102&_nc_map=urlgen_bucketless&ig_cache_key=Mzk5ODUwNDYzMTEyOTI4NTIwMDE3NDM3MjQwOTM1NTM1NjQ%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjY0MC5zZHIudmlkZW9fdXNlcl9zZWxlY3RlZF90aHVtYm5haWwuQzMifQ%3D%3D&_nc_ohc=P8mKqdf4RPMQ7kNvwH2HuX9&_nc_oc=AdpFVtKO8-Rte7gVAghqpdY-8CIzJS8ZdH8aV-rhNCgWbsmwxLe8vYVkyXO36gjyuKk&_nc_ad=z-m&_nc_cid=1396&_nc_zt=23&_nc_ht=instagram.fkiv8-1.fna&_nc_gid=PN6gW5al852s8Tp9W-f7Rw&_nc_ss=7a3ba&oh=00_AQM_g3ellaekYVnmfcwTFGQcG0wgduh3DgGHU2DDGYflOA&oe=6AC538F9",
                            "duration_seconds": 22.987
                          },
                          "author": {
                            "username": "user_62636d",
                            "display_name": null,
                            "avatar_url": "https://example.com/avatars/user_812be1.png",
                            "verified": false
                          },
                          "engagement": {
                            "views": 2641,
                            "likes": 1249,
                            "comments": 10,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false
                          },
                          "published_at": "2026-10-01T18:22:26.000Z",
                          "ext": {
                            "media_type": "video",
                            "published_at_epoch": 1790878946,
                            "coauthors": []
                          }
                        },
                        "computed": {
                          "engagement_rate": 0.476713,
                          "language": "es",
                          "content_category": "other",
                          "estimated_reach": 3169
                        }
                      }
                    ],
                    "total": null,
                    "dropped": 0
                  },
                  "credits_used": 5,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": null,
                    "has_more": false,
                    "page_size": 28
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T07:28:31.750Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/search/profiles": {
      "get": {
        "summary": "Search Instagram profiles by keyword",
        "description": "Searches Instagram's own account search for a keyword or phrase and returns matching public profiles mapped to the unified Author schema: `id`, `username`, `display_name`, `verified`, `avatar_url`, and the profile `url`, 20 a page with a `cursor` for the next. A search row carries no `bio`, `followers`, `following` or `posts_count` (they are null): fetch /v1/instagram/profile for an account you keep. The plain call has no account country: Instagram does not put that on a search stub. Send `include=about` to join each row to the About-this-account panel for `author.ext.country`, the join month, and the public email and phone the account publishes, 2 extra credits a row filled, default the top 8 (17 credits held), `limit=12` for the page. A row the panel could not fill is refunded. This is not a country filter: a query that surfaces no Korean accounts still returns no Korean accounts after the join. For place-tagged posts, use /v1/instagram/search/location then /v1/instagram/location/posts.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_search_profiles",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 1,
        "x-credit-cost-min": 1,
        "x-credit-cost-max": 25,
        "x-credit-cost-formula": "1 credit for the search page. With `include=about`, 1 plus 2 credits per row filled, held at the top 8 (17) unless you send `limit`, refunded down to the rows that actually received an About-panel leaf. With `max_pages`, `max_items` or `max_credits`, each page walked is billed at this price (a cached page is free), and `max_credits` caps the total.",
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Keyword or phrase matched against account usernames and display names, as Instagram's own account search does.",
            "schema": {
              "type": "string"
            },
            "example": "yoga"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Pagination cursor. Pass the `next_cursor` from the previous response to get the next page; treat it as an opaque token.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include",
            "in": "query",
            "required": false,
            "description": "Send `about` to fill `author.ext.country`, join month and public contact from the About panel, 2 extra credits a row filled, never more than 12 rows. A typo is a free 400.",
            "schema": {
              "type": "string",
              "enum": [
                "about"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Cap the rows served, and with `include=about` the credits held. 1 to 12. Default 8 when the token is present so the hold is 17, not 25.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 12
            }
          },
          {
            "name": "max_pages",
            "in": "query",
            "required": false,
            "description": "1 to 50 (default 1, or 50 when `max_items` or `max_credits` is sent). Walk up to this many pages in one call and return the rows from all of them. Each page walked is billed exactly as one call to this endpoint (a cached page is free) and counts against your rate limit; its charge and any refund are recorded under the page's own request id, listed in `data.walk.request_ids`. The walk stops early at the last page, or when the request's time budget runs low; `data.walk.stopped` says why (`end`, `max_pages`, `max_items`, `max_credits`, `time_budget`, `page_error`) and `pagination.next_cursor` continues from where it stopped.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "max_items",
            "in": "query",
            "required": false,
            "description": "1 to 5000. Get more in one call: keep walking pages until the response holds at least this many rows, then stop with `data.walk.stopped: \"max_items\"`. The last page is returned whole (it was billed), so `data.items` can hold up to one page more than this, and `pagination.next_cursor` resumes right after it without skipping a row. Walks up to 50 pages unless `max_pages` says fewer; each page is billed as one call (a cached page is free). Add `max_credits` to cap the spend. A long walk can stop on the time budget first (`\"time_budget\"`): send the returned cursor with the same params to continue.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5000
            }
          },
          {
            "name": "max_credits",
            "in": "query",
            "required": false,
            "description": "1 to 100000. The most this call may spend, across every page it walks. A page starts only while the credits already spent plus that page's price (or, when higher, the most any page of this walk has cost) still fit, so the call never goes past it; the walk then stops with `data.walk.stopped: \"max_credits\"` and the cursor to resume. Sent alone, it walks as far as the budget goes (up to 50 pages). A value below the price of one page is a free 400 whose `error.details.page_credits` names that price. Credits a row join (`include=`) adds are known only once a page has run, so page 1 is checked against its own price.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100000
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/search/profiles"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of canonical author wrappers ({ author })",
                          "items": {
                            "type": "object",
                            "description": "Canonical author wrapper",
                            "properties": {
                              "author": {
                                "type": "object",
                                "description": "Canonical Author object (unified across all platforms)",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "Platform-specific user ID (always a string; platform-specific prefixes like `did:`, `spotify:artist:`, `t2_` are stripped)"
                                  },
                                  "username": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "User handle or username"
                                  },
                                  "display_name": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Display name or full name"
                                  },
                                  "avatar_url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "URL to profile picture"
                                  },
                                  "bio": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Profile biography or description"
                                  },
                                  "verified": {
                                    "type": [
                                      "boolean",
                                      "null"
                                    ],
                                    "description": "Whether the account is verified"
                                  },
                                  "followers": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Follower or subscriber count as an integer. Exact on Instagram and on TikTok when the source exposes an unrounded figure. YouTube above 1,000 subscribers is YouTube's published three-significant-figure figure. When the integer is a published/rounded value, `author.ext.followers_approximate` is true."
                                  },
                                  "following": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Number of accounts followed"
                                  },
                                  "posts_count": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Total number of posts / videos / tracks / episodes"
                                  },
                                  "likes_count": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Total likes received across the author's content (when surfaced)"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Direct URL to the profile page"
                                  },
                                  "location": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "ISO region code (e.g. `US`) or freeform location string when surfaced"
                                  },
                                  "external_url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Bio link / external website URL when surfaced by the platform"
                                  },
                                  "private": {
                                    "type": [
                                      "boolean",
                                      "null"
                                    ],
                                    "description": "Boolean at author.private"
                                  },
                                  "joined_at": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.joined_at"
                                  },
                                  "last_post_at": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.last_post_at"
                                  },
                                  "ext": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Nested object: author.ext",
                                    "properties": {
                                      "social_context": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.social_context"
                                      },
                                      "account_created": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.account_created"
                                      },
                                      "country": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.country"
                                      },
                                      "country_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.country_name"
                                      },
                                      "collects_received": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.collects_received"
                                      },
                                      "former_usernames": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.former_usernames",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.former_usernames"
                                        }
                                      },
                                      "former_usernames_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram profile/about: how many former usernames Instagram's \"About this account\" panel lists for the account. 0 when the panel lists none, null when the panel could not be read on this call (the response then carries a note saying so). A count above 0 means the handle was renamed at least once; the names themselves are not published."
                                      },
                                      "verified_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram profile/about, opt-in (`include=verified_at`): the month Instagram verified the account, as the panel shows it (\"April 2024\"). A month, not a date. Null when the account is not verified or the panel shows no verification date. Absent unless requested."
                                      },
                                      "public_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.public_email"
                                      },
                                      "contact_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Opt-in (`contact_email=1` on instagram/profile, youtube/channel and youtube/channel/about). When the bio lists two or more email addresses, the one the creator gives for contacting them personally, copied verbatim. Null when there is one address or none, when every address belongs to a manager, agency or brand, or when the choice was not confident. `author.ext.public_email` (the first address in the bio) is unchanged."
                                      },
                                      "public_phone": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.public_phone"
                                      },
                                      "similar_source": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.similar_source"
                                      },
                                      "instagram_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.instagram_username"
                                      },
                                      "similar_via": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.similar_via"
                                      },
                                      "business_category": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.business_category"
                                      },
                                      "bio_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.bio_links",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: author.ext.bio_links",
                                          "properties": {
                                            "title": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at author.ext.bio_links.title"
                                            },
                                            "url": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at author.ext.bio_links.url"
                                            },
                                            "link_type": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at author.ext.bio_links.link_type"
                                            }
                                          }
                                        }
                                      },
                                      "is_business": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_business"
                                      },
                                      "is_professional": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_professional"
                                      },
                                      "creator_marketplace": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.creator_marketplace"
                                      },
                                      "verification_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.verification_label"
                                      },
                                      "fbid": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.fbid"
                                      },
                                      "hd_avatar_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.hd_avatar_url"
                                      },
                                      "website": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.website"
                                      },
                                      "cover_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.cover_url"
                                      },
                                      "page_active": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.page_active"
                                      },
                                      "employee_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.employee_count"
                                      },
                                      "employee_count_range": {
                                        "type": [
                                          "object",
                                          "null"
                                        ],
                                        "description": "Nested object: author.ext.employee_count_range",
                                        "properties": {
                                          "start": {
                                            "type": [
                                              "integer",
                                              "null"
                                            ],
                                            "description": "Numeric at author.ext.employee_count_range.start"
                                          },
                                          "end": {
                                            "type": [
                                              "integer",
                                              "null"
                                            ],
                                            "description": "Numeric at author.ext.employee_count_range.end"
                                          }
                                        }
                                      },
                                      "founded_year": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.founded_year"
                                      },
                                      "company_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.company_type"
                                      },
                                      "tagline": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.tagline"
                                      },
                                      "specialities": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.specialities",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.specialities"
                                        }
                                      },
                                      "industries": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.industries",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.industries"
                                        }
                                      },
                                      "headquarters": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.headquarters"
                                      },
                                      "locations": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.locations",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.locations"
                                        }
                                      },
                                      "hashtags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.hashtags",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.hashtags"
                                        }
                                      },
                                      "funding": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.funding"
                                      },
                                      "address": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.address"
                                      },
                                      "price_range": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.price_range"
                                      },
                                      "rating": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.rating"
                                      },
                                      "rating_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.rating_count"
                                      },
                                      "talking_about_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.talking_about_count"
                                      },
                                      "business_hours": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.business_hours",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.business_hours"
                                        }
                                      },
                                      "links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.links",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.links"
                                        }
                                      },
                                      "ad_library_page_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.ad_library_page_id"
                                      },
                                      "ad_library_status": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.ad_library_status"
                                      },
                                      "urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.urn"
                                      },
                                      "is_top_voice": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_top_voice"
                                      },
                                      "is_premium": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_premium"
                                      },
                                      "is_creator": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_creator"
                                      },
                                      "is_influencer": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_influencer"
                                      },
                                      "is_open_to_work": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_open_to_work"
                                      },
                                      "is_hiring": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_hiring"
                                      },
                                      "member_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.member_id"
                                      },
                                      "company_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.company_id"
                                      },
                                      "reaction_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.reaction_type"
                                      },
                                      "followers_approximate": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "True when `author.followers` is a published or rounded figure rather than an unrounded census: LinkedIn people-list display buckets, TikTok `stats.followerCount` when the exact sibling is absent, and YouTube subscriber counts at or above 1,000. Null or absent on exact counts."
                                      },
                                      "counts_source": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok profile only. Which of TikTok's two live counter sets `author.followers`, `author.following`, `author.likes_count` and `author.posts_count` carry: `app` (TikTok's app counters, the default) or `web` (the website's `statsV2`, returned with `counts=web`). The two sets can differ by a few percent in either direction."
                                      },
                                      "keywords": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.keywords"
                                      },
                                      "total_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.total_views"
                                      },
                                      "joined_at_timestamp": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.joined_at_timestamp"
                                      },
                                      "topicCategories": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.topicCategories",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.topicCategories"
                                        }
                                      },
                                      "bannerExternalUrl": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.bannerExternalUrl"
                                      },
                                      "madeForKids": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.madeForKids"
                                      },
                                      "hiddenSubscriberCount": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.hiddenSubscriberCount"
                                      },
                                      "related_playlists": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.related_playlists"
                                      },
                                      "topic_ids": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.topic_ids",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.topic_ids"
                                        }
                                      },
                                      "unsubscribed_trailer": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.unsubscribed_trailer"
                                      },
                                      "localizations": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.localizations"
                                      },
                                      "monthly_listeners": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.monthly_listeners"
                                      },
                                      "total_ratings": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Spotify podcasts only: how many listeners have rated the show. Cumulative over the show's whole run, so it reflects longevity as well as size, and it is NOT an audience count (Spotify publishes no play, download, subscriber or follower count for a podcast)"
                                      },
                                      "average_rating": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Spotify podcasts only: mean listener rating from 0 to 5. Fractional (e.g. 4.66) despite the integer type this schema emits for every numeric leaf"
                                      },
                                      "creator_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.creator_username"
                                      },
                                      "join_policy": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.join_policy"
                                      },
                                      "is_nsfw": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_nsfw"
                                      },
                                      "rules": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.rules",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.rules"
                                        }
                                      },
                                      "weekly_active_users": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.weekly_active_users"
                                      },
                                      "weekly_contributions": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.weekly_contributions"
                                      },
                                      "rules_text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.rules_text"
                                      },
                                      "language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.language"
                                      },
                                      "post_karma": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.post_karma"
                                      },
                                      "comment_karma": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.comment_karma"
                                      },
                                      "awardee_karma": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.awardee_karma"
                                      },
                                      "trophy_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.trophy_count"
                                      },
                                      "banner_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.banner_url"
                                      },
                                      "profile_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.profile_title"
                                      },
                                      "social_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.social_links",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.social_links"
                                        }
                                      },
                                      "bio_link": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.bio_link"
                                      },
                                      "embed_html": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.embed_html"
                                      },
                                      "embed_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.embed_url"
                                      },
                                      "group": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.group"
                                      },
                                      "search_hit": {
                                        "type": [
                                          "object",
                                          "null"
                                        ],
                                        "description": "Nested object: author.ext.search_hit",
                                        "properties": {
                                          "match": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "Leaf at author.ext.search_hit.match"
                                          },
                                          "title": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "String at author.ext.search_hit.title"
                                          },
                                          "snippet": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "String at author.ext.search_hit.snippet"
                                          },
                                          "evidence_url": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "String at author.ext.search_hit.evidence_url"
                                          },
                                          "matched_urls": {
                                            "type": [
                                              "array",
                                              "null"
                                            ],
                                            "description": "Array at author.ext.search_hit.matched_urls",
                                            "items": {
                                              "type": "string",
                                              "description": "String at author.ext.search_hit.matched_urls"
                                            }
                                          }
                                        }
                                      },
                                      "blog_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.blog_name"
                                      },
                                      "blog_no": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.blog_no"
                                      },
                                      "visitors_today": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.visitors_today"
                                      },
                                      "visitors_total": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.visitors_total"
                                      },
                                      "topic": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.topic"
                                      },
                                      "power_blog": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.power_blog"
                                      },
                                      "official_blog": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.official_blog"
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/search/profiles",
                  "data": {
                    "items": [
                      {
                        "author": {
                          "id": "user_e31ddb",
                          "username": "user_ca3142",
                          "display_name": "user_b49d7e",
                          "avatar_url": "https://example.com/avatars/user_fb1999.png",
                          "bio": null,
                          "verified": true,
                          "followers": null,
                          "following": null,
                          "posts_count": null,
                          "likes_count": null,
                          "url": "https://example.com/user_ebaf89",
                          "external_url": null
                        }
                      },
                      {
                        "author": {
                          "id": "user_e7c827",
                          "username": "user_809007",
                          "display_name": "user_93c195",
                          "avatar_url": "https://example.com/avatars/user_e7991c.png",
                          "bio": "Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted).",
                          "verified": true,
                          "followers": 55321,
                          "following": 1728,
                          "posts_count": 12,
                          "likes_count": null,
                          "url": "https://example.com/user_e4917a",
                          "external_url": "https://example.com/user_c684fa"
                        }
                      }
                    ],
                    "total": null,
                    "dropped": 0
                  },
                  "credits_used": 1,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": null,
                    "has_more": false,
                    "page_size": 2
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T07:28:50.770Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/reels/trending": {
      "get": {
        "summary": "Get trending Instagram reels",
        "description": "Fetches trending reels from Instagram's public reels page. Instagram returns a small batch per call and results can overlap, so call repeatedly to discover more: duplicates are expected. Each item includes shortcode, URL, caption, media URLs, like and comment counts, and user info. There is no region or country option: Instagram assembles this feed for the account viewing it, not for a place, so the mix is global (measured 13/09/2026: a region hint changed the batch no more than a repeat call did). For region-scoped Instagram posts, find places with /v1/instagram/search/location and page their posts with /v1/instagram/location/posts. Note: engagement.views and content.duration_seconds are null on this endpoint. Instagram sends the play-count and duration keys on the trending surface with no value in them (measured null on 31 of 31 items), and no other source serves this feed, so a view count is not available here: pass a result URL to /v1/instagram/post for a per-reel view count, or use /v1/instagram/search/reels, which is sourced from a surface that still carries play counts.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_reels_trending",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "advanced",
        "x-credit-cost": 5,
        "parameters": [
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "Only rows published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Rows older than it are left off each page. This list is not in date order, so the walk does not stop at the date: keep following `next_cursor`, and each page costs what a page costs even when every row on it is filtered out. A row with no date is kept. `published_after`, `start_date`, `from_date`, `publish_time` (`yesterday`, `this-week`, `this-month`, `last-3-months`, `last-6-months`) and `max_age_days` are accepted and applied as `since`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "description": "Only rows published on or before this date: YYYY-MM-DD (that whole UTC day is included) or an ISO 8601 timestamp. Newer rows are left off each page and the walk does not stop, so older pages follow. A row with no date is kept. `published_before`, `end_date` and `to_date` are accepted and applied as `until`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/reels/trending"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of canonical post wrappers ({ post, computed })",
                          "items": {
                            "type": "object",
                            "description": "Canonical post wrapper",
                            "properties": {
                              "post": {
                                "type": "object",
                                "description": "Canonical Post object (unified across all platforms)",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "Platform-specific post ID (always a string; numeric upstream IDs are stringified)"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Direct URL to the post on the source platform"
                                  },
                                  "content": {
                                    "type": "object",
                                    "description": "Post content fields (text, media, thumbnail, duration)",
                                    "properties": {
                                      "text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Post caption, description, or text content"
                                      },
                                      "media_urls": {
                                        "type": [
                                          "string",
                                          "array",
                                          "null"
                                        ],
                                        "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels.",
                                        "items": {
                                          "type": "string",
                                          "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels."
                                        }
                                      },
                                      "thumbnail_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to thumbnail image"
                                      },
                                      "duration_seconds": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Video/clip duration in seconds (null for non-video posts)"
                                      }
                                    }
                                  },
                                  "author": {
                                    "type": "object",
                                    "description": "Subset of Author fields for the post creator",
                                    "properties": {
                                      "username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author username"
                                      },
                                      "display_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author display name"
                                      },
                                      "avatar_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to author profile picture"
                                      },
                                      "verified": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Whether the author account is verified"
                                      }
                                    }
                                  },
                                  "engagement": {
                                    "type": "object",
                                    "description": "Engagement counts",
                                    "properties": {
                                      "views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "View count (if available). For Instagram video/reels this is the play count: the headline 'Views' the IG app shows. Instagram removed per-post play counts from its public web pages in August 2026, so `GET /v1/instagram/post` now fills the count automatically from a second source within the same call: videos and reels keep a numeric `views` with no extra endpoint or workaround. Note: since mid-July 2026 Instagram's play count is Instagram-only. It no longer includes Facebook crosspost views (Meta-side change; the app UI changed identically). For combined reach, also fetch the Facebook crosspost via `/v1/facebook/post`."
                                      },
                                      "likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Like / reaction count"
                                      },
                                      "comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Comment count. Note: on `GET /v1/instagram/post` this is Instagram's `edge_media_to_parent_comment.count` (top-level comments); the IG list endpoints report the mobile `comment_count` total (includes replies). Both land on this same field."
                                      },
                                      "shares": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Share / repost / retweet count. On Instagram this is `reshare_count` (the paper-plane Share / Send count) and it exists only on Instagram's mobile surface, so it is returned by `/v1/instagram/post/stats`, `/v1/instagram/profile/reels/full`, and `/v1/instagram/profile/posts/full`. The web-sourced Instagram list and search endpoints return `null` (never fabricated)."
                                      },
                                      "saves": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Save / bookmark count. `null` on Instagram: the save count is platform-private and Instagram exposes no numeric save metric on any surface (never fabricated)."
                                      }
                                    }
                                  },
                                  "flags": {
                                    "type": "object",
                                    "description": "Boolean flags on the post",
                                    "properties": {
                                      "nsfw": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "NSFW flag (null when platform does not surface)"
                                      },
                                      "spoiler": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Spoiler flag (null when platform does not surface)"
                                      },
                                      "pinned": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Pinned-to-profile flag (null when platform does not surface)"
                                      },
                                      "deleted": {
                                        "type": "boolean",
                                        "description": "Whether the post is tombstoned (always present)"
                                      },
                                      "likes_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the creator has hidden the like count. `engagement.likes` is `null` in that case (never the platform's decoy preview number). Absent on normal posts."
                                      },
                                      "comments_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the upstream reports the comment count as hidden. `engagement.comments` is `null` in that case. Absent on normal posts."
                                      },
                                      "shares_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.shares_hidden"
                                      },
                                      "views_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.views_hidden"
                                      },
                                      "saves_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.saves_hidden"
                                      }
                                    }
                                  },
                                  "published_at": {
                                    "type": [
                                      "string",
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Post creation timestamp as an ISO 8601 UTC string. When the upstream sent a Unix epoch it is converted here and the raw epoch is preserved under `post.ext.published_at_epoch` for one deprecation cycle."
                                  },
                                  "ext": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Platform-specific passthrough fields for cross-endpoint chains (present only on platforms that surface them)",
                                    "properties": {
                                      "music_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok music/clip id (exact string): pass to `/v1/tiktok/song/videos?clipId=` to find videos using the same sound"
                                      },
                                      "matched_song_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The catalogue song TikTok matched the video's sound to, as an exact digit string. An official clip and the original sounds creators upload with it have different `music_id` values and the same `matched_song_id`, so group rows on it to count every use of one song. It is not a clipId: `/v1/tiktok/song` and `/v1/tiktok/song/videos` do not accept it. `/v1/tiktok/search/music` carries it on each sound, so a search on the song's title and artist, kept to the sounds with the same `matched_song_id`, gives the song's official sounds and their `video_count`. Absent when TikTok matched the sound to no song, and on rows served from a source that does not report the match."
                                      },
                                      "matched_song_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the song in `matched_song_id`. Absent when there is no matched song."
                                      },
                                      "matched_song_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist of the song in `matched_song_id`, as TikTok's catalogue names it. Absent when there is no matched song."
                                      },
                                      "music_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the video's own sound (`music_id`). An uploaded sound is titled like `original sound - <handle>`; the song it plays, when TikTok recognised one, is `matched_song_title`."
                                      },
                                      "music_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist TikTok shows for the video's own sound. On an original sound this is the uploader's display name, not the song's artist; use `matched_song_artist` for that."
                                      },
                                      "music_is_original": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "TikTok only. `true` when the video's sound is an original sound a creator uploaded, `false` when it is a catalogue track. Absent when the source does not say."
                                      },
                                      "author_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's platform-native numeric user id. On TikTok search and list items, pass to `/v1/tiktok/profile?user_id=` for the creator's current follower count (survives username changes). On Instagram `/v1/instagram/search/reels`, `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` items it is present on every row, accepted by `/v1/instagram/profile/country?user_id=` and `/v1/instagram/basic-profile?userId=`. On Facebook it appears when the upstream exposed a numeric actor id and no real handle."
                                      },
                                      "author_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The posting account's profile URL, so a matching post can be followed to its account. Present on `/v1/facebook/search/posts` rows: the vanity or `/people/<name>/<id>/` URL when Facebook sends one, otherwise `https://www.facebook.com/profile.php?id=<numeric id>` built from the account id. Pass it as `url` to `/v1/facebook/profile` (or to `/v1/prism/profiles` with `platform: facebook`). Null when the row names neither an account URL nor a numeric account id. Absent on other endpoints."
                                      },
                                      "author_followers": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "The creator's follower count as embedded in the search payload itself, when the search source happens to carry one. On Instagram `search/reels` it is null on a plain call, because Instagram stopped sending follower counts in its search payload in August 2026; send `include=creator` (or `country`) and it is filled from the creator's profile, 2 credits per creator looked up. It stays null when that lookup does not resolve."
                                      },
                                      "author_following": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_following"
                                      },
                                      "author_posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_posts_count"
                                      },
                                      "author_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The free text the author wrote in their profile's location field, exactly as written (for example `Johannesburg, South Africa`). It is not a country code and is not checked. Present on X tweet and reply rows; null or absent when the author left it blank."
                                      },
                                      "in_reply_to_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_id"
                                      },
                                      "in_reply_to_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_username"
                                      },
                                      "conversation_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.conversation_id"
                                      },
                                      "author_country": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's country. On Instagram it is the country the creator declares on the About this account panel, as a country name (for example `Spain`), and it is not where the post was filmed. It is present on `/v1/instagram/search/reels` when the request sends `include=creator`, `include=country` or `country`, and on `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` when it sends `include=country`, filled by looking the creator up. On YouTube rows joined with `include=channel` it is the channel's own country as an ISO 3166-1 alpha-2 code (for example `ZA`). Null when the platform publishes no country for the creator or the lookup did not resolve, and nothing is guessed; absent on a plain call."
                                      },
                                      "author_public_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact email on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public email or the lookup did not resolve; absent on a plain call."
                                      },
                                      "author_public_phone": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact phone number on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public phone or the lookup did not resolve; absent on a plain call."
                                      },
                                      "download_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "How many times the video has been saved to a device. TikTok only, and distinct from `engagement.saves`: a save keeps the video in a private collection on the platform, a download takes a copy off it, and TikTok counts the two separately. Present on TikTok post, search and post-list responses; absent everywhere else."
                                      },
                                      "region": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only: the country TikTok registers the video to, as an ISO 3166-1 alpha-2 code (normally the creator's account country when they posted). It is not the viewer's country, not the `region` you requested, and not a language. On `/v1/tiktok/trending`, `/v1/tiktok/search`, `/v1/tiktok/search/top`, `/v1/tiktok/profile/videos`, `/v1/tiktok/search/hashtag` and `/v1/tiktok/song/videos` it is how you tell which rows are from a given country: filter on it when you need only that country. A row whose source omits the country stays null. The `region` request parameter still only sets the proxy."
                                      },
                                      "subreddit": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Reddit subreddit name (search/list items): pass to `/v1/reddit/subreddit/details?subreddit=`"
                                      },
                                      "title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.title"
                                      },
                                      "selftext": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.selftext"
                                      },
                                      "upvote_ratio": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Reddit only: the share of a post's votes that are upvotes, as a fraction from 0 to 1 and usually close to 1 (six live rows measured 1, 1, 1, 0.86, 0.75, 1). Fractional despite the integer type this schema emits for every numeric leaf, the same caveat as `author.ext.average_rating`. Populated on `/v1/reddit/search` rows whose source carries it, and null everywhere else on Reddit including `/v1/reddit/post` and `/v1/reddit/subreddit`."
                                      },
                                      "flair": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.flair"
                                      },
                                      "content_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The language the platform itself tags the post with, when it sends one: Reddit's own language tag on Reddit lanes, and TikTok's caption-language tag (for example `de`) on `/v1/tiktok/trending?feed=local`. Null when the platform could not tell (Reddit `und`, TikTok `un`, common on short or emoji-only captions); absent where the source sends no tag. Never inferred from the text by us: that is `post.computed.language`."
                                      },
                                      "type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.type"
                                      },
                                      "content_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.content_type"
                                      },
                                      "ticker_symbols": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.ticker_symbols",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.ticker_symbols"
                                        }
                                      },
                                      "video_view_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram's legacy 3-second-view count. Historical: Instagram stopped serving it in August 2026 (removed from its web post surface along with the web play count), so fresh `/v1/instagram/post` lookups no longer carry it and no source can restore it. Use `engagement.views` (the play count) instead."
                                      },
                                      "ig_play_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram-only play count (`ig_play_count`). Since mid-July 2026 Instagram's headline play count (`engagement.views`) no longer includes Facebook crosspost views and equals this value; it is surfaced explicitly so you can tell the Instagram-only figure apart and detect any future re-divergence. For combined Instagram + Facebook reach, also fetch the Facebook crosspost via `/v1/facebook/post`. Present on `/v1/instagram/post/stats` and, since the August 2026 views fix, on `/v1/instagram/post` for video posts."
                                      },
                                      "repost_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.repost_count"
                                      },
                                      "media_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.media_type"
                                      },
                                      "text_truncated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.text_truncated"
                                      },
                                      "ip_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.ip_location"
                                      },
                                      "carousel_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.carousel_count"
                                      },
                                      "remix_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.remix_count"
                                      },
                                      "audio_cluster_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram's audio cluster for a reel, as an exact digit string: the id Instagram uses to group different uploads of the same sound. Present on `/v1/instagram/audio/reels` rows and on `/v1/instagram/profile/reels` with `include=stats`; absent on a row when it is not available and on every other surface."
                                      },
                                      "facebook_likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.likes` on this row. A post shared to Facebook arrives from some sources with its Facebook likes already folded into the Instagram count, so the share is subtracted and published here, which keeps `engagement.likes` the Instagram-only figure instagram.com shows on the post. Add the two together for the combined number. Absent when the read carried no Facebook share, and absent on a post whose owner hides the like count, because nothing can be subtracted from a null. A response that excluded a share also carries a note in `data._warnings`."
                                      },
                                      "facebook_comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.comments` on this row, the comment counterpart of `post.ext.facebook_likes`. Each leaf appears only for the count it actually changed, so a post whose likes are hidden but whose comments were reconciled carries this one alone."
                                      },
                                      "instagram_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Instagram-only play count of a video, the same figure on every Instagram endpoint. `engagement.views` keeps each endpoint's established meaning: on `/v1/instagram/profile/reels`, `/v1/instagram/audio/reels`, `/v1/instagram/search/reels` and `/v1/instagram/search/hashtag` it can include the post's Facebook cross-post views, while on `/v1/instagram/post` and `/v1/instagram/post/stats` it is Instagram-only. Read this leaf when you compare one post across endpoints. Absent on photos and when the source did not report the Instagram-only figure."
                                      },
                                      "facebook_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post part of a video's play count, the counterpart of `post.ext.instagram_views`. Present only when the source reported the Facebook part, or a combined total above the Instagram figure. Absent does not mean zero: some sources report the Instagram figure alone even for a cross-posted video."
                                      },
                                      "published_at_epoch": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Raw Unix epoch for `published_at` (seconds, or milliseconds when the upstream sent millis). Present only when the upstream sent a numeric epoch that was normalised to the ISO 8601 `published_at` string. Kept for one deprecation cycle for integrations pinned to the numeric form."
                                      },
                                      "usertags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.usertags",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.usertags"
                                        }
                                      },
                                      "coauthors": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post).",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post)."
                                        }
                                      },
                                      "music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.music"
                                      },
                                      "sponsor_tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                        }
                                      },
                                      "sponsored_disclosed": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "The platform's own disclosure that the post is paid or promotional: on Instagram the paid-partnership label (`is_paid_partnership`) or a tagged brand partner, on TikTok the label TikTok shows viewers (\"Paid partnership\", \"Commission paid\", \"Promotional content\"). `false` when the post carries the flag unset, null when it carries none. Present on `/v1/instagram/post/stats`, `/v1/instagram/search/reels` and `/v1/tiktok/search`; absent on every other endpoint."
                                      },
                                      "ai_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram only: Instagram's AI-content label on the post, as the method Instagram reports: `classifier_score_high` (Instagram detected it, shown as \"Likely made with AI\"), `ai_created` or `ai_edited` (declared or detected as made or edited with AI). Null when the post carries no AI label. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                      },
                                      "story_mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "story_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint."
                                        }
                                      },
                                      "story_reshared_posts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.location"
                                      },
                                      "media": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.media",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.media",
                                          "properties": {
                                            "type": {
                                              "type": "string",
                                              "description": "Leaf at post.ext.media.type"
                                            },
                                            "url": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.media.url"
                                            },
                                            "width": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.width"
                                            },
                                            "height": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.height"
                                            }
                                          }
                                        }
                                      },
                                      "top_comments": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.top_comments",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.top_comments",
                                          "properties": {
                                            "id": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.id"
                                            },
                                            "text": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.text"
                                            },
                                            "username": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.username"
                                            },
                                            "likes": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.top_comments.likes"
                                            },
                                            "published_at": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.published_at"
                                            }
                                          }
                                        }
                                      },
                                      "hashtags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.hashtags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.hashtags"
                                        }
                                      },
                                      "mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentions",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentions"
                                        }
                                      },
                                      "mentioned_user_ids": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentioned_user_ids",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentioned_user_ids"
                                        }
                                      },
                                      "quoted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Threads quote posts: the post this one quotes, as `{ id, url, author: { id, username }, text, media_urls, thumbnail_url }`. A quote post usually carries no caption or media of its own, and the text and video you see on the post's page belong to this attachment, by a different author. It is returned here rather than merged into `post.content`, so `content.*` always stays the outer post's own content and one account's media is never attributed to another. Absent on posts that are not quote posts."
                                      },
                                      "retweeted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.retweeted_post"
                                      },
                                      "quote_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.quote_count"
                                      },
                                      "all_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.all_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.all_media_urls"
                                        }
                                      },
                                      "reaction_counts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.reaction_counts",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.reaction_counts"
                                        }
                                      },
                                      "share_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.share_urn"
                                      },
                                      "post_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.post_type"
                                      },
                                      "activity_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.activity_id"
                                      },
                                      "published_at_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_at_precision"
                                      },
                                      "author_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_urn"
                                      },
                                      "author_headline": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_headline"
                                      },
                                      "author_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_type"
                                      },
                                      "is_repost_quote": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.is_repost_quote"
                                      },
                                      "article": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.article"
                                      },
                                      "reaction_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.reaction_type"
                                      },
                                      "download_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.download_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.download_media_urls"
                                        }
                                      },
                                      "tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.tags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.tags"
                                        }
                                      },
                                      "categoryId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryId"
                                      },
                                      "categoryTitle": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryTitle"
                                      },
                                      "topicCategories": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.topicCategories",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.topicCategories"
                                        }
                                      },
                                      "duration": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.duration"
                                      },
                                      "license": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.license"
                                      },
                                      "madeForKids": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.madeForKids"
                                      },
                                      "defaultAudioLanguage": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.defaultAudioLanguage"
                                      },
                                      "hasPaidProductPlacement": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.hasPaidProductPlacement"
                                      },
                                      "caption": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.caption"
                                      },
                                      "position": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.position"
                                      },
                                      "playlistId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlistId"
                                      },
                                      "videoOwnerChannelId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoOwnerChannelId"
                                      },
                                      "videoPublishedAt": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoPublishedAt"
                                      },
                                      "description": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.description"
                                      },
                                      "default_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.default_language"
                                      },
                                      "localizations": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.localizations"
                                      },
                                      "playlist_item_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_item_id"
                                      },
                                      "playlist_owner_channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_channel_id"
                                      },
                                      "playlist_owner_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_title"
                                      },
                                      "channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.channel_id"
                                      },
                                      "published_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_label"
                                      },
                                      "published_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.published_precision"
                                      },
                                      "title_maybe_translated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.title_maybe_translated"
                                      },
                                      "video_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.video_count"
                                      },
                                      "posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "`/v1/instagram/hashtag` only: the exact number of public posts Instagram counts under the hashtag. Live: it moves between calls minutes apart."
                                      },
                                      "commerce": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.commerce"
                                      },
                                      "on_screen_texts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.on_screen_texts",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.on_screen_texts"
                                        }
                                      },
                                      "topic_tag": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag"
                                      },
                                      "reshare_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.reshare_count"
                                      },
                                      "dsp_ids": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.dsp_ids"
                                      },
                                      "topic_tag_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag_id"
                                      },
                                      "amazon_shop_lists": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_lists",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_lists"
                                        }
                                      },
                                      "amazon_shop_trending_picks": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_trending_picks",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_trending_picks"
                                        }
                                      },
                                      "amazon_shop_curations": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_curations",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_curations"
                                        }
                                      },
                                      "amazon_shop_socials": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_socials",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.amazon_shop_socials"
                                        }
                                      },
                                      "ad": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Ad Library envelope (Facebook `adlibrary/ad` and `adlibrary/company/ads` items): page_id, currency, spend, reach_estimate, publisher_platforms, categories, targeted_or_reached_countries, cta_text, cta_type, link_url, is_active, end_date_iso, display_format, title, video_hd_url, video_sd_url. Absent on every non-ad surface."
                                      },
                                      "apple_music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.apple_music"
                                      },
                                      "feedback_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.feedback_id"
                                      },
                                      "question_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN (`/v1/naver/kin/search`) only: the question's id (Naver's `docId`), read from the row's link. Kin returns one row per answer, so several rows can share it; send `group=question` for one row per question."
                                      },
                                      "answer_no": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: which answer of the question this row is (Naver's `answerNo`), read from the row's link."
                                      },
                                      "answer_nos": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first.",
                                        "items": {
                                          "type": "integer",
                                          "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first."
                                        }
                                      },
                                      "published_at_est": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: the question's date ESTIMATED from its id (`YYYY-MM-DD`, Korea time), never a published date, so `published_at` stays null. Absent for questions older than the calibration table."
                                      },
                                      "date_basis": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "How `post.ext.published_at_est` was derived. `kin_docid_estimate`: interpolated from the question id against question pages whose posted date was read."
                                      },
                                      "event": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.event"
                                      },
                                      "trend": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Trend-board envelope: what TikTok's own trend board says about the row. On `/v1/tiktok/hashtags/popular`: `rank`, `country_code`, `period_days`, `posts` and `views` for the window (not lifetime totals), `industry` / `industry_id` / `industry_label` for the first board the hashtag was read from (null for the overall board), `boards` listing EVERY board it ranks on as `{ industry, industry_id, industry_label, rank }` in board order (so a hashtag in the top 3 overall and on an industry board shows both), `popularity_curve` as `{ date, value }` with value 0 to 100 relative to the window's peak, and `top_creators`. On `/v1/tiktok/videos/popular`: `rank`, `country_code`, `period_days`, `order_by`, `period_views`, `organic_views`, `engagement_rate`, `six_second_view_through_rate`, `content_tags`. Absent on every non-board surface."
                                      },
                                      "updated_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.updated_at"
                                      },
                                      "alt_text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.alt_text"
                                      },
                                      "board_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.board_name"
                                      }
                                    }
                                  }
                                }
                              },
                              "computed": {
                                "type": "object",
                                "description": "Server-computed analytics fields (consistent across platforms)",
                                "properties": {
                                  "engagement_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Computed engagement rate (0..1). Null when the upstream lacks enough signal."
                                  },
                                  "language": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "ISO 639-1 language code detected from the post text. Null when undetectable."
                                  },
                                  "content_category": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Keyword-classified content category (e.g. tech, food, gaming). Null when undetectable."
                                  },
                                  "estimated_reach": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Estimated reach based on views or follower count. Null when uncomputable."
                                  },
                                  "save_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at computed.save_rate"
                                  },
                                  "relevance": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Nested object: computed.relevance",
                                    "properties": {
                                      "p": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.p"
                                      },
                                      "sense": {
                                        "type": "string",
                                        "description": "Leaf at computed.relevance.sense"
                                      },
                                      "depth": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.depth"
                                      },
                                      "spam": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.spam"
                                      }
                                    }
                                  },
                                  "labels": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels"
                                  },
                                  "labels_evidence": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels_evidence"
                                  }
                                }
                              }
                            }
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "tiktok",
                  "endpoint": "/v1/tiktok/profile/videos",
                  "data": {
                    "items": [
                      {
                        "post": {
                          "id": "7658005300657638669",
                          "url": "https://www.tiktok.com/@charlidamelio/video/7658005300657638669",
                          "content": {
                            "text": "dc @lara.joanna ",
                            "media_urls": "https://v19.tiktokcdn-eu.com/4a08329b68e24d90b840a05c9244ba65/6a498c37/video/tos/alisg/tos-alisg-ve-37c799-sg/ocXRU4saOAVGYeJRAAygAjFIzOGsgRf4peSeXk/?a=1233&bti=MzU8OGYpNHYpNzo5ZjEuLjpkLTptNDQwOg%3D%3D&&bt=1135&ft=ERfCkaZWD00Q12Nvr-HxzIxRA7lGF3_45SY&mime_type=video_mp4&rc=OTg8NGkzZTQ8PDo1NmQ2O0BpanEzd205cmRlPDMzZzczNEAvNWM0NDFfNi8xMjExNF5eYSNmMGwyMmQ0LzBhLS1kMS9zcw%3D%3D&vvpl=1&l=20260703224143F66ABC3BD3A97DB0685C&btag=e000b0000",
                            "thumbnail_url": "https://p16-common-sign.tiktokcdn-eu.com/tos-useast5-p-0068-tx/owxEmiGPia440JkI3PgALU3bB7aBAlzdBEsKB~tplv-tiktokx-cropcenter-q:300:400:q70.heic?dr=9232&refresh_token=bf18ce44&x-expires=1783202400&x-signature=8AANrRWOCWfS6xtQ9JJiHB77vxo%3D&t=bacd0480&ps=933b5bde&shp=d05b14bd&shcp=132edbea&idc=no1a&biz_tag=tt_video&s=PUBLISH&sc=cover",
                            "duration_seconds": 16.903
                          },
                          "author": {
                            "username": "charlidamelio",
                            "display_name": "charli d’amelio",
                            "avatar_url": "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/ee31de49ddf64b45c5b2e3c55fbd0ea4~tplv-tiktokx-cropcenter-q:1080:1080:q70.heic?dr=9608&idc=no1a&ps=87d6e48a&refresh_token=e0b099bd&s=PUBLISH&sc=avatar&shcp=132edbea&shp=d05b14bd&t=223449c4&x-expires=1783202400&x-signature=9SsuimlpGdsdlerisiaqvDVLV3c%3D",
                            "verified": true
                          },
                          "engagement": {
                            "views": 3417578,
                            "likes": 501973,
                            "comments": 2618,
                            "shares": 6304,
                            "saves": 22989
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false
                          },
                          "published_at": "2026-07-02T18:51:58.000Z",
                          "ext": {
                            "music_id": "7656080164593437471",
                            "published_at_epoch": 1783018318
                          }
                        },
                        "computed": {
                          "engagement_rate": 0.14949,
                          "language": null,
                          "content_category": "other",
                          "estimated_reach": 4101094
                        }
                      },
                      {
                        "post": {
                          "id": "7657606229484670221",
                          "url": "https://www.tiktok.com/@charlidamelio/video/7657606229484670221",
                          "content": {
                            "text": "@Alexa Davis ",
                            "media_urls": "https://v19.tiktokcdn-eu.com/07ada727f60ed77f8504c4c9aee6f992/6a498c31/video/tos/alisg/tos-alisg-ve-37c799-sg/oAmE41FRfIDnKlQAZjDgfcEsqFENRqYDSBGUSB/?a=1233&bti=MzU8OGYpNHYpNzo5ZjEuLjpkLTptNDQwOg%3D%3D&&bt=857&ft=ERfCkaZWD00Q12Nvr-HxzIxRA7lGF3_45SY&mime_type=video_mp4&rc=NWU8OTg2aTw6ODlpNDU1PEBpanlrNmw5cmxuPDMzZzczNEBfLTEtMy8tXzYxLzYvYTNfYSNlbGVvMmRrYC9hLS1kMS9zcw%3D%3D&vvpl=1&l=20260703224143F66ABC3BD3A97DB0685C&btag=e000b0000",
                            "thumbnail_url": "https://p16-common-sign.tiktokcdn-eu.com/tos-useast5-p-0068-tx/ooZRDflKEE2SIFSfsAqgFBcFEORUAY4jBDl2Yc~tplv-tiktokx-cropcenter-q:300:400:q70.heic?dr=9232&refresh_token=0ee7ce0e&x-expires=1783202400&x-signature=DiqCJ1sMgLvKp5k1aK2lKgBm7CU%3D&t=bacd0480&ps=933b5bde&shp=d05b14bd&shcp=132edbea&idc=no1a&biz_tag=tt_video&s=PUBLISH&sc=cover",
                            "duration_seconds": 10.123
                          },
                          "author": {
                            "username": "charlidamelio",
                            "display_name": "charli d’amelio",
                            "avatar_url": "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/ee31de49ddf64b45c5b2e3c55fbd0ea4~tplv-tiktokx-cropcenter-q:1080:1080:q70.heic?dr=9608&idc=no1a&ps=87d6e48a&refresh_token=e0b099bd&s=PUBLISH&sc=avatar&shcp=132edbea&shp=d05b14bd&t=223449c4&x-expires=1783202400&x-signature=9SsuimlpGdsdlerisiaqvDVLV3c%3D",
                            "verified": true
                          },
                          "engagement": {
                            "views": 7205601,
                            "likes": 739100,
                            "comments": 1943,
                            "shares": 6268,
                            "saves": 28516
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false
                          },
                          "published_at": "2026-07-01T17:03:22.000Z",
                          "ext": {
                            "music_id": "7656080164593437471",
                            "published_at_epoch": 1782925402
                          }
                        },
                        "computed": {
                          "engagement_rate": 0.103713,
                          "language": null,
                          "content_category": "other",
                          "estimated_reach": 8646721
                        }
                      },
                      {
                        "post": {
                          "id": "7657287641641143565",
                          "url": "https://www.tiktok.com/@charlidamelio/video/7657287641641143565",
                          "content": {
                            "text": null,
                            "media_urls": "https://v19.tiktokcdn-eu.com/24d5a0ceaf069ce4435f27d4a1fb7fa5/6a498c2d/video/tos/alisg/tos-alisg-ve-37c799-sg/o4IuEqzEKBC3UgRghYEA5FEDZJDB2RL2JfePpS/?a=1233&bti=M0BzMzU8OGYpNzo5Zi5wIzEuLjpkNDQwOg%3D%3D&&bt=939&ft=ERfCkaZWD00Q12Nvr-HxzIxRA7lGF3_45SY&mime_type=video_mp4&rc=O2Q8M2k1Nzo7ODkzPGQ2NkBpM3VrZmo5cm01PDMzZzczNEBiYC0yLjU0XjQxNTMxX2FhYSNjZy5mMmRzYC9hLS1kMS9zcw%3D%3D&vvpl=1&l=20260703224143F66ABC3BD3A97DB0685C&btag=e000b0000",
                            "thumbnail_url": "https://p16-common-sign.tiktokcdn-eu.com/tos-useast5-p-0068-tx/oEEehFBRSDqxRYEZJgMgAQpzEf2PJiDEJNI7CB~tplv-tiktokx-cropcenter-q:300:400:q70.heic?dr=9232&refresh_token=7ef5f605&x-expires=1783202400&x-signature=10x4mFTkwGHZf2I3P%2FcRrZr6vTo%3D&t=bacd0480&ps=933b5bde&shp=d05b14bd&shcp=132edbea&idc=no1a&biz_tag=tt_video&s=PUBLISH&sc=cover",
                            "duration_seconds": 6.467
                          },
                          "author": {
                            "username": "charlidamelio",
                            "display_name": "charli d’amelio",
                            "avatar_url": "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/ee31de49ddf64b45c5b2e3c55fbd0ea4~tplv-tiktokx-cropcenter-q:1080:1080:q70.heic?dr=9608&idc=no1a&ps=87d6e48a&refresh_token=e0b099bd&s=PUBLISH&sc=avatar&shcp=132edbea&shp=d05b14bd&t=223449c4&x-expires=1783202400&x-signature=9SsuimlpGdsdlerisiaqvDVLV3c%3D",
                            "verified": true
                          },
                          "engagement": {
                            "views": 5941789,
                            "likes": 941067,
                            "comments": 3165,
                            "shares": 17173,
                            "saves": 18760
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false
                          },
                          "published_at": "2026-06-30T20:27:04.000Z",
                          "ext": {
                            "music_id": "7530783142774065975",
                            "published_at_epoch": 1782851224
                          }
                        },
                        "computed": {
                          "engagement_rate": 0.161804,
                          "language": null,
                          "content_category": null,
                          "estimated_reach": 7130147
                        }
                      }
                    ],
                    "next_cursor": "1782516110000",
                    "total": 10,
                    "dropped": 0
                  },
                  "credits_used": 1,
                  "credits_remaining": 9999,
                  "request_id": "req-8Kq2ZmR4vT9xLb3P",
                  "cached": false,
                  "pagination": {
                    "next_cursor": "sc.eyJ2IjoyLCJjIjoiMTc4MjUxNjExMDAwMCIsInAiOiJtYXhfY3Vyc29yIn0",
                    "has_more": true,
                    "page_size": 10
                  },
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/followers": {
      "get": {
        "summary": "List Instagram followers",
        "description": "Returns a paginated list of the accounts that follow an Instagram user. Each follower includes username, display name, avatar URL, verification status, and profile URL. Pass either `handle` or `user_id`, and page through with `cursor`. A public account with no followers returns 200 with an empty list and `data.total` 0, not an error, and is not charged. A plain walk can end before the profile's count: on most accounts it ends within a few rows of that count, and on large verified accounts Instagram caps every route at about 50 rows with no cursor, so a plain walk ends there. `data.total` carries the profile's own count on every page, so compare the rows you collected against it. Send `coverage=full` with `handle` to walk a merged list instead: each page is drawn from several reads of the list and carries no account twice inside a page, until the rows reach the count or no read has more. Across consecutive pages a handful of accounts can repeat on the pages one source covered on its own; the merged walk, which never returns an account it has already given you, runs wherever that source cannot cover the list. A full-coverage page costs 10 credits instead of 5 and takes longer, and its cursor only continues a `coverage=full` walk. Send `query` to search inside the list instead of paging it: one window of the accounts in the list whose username or display name contains the query, so the exact username of an account tells you whether it is on the list. An empty list means no account in the list matches. A `query` call has no cursor and no `data.total`, and it cannot be combined with `cursor` or `coverage=full`. On large verified accounts Instagram limits the list and does not search it, so the search runs on the roughly 50 accounts Instagram shows, only the ones that match are returned, and `data._warnings` says so: an account the answer does not return may still be on the list.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_followers",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "advanced",
        "x-credit-cost": 5,
        "x-credit-cost-min": 5,
        "x-credit-cost-max": 10,
        "x-credit-cost-formula": "5 credits a page. Up to three reads are merged into one page, typically about 50 accounts, and a page can carry fewer. With `coverage=full`, up to 10 credits a page, settled down to 5 when the plain walk covered the whole page. A page that fails is refunded. With `query`, 5 credits for its one window, and nothing when no account matches. With `max_pages`, `max_items` or `max_credits`, each page walked is billed at this price (a cached page is free), and `max_credits` caps the total.",
        "x-socialcrawl-oneOf": [
          [
            "handle",
            "user_id"
          ]
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Instagram username without the @ symbol. (one of: handle, user_id; at least one required)",
            "schema": {
              "type": "string"
            },
            "example": "mrbeast"
          },
          {
            "name": "user_id",
            "in": "query",
            "required": false,
            "description": "Instagram numeric user ID. Use this for faster responses. (one of: handle, user_id; at least one required)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Pagination cursor. Use the `next_cursor` from the previous response to fetch the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "coverage",
            "in": "query",
            "required": false,
            "description": "Send `full` to walk a merged list: accounts are added from several reads of the list and no account appears twice inside a page, until the rows reach the profile's count in `data.total`. On the pages one source covered on its own a handful of accounts can repeat across consecutive pages; wherever that source cannot cover the list the merged walk runs instead, and it never returns an account it has already given you. Requires `handle`. 10 credits a page instead of 5, settled down to 5 on any page a single read covered in full. Up to three reads are merged into one page, typically about 50 accounts, so a full list costs at most roughly the account count divided by 50, times 10 credits: on 13/09/2026 a following list of 2,652 took 54 pages and a follower list of 2,360 took 59, because the later pages of a follower walk add fewer new accounts. A page usually takes about 8 seconds and can take up to about 45, and a `503` is retried with the same cursor. A cursor from this mode only continues this mode.",
            "schema": {
              "type": "string",
              "enum": [
                "full"
              ]
            }
          },
          {
            "name": "query",
            "in": "query",
            "required": false,
            "description": "A username or name to look for in the list. Returns the accounts whose username or display name contains it (ignoring case and accents) in one window with no cursor, at the price of a page, and nothing is charged when no account matches. Cannot be combined with `cursor` or `coverage`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max_pages",
            "in": "query",
            "required": false,
            "description": "1 to 50 (default 1, or 50 when `max_items` or `max_credits` is sent). Walk up to this many pages in one call and return the rows from all of them. Each page walked is billed exactly as one call to this endpoint (a cached page is free) and counts against your rate limit; its charge and any refund are recorded under the page's own request id, listed in `data.walk.request_ids`. The walk stops early at the last page, or when the request's time budget runs low; `data.walk.stopped` says why (`end`, `max_pages`, `max_items`, `max_credits`, `time_budget`, `page_error`) and `pagination.next_cursor` continues from where it stopped.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "max_items",
            "in": "query",
            "required": false,
            "description": "1 to 5000. Get more in one call: keep walking pages until the response holds at least this many rows, then stop with `data.walk.stopped: \"max_items\"`. The last page is returned whole (it was billed), so `data.items` can hold up to one page more than this, and `pagination.next_cursor` resumes right after it without skipping a row. Walks up to 50 pages unless `max_pages` says fewer; each page is billed as one call (a cached page is free). Add `max_credits` to cap the spend. A long walk can stop on the time budget first (`\"time_budget\"`): send the returned cursor with the same params to continue.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5000
            }
          },
          {
            "name": "max_credits",
            "in": "query",
            "required": false,
            "description": "1 to 100000. The most this call may spend, across every page it walks. A page starts only while the credits already spent plus that page's price (or, when higher, the most any page of this walk has cost) still fit, so the call never goes past it; the walk then stops with `data.walk.stopped: \"max_credits\"` and the cursor to resume. Sent alone, it walks as far as the budget goes (up to 50 pages). A value below the price of one page is a free 400 whose `error.details.page_credits` names that price. Credits a row join (`include=`) adds are known only once a page has run, so page 1 is checked against its own price.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100000
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/followers"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of canonical author wrappers ({ author })",
                          "items": {
                            "type": "object",
                            "description": "Canonical author wrapper",
                            "properties": {
                              "author": {
                                "type": "object",
                                "description": "Canonical Author object (unified across all platforms)",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "Platform-specific user ID (always a string; platform-specific prefixes like `did:`, `spotify:artist:`, `t2_` are stripped)"
                                  },
                                  "username": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "User handle or username"
                                  },
                                  "display_name": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Display name or full name"
                                  },
                                  "avatar_url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "URL to profile picture"
                                  },
                                  "bio": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Profile biography or description"
                                  },
                                  "verified": {
                                    "type": [
                                      "boolean",
                                      "null"
                                    ],
                                    "description": "Whether the account is verified"
                                  },
                                  "followers": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Follower or subscriber count as an integer. Exact on Instagram and on TikTok when the source exposes an unrounded figure. YouTube above 1,000 subscribers is YouTube's published three-significant-figure figure. When the integer is a published/rounded value, `author.ext.followers_approximate` is true."
                                  },
                                  "following": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Number of accounts followed"
                                  },
                                  "posts_count": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Total number of posts / videos / tracks / episodes"
                                  },
                                  "likes_count": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Total likes received across the author's content (when surfaced)"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Direct URL to the profile page"
                                  },
                                  "location": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "ISO region code (e.g. `US`) or freeform location string when surfaced"
                                  },
                                  "external_url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Bio link / external website URL when surfaced by the platform"
                                  },
                                  "private": {
                                    "type": [
                                      "boolean",
                                      "null"
                                    ],
                                    "description": "Boolean at author.private"
                                  },
                                  "joined_at": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.joined_at"
                                  },
                                  "last_post_at": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.last_post_at"
                                  },
                                  "ext": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Nested object: author.ext",
                                    "properties": {
                                      "social_context": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.social_context"
                                      },
                                      "account_created": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.account_created"
                                      },
                                      "country": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.country"
                                      },
                                      "country_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.country_name"
                                      },
                                      "collects_received": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.collects_received"
                                      },
                                      "former_usernames": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.former_usernames",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.former_usernames"
                                        }
                                      },
                                      "former_usernames_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram profile/about: how many former usernames Instagram's \"About this account\" panel lists for the account. 0 when the panel lists none, null when the panel could not be read on this call (the response then carries a note saying so). A count above 0 means the handle was renamed at least once; the names themselves are not published."
                                      },
                                      "verified_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram profile/about, opt-in (`include=verified_at`): the month Instagram verified the account, as the panel shows it (\"April 2024\"). A month, not a date. Null when the account is not verified or the panel shows no verification date. Absent unless requested."
                                      },
                                      "public_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.public_email"
                                      },
                                      "contact_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Opt-in (`contact_email=1` on instagram/profile, youtube/channel and youtube/channel/about). When the bio lists two or more email addresses, the one the creator gives for contacting them personally, copied verbatim. Null when there is one address or none, when every address belongs to a manager, agency or brand, or when the choice was not confident. `author.ext.public_email` (the first address in the bio) is unchanged."
                                      },
                                      "public_phone": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.public_phone"
                                      },
                                      "similar_source": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.similar_source"
                                      },
                                      "instagram_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.instagram_username"
                                      },
                                      "similar_via": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.similar_via"
                                      },
                                      "business_category": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.business_category"
                                      },
                                      "bio_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.bio_links",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: author.ext.bio_links",
                                          "properties": {
                                            "title": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at author.ext.bio_links.title"
                                            },
                                            "url": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at author.ext.bio_links.url"
                                            },
                                            "link_type": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at author.ext.bio_links.link_type"
                                            }
                                          }
                                        }
                                      },
                                      "is_business": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_business"
                                      },
                                      "is_professional": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_professional"
                                      },
                                      "creator_marketplace": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.creator_marketplace"
                                      },
                                      "verification_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.verification_label"
                                      },
                                      "fbid": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.fbid"
                                      },
                                      "hd_avatar_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.hd_avatar_url"
                                      },
                                      "website": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.website"
                                      },
                                      "cover_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.cover_url"
                                      },
                                      "page_active": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.page_active"
                                      },
                                      "employee_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.employee_count"
                                      },
                                      "employee_count_range": {
                                        "type": [
                                          "object",
                                          "null"
                                        ],
                                        "description": "Nested object: author.ext.employee_count_range",
                                        "properties": {
                                          "start": {
                                            "type": [
                                              "integer",
                                              "null"
                                            ],
                                            "description": "Numeric at author.ext.employee_count_range.start"
                                          },
                                          "end": {
                                            "type": [
                                              "integer",
                                              "null"
                                            ],
                                            "description": "Numeric at author.ext.employee_count_range.end"
                                          }
                                        }
                                      },
                                      "founded_year": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.founded_year"
                                      },
                                      "company_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.company_type"
                                      },
                                      "tagline": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.tagline"
                                      },
                                      "specialities": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.specialities",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.specialities"
                                        }
                                      },
                                      "industries": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.industries",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.industries"
                                        }
                                      },
                                      "headquarters": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.headquarters"
                                      },
                                      "locations": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.locations",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.locations"
                                        }
                                      },
                                      "hashtags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.hashtags",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.hashtags"
                                        }
                                      },
                                      "funding": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.funding"
                                      },
                                      "address": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.address"
                                      },
                                      "price_range": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.price_range"
                                      },
                                      "rating": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.rating"
                                      },
                                      "rating_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.rating_count"
                                      },
                                      "talking_about_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.talking_about_count"
                                      },
                                      "business_hours": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.business_hours",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.business_hours"
                                        }
                                      },
                                      "links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.links",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.links"
                                        }
                                      },
                                      "ad_library_page_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.ad_library_page_id"
                                      },
                                      "ad_library_status": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.ad_library_status"
                                      },
                                      "urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.urn"
                                      },
                                      "is_top_voice": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_top_voice"
                                      },
                                      "is_premium": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_premium"
                                      },
                                      "is_creator": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_creator"
                                      },
                                      "is_influencer": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_influencer"
                                      },
                                      "is_open_to_work": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_open_to_work"
                                      },
                                      "is_hiring": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_hiring"
                                      },
                                      "member_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.member_id"
                                      },
                                      "company_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.company_id"
                                      },
                                      "reaction_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.reaction_type"
                                      },
                                      "followers_approximate": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "True when `author.followers` is a published or rounded figure rather than an unrounded census: LinkedIn people-list display buckets, TikTok `stats.followerCount` when the exact sibling is absent, and YouTube subscriber counts at or above 1,000. Null or absent on exact counts."
                                      },
                                      "counts_source": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok profile only. Which of TikTok's two live counter sets `author.followers`, `author.following`, `author.likes_count` and `author.posts_count` carry: `app` (TikTok's app counters, the default) or `web` (the website's `statsV2`, returned with `counts=web`). The two sets can differ by a few percent in either direction."
                                      },
                                      "keywords": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.keywords"
                                      },
                                      "total_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.total_views"
                                      },
                                      "joined_at_timestamp": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.joined_at_timestamp"
                                      },
                                      "topicCategories": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.topicCategories",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.topicCategories"
                                        }
                                      },
                                      "bannerExternalUrl": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.bannerExternalUrl"
                                      },
                                      "madeForKids": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.madeForKids"
                                      },
                                      "hiddenSubscriberCount": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.hiddenSubscriberCount"
                                      },
                                      "related_playlists": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.related_playlists"
                                      },
                                      "topic_ids": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.topic_ids",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.topic_ids"
                                        }
                                      },
                                      "unsubscribed_trailer": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.unsubscribed_trailer"
                                      },
                                      "localizations": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.localizations"
                                      },
                                      "monthly_listeners": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.monthly_listeners"
                                      },
                                      "total_ratings": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Spotify podcasts only: how many listeners have rated the show. Cumulative over the show's whole run, so it reflects longevity as well as size, and it is NOT an audience count (Spotify publishes no play, download, subscriber or follower count for a podcast)"
                                      },
                                      "average_rating": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Spotify podcasts only: mean listener rating from 0 to 5. Fractional (e.g. 4.66) despite the integer type this schema emits for every numeric leaf"
                                      },
                                      "creator_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.creator_username"
                                      },
                                      "join_policy": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.join_policy"
                                      },
                                      "is_nsfw": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_nsfw"
                                      },
                                      "rules": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.rules",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.rules"
                                        }
                                      },
                                      "weekly_active_users": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.weekly_active_users"
                                      },
                                      "weekly_contributions": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.weekly_contributions"
                                      },
                                      "rules_text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.rules_text"
                                      },
                                      "language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.language"
                                      },
                                      "post_karma": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.post_karma"
                                      },
                                      "comment_karma": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.comment_karma"
                                      },
                                      "awardee_karma": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.awardee_karma"
                                      },
                                      "trophy_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.trophy_count"
                                      },
                                      "banner_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.banner_url"
                                      },
                                      "profile_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.profile_title"
                                      },
                                      "social_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.social_links",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.social_links"
                                        }
                                      },
                                      "bio_link": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.bio_link"
                                      },
                                      "embed_html": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.embed_html"
                                      },
                                      "embed_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.embed_url"
                                      },
                                      "group": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.group"
                                      },
                                      "search_hit": {
                                        "type": [
                                          "object",
                                          "null"
                                        ],
                                        "description": "Nested object: author.ext.search_hit",
                                        "properties": {
                                          "match": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "Leaf at author.ext.search_hit.match"
                                          },
                                          "title": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "String at author.ext.search_hit.title"
                                          },
                                          "snippet": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "String at author.ext.search_hit.snippet"
                                          },
                                          "evidence_url": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "String at author.ext.search_hit.evidence_url"
                                          },
                                          "matched_urls": {
                                            "type": [
                                              "array",
                                              "null"
                                            ],
                                            "description": "Array at author.ext.search_hit.matched_urls",
                                            "items": {
                                              "type": "string",
                                              "description": "String at author.ext.search_hit.matched_urls"
                                            }
                                          }
                                        }
                                      },
                                      "blog_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.blog_name"
                                      },
                                      "blog_no": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.blog_no"
                                      },
                                      "visitors_today": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.visitors_today"
                                      },
                                      "visitors_total": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.visitors_total"
                                      },
                                      "topic": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.topic"
                                      },
                                      "power_blog": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.power_blog"
                                      },
                                      "official_blog": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.official_blog"
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "truncated": {
                          "type": "boolean",
                          "description": "Present and `true` when this page comes from a read of the list that is known to return fewer accounts than the list holds, so walking every page can still leave you with fewer accounts than `data.total`. On `followers` such a read typically returns about four in five accounts, and a repeat walk can return a different subset. On `following` it is `true` on a page where the walk could not continue and ended early. Keep paginating while `pagination.has_more` is true; `truncated` tells you whether the finished walk is the whole list, not whether more pages exist. Absent means no completeness verdict was computed for this page; it does not promise the list is complete, so compare the accounts you collected with `data.total`.",
                          "example": true
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/followers",
                  "data": {
                    "items": [
                      {
                        "author": {
                          "id": "user_2f8db1",
                          "username": "user_433521",
                          "display_name": "user_f228c2",
                          "avatar_url": "https://example.com/avatars/user_41857a.png",
                          "bio": null,
                          "verified": false,
                          "followers": null,
                          "following": null,
                          "posts_count": null,
                          "likes_count": null,
                          "url": "https://example.com/user_e28f38"
                        }
                      },
                      {
                        "author": {
                          "id": "user_5d1c3b",
                          "username": "user_5a0748",
                          "display_name": null,
                          "avatar_url": "https://example.com/avatars/user_912d0a.png",
                          "bio": null,
                          "verified": false,
                          "followers": null,
                          "following": null,
                          "posts_count": null,
                          "likes_count": null,
                          "url": "https://example.com/user_aa3817"
                        }
                      }
                    ],
                    "total": 90044685,
                    "dropped": 0
                  },
                  "credits_used": 5,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": null,
                    "has_more": false,
                    "page_size": 50
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T13:06:55.015Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/following": {
      "get": {
        "summary": "List Instagram following",
        "description": "Returns a paginated list of the accounts an Instagram user follows. Each account includes username, display name, avatar URL, verification status, and profile URL. Pass either `handle` or `user_id`, and page through with `cursor`. A public account that follows nobody returns 200 with an empty list and `data.total` 0, not an error, and is not charged. A plain walk can end before the profile's following count: on most accounts it ends within a few rows of that count, and on large verified accounts Instagram caps every route at about 50 rows with no cursor, so a plain walk ends there. `data.total` carries the profile's own count on every page, so compare the rows you collected against it. Send `coverage=full` with `handle` to walk a merged list instead: each page is drawn from several reads of the list and carries no account twice inside a page, until the rows reach the count or no read has more. Across consecutive pages a handful of accounts can repeat on the pages one source covered on its own; the merged walk, which never returns an account it has already given you, runs wherever that source cannot cover the list. A full-coverage page costs 10 credits instead of 5 and takes longer, and its cursor only continues a `coverage=full` walk. Send `query` to search inside the list instead of paging it: one window of the accounts in the list whose username or display name contains the query, so the exact username of an account tells you whether it is on the list. An empty list means no account in the list matches. A `query` call has no cursor and no `data.total`, and it cannot be combined with `cursor` or `coverage=full`. On large verified accounts Instagram limits the list and does not search it, so the search runs on the roughly 50 accounts Instagram shows, only the ones that match are returned, and `data._warnings` says so: an account the answer does not return may still be on the list.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_following",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "advanced",
        "x-credit-cost": 5,
        "x-credit-cost-min": 5,
        "x-credit-cost-max": 10,
        "x-credit-cost-formula": "5 credits a page. Up to three reads are merged into one page, typically about 50 accounts, and a page can carry fewer. With `coverage=full`, up to 10 credits a page, settled down to 5 when the plain walk covered the whole page. A page that fails is refunded. With `query`, 5 credits for its one window, and nothing when no account matches. With `max_pages`, `max_items` or `max_credits`, each page walked is billed at this price (a cached page is free), and `max_credits` caps the total.",
        "x-socialcrawl-oneOf": [
          [
            "handle",
            "user_id"
          ]
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Instagram username without the @ symbol. (one of: handle, user_id; at least one required)",
            "schema": {
              "type": "string"
            },
            "example": "mrbeast"
          },
          {
            "name": "user_id",
            "in": "query",
            "required": false,
            "description": "Instagram numeric user ID. Use this for faster responses. (one of: handle, user_id; at least one required)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Pagination cursor. Use the `next_cursor` from the previous response to fetch the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "coverage",
            "in": "query",
            "required": false,
            "description": "Send `full` to walk a merged list: accounts are added from several reads of the list and no account appears twice inside a page, until the rows reach the profile's count in `data.total`. On the pages one source covered on its own a handful of accounts can repeat across consecutive pages; wherever that source cannot cover the list the merged walk runs instead, and it never returns an account it has already given you. Requires `handle`. 10 credits a page instead of 5, settled down to 5 on any page a single read covered in full. Up to three reads are merged into one page, typically about 50 accounts, so a full list costs at most roughly the account count divided by 50, times 10 credits: on 13/09/2026 a following list of 2,652 took 54 pages and a follower list of 2,360 took 59, because the later pages of a follower walk add fewer new accounts. A page usually takes about 8 seconds and can take up to about 45, and a `503` is retried with the same cursor. A cursor from this mode only continues this mode.",
            "schema": {
              "type": "string",
              "enum": [
                "full"
              ]
            }
          },
          {
            "name": "query",
            "in": "query",
            "required": false,
            "description": "A username or name to look for in the list. Returns the accounts whose username or display name contains it (ignoring case and accents) in one window with no cursor, at the price of a page, and nothing is charged when no account matches. Cannot be combined with `cursor` or `coverage`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max_pages",
            "in": "query",
            "required": false,
            "description": "1 to 50 (default 1, or 50 when `max_items` or `max_credits` is sent). Walk up to this many pages in one call and return the rows from all of them. Each page walked is billed exactly as one call to this endpoint (a cached page is free) and counts against your rate limit; its charge and any refund are recorded under the page's own request id, listed in `data.walk.request_ids`. The walk stops early at the last page, or when the request's time budget runs low; `data.walk.stopped` says why (`end`, `max_pages`, `max_items`, `max_credits`, `time_budget`, `page_error`) and `pagination.next_cursor` continues from where it stopped.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "max_items",
            "in": "query",
            "required": false,
            "description": "1 to 5000. Get more in one call: keep walking pages until the response holds at least this many rows, then stop with `data.walk.stopped: \"max_items\"`. The last page is returned whole (it was billed), so `data.items` can hold up to one page more than this, and `pagination.next_cursor` resumes right after it without skipping a row. Walks up to 50 pages unless `max_pages` says fewer; each page is billed as one call (a cached page is free). Add `max_credits` to cap the spend. A long walk can stop on the time budget first (`\"time_budget\"`): send the returned cursor with the same params to continue.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5000
            }
          },
          {
            "name": "max_credits",
            "in": "query",
            "required": false,
            "description": "1 to 100000. The most this call may spend, across every page it walks. A page starts only while the credits already spent plus that page's price (or, when higher, the most any page of this walk has cost) still fit, so the call never goes past it; the walk then stops with `data.walk.stopped: \"max_credits\"` and the cursor to resume. Sent alone, it walks as far as the budget goes (up to 50 pages). A value below the price of one page is a free 400 whose `error.details.page_credits` names that price. Credits a row join (`include=`) adds are known only once a page has run, so page 1 is checked against its own price.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100000
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/following"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of canonical author wrappers ({ author })",
                          "items": {
                            "type": "object",
                            "description": "Canonical author wrapper",
                            "properties": {
                              "author": {
                                "type": "object",
                                "description": "Canonical Author object (unified across all platforms)",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "Platform-specific user ID (always a string; platform-specific prefixes like `did:`, `spotify:artist:`, `t2_` are stripped)"
                                  },
                                  "username": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "User handle or username"
                                  },
                                  "display_name": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Display name or full name"
                                  },
                                  "avatar_url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "URL to profile picture"
                                  },
                                  "bio": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Profile biography or description"
                                  },
                                  "verified": {
                                    "type": [
                                      "boolean",
                                      "null"
                                    ],
                                    "description": "Whether the account is verified"
                                  },
                                  "followers": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Follower or subscriber count as an integer. Exact on Instagram and on TikTok when the source exposes an unrounded figure. YouTube above 1,000 subscribers is YouTube's published three-significant-figure figure. When the integer is a published/rounded value, `author.ext.followers_approximate` is true."
                                  },
                                  "following": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Number of accounts followed"
                                  },
                                  "posts_count": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Total number of posts / videos / tracks / episodes"
                                  },
                                  "likes_count": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Total likes received across the author's content (when surfaced)"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Direct URL to the profile page"
                                  },
                                  "location": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "ISO region code (e.g. `US`) or freeform location string when surfaced"
                                  },
                                  "external_url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Bio link / external website URL when surfaced by the platform"
                                  },
                                  "private": {
                                    "type": [
                                      "boolean",
                                      "null"
                                    ],
                                    "description": "Boolean at author.private"
                                  },
                                  "joined_at": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.joined_at"
                                  },
                                  "last_post_at": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.last_post_at"
                                  },
                                  "ext": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Nested object: author.ext",
                                    "properties": {
                                      "social_context": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.social_context"
                                      },
                                      "account_created": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.account_created"
                                      },
                                      "country": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.country"
                                      },
                                      "country_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.country_name"
                                      },
                                      "collects_received": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.collects_received"
                                      },
                                      "former_usernames": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.former_usernames",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.former_usernames"
                                        }
                                      },
                                      "former_usernames_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram profile/about: how many former usernames Instagram's \"About this account\" panel lists for the account. 0 when the panel lists none, null when the panel could not be read on this call (the response then carries a note saying so). A count above 0 means the handle was renamed at least once; the names themselves are not published."
                                      },
                                      "verified_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram profile/about, opt-in (`include=verified_at`): the month Instagram verified the account, as the panel shows it (\"April 2024\"). A month, not a date. Null when the account is not verified or the panel shows no verification date. Absent unless requested."
                                      },
                                      "public_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.public_email"
                                      },
                                      "contact_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Opt-in (`contact_email=1` on instagram/profile, youtube/channel and youtube/channel/about). When the bio lists two or more email addresses, the one the creator gives for contacting them personally, copied verbatim. Null when there is one address or none, when every address belongs to a manager, agency or brand, or when the choice was not confident. `author.ext.public_email` (the first address in the bio) is unchanged."
                                      },
                                      "public_phone": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.public_phone"
                                      },
                                      "similar_source": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.similar_source"
                                      },
                                      "instagram_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.instagram_username"
                                      },
                                      "similar_via": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.similar_via"
                                      },
                                      "business_category": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.business_category"
                                      },
                                      "bio_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.bio_links",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: author.ext.bio_links",
                                          "properties": {
                                            "title": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at author.ext.bio_links.title"
                                            },
                                            "url": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at author.ext.bio_links.url"
                                            },
                                            "link_type": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at author.ext.bio_links.link_type"
                                            }
                                          }
                                        }
                                      },
                                      "is_business": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_business"
                                      },
                                      "is_professional": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_professional"
                                      },
                                      "creator_marketplace": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.creator_marketplace"
                                      },
                                      "verification_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.verification_label"
                                      },
                                      "fbid": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.fbid"
                                      },
                                      "hd_avatar_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.hd_avatar_url"
                                      },
                                      "website": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.website"
                                      },
                                      "cover_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.cover_url"
                                      },
                                      "page_active": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.page_active"
                                      },
                                      "employee_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.employee_count"
                                      },
                                      "employee_count_range": {
                                        "type": [
                                          "object",
                                          "null"
                                        ],
                                        "description": "Nested object: author.ext.employee_count_range",
                                        "properties": {
                                          "start": {
                                            "type": [
                                              "integer",
                                              "null"
                                            ],
                                            "description": "Numeric at author.ext.employee_count_range.start"
                                          },
                                          "end": {
                                            "type": [
                                              "integer",
                                              "null"
                                            ],
                                            "description": "Numeric at author.ext.employee_count_range.end"
                                          }
                                        }
                                      },
                                      "founded_year": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.founded_year"
                                      },
                                      "company_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.company_type"
                                      },
                                      "tagline": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.tagline"
                                      },
                                      "specialities": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.specialities",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.specialities"
                                        }
                                      },
                                      "industries": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.industries",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.industries"
                                        }
                                      },
                                      "headquarters": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.headquarters"
                                      },
                                      "locations": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.locations",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.locations"
                                        }
                                      },
                                      "hashtags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.hashtags",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.hashtags"
                                        }
                                      },
                                      "funding": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.funding"
                                      },
                                      "address": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.address"
                                      },
                                      "price_range": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.price_range"
                                      },
                                      "rating": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.rating"
                                      },
                                      "rating_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.rating_count"
                                      },
                                      "talking_about_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.talking_about_count"
                                      },
                                      "business_hours": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.business_hours",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.business_hours"
                                        }
                                      },
                                      "links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.links",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.links"
                                        }
                                      },
                                      "ad_library_page_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.ad_library_page_id"
                                      },
                                      "ad_library_status": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.ad_library_status"
                                      },
                                      "urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.urn"
                                      },
                                      "is_top_voice": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_top_voice"
                                      },
                                      "is_premium": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_premium"
                                      },
                                      "is_creator": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_creator"
                                      },
                                      "is_influencer": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_influencer"
                                      },
                                      "is_open_to_work": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_open_to_work"
                                      },
                                      "is_hiring": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_hiring"
                                      },
                                      "member_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.member_id"
                                      },
                                      "company_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.company_id"
                                      },
                                      "reaction_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.reaction_type"
                                      },
                                      "followers_approximate": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "True when `author.followers` is a published or rounded figure rather than an unrounded census: LinkedIn people-list display buckets, TikTok `stats.followerCount` when the exact sibling is absent, and YouTube subscriber counts at or above 1,000. Null or absent on exact counts."
                                      },
                                      "counts_source": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok profile only. Which of TikTok's two live counter sets `author.followers`, `author.following`, `author.likes_count` and `author.posts_count` carry: `app` (TikTok's app counters, the default) or `web` (the website's `statsV2`, returned with `counts=web`). The two sets can differ by a few percent in either direction."
                                      },
                                      "keywords": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.keywords"
                                      },
                                      "total_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.total_views"
                                      },
                                      "joined_at_timestamp": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.joined_at_timestamp"
                                      },
                                      "topicCategories": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.topicCategories",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.topicCategories"
                                        }
                                      },
                                      "bannerExternalUrl": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.bannerExternalUrl"
                                      },
                                      "madeForKids": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.madeForKids"
                                      },
                                      "hiddenSubscriberCount": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.hiddenSubscriberCount"
                                      },
                                      "related_playlists": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.related_playlists"
                                      },
                                      "topic_ids": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.topic_ids",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.topic_ids"
                                        }
                                      },
                                      "unsubscribed_trailer": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.unsubscribed_trailer"
                                      },
                                      "localizations": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.localizations"
                                      },
                                      "monthly_listeners": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.monthly_listeners"
                                      },
                                      "total_ratings": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Spotify podcasts only: how many listeners have rated the show. Cumulative over the show's whole run, so it reflects longevity as well as size, and it is NOT an audience count (Spotify publishes no play, download, subscriber or follower count for a podcast)"
                                      },
                                      "average_rating": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Spotify podcasts only: mean listener rating from 0 to 5. Fractional (e.g. 4.66) despite the integer type this schema emits for every numeric leaf"
                                      },
                                      "creator_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.creator_username"
                                      },
                                      "join_policy": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.join_policy"
                                      },
                                      "is_nsfw": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_nsfw"
                                      },
                                      "rules": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.rules",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.rules"
                                        }
                                      },
                                      "weekly_active_users": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.weekly_active_users"
                                      },
                                      "weekly_contributions": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.weekly_contributions"
                                      },
                                      "rules_text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.rules_text"
                                      },
                                      "language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.language"
                                      },
                                      "post_karma": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.post_karma"
                                      },
                                      "comment_karma": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.comment_karma"
                                      },
                                      "awardee_karma": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.awardee_karma"
                                      },
                                      "trophy_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.trophy_count"
                                      },
                                      "banner_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.banner_url"
                                      },
                                      "profile_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.profile_title"
                                      },
                                      "social_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.social_links",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.social_links"
                                        }
                                      },
                                      "bio_link": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.bio_link"
                                      },
                                      "embed_html": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.embed_html"
                                      },
                                      "embed_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.embed_url"
                                      },
                                      "group": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.group"
                                      },
                                      "search_hit": {
                                        "type": [
                                          "object",
                                          "null"
                                        ],
                                        "description": "Nested object: author.ext.search_hit",
                                        "properties": {
                                          "match": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "Leaf at author.ext.search_hit.match"
                                          },
                                          "title": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "String at author.ext.search_hit.title"
                                          },
                                          "snippet": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "String at author.ext.search_hit.snippet"
                                          },
                                          "evidence_url": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "String at author.ext.search_hit.evidence_url"
                                          },
                                          "matched_urls": {
                                            "type": [
                                              "array",
                                              "null"
                                            ],
                                            "description": "Array at author.ext.search_hit.matched_urls",
                                            "items": {
                                              "type": "string",
                                              "description": "String at author.ext.search_hit.matched_urls"
                                            }
                                          }
                                        }
                                      },
                                      "blog_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.blog_name"
                                      },
                                      "blog_no": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.blog_no"
                                      },
                                      "visitors_today": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.visitors_today"
                                      },
                                      "visitors_total": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.visitors_total"
                                      },
                                      "topic": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.topic"
                                      },
                                      "power_blog": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.power_blog"
                                      },
                                      "official_blog": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.official_blog"
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "truncated": {
                          "type": "boolean",
                          "description": "Present and `true` when this page comes from a read of the list that is known to return fewer accounts than the list holds, so walking every page can still leave you with fewer accounts than `data.total`. On `followers` such a read typically returns about four in five accounts, and a repeat walk can return a different subset. On `following` it is `true` on a page where the walk could not continue and ended early. Keep paginating while `pagination.has_more` is true; `truncated` tells you whether the finished walk is the whole list, not whether more pages exist. Absent means no completeness verdict was computed for this page; it does not promise the list is complete, so compare the accounts you collected with `data.total`.",
                          "example": true
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/following",
                  "data": {
                    "items": [
                      {
                        "author": {
                          "id": "user_54f6ee",
                          "username": "user_e245ca",
                          "display_name": "user_41efba",
                          "avatar_url": "https://example.com/avatars/user_4e923c.png",
                          "bio": null,
                          "verified": true,
                          "followers": null,
                          "following": null,
                          "posts_count": null,
                          "likes_count": null,
                          "url": "https://example.com/user_6f5637"
                        }
                      },
                      {
                        "author": {
                          "id": "user_249834",
                          "username": "user_fcc1d0",
                          "display_name": "user_663e3a",
                          "avatar_url": "https://example.com/avatars/user_64f90b.png",
                          "bio": null,
                          "verified": true,
                          "followers": null,
                          "following": null,
                          "posts_count": null,
                          "likes_count": null,
                          "url": "https://example.com/user_65c969"
                        }
                      }
                    ],
                    "next_cursor": "sc2.eyJzIjoiViIsImMiOiJRVkZEU25aNFltMDFRMHh2UkZsMWExaElSMUE0YUVGallVbERVVFkxY0ZCQlJXc3RNR1ZLZWt0emJFMDVNR1U1T0ZsQ1NIUlliM05qUzFnMFVYWnFhbEpITm1kelZERTFWSEJ5YUZOc01uTklVa3A0UjI1M1dRPT0ifQ",
                    "total": 1008,
                    "dropped": 0
                  },
                  "credits_used": 5,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": "sc.eyJ2IjoyLCJjIjoic2MyLmV5SnpJam9pVmlJc0ltTWlPaUpSVmtaRVUyNWFORmx0TURGUk1IaDJVa1pzTVdFeGFFbFNNVUUwWVVWR2FsbFZiRVJWVkZreFkwWkNRbEpYYzNSTlIxWkxaV3QwZW1KRk1EVk5SMVUxVDBac1ExTklVbGxpTTA1cVV6Rm5NRlZZV25GaGJFcElUbTFrZWxaRVJURldTRUo1WVVaT2MwMXVUa2xWYTNBMFVqSTFNMWRSUFQwaWZRIiwiZSI6Imluc3RhZ3JhbS9mb2xsb3dpbmciLCJwIjoiY3Vyc29yIn0",
                    "has_more": true,
                    "page_size": 200
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T13:07:13.056Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/similar": {
      "get": {
        "summary": "List similar Instagram accounts",
        "description": "Returns a list of Instagram accounts similar to a given user: the related accounts Instagram surfaces as suggestions. Each account includes username, display name, avatar URL, verification status, and profile URL. Pass either `handle` or `user_id`. Passing `user_id` is faster because no username lookup is needed. This is a suggestion list, so on a plain call the per-account metrics are null on every row: author.followers, author.following, author.posts_count and author.bio. Send `include=profile` and every row is joined, in the same call, to the profile lookup that carries them: exact follower and following counts plus the bio land on each row. `author.posts_count` lands only on a row the lookup's backup source answered, so it is null on most rows; `GET /v1/instagram/profile` returns the lifetime post count for any single account. Cost: 5 credits for the list plus 1 credit per row filled from a fresh lookup; rows already in cache are free, unfilled rows are refunded, and a repeat within the cache window is 0. With `include=profile` the list is its top 20 accounts unless you pass `limit` (1 to 80), so the default hydrated call is at most 25 credits (the same as `limit=20&include=profile`) and `limit=80&include=profile`, the full roster, is at most 85. Time: a plain call is 2 to 3 seconds; with `include=profile` allow 3 to 6 seconds more for 20 rows (the lookups run in parallel and the call waits for the slowest, never more than 12 seconds) and about four times that for all 80, which run as four waves of 24. The response carries a `hydration` block itemising rows, lookups, cache hits, credits and milliseconds. author.likes_count stays null: Instagram publishes no account-level like total. The list is a single fixed window: it is not paginated and returns no cursor.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_similar",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "advanced",
        "x-credit-cost": 5,
        "x-credit-cost-min": 5,
        "x-credit-cost-max": 85,
        "x-credit-cost-formula": "5 credits for the list. include=profile holds 1 credit per row and keeps only the rows filled from a fresh lookup; the hydrated list is its top 20 accounts by default (at most 25 credits) and `limit=80` buys the full roster (at most 85). Rows served from cache are free, unfilled rows are refunded, and a repeat within the cache window costs 0. The list and the per-account lookups are cached for 15 minutes.",
        "x-socialcrawl-oneOf": [
          [
            "handle",
            "user_id"
          ]
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Instagram username without the @ symbol. (one of: handle, user_id; at least one required)",
            "schema": {
              "type": "string"
            },
            "example": "mrbeast"
          },
          {
            "name": "user_id",
            "in": "query",
            "required": false,
            "description": "Instagram numeric user ID. Use this for faster responses. (one of: handle, user_id; at least one required)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include",
            "in": "query",
            "required": false,
            "description": "Set to `profile` (one token only) to fill `author.followers`, `author.following` and `author.bio` on every row in this one call, plus `author.posts_count` where the lookup has an exact total. The hydrated list is its top 20 accounts unless you pass `limit` (1 to 80). Holds 1 credit per row and keeps only the rows filled from a fresh lookup; rows already in cache and rows that could not be filled are refunded, so the most a call can cost is 5 + rows (25 by default, 85 with `limit=80`) and the usual bill is lower. Adds 3 to 6 seconds for 20 rows (never more than 12) and about four times that for 80, and nothing when the accounts are already cached; read `data.hydration` for the rows, the credits held and kept, and the time.",
            "schema": {
              "type": "string",
              "enum": [
                "profile"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Take the top N accounts of the list (1 to 80). With `include=profile` the list defaults to its top 20 (at most 25 credits) and `limit` caps both the rows and the extra credits: `limit=80&include=profile` buys the full roster for at most 85 credits. Without `include=profile` the full list is returned unless you cap it.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 80
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/similar"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of canonical author wrappers ({ author })",
                          "items": {
                            "type": "object",
                            "description": "Canonical author wrapper",
                            "properties": {
                              "author": {
                                "type": "object",
                                "description": "Canonical Author object (unified across all platforms)",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "Platform-specific user ID (always a string; platform-specific prefixes like `did:`, `spotify:artist:`, `t2_` are stripped)"
                                  },
                                  "username": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "User handle or username"
                                  },
                                  "display_name": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Display name or full name"
                                  },
                                  "avatar_url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "URL to profile picture"
                                  },
                                  "bio": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Profile biography or description"
                                  },
                                  "verified": {
                                    "type": [
                                      "boolean",
                                      "null"
                                    ],
                                    "description": "Whether the account is verified"
                                  },
                                  "followers": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Follower or subscriber count as an integer. Exact on Instagram and on TikTok when the source exposes an unrounded figure. YouTube above 1,000 subscribers is YouTube's published three-significant-figure figure. When the integer is a published/rounded value, `author.ext.followers_approximate` is true."
                                  },
                                  "following": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Number of accounts followed"
                                  },
                                  "posts_count": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Total number of posts / videos / tracks / episodes"
                                  },
                                  "likes_count": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Total likes received across the author's content (when surfaced)"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Direct URL to the profile page"
                                  },
                                  "location": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "ISO region code (e.g. `US`) or freeform location string when surfaced"
                                  },
                                  "external_url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Bio link / external website URL when surfaced by the platform"
                                  },
                                  "private": {
                                    "type": [
                                      "boolean",
                                      "null"
                                    ],
                                    "description": "Boolean at author.private"
                                  },
                                  "joined_at": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.joined_at"
                                  },
                                  "last_post_at": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.last_post_at"
                                  },
                                  "ext": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Nested object: author.ext",
                                    "properties": {
                                      "social_context": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.social_context"
                                      },
                                      "account_created": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.account_created"
                                      },
                                      "country": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.country"
                                      },
                                      "country_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.country_name"
                                      },
                                      "collects_received": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.collects_received"
                                      },
                                      "former_usernames": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.former_usernames",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.former_usernames"
                                        }
                                      },
                                      "former_usernames_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram profile/about: how many former usernames Instagram's \"About this account\" panel lists for the account. 0 when the panel lists none, null when the panel could not be read on this call (the response then carries a note saying so). A count above 0 means the handle was renamed at least once; the names themselves are not published."
                                      },
                                      "verified_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram profile/about, opt-in (`include=verified_at`): the month Instagram verified the account, as the panel shows it (\"April 2024\"). A month, not a date. Null when the account is not verified or the panel shows no verification date. Absent unless requested."
                                      },
                                      "public_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.public_email"
                                      },
                                      "contact_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Opt-in (`contact_email=1` on instagram/profile, youtube/channel and youtube/channel/about). When the bio lists two or more email addresses, the one the creator gives for contacting them personally, copied verbatim. Null when there is one address or none, when every address belongs to a manager, agency or brand, or when the choice was not confident. `author.ext.public_email` (the first address in the bio) is unchanged."
                                      },
                                      "public_phone": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.public_phone"
                                      },
                                      "similar_source": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.similar_source"
                                      },
                                      "instagram_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.instagram_username"
                                      },
                                      "similar_via": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.similar_via"
                                      },
                                      "business_category": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.business_category"
                                      },
                                      "bio_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.bio_links",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: author.ext.bio_links",
                                          "properties": {
                                            "title": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at author.ext.bio_links.title"
                                            },
                                            "url": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at author.ext.bio_links.url"
                                            },
                                            "link_type": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at author.ext.bio_links.link_type"
                                            }
                                          }
                                        }
                                      },
                                      "is_business": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_business"
                                      },
                                      "is_professional": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_professional"
                                      },
                                      "creator_marketplace": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.creator_marketplace"
                                      },
                                      "verification_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.verification_label"
                                      },
                                      "fbid": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.fbid"
                                      },
                                      "hd_avatar_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.hd_avatar_url"
                                      },
                                      "website": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.website"
                                      },
                                      "cover_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.cover_url"
                                      },
                                      "page_active": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.page_active"
                                      },
                                      "employee_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.employee_count"
                                      },
                                      "employee_count_range": {
                                        "type": [
                                          "object",
                                          "null"
                                        ],
                                        "description": "Nested object: author.ext.employee_count_range",
                                        "properties": {
                                          "start": {
                                            "type": [
                                              "integer",
                                              "null"
                                            ],
                                            "description": "Numeric at author.ext.employee_count_range.start"
                                          },
                                          "end": {
                                            "type": [
                                              "integer",
                                              "null"
                                            ],
                                            "description": "Numeric at author.ext.employee_count_range.end"
                                          }
                                        }
                                      },
                                      "founded_year": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.founded_year"
                                      },
                                      "company_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.company_type"
                                      },
                                      "tagline": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.tagline"
                                      },
                                      "specialities": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.specialities",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.specialities"
                                        }
                                      },
                                      "industries": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.industries",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.industries"
                                        }
                                      },
                                      "headquarters": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.headquarters"
                                      },
                                      "locations": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.locations",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.locations"
                                        }
                                      },
                                      "hashtags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.hashtags",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.hashtags"
                                        }
                                      },
                                      "funding": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.funding"
                                      },
                                      "address": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.address"
                                      },
                                      "price_range": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.price_range"
                                      },
                                      "rating": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.rating"
                                      },
                                      "rating_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.rating_count"
                                      },
                                      "talking_about_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.talking_about_count"
                                      },
                                      "business_hours": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.business_hours",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.business_hours"
                                        }
                                      },
                                      "links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.links",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.links"
                                        }
                                      },
                                      "ad_library_page_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.ad_library_page_id"
                                      },
                                      "ad_library_status": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.ad_library_status"
                                      },
                                      "urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.urn"
                                      },
                                      "is_top_voice": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_top_voice"
                                      },
                                      "is_premium": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_premium"
                                      },
                                      "is_creator": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_creator"
                                      },
                                      "is_influencer": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_influencer"
                                      },
                                      "is_open_to_work": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_open_to_work"
                                      },
                                      "is_hiring": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_hiring"
                                      },
                                      "member_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.member_id"
                                      },
                                      "company_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.company_id"
                                      },
                                      "reaction_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.reaction_type"
                                      },
                                      "followers_approximate": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "True when `author.followers` is a published or rounded figure rather than an unrounded census: LinkedIn people-list display buckets, TikTok `stats.followerCount` when the exact sibling is absent, and YouTube subscriber counts at or above 1,000. Null or absent on exact counts."
                                      },
                                      "counts_source": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok profile only. Which of TikTok's two live counter sets `author.followers`, `author.following`, `author.likes_count` and `author.posts_count` carry: `app` (TikTok's app counters, the default) or `web` (the website's `statsV2`, returned with `counts=web`). The two sets can differ by a few percent in either direction."
                                      },
                                      "keywords": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.keywords"
                                      },
                                      "total_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.total_views"
                                      },
                                      "joined_at_timestamp": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.joined_at_timestamp"
                                      },
                                      "topicCategories": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.topicCategories",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.topicCategories"
                                        }
                                      },
                                      "bannerExternalUrl": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.bannerExternalUrl"
                                      },
                                      "madeForKids": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.madeForKids"
                                      },
                                      "hiddenSubscriberCount": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.hiddenSubscriberCount"
                                      },
                                      "related_playlists": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.related_playlists"
                                      },
                                      "topic_ids": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.topic_ids",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.topic_ids"
                                        }
                                      },
                                      "unsubscribed_trailer": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.unsubscribed_trailer"
                                      },
                                      "localizations": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.localizations"
                                      },
                                      "monthly_listeners": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.monthly_listeners"
                                      },
                                      "total_ratings": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Spotify podcasts only: how many listeners have rated the show. Cumulative over the show's whole run, so it reflects longevity as well as size, and it is NOT an audience count (Spotify publishes no play, download, subscriber or follower count for a podcast)"
                                      },
                                      "average_rating": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Spotify podcasts only: mean listener rating from 0 to 5. Fractional (e.g. 4.66) despite the integer type this schema emits for every numeric leaf"
                                      },
                                      "creator_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.creator_username"
                                      },
                                      "join_policy": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.join_policy"
                                      },
                                      "is_nsfw": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_nsfw"
                                      },
                                      "rules": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.rules",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.rules"
                                        }
                                      },
                                      "weekly_active_users": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.weekly_active_users"
                                      },
                                      "weekly_contributions": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.weekly_contributions"
                                      },
                                      "rules_text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.rules_text"
                                      },
                                      "language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.language"
                                      },
                                      "post_karma": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.post_karma"
                                      },
                                      "comment_karma": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.comment_karma"
                                      },
                                      "awardee_karma": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.awardee_karma"
                                      },
                                      "trophy_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.trophy_count"
                                      },
                                      "banner_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.banner_url"
                                      },
                                      "profile_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.profile_title"
                                      },
                                      "social_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.social_links",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.social_links"
                                        }
                                      },
                                      "bio_link": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.bio_link"
                                      },
                                      "embed_html": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.embed_html"
                                      },
                                      "embed_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.embed_url"
                                      },
                                      "group": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.group"
                                      },
                                      "search_hit": {
                                        "type": [
                                          "object",
                                          "null"
                                        ],
                                        "description": "Nested object: author.ext.search_hit",
                                        "properties": {
                                          "match": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "Leaf at author.ext.search_hit.match"
                                          },
                                          "title": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "String at author.ext.search_hit.title"
                                          },
                                          "snippet": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "String at author.ext.search_hit.snippet"
                                          },
                                          "evidence_url": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "String at author.ext.search_hit.evidence_url"
                                          },
                                          "matched_urls": {
                                            "type": [
                                              "array",
                                              "null"
                                            ],
                                            "description": "Array at author.ext.search_hit.matched_urls",
                                            "items": {
                                              "type": "string",
                                              "description": "String at author.ext.search_hit.matched_urls"
                                            }
                                          }
                                        }
                                      },
                                      "blog_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.blog_name"
                                      },
                                      "blog_no": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.blog_no"
                                      },
                                      "visitors_today": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.visitors_today"
                                      },
                                      "visitors_total": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.visitors_total"
                                      },
                                      "topic": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.topic"
                                      },
                                      "power_blog": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.power_blog"
                                      },
                                      "official_blog": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.official_blog"
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/similar",
                  "data": {
                    "items": [
                      {
                        "author": {
                          "id": "user_ec1f5d",
                          "username": "user_00d85c",
                          "display_name": null,
                          "avatar_url": "https://example.com/avatars/user_1fb763.png",
                          "bio": null,
                          "verified": true,
                          "followers": null,
                          "following": null,
                          "posts_count": null,
                          "likes_count": null,
                          "url": "https://example.com/user_e4123b"
                        }
                      },
                      {
                        "author": {
                          "id": "user_230dd0",
                          "username": "user_a9ff1f",
                          "display_name": null,
                          "avatar_url": "https://example.com/avatars/user_56fdf6.png",
                          "bio": null,
                          "verified": true,
                          "followers": null,
                          "following": null,
                          "posts_count": null,
                          "likes_count": null,
                          "url": "https://example.com/user_7e5711"
                        }
                      }
                    ],
                    "total": null,
                    "dropped": 0
                  },
                  "credits_used": 5,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": null,
                    "has_more": false,
                    "page_size": 2
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T13:07:38.450Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/post/likers": {
      "get": {
        "summary": "List Instagram post likers",
        "description": "Returns a sample of the accounts that liked an Instagram post. Each liker includes username, display name, avatar URL, verification status, and profile URL, alongside the post's total like count in `total`. Instagram exposes a ranked slice rather than the whole list, usually around a thousand accounts on a popular post: the endpoint does not paginate, and `total` reflects the full like count rather than the number of retrievable likers, so expect `items.length` to be far smaller than `total` on a post with many likes. `total` can be null when the last backup source served the call, because that source reports no reliable like count; read the count from /v1/instagram/post/stats instead.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_post_likers",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "advanced",
        "x-credit-cost": 5,
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL of the Instagram post (a /p/ or /reel/ link). A share link copied from the app (`instagram.com/share/...`) works too; a share link to a profile is refused at no charge with the handle to send, and a dead one is a free 404.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.instagram.com/p/CnpPou9hWqq/"
          },
          {
            "name": "safe_url",
            "in": "query",
            "required": false,
            "description": "When true, returns URL-safe profile picture links suitable for embedding.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/post/likers"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of canonical author wrappers ({ author })",
                          "items": {
                            "type": "object",
                            "description": "Canonical author wrapper",
                            "properties": {
                              "author": {
                                "type": "object",
                                "description": "Canonical Author object (unified across all platforms)",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "Platform-specific user ID (always a string; platform-specific prefixes like `did:`, `spotify:artist:`, `t2_` are stripped)"
                                  },
                                  "username": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "User handle or username"
                                  },
                                  "display_name": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Display name or full name"
                                  },
                                  "avatar_url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "URL to profile picture"
                                  },
                                  "bio": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Profile biography or description"
                                  },
                                  "verified": {
                                    "type": [
                                      "boolean",
                                      "null"
                                    ],
                                    "description": "Whether the account is verified"
                                  },
                                  "followers": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Follower or subscriber count as an integer. Exact on Instagram and on TikTok when the source exposes an unrounded figure. YouTube above 1,000 subscribers is YouTube's published three-significant-figure figure. When the integer is a published/rounded value, `author.ext.followers_approximate` is true."
                                  },
                                  "following": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Number of accounts followed"
                                  },
                                  "posts_count": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Total number of posts / videos / tracks / episodes"
                                  },
                                  "likes_count": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Total likes received across the author's content (when surfaced)"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Direct URL to the profile page"
                                  },
                                  "location": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "ISO region code (e.g. `US`) or freeform location string when surfaced"
                                  },
                                  "external_url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Bio link / external website URL when surfaced by the platform"
                                  },
                                  "private": {
                                    "type": [
                                      "boolean",
                                      "null"
                                    ],
                                    "description": "Boolean at author.private"
                                  },
                                  "joined_at": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.joined_at"
                                  },
                                  "last_post_at": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.last_post_at"
                                  },
                                  "ext": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Nested object: author.ext",
                                    "properties": {
                                      "social_context": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.social_context"
                                      },
                                      "account_created": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.account_created"
                                      },
                                      "country": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.country"
                                      },
                                      "country_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.country_name"
                                      },
                                      "collects_received": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.collects_received"
                                      },
                                      "former_usernames": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.former_usernames",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.former_usernames"
                                        }
                                      },
                                      "former_usernames_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram profile/about: how many former usernames Instagram's \"About this account\" panel lists for the account. 0 when the panel lists none, null when the panel could not be read on this call (the response then carries a note saying so). A count above 0 means the handle was renamed at least once; the names themselves are not published."
                                      },
                                      "verified_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram profile/about, opt-in (`include=verified_at`): the month Instagram verified the account, as the panel shows it (\"April 2024\"). A month, not a date. Null when the account is not verified or the panel shows no verification date. Absent unless requested."
                                      },
                                      "public_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.public_email"
                                      },
                                      "contact_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Opt-in (`contact_email=1` on instagram/profile, youtube/channel and youtube/channel/about). When the bio lists two or more email addresses, the one the creator gives for contacting them personally, copied verbatim. Null when there is one address or none, when every address belongs to a manager, agency or brand, or when the choice was not confident. `author.ext.public_email` (the first address in the bio) is unchanged."
                                      },
                                      "public_phone": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.public_phone"
                                      },
                                      "similar_source": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.similar_source"
                                      },
                                      "instagram_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.instagram_username"
                                      },
                                      "similar_via": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.similar_via"
                                      },
                                      "business_category": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.business_category"
                                      },
                                      "bio_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.bio_links",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: author.ext.bio_links",
                                          "properties": {
                                            "title": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at author.ext.bio_links.title"
                                            },
                                            "url": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at author.ext.bio_links.url"
                                            },
                                            "link_type": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at author.ext.bio_links.link_type"
                                            }
                                          }
                                        }
                                      },
                                      "is_business": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_business"
                                      },
                                      "is_professional": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_professional"
                                      },
                                      "creator_marketplace": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.creator_marketplace"
                                      },
                                      "verification_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.verification_label"
                                      },
                                      "fbid": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.fbid"
                                      },
                                      "hd_avatar_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.hd_avatar_url"
                                      },
                                      "website": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.website"
                                      },
                                      "cover_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.cover_url"
                                      },
                                      "page_active": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.page_active"
                                      },
                                      "employee_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.employee_count"
                                      },
                                      "employee_count_range": {
                                        "type": [
                                          "object",
                                          "null"
                                        ],
                                        "description": "Nested object: author.ext.employee_count_range",
                                        "properties": {
                                          "start": {
                                            "type": [
                                              "integer",
                                              "null"
                                            ],
                                            "description": "Numeric at author.ext.employee_count_range.start"
                                          },
                                          "end": {
                                            "type": [
                                              "integer",
                                              "null"
                                            ],
                                            "description": "Numeric at author.ext.employee_count_range.end"
                                          }
                                        }
                                      },
                                      "founded_year": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.founded_year"
                                      },
                                      "company_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.company_type"
                                      },
                                      "tagline": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.tagline"
                                      },
                                      "specialities": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.specialities",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.specialities"
                                        }
                                      },
                                      "industries": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.industries",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.industries"
                                        }
                                      },
                                      "headquarters": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.headquarters"
                                      },
                                      "locations": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.locations",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.locations"
                                        }
                                      },
                                      "hashtags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.hashtags",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.hashtags"
                                        }
                                      },
                                      "funding": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.funding"
                                      },
                                      "address": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.address"
                                      },
                                      "price_range": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.price_range"
                                      },
                                      "rating": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.rating"
                                      },
                                      "rating_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.rating_count"
                                      },
                                      "talking_about_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.talking_about_count"
                                      },
                                      "business_hours": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.business_hours",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.business_hours"
                                        }
                                      },
                                      "links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.links",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.links"
                                        }
                                      },
                                      "ad_library_page_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.ad_library_page_id"
                                      },
                                      "ad_library_status": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.ad_library_status"
                                      },
                                      "urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.urn"
                                      },
                                      "is_top_voice": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_top_voice"
                                      },
                                      "is_premium": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_premium"
                                      },
                                      "is_creator": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_creator"
                                      },
                                      "is_influencer": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_influencer"
                                      },
                                      "is_open_to_work": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_open_to_work"
                                      },
                                      "is_hiring": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_hiring"
                                      },
                                      "member_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.member_id"
                                      },
                                      "company_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.company_id"
                                      },
                                      "reaction_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.reaction_type"
                                      },
                                      "followers_approximate": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "True when `author.followers` is a published or rounded figure rather than an unrounded census: LinkedIn people-list display buckets, TikTok `stats.followerCount` when the exact sibling is absent, and YouTube subscriber counts at or above 1,000. Null or absent on exact counts."
                                      },
                                      "counts_source": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok profile only. Which of TikTok's two live counter sets `author.followers`, `author.following`, `author.likes_count` and `author.posts_count` carry: `app` (TikTok's app counters, the default) or `web` (the website's `statsV2`, returned with `counts=web`). The two sets can differ by a few percent in either direction."
                                      },
                                      "keywords": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.keywords"
                                      },
                                      "total_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.total_views"
                                      },
                                      "joined_at_timestamp": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.joined_at_timestamp"
                                      },
                                      "topicCategories": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.topicCategories",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.topicCategories"
                                        }
                                      },
                                      "bannerExternalUrl": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.bannerExternalUrl"
                                      },
                                      "madeForKids": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.madeForKids"
                                      },
                                      "hiddenSubscriberCount": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.hiddenSubscriberCount"
                                      },
                                      "related_playlists": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.related_playlists"
                                      },
                                      "topic_ids": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.topic_ids",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.topic_ids"
                                        }
                                      },
                                      "unsubscribed_trailer": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.unsubscribed_trailer"
                                      },
                                      "localizations": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.localizations"
                                      },
                                      "monthly_listeners": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.monthly_listeners"
                                      },
                                      "total_ratings": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Spotify podcasts only: how many listeners have rated the show. Cumulative over the show's whole run, so it reflects longevity as well as size, and it is NOT an audience count (Spotify publishes no play, download, subscriber or follower count for a podcast)"
                                      },
                                      "average_rating": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Spotify podcasts only: mean listener rating from 0 to 5. Fractional (e.g. 4.66) despite the integer type this schema emits for every numeric leaf"
                                      },
                                      "creator_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.creator_username"
                                      },
                                      "join_policy": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.join_policy"
                                      },
                                      "is_nsfw": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_nsfw"
                                      },
                                      "rules": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.rules",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.rules"
                                        }
                                      },
                                      "weekly_active_users": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.weekly_active_users"
                                      },
                                      "weekly_contributions": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.weekly_contributions"
                                      },
                                      "rules_text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.rules_text"
                                      },
                                      "language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.language"
                                      },
                                      "post_karma": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.post_karma"
                                      },
                                      "comment_karma": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.comment_karma"
                                      },
                                      "awardee_karma": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.awardee_karma"
                                      },
                                      "trophy_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.trophy_count"
                                      },
                                      "banner_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.banner_url"
                                      },
                                      "profile_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.profile_title"
                                      },
                                      "social_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.social_links",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.social_links"
                                        }
                                      },
                                      "bio_link": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.bio_link"
                                      },
                                      "embed_html": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.embed_html"
                                      },
                                      "embed_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.embed_url"
                                      },
                                      "group": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.group"
                                      },
                                      "search_hit": {
                                        "type": [
                                          "object",
                                          "null"
                                        ],
                                        "description": "Nested object: author.ext.search_hit",
                                        "properties": {
                                          "match": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "Leaf at author.ext.search_hit.match"
                                          },
                                          "title": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "String at author.ext.search_hit.title"
                                          },
                                          "snippet": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "String at author.ext.search_hit.snippet"
                                          },
                                          "evidence_url": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "String at author.ext.search_hit.evidence_url"
                                          },
                                          "matched_urls": {
                                            "type": [
                                              "array",
                                              "null"
                                            ],
                                            "description": "Array at author.ext.search_hit.matched_urls",
                                            "items": {
                                              "type": "string",
                                              "description": "String at author.ext.search_hit.matched_urls"
                                            }
                                          }
                                        }
                                      },
                                      "blog_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.blog_name"
                                      },
                                      "blog_no": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.blog_no"
                                      },
                                      "visitors_today": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.visitors_today"
                                      },
                                      "visitors_total": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.visitors_total"
                                      },
                                      "topic": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.topic"
                                      },
                                      "power_blog": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.power_blog"
                                      },
                                      "official_blog": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.official_blog"
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/post/likers",
                  "data": {
                    "items": [
                      {
                        "author": {
                          "id": "user_da136f",
                          "username": "user_bd314e",
                          "display_name": null,
                          "avatar_url": "https://example.com/avatars/user_ef7803.png",
                          "bio": null,
                          "verified": false,
                          "followers": null,
                          "following": null,
                          "posts_count": null,
                          "likes_count": null,
                          "url": "https://example.com/user_104179"
                        }
                      },
                      {
                        "author": {
                          "id": "user_e7fbdd",
                          "username": "user_9afbb7",
                          "display_name": "user_7a8050",
                          "avatar_url": "https://example.com/avatars/user_4cd536.png",
                          "bio": null,
                          "verified": false,
                          "followers": null,
                          "following": null,
                          "posts_count": null,
                          "likes_count": null,
                          "url": "https://example.com/user_322bd1"
                        }
                      }
                    ],
                    "total": 1390854,
                    "dropped": 0
                  },
                  "credits_used": 5,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": null,
                    "has_more": false,
                    "page_size": 882
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T13:11:39.092Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/post/stats": {
      "get": {
        "summary": "Get Instagram post stats including the share count",
        "description": "Returns full engagement stats for a single Instagram post or reel: likes, comments, the view (play) count, and the share count (`engagement.shares`), which is the number shown next to the paper-plane Share icon in the app. The share count is a strong authenticity signal: unlike likes and comments, shares are hard to inflate, so it helps separate genuine reach from bought engagement. The standard /v1/instagram/post endpoint cannot return the share count. Metric availability depends on the media type: likes and comments populate on every post, but Instagram exposes a view (play) count and a share count only on video media (reels, videos, and carousels containing a video). On photo posts and photo-only carousels, `engagement.views` and `engagement.shares` are `null`, and because `computed.estimated_reach` and `computed.engagement_rate` derive from views, they are `null` there too. When Instagram's response for a reel includes the save count and the two-arrows Repost (\"regram\") counter, the plain call returns them at `engagement.saves` and `post.ext.repost_count`; Instagram includes them on some responses and not others, so do not rely on the plain call for them. Instagram publishes no save count and no share count on photos and carousels, so `engagement.saves` is null there on every call. Every post carries `post.ext.media_type` (`image`, `video` or `carousel`), a carousel carries its slide count at `post.ext.carousel_count`, and a reel carries Instagram's remix counter at `post.ext.remix_count` (how many reels were made from it). `include=saves` is the reliable way to get them: it asks a third source for a reel's save and repost count whenever the plain call came back without them, for 4 extra credits kept only when a save count comes back; a photo or carousel is never looked up. Use this endpoint for a single post; to get the share count for every reel or post across a whole feed in one call, use /v1/instagram/profile/reels/full or /v1/instagram/profile/posts/full. This endpoint also returns the post's collaborative-post co-authors under `post.ext.coauthors` (`{ id, username, full_name, is_verified, profile_pic_url }` per account, empty array when the post is not a collab): the standard /v1/instagram/post endpoint cannot, because its web source reports every post as having no co-authors. Pass the post `url` (a /p/, /reel/, or /tv/ link; story URLs are not accepted, list a user's active stories with /v1/instagram/stories instead).",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_post_stats",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "advanced",
        "x-credit-cost": 5,
        "x-credit-cost-min": 5,
        "x-credit-cost-max": 9,
        "x-credit-cost-formula": "5 credits for the post. include=saves holds 4 more and keeps them only when it fills a save count the plain call lacked, refunding them otherwise, so a hydrated call is at most 9 credits; on a reel whose save count the plain call already carries, and on any photo or carousel, it settles at 5. Post lookups are cached for 10 minutes.",
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL of the Instagram post (a /p/, /reel/, or /tv/ link). A share link copied from the app (`instagram.com/share/...`) works too; a share link to a profile is refused at no charge with the handle to send, and a dead one is a free 404.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.instagram.com/p/CnpPou9hWqq/"
          },
          {
            "name": "safe_url",
            "in": "query",
            "required": false,
            "description": "When true, returns URL-safe media links suitable for embedding.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "include",
            "in": "query",
            "required": false,
            "description": "Set to `saves` (one token only) to ask a third source for a reel's save count (`post.engagement.saves`) and repost count (`post.ext.repost_count`) when the plain call returned without them. 4 extra credits, kept only when a save count comes back; a repeat within the cache window is 0. Photos and carousels are never looked up, because Instagram publishes no save count on them. Adds 3 to 6 seconds when a lookup runs; read `data.hydration` for the credits held and kept and the time.",
            "schema": {
              "type": "string",
              "enum": [
                "saves"
              ]
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/post/stats"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Platform-specific post ID (always a string; numeric upstream IDs are stringified)"
                        },
                        "url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Direct URL to the post on the source platform"
                        },
                        "content": {
                          "type": "object",
                          "description": "Post content fields (text, media, thumbnail, duration)",
                          "properties": {
                            "text": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Post caption, description, or text content"
                            },
                            "media_urls": {
                              "type": [
                                "string",
                                "array",
                                "null"
                              ],
                              "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels.",
                              "items": {
                                "type": "string",
                                "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels."
                              }
                            },
                            "thumbnail_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "URL to thumbnail image"
                            },
                            "duration_seconds": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Video/clip duration in seconds (null for non-video posts)"
                            }
                          }
                        },
                        "author": {
                          "type": "object",
                          "description": "Subset of Author fields for the post creator",
                          "properties": {
                            "username": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Author username"
                            },
                            "display_name": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Author display name"
                            },
                            "avatar_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "URL to author profile picture"
                            },
                            "verified": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Whether the author account is verified"
                            }
                          }
                        },
                        "engagement": {
                          "type": "object",
                          "description": "Engagement counts",
                          "properties": {
                            "views": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "View count (if available). For Instagram video/reels this is the play count: the headline 'Views' the IG app shows. Instagram removed per-post play counts from its public web pages in August 2026, so `GET /v1/instagram/post` now fills the count automatically from a second source within the same call: videos and reels keep a numeric `views` with no extra endpoint or workaround. Note: since mid-July 2026 Instagram's play count is Instagram-only. It no longer includes Facebook crosspost views (Meta-side change; the app UI changed identically). For combined reach, also fetch the Facebook crosspost via `/v1/facebook/post`."
                            },
                            "likes": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Like / reaction count"
                            },
                            "comments": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Comment count. Note: on `GET /v1/instagram/post` this is Instagram's `edge_media_to_parent_comment.count` (top-level comments); the IG list endpoints report the mobile `comment_count` total (includes replies). Both land on this same field."
                            },
                            "shares": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Share / repost / retweet count. On Instagram this is `reshare_count` (the paper-plane Share / Send count) and it exists only on Instagram's mobile surface, so it is returned by `/v1/instagram/post/stats`, `/v1/instagram/profile/reels/full`, and `/v1/instagram/profile/posts/full`. The web-sourced Instagram list and search endpoints return `null` (never fabricated)."
                            },
                            "saves": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Save / bookmark count. `null` on Instagram: the save count is platform-private and Instagram exposes no numeric save metric on any surface (never fabricated)."
                            }
                          }
                        },
                        "flags": {
                          "type": "object",
                          "description": "Boolean flags on the post",
                          "properties": {
                            "nsfw": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "NSFW flag (null when platform does not surface)"
                            },
                            "spoiler": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Spoiler flag (null when platform does not surface)"
                            },
                            "pinned": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Pinned-to-profile flag (null when platform does not surface)"
                            },
                            "deleted": {
                              "type": "boolean",
                              "description": "Whether the post is tombstoned (always present)"
                            },
                            "likes_hidden": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Present and `true` when the creator has hidden the like count. `engagement.likes` is `null` in that case (never the platform's decoy preview number). Absent on normal posts."
                            },
                            "comments_hidden": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Present and `true` when the upstream reports the comment count as hidden. `engagement.comments` is `null` in that case. Absent on normal posts."
                            },
                            "shares_hidden": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.flags.shares_hidden"
                            },
                            "views_hidden": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.flags.views_hidden"
                            },
                            "saves_hidden": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.flags.saves_hidden"
                            }
                          }
                        },
                        "published_at": {
                          "type": [
                            "string",
                            "integer",
                            "null"
                          ],
                          "description": "Post creation timestamp as an ISO 8601 UTC string. When the upstream sent a Unix epoch it is converted here and the raw epoch is preserved under `post.ext.published_at_epoch` for one deprecation cycle."
                        },
                        "ext": {
                          "type": [
                            "object",
                            "null"
                          ],
                          "description": "Platform-specific passthrough fields for cross-endpoint chains (present only on platforms that surface them)",
                          "properties": {
                            "music_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok music/clip id (exact string): pass to `/v1/tiktok/song/videos?clipId=` to find videos using the same sound"
                            },
                            "matched_song_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok only. The catalogue song TikTok matched the video's sound to, as an exact digit string. An official clip and the original sounds creators upload with it have different `music_id` values and the same `matched_song_id`, so group rows on it to count every use of one song. It is not a clipId: `/v1/tiktok/song` and `/v1/tiktok/song/videos` do not accept it. `/v1/tiktok/search/music` carries it on each sound, so a search on the song's title and artist, kept to the sounds with the same `matched_song_id`, gives the song's official sounds and their `video_count`. Absent when TikTok matched the sound to no song, and on rows served from a source that does not report the match."
                            },
                            "matched_song_title": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok only. The title of the song in `matched_song_id`. Absent when there is no matched song."
                            },
                            "matched_song_artist": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok only. The artist of the song in `matched_song_id`, as TikTok's catalogue names it. Absent when there is no matched song."
                            },
                            "music_title": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok only. The title of the video's own sound (`music_id`). An uploaded sound is titled like `original sound - <handle>`; the song it plays, when TikTok recognised one, is `matched_song_title`."
                            },
                            "music_artist": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok only. The artist TikTok shows for the video's own sound. On an original sound this is the uploader's display name, not the song's artist; use `matched_song_artist` for that."
                            },
                            "music_is_original": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "TikTok only. `true` when the video's sound is an original sound a creator uploaded, `false` when it is a catalogue track. Absent when the source does not say."
                            },
                            "author_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The creator's platform-native numeric user id. On TikTok search and list items, pass to `/v1/tiktok/profile?user_id=` for the creator's current follower count (survives username changes). On Instagram `/v1/instagram/search/reels`, `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` items it is present on every row, accepted by `/v1/instagram/profile/country?user_id=` and `/v1/instagram/basic-profile?userId=`. On Facebook it appears when the upstream exposed a numeric actor id and no real handle."
                            },
                            "author_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The posting account's profile URL, so a matching post can be followed to its account. Present on `/v1/facebook/search/posts` rows: the vanity or `/people/<name>/<id>/` URL when Facebook sends one, otherwise `https://www.facebook.com/profile.php?id=<numeric id>` built from the account id. Pass it as `url` to `/v1/facebook/profile` (or to `/v1/prism/profiles` with `platform: facebook`). Null when the row names neither an account URL nor a numeric account id. Absent on other endpoints."
                            },
                            "author_followers": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "The creator's follower count as embedded in the search payload itself, when the search source happens to carry one. On Instagram `search/reels` it is null on a plain call, because Instagram stopped sending follower counts in its search payload in August 2026; send `include=creator` (or `country`) and it is filled from the creator's profile, 2 credits per creator looked up. It stays null when that lookup does not resolve."
                            },
                            "author_following": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.author_following"
                            },
                            "author_posts_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.author_posts_count"
                            },
                            "author_location": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The free text the author wrote in their profile's location field, exactly as written (for example `Johannesburg, South Africa`). It is not a country code and is not checked. Present on X tweet and reply rows; null or absent when the author left it blank."
                            },
                            "in_reply_to_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.in_reply_to_id"
                            },
                            "in_reply_to_username": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.in_reply_to_username"
                            },
                            "conversation_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.conversation_id"
                            },
                            "author_country": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The creator's country. On Instagram it is the country the creator declares on the About this account panel, as a country name (for example `Spain`), and it is not where the post was filmed. It is present on `/v1/instagram/search/reels` when the request sends `include=creator`, `include=country` or `country`, and on `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` when it sends `include=country`, filled by looking the creator up. On YouTube rows joined with `include=channel` it is the channel's own country as an ISO 3166-1 alpha-2 code (for example `ZA`). Null when the platform publishes no country for the creator or the lookup did not resolve, and nothing is guessed; absent on a plain call."
                            },
                            "author_public_email": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The public contact email on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public email or the lookup did not resolve; absent on a plain call."
                            },
                            "author_public_phone": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The public contact phone number on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public phone or the lookup did not resolve; absent on a plain call."
                            },
                            "download_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "How many times the video has been saved to a device. TikTok only, and distinct from `engagement.saves`: a save keeps the video in a private collection on the platform, a download takes a copy off it, and TikTok counts the two separately. Present on TikTok post, search and post-list responses; absent everywhere else."
                            },
                            "region": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok only: the country TikTok registers the video to, as an ISO 3166-1 alpha-2 code (normally the creator's account country when they posted). It is not the viewer's country, not the `region` you requested, and not a language. On `/v1/tiktok/trending`, `/v1/tiktok/search`, `/v1/tiktok/search/top`, `/v1/tiktok/profile/videos`, `/v1/tiktok/search/hashtag` and `/v1/tiktok/song/videos` it is how you tell which rows are from a given country: filter on it when you need only that country. A row whose source omits the country stays null. The `region` request parameter still only sets the proxy."
                            },
                            "subreddit": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Reddit subreddit name (search/list items): pass to `/v1/reddit/subreddit/details?subreddit=`"
                            },
                            "title": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.title"
                            },
                            "selftext": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.selftext"
                            },
                            "upvote_ratio": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Reddit only: the share of a post's votes that are upvotes, as a fraction from 0 to 1 and usually close to 1 (six live rows measured 1, 1, 1, 0.86, 0.75, 1). Fractional despite the integer type this schema emits for every numeric leaf, the same caveat as `author.ext.average_rating`. Populated on `/v1/reddit/search` rows whose source carries it, and null everywhere else on Reddit including `/v1/reddit/post` and `/v1/reddit/subreddit`."
                            },
                            "flair": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.flair"
                            },
                            "content_language": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The language the platform itself tags the post with, when it sends one: Reddit's own language tag on Reddit lanes, and TikTok's caption-language tag (for example `de`) on `/v1/tiktok/trending?feed=local`. Null when the platform could not tell (Reddit `und`, TikTok `un`, common on short or emoji-only captions); absent where the source sends no tag. Never inferred from the text by us: that is `post.computed.language`."
                            },
                            "type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.type"
                            },
                            "content_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.content_type"
                            },
                            "ticker_symbols": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.ticker_symbols",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.ticker_symbols"
                              }
                            },
                            "video_view_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram's legacy 3-second-view count. Historical: Instagram stopped serving it in August 2026 (removed from its web post surface along with the web play count), so fresh `/v1/instagram/post` lookups no longer carry it and no source can restore it. Use `engagement.views` (the play count) instead."
                            },
                            "ig_play_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram-only play count (`ig_play_count`). Since mid-July 2026 Instagram's headline play count (`engagement.views`) no longer includes Facebook crosspost views and equals this value; it is surfaced explicitly so you can tell the Instagram-only figure apart and detect any future re-divergence. For combined Instagram + Facebook reach, also fetch the Facebook crosspost via `/v1/facebook/post`. Present on `/v1/instagram/post/stats` and, since the August 2026 views fix, on `/v1/instagram/post` for video posts."
                            },
                            "repost_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.repost_count"
                            },
                            "media_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.media_type"
                            },
                            "text_truncated": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.ext.text_truncated"
                            },
                            "ip_location": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.ip_location"
                            },
                            "carousel_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.carousel_count"
                            },
                            "remix_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.remix_count"
                            },
                            "audio_cluster_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Instagram's audio cluster for a reel, as an exact digit string: the id Instagram uses to group different uploads of the same sound. Present on `/v1/instagram/audio/reels` rows and on `/v1/instagram/profile/reels` with `include=stats`; absent on a row when it is not available and on every other surface."
                            },
                            "facebook_likes": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.likes` on this row. A post shared to Facebook arrives from some sources with its Facebook likes already folded into the Instagram count, so the share is subtracted and published here, which keeps `engagement.likes` the Instagram-only figure instagram.com shows on the post. Add the two together for the combined number. Absent when the read carried no Facebook share, and absent on a post whose owner hides the like count, because nothing can be subtracted from a null. A response that excluded a share also carries a note in `data._warnings`."
                            },
                            "facebook_comments": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.comments` on this row, the comment counterpart of `post.ext.facebook_likes`. Each leaf appears only for the count it actually changed, so a post whose likes are hidden but whose comments were reconciled carries this one alone."
                            },
                            "instagram_views": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram only: the Instagram-only play count of a video, the same figure on every Instagram endpoint. `engagement.views` keeps each endpoint's established meaning: on `/v1/instagram/profile/reels`, `/v1/instagram/audio/reels`, `/v1/instagram/search/reels` and `/v1/instagram/search/hashtag` it can include the post's Facebook cross-post views, while on `/v1/instagram/post` and `/v1/instagram/post/stats` it is Instagram-only. Read this leaf when you compare one post across endpoints. Absent on photos and when the source did not report the Instagram-only figure."
                            },
                            "facebook_views": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram only: the Facebook cross-post part of a video's play count, the counterpart of `post.ext.instagram_views`. Present only when the source reported the Facebook part, or a combined total above the Instagram figure. Absent does not mean zero: some sources report the Instagram figure alone even for a cross-posted video."
                            },
                            "published_at_epoch": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Raw Unix epoch for `published_at` (seconds, or milliseconds when the upstream sent millis). Present only when the upstream sent a numeric epoch that was normalised to the ISO 8601 `published_at` string. Kept for one deprecation cycle for integrations pinned to the numeric form."
                            },
                            "usertags": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.usertags",
                              "items": {
                                "type": "string",
                                "description": "Leaf at post.ext.usertags"
                              }
                            },
                            "coauthors": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post).",
                              "items": {
                                "type": "string",
                                "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post)."
                              }
                            },
                            "music": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.music"
                            },
                            "sponsor_tags": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint.",
                              "items": {
                                "type": "string",
                                "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                              }
                            },
                            "sponsored_disclosed": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "The platform's own disclosure that the post is paid or promotional: on Instagram the paid-partnership label (`is_paid_partnership`) or a tagged brand partner, on TikTok the label TikTok shows viewers (\"Paid partnership\", \"Commission paid\", \"Promotional content\"). `false` when the post carries the flag unset, null when it carries none. Present on `/v1/instagram/post/stats`, `/v1/instagram/search/reels` and `/v1/tiktok/search`; absent on every other endpoint."
                            },
                            "ai_label": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Instagram only: Instagram's AI-content label on the post, as the method Instagram reports: `classifier_score_high` (Instagram detected it, shown as \"Likely made with AI\"), `ai_created` or `ai_edited` (declared or detected as made or edited with AI). Null when the post carries no AI label. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                            },
                            "story_mentions": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                              "items": {
                                "type": "string",
                                "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint."
                              }
                            },
                            "story_links": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint.",
                              "items": {
                                "type": "string",
                                "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint."
                              }
                            },
                            "story_reshared_posts": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                              "items": {
                                "type": "string",
                                "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint."
                              }
                            },
                            "location": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.location"
                            },
                            "media": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.media",
                              "items": {
                                "type": "object",
                                "description": "Nested object: post.ext.media",
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "description": "Leaf at post.ext.media.type"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at post.ext.media.url"
                                  },
                                  "width": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at post.ext.media.width"
                                  },
                                  "height": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at post.ext.media.height"
                                  }
                                }
                              }
                            },
                            "top_comments": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.top_comments",
                              "items": {
                                "type": "object",
                                "description": "Nested object: post.ext.top_comments",
                                "properties": {
                                  "id": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at post.ext.top_comments.id"
                                  },
                                  "text": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at post.ext.top_comments.text"
                                  },
                                  "username": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at post.ext.top_comments.username"
                                  },
                                  "likes": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at post.ext.top_comments.likes"
                                  },
                                  "published_at": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at post.ext.top_comments.published_at"
                                  }
                                }
                              }
                            },
                            "hashtags": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.hashtags",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.hashtags"
                              }
                            },
                            "mentions": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.mentions",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.mentions"
                              }
                            },
                            "mentioned_user_ids": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.mentioned_user_ids",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.mentioned_user_ids"
                              }
                            },
                            "quoted_post": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Threads quote posts: the post this one quotes, as `{ id, url, author: { id, username }, text, media_urls, thumbnail_url }`. A quote post usually carries no caption or media of its own, and the text and video you see on the post's page belong to this attachment, by a different author. It is returned here rather than merged into `post.content`, so `content.*` always stays the outer post's own content and one account's media is never attributed to another. Absent on posts that are not quote posts."
                            },
                            "retweeted_post": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.retweeted_post"
                            },
                            "quote_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.quote_count"
                            },
                            "all_media_urls": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.all_media_urls",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.all_media_urls"
                              }
                            },
                            "reaction_counts": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.reaction_counts",
                              "items": {
                                "type": "string",
                                "description": "Leaf at post.ext.reaction_counts"
                              }
                            },
                            "share_urn": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.share_urn"
                            },
                            "post_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.post_type"
                            },
                            "activity_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.activity_id"
                            },
                            "published_at_precision": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.published_at_precision"
                            },
                            "author_urn": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.author_urn"
                            },
                            "author_headline": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.author_headline"
                            },
                            "author_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.author_type"
                            },
                            "is_repost_quote": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.ext.is_repost_quote"
                            },
                            "article": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.article"
                            },
                            "reaction_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.reaction_type"
                            },
                            "download_media_urls": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.download_media_urls",
                              "items": {
                                "type": "string",
                                "description": "Leaf at post.ext.download_media_urls"
                              }
                            },
                            "tags": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.tags",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.tags"
                              }
                            },
                            "categoryId": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.categoryId"
                            },
                            "categoryTitle": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.categoryTitle"
                            },
                            "topicCategories": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.topicCategories",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.topicCategories"
                              }
                            },
                            "duration": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.duration"
                            },
                            "license": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.license"
                            },
                            "madeForKids": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.ext.madeForKids"
                            },
                            "defaultAudioLanguage": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.defaultAudioLanguage"
                            },
                            "hasPaidProductPlacement": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.ext.hasPaidProductPlacement"
                            },
                            "caption": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.caption"
                            },
                            "position": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.position"
                            },
                            "playlistId": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.playlistId"
                            },
                            "videoOwnerChannelId": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.videoOwnerChannelId"
                            },
                            "videoPublishedAt": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.videoPublishedAt"
                            },
                            "description": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.description"
                            },
                            "default_language": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.default_language"
                            },
                            "localizations": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.localizations"
                            },
                            "playlist_item_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.playlist_item_id"
                            },
                            "playlist_owner_channel_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.playlist_owner_channel_id"
                            },
                            "playlist_owner_title": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.playlist_owner_title"
                            },
                            "channel_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.channel_id"
                            },
                            "published_label": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.published_label"
                            },
                            "published_precision": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.published_precision"
                            },
                            "title_maybe_translated": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.ext.title_maybe_translated"
                            },
                            "video_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.video_count"
                            },
                            "posts_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "`/v1/instagram/hashtag` only: the exact number of public posts Instagram counts under the hashtag. Live: it moves between calls minutes apart."
                            },
                            "commerce": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.commerce"
                            },
                            "on_screen_texts": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.on_screen_texts",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.on_screen_texts"
                              }
                            },
                            "topic_tag": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.topic_tag"
                            },
                            "reshare_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.reshare_count"
                            },
                            "dsp_ids": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.dsp_ids"
                            },
                            "topic_tag_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.topic_tag_id"
                            },
                            "amazon_shop_lists": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.amazon_shop_lists",
                              "items": {
                                "type": "string",
                                "description": "Leaf at post.ext.amazon_shop_lists"
                              }
                            },
                            "amazon_shop_trending_picks": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.amazon_shop_trending_picks",
                              "items": {
                                "type": "string",
                                "description": "Leaf at post.ext.amazon_shop_trending_picks"
                              }
                            },
                            "amazon_shop_curations": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.amazon_shop_curations",
                              "items": {
                                "type": "string",
                                "description": "Leaf at post.ext.amazon_shop_curations"
                              }
                            },
                            "amazon_shop_socials": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.amazon_shop_socials",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.amazon_shop_socials"
                              }
                            },
                            "ad": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Ad Library envelope (Facebook `adlibrary/ad` and `adlibrary/company/ads` items): page_id, currency, spend, reach_estimate, publisher_platforms, categories, targeted_or_reached_countries, cta_text, cta_type, link_url, is_active, end_date_iso, display_format, title, video_hd_url, video_sd_url. Absent on every non-ad surface."
                            },
                            "apple_music": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.apple_music"
                            },
                            "feedback_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.feedback_id"
                            },
                            "question_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Naver KnowledgeiN (`/v1/naver/kin/search`) only: the question's id (Naver's `docId`), read from the row's link. Kin returns one row per answer, so several rows can share it; send `group=question` for one row per question."
                            },
                            "answer_no": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Naver KnowledgeiN only: which answer of the question this row is (Naver's `answerNo`), read from the row's link."
                            },
                            "answer_nos": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first.",
                              "items": {
                                "type": "integer",
                                "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first."
                              }
                            },
                            "published_at_est": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Naver KnowledgeiN only: the question's date ESTIMATED from its id (`YYYY-MM-DD`, Korea time), never a published date, so `published_at` stays null. Absent for questions older than the calibration table."
                            },
                            "date_basis": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "How `post.ext.published_at_est` was derived. `kin_docid_estimate`: interpolated from the question id against question pages whose posted date was read."
                            },
                            "event": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.event"
                            },
                            "trend": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Trend-board envelope: what TikTok's own trend board says about the row. On `/v1/tiktok/hashtags/popular`: `rank`, `country_code`, `period_days`, `posts` and `views` for the window (not lifetime totals), `industry` / `industry_id` / `industry_label` for the first board the hashtag was read from (null for the overall board), `boards` listing EVERY board it ranks on as `{ industry, industry_id, industry_label, rank }` in board order (so a hashtag in the top 3 overall and on an industry board shows both), `popularity_curve` as `{ date, value }` with value 0 to 100 relative to the window's peak, and `top_creators`. On `/v1/tiktok/videos/popular`: `rank`, `country_code`, `period_days`, `order_by`, `period_views`, `organic_views`, `engagement_rate`, `six_second_view_through_rate`, `content_tags`. Absent on every non-board surface."
                            },
                            "updated_at": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.updated_at"
                            },
                            "alt_text": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.alt_text"
                            },
                            "board_name": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.board_name"
                            }
                          }
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      }
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/post/stats",
                  "data": {
                    "post": {
                      "id": "3020013795029641898",
                      "url": "https://www.instagram.com/reel/CnpPou9hWqq/",
                      "content": {
                        "text": "Mumbbongbbong😵‍💫🎺 \n\nJoin @sun_sim_ (Sunsim), a Maltese, and Deokseon, a bichon frise, on a magic carpet ride into the weekend. \n\n #WeeklyFluff \n\n Video by @sun_sim_",
                        "media_urls": "https://scontent-lga3-1.cdninstagram.com/o1/v/t2/f2/m82/AQMvIsbCtot9atknWWicTQex1s4NvrA2i8kEYhdBwyu0FaHuOg_Z1IL35MbODe8c-J9__WU2-qMKRsFOs7wtFo-hX7fdOnauV45xI2Y.mp4?_nc_cat=111&_nc_sid=5e9851&_nc_ht=scontent-lga3-1.cdninstagram.com&_nc_ohc=ymhJ-pp52qAQ7kNvwE6Gs1b&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTM5OTA5MDMzMDgzNDc0MSwiYXNzZXRfYWdlX2RheXMiOjEzNTAsInZpX3VzZWNhc2VfaWQiOjEwMDk5LCJkdXJhdGlvbl9zIjoxMiwidXJsZ2VuX3NvdXJjZSI6Ind3dyJ9&ccb=17-1&vs=87b8f7dbb0b19011&_nc_vs=HBksFQIYT2lnX3hwdl9yZWVsc19wZXJtYW5lbnRfcHJvZC9GRjQzRDJDMEI0MUM2NjVCM0EzMEFDNkE2NDBDRTRBOV92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYOnBhc3N0aHJvdWdoX2V2ZXJzdG9yZS9HQlZTZXhNSGI0amF5dEFFQUJZaEVIV0JuVHBMYnFfRUFBQUYVAgLIARIAKAAYABsCiAd1c2Vfb2lsATEScHJvZ3Jlc3NpdmVfcmVjaXBlATEVAAAm6tzsouOd_AQVAigCQzMsF0ApZmZmZmZmGBJkYXNoX2Jhc2VsaW5lXzFfdjERAHX-B2XmnQEA&_nc_gid=jUC2jCkUzsOf7fOsQnaz0g&_nc_ss=733ba&_nc_zt=28&oh=00_AQM8vihMXlqyWn76ZCVyfZI59SW3ZwtHcuM4UbzfVyF3dA&oe=6AC1B10C",
                        "thumbnail_url": "https://scontent-lga3-2.cdninstagram.com/v/t51.71878-15/491414458_1934794933930942_6214267858142308860_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=101&ig_cache_key=MzAyMDAxMzc5NTAyOTY0MTg5OA%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjcyMC5zZHIudmlkZW9fZGVmYXVsdF9jb3Zlcl9mcmFtZS5DMyJ9&_nc_ohc=uGUD5PzbNQEQ7kNvwEH7szm&_nc_oc=Adri7HHQy1sirgBp5L6PrlCm3tNR7m-QBOmaN410XnkZZPRVlGnUs5Q7e4FCzg7YqgU&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-lga3-2.cdninstagram.com&_nc_gid=jUC2jCkUzsOf7fOsQnaz0g&_nc_ss=733ba&oh=00_AQM5jW80toSLVOnwaaCMoy7vBrwdF9qX4HuMRQi1RcU3Wg&oe=6AC58B6B",
                        "duration_seconds": 12.7
                      },
                      "author": {
                        "username": "instagram",
                        "display_name": "Instagram",
                        "avatar_url": "https://scontent-lga3-3.cdninstagram.com/v/t51.82787-19/550891366_18667771684001321_1383210656577177067_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_cat=1&ig_cache_key=GGbv1SApFvlLPVJCAOtF0XrDJjITbmNDAQAB1501500j-ccb7-5&ccb=7-5&_nc_sid=669407&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLnd3dy4xMDgwLkMzIn0%3D&_nc_ohc=_dBpg1akaE4Q7kNvwEzSMUO&_nc_oc=Adp9q_1Hrmtqt3yFS7bzLmqMIgR0CmP3FcRmB19tdTIu1Cfkhh3iiYM1aODNYACuWkQ&_nc_ad=z-m&_nc_cid=0&_nc_zt=24&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_gid=jUC2jCkUzsOf7fOsQnaz0g&_nc_ss=733ba&oh=00_AQNIpSLWw0UZdi6WlpjJ0nI7_alvrmUQ0w9uk4IU0vIufQ&oe=6AC59627",
                        "verified": true
                      },
                      "engagement": {
                        "views": 45016542,
                        "likes": 1390842,
                        "comments": 16381,
                        "shares": 47,
                        "saves": null
                      },
                      "flags": {
                        "nsfw": null,
                        "spoiler": null,
                        "pinned": false,
                        "deleted": false
                      },
                      "published_at": "2023-01-20T16:56:42.000Z",
                      "ext": {
                        "ig_play_count": 45016542,
                        "repost_count": null,
                        "media_type": "video",
                        "remix_count": 197,
                        "published_at_epoch": 1674233802,
                        "coauthors": []
                      }
                    },
                    "computed": {
                      "engagement_rate": 0.031261,
                      "language": "en",
                      "content_category": "other",
                      "estimated_reach": 54019850
                    }
                  },
                  "credits_used": 5,
                  "request_id": "req_example000000",
                  "cached": false,
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T15:37:11.366Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/tagged": {
      "get": {
        "summary": "List posts an Instagram user is tagged in",
        "description": "Returns a paginated list of the posts that tag an Instagram user. Each post includes shortcode, URL, caption, media URLs, engagement counts, and the author. Pass either `handle` or `user_id`, and page through with `cursor`. Note: post.author.display_name is usually null on this endpoint, because the Instagram surface behind it withholds creator display names; it carries the real name on the calls a second source answers. Join on post.author.username, or pass it to /v1/instagram/profile?handle= for the name.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_tagged",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "advanced",
        "x-credit-cost": 5,
        "x-socialcrawl-oneOf": [
          [
            "handle",
            "user_id"
          ]
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Instagram username without the @ symbol. (one of: handle, user_id; at least one required)",
            "schema": {
              "type": "string"
            },
            "example": "mrbeast"
          },
          {
            "name": "user_id",
            "in": "query",
            "required": false,
            "description": "Instagram numeric user ID. Use this for faster responses. (one of: handle, user_id; at least one required)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Pagination cursor. Use the `next_cursor` from the previous response to fetch the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "safe_url",
            "in": "query",
            "required": false,
            "description": "When true, returns URL-safe media links suitable for embedding.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "Only rows published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Rows older than it are left off each page. This list is not in date order, so the walk does not stop at the date: keep following `next_cursor`, and each page costs what a page costs even when every row on it is filtered out. A row with no date is kept. `published_after`, `start_date`, `from_date`, `publish_time` (`yesterday`, `this-week`, `this-month`, `last-3-months`, `last-6-months`) and `max_age_days` are accepted and applied as `since`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "description": "Only rows published on or before this date: YYYY-MM-DD (that whole UTC day is included) or an ISO 8601 timestamp. Newer rows are left off each page and the walk does not stop, so older pages follow. A row with no date is kept. `published_before`, `end_date` and `to_date` are accepted and applied as `until`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max_pages",
            "in": "query",
            "required": false,
            "description": "1 to 50 (default 1, or 50 when `max_items` or `max_credits` is sent). Walk up to this many pages in one call and return the rows from all of them. Each page walked is billed exactly as one call to this endpoint (a cached page is free) and counts against your rate limit; its charge and any refund are recorded under the page's own request id, listed in `data.walk.request_ids`. The walk stops early at the last page, or when the request's time budget runs low; `data.walk.stopped` says why (`end`, `max_pages`, `max_items`, `max_credits`, `time_budget`, `page_error`) and `pagination.next_cursor` continues from where it stopped.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "max_items",
            "in": "query",
            "required": false,
            "description": "1 to 5000. Get more in one call: keep walking pages until the response holds at least this many rows, then stop with `data.walk.stopped: \"max_items\"`. The last page is returned whole (it was billed), so `data.items` can hold up to one page more than this, and `pagination.next_cursor` resumes right after it without skipping a row. Walks up to 50 pages unless `max_pages` says fewer; each page is billed as one call (a cached page is free). Add `max_credits` to cap the spend. A long walk can stop on the time budget first (`\"time_budget\"`): send the returned cursor with the same params to continue.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5000
            }
          },
          {
            "name": "max_credits",
            "in": "query",
            "required": false,
            "description": "1 to 100000. The most this call may spend, across every page it walks. A page starts only while the credits already spent plus that page's price (or, when higher, the most any page of this walk has cost) still fit, so the call never goes past it; the walk then stops with `data.walk.stopped: \"max_credits\"` and the cursor to resume. Sent alone, it walks as far as the budget goes (up to 50 pages). A value below the price of one page is a free 400 whose `error.details.page_credits` names that price. Credits a row join (`include=`) adds are known only once a page has run, so page 1 is checked against its own price.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100000
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/tagged"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of canonical post wrappers ({ post, computed })",
                          "items": {
                            "type": "object",
                            "description": "Canonical post wrapper",
                            "properties": {
                              "post": {
                                "type": "object",
                                "description": "Canonical Post object (unified across all platforms)",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "Platform-specific post ID (always a string; numeric upstream IDs are stringified)"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Direct URL to the post on the source platform"
                                  },
                                  "content": {
                                    "type": "object",
                                    "description": "Post content fields (text, media, thumbnail, duration)",
                                    "properties": {
                                      "text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Post caption, description, or text content"
                                      },
                                      "media_urls": {
                                        "type": [
                                          "string",
                                          "array",
                                          "null"
                                        ],
                                        "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels.",
                                        "items": {
                                          "type": "string",
                                          "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels."
                                        }
                                      },
                                      "thumbnail_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to thumbnail image"
                                      },
                                      "duration_seconds": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Video/clip duration in seconds (null for non-video posts)"
                                      }
                                    }
                                  },
                                  "author": {
                                    "type": "object",
                                    "description": "Subset of Author fields for the post creator",
                                    "properties": {
                                      "username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author username"
                                      },
                                      "display_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author display name"
                                      },
                                      "avatar_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to author profile picture"
                                      },
                                      "verified": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Whether the author account is verified"
                                      }
                                    }
                                  },
                                  "engagement": {
                                    "type": "object",
                                    "description": "Engagement counts",
                                    "properties": {
                                      "views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "View count (if available). For Instagram video/reels this is the play count: the headline 'Views' the IG app shows. Instagram removed per-post play counts from its public web pages in August 2026, so `GET /v1/instagram/post` now fills the count automatically from a second source within the same call: videos and reels keep a numeric `views` with no extra endpoint or workaround. Note: since mid-July 2026 Instagram's play count is Instagram-only. It no longer includes Facebook crosspost views (Meta-side change; the app UI changed identically). For combined reach, also fetch the Facebook crosspost via `/v1/facebook/post`."
                                      },
                                      "likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Like / reaction count"
                                      },
                                      "comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Comment count. Note: on `GET /v1/instagram/post` this is Instagram's `edge_media_to_parent_comment.count` (top-level comments); the IG list endpoints report the mobile `comment_count` total (includes replies). Both land on this same field."
                                      },
                                      "shares": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Share / repost / retweet count. On Instagram this is `reshare_count` (the paper-plane Share / Send count) and it exists only on Instagram's mobile surface, so it is returned by `/v1/instagram/post/stats`, `/v1/instagram/profile/reels/full`, and `/v1/instagram/profile/posts/full`. The web-sourced Instagram list and search endpoints return `null` (never fabricated)."
                                      },
                                      "saves": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Save / bookmark count. `null` on Instagram: the save count is platform-private and Instagram exposes no numeric save metric on any surface (never fabricated)."
                                      }
                                    }
                                  },
                                  "flags": {
                                    "type": "object",
                                    "description": "Boolean flags on the post",
                                    "properties": {
                                      "nsfw": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "NSFW flag (null when platform does not surface)"
                                      },
                                      "spoiler": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Spoiler flag (null when platform does not surface)"
                                      },
                                      "pinned": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Pinned-to-profile flag (null when platform does not surface)"
                                      },
                                      "deleted": {
                                        "type": "boolean",
                                        "description": "Whether the post is tombstoned (always present)"
                                      },
                                      "likes_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the creator has hidden the like count. `engagement.likes` is `null` in that case (never the platform's decoy preview number). Absent on normal posts."
                                      },
                                      "comments_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the upstream reports the comment count as hidden. `engagement.comments` is `null` in that case. Absent on normal posts."
                                      },
                                      "shares_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.shares_hidden"
                                      },
                                      "views_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.views_hidden"
                                      },
                                      "saves_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.saves_hidden"
                                      }
                                    }
                                  },
                                  "published_at": {
                                    "type": [
                                      "string",
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Post creation timestamp as an ISO 8601 UTC string. When the upstream sent a Unix epoch it is converted here and the raw epoch is preserved under `post.ext.published_at_epoch` for one deprecation cycle."
                                  },
                                  "ext": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Platform-specific passthrough fields for cross-endpoint chains (present only on platforms that surface them)",
                                    "properties": {
                                      "music_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok music/clip id (exact string): pass to `/v1/tiktok/song/videos?clipId=` to find videos using the same sound"
                                      },
                                      "matched_song_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The catalogue song TikTok matched the video's sound to, as an exact digit string. An official clip and the original sounds creators upload with it have different `music_id` values and the same `matched_song_id`, so group rows on it to count every use of one song. It is not a clipId: `/v1/tiktok/song` and `/v1/tiktok/song/videos` do not accept it. `/v1/tiktok/search/music` carries it on each sound, so a search on the song's title and artist, kept to the sounds with the same `matched_song_id`, gives the song's official sounds and their `video_count`. Absent when TikTok matched the sound to no song, and on rows served from a source that does not report the match."
                                      },
                                      "matched_song_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the song in `matched_song_id`. Absent when there is no matched song."
                                      },
                                      "matched_song_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist of the song in `matched_song_id`, as TikTok's catalogue names it. Absent when there is no matched song."
                                      },
                                      "music_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the video's own sound (`music_id`). An uploaded sound is titled like `original sound - <handle>`; the song it plays, when TikTok recognised one, is `matched_song_title`."
                                      },
                                      "music_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist TikTok shows for the video's own sound. On an original sound this is the uploader's display name, not the song's artist; use `matched_song_artist` for that."
                                      },
                                      "music_is_original": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "TikTok only. `true` when the video's sound is an original sound a creator uploaded, `false` when it is a catalogue track. Absent when the source does not say."
                                      },
                                      "author_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's platform-native numeric user id. On TikTok search and list items, pass to `/v1/tiktok/profile?user_id=` for the creator's current follower count (survives username changes). On Instagram `/v1/instagram/search/reels`, `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` items it is present on every row, accepted by `/v1/instagram/profile/country?user_id=` and `/v1/instagram/basic-profile?userId=`. On Facebook it appears when the upstream exposed a numeric actor id and no real handle."
                                      },
                                      "author_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The posting account's profile URL, so a matching post can be followed to its account. Present on `/v1/facebook/search/posts` rows: the vanity or `/people/<name>/<id>/` URL when Facebook sends one, otherwise `https://www.facebook.com/profile.php?id=<numeric id>` built from the account id. Pass it as `url` to `/v1/facebook/profile` (or to `/v1/prism/profiles` with `platform: facebook`). Null when the row names neither an account URL nor a numeric account id. Absent on other endpoints."
                                      },
                                      "author_followers": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "The creator's follower count as embedded in the search payload itself, when the search source happens to carry one. On Instagram `search/reels` it is null on a plain call, because Instagram stopped sending follower counts in its search payload in August 2026; send `include=creator` (or `country`) and it is filled from the creator's profile, 2 credits per creator looked up. It stays null when that lookup does not resolve."
                                      },
                                      "author_following": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_following"
                                      },
                                      "author_posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_posts_count"
                                      },
                                      "author_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The free text the author wrote in their profile's location field, exactly as written (for example `Johannesburg, South Africa`). It is not a country code and is not checked. Present on X tweet and reply rows; null or absent when the author left it blank."
                                      },
                                      "in_reply_to_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_id"
                                      },
                                      "in_reply_to_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_username"
                                      },
                                      "conversation_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.conversation_id"
                                      },
                                      "author_country": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's country. On Instagram it is the country the creator declares on the About this account panel, as a country name (for example `Spain`), and it is not where the post was filmed. It is present on `/v1/instagram/search/reels` when the request sends `include=creator`, `include=country` or `country`, and on `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` when it sends `include=country`, filled by looking the creator up. On YouTube rows joined with `include=channel` it is the channel's own country as an ISO 3166-1 alpha-2 code (for example `ZA`). Null when the platform publishes no country for the creator or the lookup did not resolve, and nothing is guessed; absent on a plain call."
                                      },
                                      "author_public_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact email on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public email or the lookup did not resolve; absent on a plain call."
                                      },
                                      "author_public_phone": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact phone number on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public phone or the lookup did not resolve; absent on a plain call."
                                      },
                                      "download_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "How many times the video has been saved to a device. TikTok only, and distinct from `engagement.saves`: a save keeps the video in a private collection on the platform, a download takes a copy off it, and TikTok counts the two separately. Present on TikTok post, search and post-list responses; absent everywhere else."
                                      },
                                      "region": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only: the country TikTok registers the video to, as an ISO 3166-1 alpha-2 code (normally the creator's account country when they posted). It is not the viewer's country, not the `region` you requested, and not a language. On `/v1/tiktok/trending`, `/v1/tiktok/search`, `/v1/tiktok/search/top`, `/v1/tiktok/profile/videos`, `/v1/tiktok/search/hashtag` and `/v1/tiktok/song/videos` it is how you tell which rows are from a given country: filter on it when you need only that country. A row whose source omits the country stays null. The `region` request parameter still only sets the proxy."
                                      },
                                      "subreddit": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Reddit subreddit name (search/list items): pass to `/v1/reddit/subreddit/details?subreddit=`"
                                      },
                                      "title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.title"
                                      },
                                      "selftext": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.selftext"
                                      },
                                      "upvote_ratio": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Reddit only: the share of a post's votes that are upvotes, as a fraction from 0 to 1 and usually close to 1 (six live rows measured 1, 1, 1, 0.86, 0.75, 1). Fractional despite the integer type this schema emits for every numeric leaf, the same caveat as `author.ext.average_rating`. Populated on `/v1/reddit/search` rows whose source carries it, and null everywhere else on Reddit including `/v1/reddit/post` and `/v1/reddit/subreddit`."
                                      },
                                      "flair": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.flair"
                                      },
                                      "content_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The language the platform itself tags the post with, when it sends one: Reddit's own language tag on Reddit lanes, and TikTok's caption-language tag (for example `de`) on `/v1/tiktok/trending?feed=local`. Null when the platform could not tell (Reddit `und`, TikTok `un`, common on short or emoji-only captions); absent where the source sends no tag. Never inferred from the text by us: that is `post.computed.language`."
                                      },
                                      "type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.type"
                                      },
                                      "content_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.content_type"
                                      },
                                      "ticker_symbols": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.ticker_symbols",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.ticker_symbols"
                                        }
                                      },
                                      "video_view_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram's legacy 3-second-view count. Historical: Instagram stopped serving it in August 2026 (removed from its web post surface along with the web play count), so fresh `/v1/instagram/post` lookups no longer carry it and no source can restore it. Use `engagement.views` (the play count) instead."
                                      },
                                      "ig_play_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram-only play count (`ig_play_count`). Since mid-July 2026 Instagram's headline play count (`engagement.views`) no longer includes Facebook crosspost views and equals this value; it is surfaced explicitly so you can tell the Instagram-only figure apart and detect any future re-divergence. For combined Instagram + Facebook reach, also fetch the Facebook crosspost via `/v1/facebook/post`. Present on `/v1/instagram/post/stats` and, since the August 2026 views fix, on `/v1/instagram/post` for video posts."
                                      },
                                      "repost_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.repost_count"
                                      },
                                      "media_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.media_type"
                                      },
                                      "text_truncated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.text_truncated"
                                      },
                                      "ip_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.ip_location"
                                      },
                                      "carousel_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.carousel_count"
                                      },
                                      "remix_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.remix_count"
                                      },
                                      "audio_cluster_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram's audio cluster for a reel, as an exact digit string: the id Instagram uses to group different uploads of the same sound. Present on `/v1/instagram/audio/reels` rows and on `/v1/instagram/profile/reels` with `include=stats`; absent on a row when it is not available and on every other surface."
                                      },
                                      "facebook_likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.likes` on this row. A post shared to Facebook arrives from some sources with its Facebook likes already folded into the Instagram count, so the share is subtracted and published here, which keeps `engagement.likes` the Instagram-only figure instagram.com shows on the post. Add the two together for the combined number. Absent when the read carried no Facebook share, and absent on a post whose owner hides the like count, because nothing can be subtracted from a null. A response that excluded a share also carries a note in `data._warnings`."
                                      },
                                      "facebook_comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.comments` on this row, the comment counterpart of `post.ext.facebook_likes`. Each leaf appears only for the count it actually changed, so a post whose likes are hidden but whose comments were reconciled carries this one alone."
                                      },
                                      "instagram_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Instagram-only play count of a video, the same figure on every Instagram endpoint. `engagement.views` keeps each endpoint's established meaning: on `/v1/instagram/profile/reels`, `/v1/instagram/audio/reels`, `/v1/instagram/search/reels` and `/v1/instagram/search/hashtag` it can include the post's Facebook cross-post views, while on `/v1/instagram/post` and `/v1/instagram/post/stats` it is Instagram-only. Read this leaf when you compare one post across endpoints. Absent on photos and when the source did not report the Instagram-only figure."
                                      },
                                      "facebook_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post part of a video's play count, the counterpart of `post.ext.instagram_views`. Present only when the source reported the Facebook part, or a combined total above the Instagram figure. Absent does not mean zero: some sources report the Instagram figure alone even for a cross-posted video."
                                      },
                                      "published_at_epoch": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Raw Unix epoch for `published_at` (seconds, or milliseconds when the upstream sent millis). Present only when the upstream sent a numeric epoch that was normalised to the ISO 8601 `published_at` string. Kept for one deprecation cycle for integrations pinned to the numeric form."
                                      },
                                      "usertags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.usertags",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.usertags"
                                        }
                                      },
                                      "coauthors": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post).",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post)."
                                        }
                                      },
                                      "music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.music"
                                      },
                                      "sponsor_tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                        }
                                      },
                                      "sponsored_disclosed": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "The platform's own disclosure that the post is paid or promotional: on Instagram the paid-partnership label (`is_paid_partnership`) or a tagged brand partner, on TikTok the label TikTok shows viewers (\"Paid partnership\", \"Commission paid\", \"Promotional content\"). `false` when the post carries the flag unset, null when it carries none. Present on `/v1/instagram/post/stats`, `/v1/instagram/search/reels` and `/v1/tiktok/search`; absent on every other endpoint."
                                      },
                                      "ai_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram only: Instagram's AI-content label on the post, as the method Instagram reports: `classifier_score_high` (Instagram detected it, shown as \"Likely made with AI\"), `ai_created` or `ai_edited` (declared or detected as made or edited with AI). Null when the post carries no AI label. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                      },
                                      "story_mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "story_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint."
                                        }
                                      },
                                      "story_reshared_posts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.location"
                                      },
                                      "media": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.media",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.media",
                                          "properties": {
                                            "type": {
                                              "type": "string",
                                              "description": "Leaf at post.ext.media.type"
                                            },
                                            "url": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.media.url"
                                            },
                                            "width": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.width"
                                            },
                                            "height": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.height"
                                            }
                                          }
                                        }
                                      },
                                      "top_comments": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.top_comments",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.top_comments",
                                          "properties": {
                                            "id": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.id"
                                            },
                                            "text": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.text"
                                            },
                                            "username": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.username"
                                            },
                                            "likes": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.top_comments.likes"
                                            },
                                            "published_at": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.published_at"
                                            }
                                          }
                                        }
                                      },
                                      "hashtags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.hashtags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.hashtags"
                                        }
                                      },
                                      "mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentions",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentions"
                                        }
                                      },
                                      "mentioned_user_ids": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentioned_user_ids",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentioned_user_ids"
                                        }
                                      },
                                      "quoted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Threads quote posts: the post this one quotes, as `{ id, url, author: { id, username }, text, media_urls, thumbnail_url }`. A quote post usually carries no caption or media of its own, and the text and video you see on the post's page belong to this attachment, by a different author. It is returned here rather than merged into `post.content`, so `content.*` always stays the outer post's own content and one account's media is never attributed to another. Absent on posts that are not quote posts."
                                      },
                                      "retweeted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.retweeted_post"
                                      },
                                      "quote_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.quote_count"
                                      },
                                      "all_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.all_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.all_media_urls"
                                        }
                                      },
                                      "reaction_counts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.reaction_counts",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.reaction_counts"
                                        }
                                      },
                                      "share_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.share_urn"
                                      },
                                      "post_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.post_type"
                                      },
                                      "activity_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.activity_id"
                                      },
                                      "published_at_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_at_precision"
                                      },
                                      "author_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_urn"
                                      },
                                      "author_headline": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_headline"
                                      },
                                      "author_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_type"
                                      },
                                      "is_repost_quote": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.is_repost_quote"
                                      },
                                      "article": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.article"
                                      },
                                      "reaction_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.reaction_type"
                                      },
                                      "download_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.download_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.download_media_urls"
                                        }
                                      },
                                      "tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.tags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.tags"
                                        }
                                      },
                                      "categoryId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryId"
                                      },
                                      "categoryTitle": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryTitle"
                                      },
                                      "topicCategories": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.topicCategories",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.topicCategories"
                                        }
                                      },
                                      "duration": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.duration"
                                      },
                                      "license": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.license"
                                      },
                                      "madeForKids": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.madeForKids"
                                      },
                                      "defaultAudioLanguage": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.defaultAudioLanguage"
                                      },
                                      "hasPaidProductPlacement": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.hasPaidProductPlacement"
                                      },
                                      "caption": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.caption"
                                      },
                                      "position": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.position"
                                      },
                                      "playlistId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlistId"
                                      },
                                      "videoOwnerChannelId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoOwnerChannelId"
                                      },
                                      "videoPublishedAt": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoPublishedAt"
                                      },
                                      "description": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.description"
                                      },
                                      "default_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.default_language"
                                      },
                                      "localizations": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.localizations"
                                      },
                                      "playlist_item_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_item_id"
                                      },
                                      "playlist_owner_channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_channel_id"
                                      },
                                      "playlist_owner_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_title"
                                      },
                                      "channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.channel_id"
                                      },
                                      "published_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_label"
                                      },
                                      "published_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.published_precision"
                                      },
                                      "title_maybe_translated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.title_maybe_translated"
                                      },
                                      "video_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.video_count"
                                      },
                                      "posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "`/v1/instagram/hashtag` only: the exact number of public posts Instagram counts under the hashtag. Live: it moves between calls minutes apart."
                                      },
                                      "commerce": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.commerce"
                                      },
                                      "on_screen_texts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.on_screen_texts",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.on_screen_texts"
                                        }
                                      },
                                      "topic_tag": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag"
                                      },
                                      "reshare_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.reshare_count"
                                      },
                                      "dsp_ids": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.dsp_ids"
                                      },
                                      "topic_tag_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag_id"
                                      },
                                      "amazon_shop_lists": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_lists",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_lists"
                                        }
                                      },
                                      "amazon_shop_trending_picks": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_trending_picks",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_trending_picks"
                                        }
                                      },
                                      "amazon_shop_curations": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_curations",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_curations"
                                        }
                                      },
                                      "amazon_shop_socials": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_socials",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.amazon_shop_socials"
                                        }
                                      },
                                      "ad": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Ad Library envelope (Facebook `adlibrary/ad` and `adlibrary/company/ads` items): page_id, currency, spend, reach_estimate, publisher_platforms, categories, targeted_or_reached_countries, cta_text, cta_type, link_url, is_active, end_date_iso, display_format, title, video_hd_url, video_sd_url. Absent on every non-ad surface."
                                      },
                                      "apple_music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.apple_music"
                                      },
                                      "feedback_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.feedback_id"
                                      },
                                      "question_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN (`/v1/naver/kin/search`) only: the question's id (Naver's `docId`), read from the row's link. Kin returns one row per answer, so several rows can share it; send `group=question` for one row per question."
                                      },
                                      "answer_no": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: which answer of the question this row is (Naver's `answerNo`), read from the row's link."
                                      },
                                      "answer_nos": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first.",
                                        "items": {
                                          "type": "integer",
                                          "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first."
                                        }
                                      },
                                      "published_at_est": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: the question's date ESTIMATED from its id (`YYYY-MM-DD`, Korea time), never a published date, so `published_at` stays null. Absent for questions older than the calibration table."
                                      },
                                      "date_basis": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "How `post.ext.published_at_est` was derived. `kin_docid_estimate`: interpolated from the question id against question pages whose posted date was read."
                                      },
                                      "event": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.event"
                                      },
                                      "trend": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Trend-board envelope: what TikTok's own trend board says about the row. On `/v1/tiktok/hashtags/popular`: `rank`, `country_code`, `period_days`, `posts` and `views` for the window (not lifetime totals), `industry` / `industry_id` / `industry_label` for the first board the hashtag was read from (null for the overall board), `boards` listing EVERY board it ranks on as `{ industry, industry_id, industry_label, rank }` in board order (so a hashtag in the top 3 overall and on an industry board shows both), `popularity_curve` as `{ date, value }` with value 0 to 100 relative to the window's peak, and `top_creators`. On `/v1/tiktok/videos/popular`: `rank`, `country_code`, `period_days`, `order_by`, `period_views`, `organic_views`, `engagement_rate`, `six_second_view_through_rate`, `content_tags`. Absent on every non-board surface."
                                      },
                                      "updated_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.updated_at"
                                      },
                                      "alt_text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.alt_text"
                                      },
                                      "board_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.board_name"
                                      }
                                    }
                                  }
                                }
                              },
                              "computed": {
                                "type": "object",
                                "description": "Server-computed analytics fields (consistent across platforms)",
                                "properties": {
                                  "engagement_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Computed engagement rate (0..1). Null when the upstream lacks enough signal."
                                  },
                                  "language": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "ISO 639-1 language code detected from the post text. Null when undetectable."
                                  },
                                  "content_category": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Keyword-classified content category (e.g. tech, food, gaming). Null when undetectable."
                                  },
                                  "estimated_reach": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Estimated reach based on views or follower count. Null when uncomputable."
                                  },
                                  "save_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at computed.save_rate"
                                  },
                                  "relevance": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Nested object: computed.relevance",
                                    "properties": {
                                      "p": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.p"
                                      },
                                      "sense": {
                                        "type": "string",
                                        "description": "Leaf at computed.relevance.sense"
                                      },
                                      "depth": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.depth"
                                      },
                                      "spam": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.spam"
                                      }
                                    }
                                  },
                                  "labels": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels"
                                  },
                                  "labels_evidence": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels_evidence"
                                  }
                                }
                              }
                            }
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/tagged",
                  "data": {
                    "items": [
                      {
                        "post": {
                          "id": "3999145903670025153",
                          "url": "https://www.instagram.com/reel/Dd_0gLRNdvB/",
                          "content": {
                            "text": "Sample comment text (redacted).",
                            "media_urls": "https://instagram.fkiv3-1.fna.fbcdn.net/o1/v/t2/f2/m86/AQMcmxynN1DkxsO111oxQ5vs8PvHu8H7t_wbsRH7tPaG1bBpL1cHA51SxkYQrvLClAOTxh46frqUQwWBwBFDs63un2W8CCt4TCxwo0g.mp4?_nc_cat=108&_nc_oc=Adrqx_oTzn1-9blRG9-eKQurNRqkrSHk__WZ4KFO0izfkFuEGb97LkCHDtBpKnTw8zg&_nc_sid=5e9851&_nc_ht=instagram.fkiv3-1.fna.fbcdn.net&_nc_ohc=how_g-oQskkQ7kNvwGPLQsz&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNDgwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MjYxMjg5NzUyMjU0MzIzOSwiYXNzZXRfYWdlX2RheXMiOjAsInZpX3VzZWNhc2VfaWQiOjEwMDk5LCJkdXJhdGlvbl9zIjo1LCJ1cmxnZW5fc291cmNlIjoid3d3In0%3D&ccb=17-1&vs=932c267190881940&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC8xMjBEMjRCODZBODk0MjM3QUM0MEM0RUMwQ0Q1QjM3Nl92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyLzNBREFFQTdGMjFFMjRCQTlBRTc3QjE1MkUwRjQxQzdBX2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACaOqtPK05qkCRUCKAJDMywXQBRDlYEGJN0YEmRhc2hfYmFzZWxpbmVfMV92MREAdf4HZeadAQA&_nc_gid=m8PNijdoRnAUfdP-12acuw&_nc_ss=7c3ba&_nc_map=urlgen_bucketless&_nc_zt=28&oh=00_AQN_X_z5E6O9kAFPZlgNa2zO4QyBpdTt-RyyioBH7h9etg&oe=6AC1C201",
                            "thumbnail_url": "https://instagram.fkiv3-1.fna.fbcdn.net/v/t51.71878-15/829356473_1571608907509822_3969766534948732003_n.jpg?stp=dst-jpg_e15_p360x360_tt6&_nc_cat=108&_nc_map=urlgen_bucketless&ig_cache_key=Mzk5OTE0NTkwMzY3MDAyNTE1Mw%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjY0MC5zZHIudmlkZW9fZmlyc3RfZnJhbWVfdGh1bWJuYWlsLkMzIn0%3D&_nc_ohc=kxWO6FAePS8Q7kNvwFtS97b&_nc_oc=AdqtQ5NV3C4L7VH1RQv90sWSXAgIQUHEP2jt7r8fbiUXeAux92jEA0qf8NN2K81Wu8M&_nc_ad=z-m&_nc_cid=1490&_nc_zt=23&_nc_ht=instagram.fkiv3-1.fna&_nc_gid=m8PNijdoRnAUfdP-12acuw&_nc_ss=7c3ba&oh=00_AQOeh_vfFSbGigy_Mgntxq7r8ozBU3iqsgNg8ZxCWTrtNw&oe=6AC5AEEA",
                            "duration_seconds": 5.085
                          },
                          "author": {
                            "username": "user_3501fd",
                            "display_name": null,
                            "avatar_url": "https://example.com/avatars/user_6969d2.png",
                            "verified": false
                          },
                          "engagement": {
                            "views": 0,
                            "likes": null,
                            "comments": 0,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false,
                            "likes_hidden": true
                          },
                          "published_at": "2026-10-02T15:36:56.000Z",
                          "ext": {
                            "media_type": "video",
                            "published_at_epoch": 1790955416,
                            "coauthors": []
                          }
                        },
                        "computed": {
                          "engagement_rate": null,
                          "language": null,
                          "content_category": "other",
                          "estimated_reach": null
                        }
                      },
                      {
                        "post": {
                          "id": "3999145733363085943",
                          "url": "https://www.instagram.com/reel/Dd_0dsqIDJ3/",
                          "content": {
                            "text": null,
                            "media_urls": "https://instagram.fkiv3-1.fna.fbcdn.net/o1/v/t2/f2/m86/AQMlQtKRX_3zzfzdHI6-IZ3FIbe_QXm3bTOaA-NGMChPkv3ds_6BWx4eurqiZS1WX4ALRU7jkfkXqLPiKuikGNsnpPUN5TIca-eg1EI.mp4?_nc_cat=111&_nc_oc=AdqbBX8qdFnoEFiWTwsKcDIv12Yzy4d4Q7vKV4_HyqUD5kuq1O9dCkg9uNcDMi_2G4I&_nc_sid=5e9851&_nc_ht=instagram.fkiv3-1.fna.fbcdn.net&_nc_ohc=Qf7bTWHN0f8Q7kNvwH8tCzS&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNDgwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MjA2NTM4OTc2NDEyMjA0MSwiYXNzZXRfYWdlX2RheXMiOjAsInZpX3VzZWNhc2VfaWQiOjEwMDk5LCJkdXJhdGlvbl9zIjozNCwidXJsZ2VuX3NvdXJjZSI6Ind3dyJ9&ccb=17-1&vs=7e086f369ce7ff35&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC84RjJGNzY2MTRGODY0RTdFOTI1MjA1NjRCMUVENjBFRl92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyLzg4N0EyRjhGRTYyNTQ5MDlCOTIwM0Q2NkFGNjFCQTVEX2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACby1rTzwJ2rBxUCKAJDMywXQED_vnbItDkYEmRhc2hfYmFzZWxpbmVfMV92MREAdf4HZeadAQA&_nc_gid=m8PNijdoRnAUfdP-12acuw&_nc_ss=7c3ba&_nc_map=urlgen_bucketless&_nc_zt=28&oh=00_AQPJbruKsU5Yx8HyQYBxJFQwitQQISjm_cipa7Y1VlT_Ng&oe=6AC1BB80",
                            "thumbnail_url": "https://instagram.fkiv3-1.fna.fbcdn.net/v/t51.71878-15/831424271_1127540976608170_6959051513385992636_n.jpg?stp=dst-jpg_e15_s640x640_tt6&_nc_cat=106&_nc_map=urlgen_bucketless&ig_cache_key=Mzk5OTE0NTczMzM2MzA4NTk0Mw%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjY0MC5zZHIudmlkZW9fZmlyc3RfZnJhbWVfdGh1bWJuYWlsLkMzIn0%3D&_nc_ohc=mJ6EDltrAtUQ7kNvwE6uGSv&_nc_oc=AdocGNMb260IU79G_n2i_y0y6jJIvRw458F0Lt5ausHWrb8A_n3SAuClgd-btCQHB7w&_nc_ad=z-m&_nc_cid=1490&_nc_zt=23&_nc_ht=instagram.fkiv3-1.fna&_nc_gid=m8PNijdoRnAUfdP-12acuw&_nc_ss=7c3ba&oh=00_AQOcx0loj0zYuOlAmJYpiFu1kr7_t8vsYVh_91W0PIEAoQ&oe=6AC5A1B9",
                            "duration_seconds": 33.998
                          },
                          "author": {
                            "username": "user_3323d0",
                            "display_name": null,
                            "avatar_url": "https://example.com/avatars/user_ee0f92.png",
                            "verified": false
                          },
                          "engagement": {
                            "views": 0,
                            "likes": 0,
                            "comments": 0,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false
                          },
                          "published_at": "2026-10-02T15:36:44.000Z",
                          "ext": {
                            "media_type": "video",
                            "published_at_epoch": 1790955404,
                            "coauthors": []
                          }
                        },
                        "computed": {
                          "engagement_rate": null,
                          "language": null,
                          "content_category": null,
                          "estimated_reach": null
                        }
                      }
                    ],
                    "next_cursor": "sc2.eyJzIjoibCIsImMiOiIzOTk5MTQwODE1Nzk2MDU1MDAwIn0",
                    "total": 986464,
                    "dropped": 0,
                    "_warnings": [
                      "post.engagement.likes: the Facebook cross-post share was excluded on 2 of 21 rows, so likes and comments are Instagram's own counts, matching what instagram.com shows. The excluded share is on post.ext.facebook_likes and post.ext.facebook_comments."
                    ]
                  },
                  "credits_used": 5,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": "sc.eyJ2IjoyLCJjIjoic2MyLmV5SnpJam9pYkNJc0ltTWlPaUl6T1RrNU1UUXdPREUxTnprMk1EVTFNREF3SW4wIiwiZSI6Imluc3RhZ3JhbS90YWdnZWQiLCJwIjoiY3Vyc29yIn0",
                    "has_more": true,
                    "page_size": 21
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T15:37:28.143Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/location/posts": {
      "get": {
        "summary": "List recent posts at an Instagram location",
        "description": "Returns the posts tagged at an Instagram location, newest first, about 60 per page. Each post includes shortcode, URL, caption, media URLs, engagement counts, and the author. Pass `location_id` as `location.pk` from /v1/instagram/search/location, then page back in time with `cursor` until `has_more` is false. If the source that served page 1 fails on a later page, a backup source continues the walk and the page carries `continuation_rescued` in `data._warnings`: a few posts nearest the page boundary can be missing from that page. A busy place fills a page in about a day and a quiet one covers months or years, and the grid goes back to the location's oldest posts. Instagram orders the grid by when each post was created, so a scheduled post that went live later sits among older posts while its published_at shows the real publish time (about 1 post in 75, up to 13 days apart, measured 13/09/2026). To collect a time window, keep paging until a whole page is older than the window's start and filter on published_at; do not stop at the first older post. Each page is a separate call at the listed price. A location grid mixes photos and reels, so engagement.views is a number on the video rows and null on the photo rows. This is the region-scoped Instagram route: /v1/instagram/reels/trending and /v1/instagram/music/trending take no region, because Instagram ties both to the account viewing them. Note: post.author.display_name is not available on this endpoint, because the Instagram surface behind it withholds creator display names. Join on post.author.username, or pass it to /v1/instagram/profile?handle= for the name.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_location_posts",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "advanced",
        "x-credit-cost": 5,
        "x-credit-cost-min": 5,
        "x-credit-cost-max": 68,
        "x-credit-cost-formula": "5 credits per page. `include=country` holds 63 more credits a page and keeps 1 per creator whose declared country came back, refunding a creator who publishes none or cannot be found, so a page with it costs 5 to 68. A page that fails is refunded in full and looks no creator up. With `max_pages`, `max_items` or `max_credits`, each page walked is billed at this price (a cached page is free), and `max_credits` caps the total.",
        "parameters": [
          {
            "name": "location_id",
            "in": "query",
            "required": true,
            "description": "Instagram location id. Use location.pk from /v1/instagram/search/location.",
            "schema": {
              "type": "string"
            },
            "example": "331004901"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Pagination cursor. Use the `next_cursor` from the previous response to fetch the next, older page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "safe_url",
            "in": "query",
            "required": false,
            "description": "When true, returns URL-safe media links suitable for embedding.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "include",
            "in": "query",
            "required": false,
            "description": "Send `country` to add each post's creator country as `post.ext.author_country`: the country the creator declares on Instagram's About this account panel, not the place the post is tagged at, and null when the creator publishes none. Every row carries the creator's numeric id as `post.ext.author_id`, which is what it is read by. 1 extra credit per creator whose country came back; two posts by one creator cost one lookup, a creator looked up in the last 30 days is free, and a creator who publishes none or cannot be found is refunded. A typo is a free 400.",
            "schema": {
              "type": "string",
              "enum": [
                "country"
              ]
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "Only rows published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Rows older than it are left off each page. This list is not in date order, so the walk does not stop at the date: keep following `next_cursor`, and each page costs what a page costs even when every row on it is filtered out. A row with no date is kept. `published_after`, `start_date`, `from_date`, `publish_time` (`yesterday`, `this-week`, `this-month`, `last-3-months`, `last-6-months`) and `max_age_days` are accepted and applied as `since`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "description": "Only rows published on or before this date: YYYY-MM-DD (that whole UTC day is included) or an ISO 8601 timestamp. Newer rows are left off each page and the walk does not stop, so older pages follow. A row with no date is kept. `published_before`, `end_date` and `to_date` are accepted and applied as `until`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max_pages",
            "in": "query",
            "required": false,
            "description": "1 to 50 (default 1, or 50 when `max_items` or `max_credits` is sent). Walk up to this many pages in one call and return the rows from all of them. Each page walked is billed exactly as one call to this endpoint (a cached page is free) and counts against your rate limit; its charge and any refund are recorded under the page's own request id, listed in `data.walk.request_ids`. The walk stops early at the last page, or when the request's time budget runs low; `data.walk.stopped` says why (`end`, `max_pages`, `max_items`, `max_credits`, `time_budget`, `page_error`) and `pagination.next_cursor` continues from where it stopped.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "max_items",
            "in": "query",
            "required": false,
            "description": "1 to 5000. Get more in one call: keep walking pages until the response holds at least this many rows, then stop with `data.walk.stopped: \"max_items\"`. The last page is returned whole (it was billed), so `data.items` can hold up to one page more than this, and `pagination.next_cursor` resumes right after it without skipping a row. Walks up to 50 pages unless `max_pages` says fewer; each page is billed as one call (a cached page is free). Add `max_credits` to cap the spend. A long walk can stop on the time budget first (`\"time_budget\"`): send the returned cursor with the same params to continue.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5000
            }
          },
          {
            "name": "max_credits",
            "in": "query",
            "required": false,
            "description": "1 to 100000. The most this call may spend, across every page it walks. A page starts only while the credits already spent plus that page's price (or, when higher, the most any page of this walk has cost) still fit, so the call never goes past it; the walk then stops with `data.walk.stopped: \"max_credits\"` and the cursor to resume. Sent alone, it walks as far as the budget goes (up to 50 pages). A value below the price of one page is a free 400 whose `error.details.page_credits` names that price. Credits a row join (`include=`) adds are known only once a page has run, so page 1 is checked against its own price.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100000
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/location/posts"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of canonical post wrappers ({ post, computed })",
                          "items": {
                            "type": "object",
                            "description": "Canonical post wrapper",
                            "properties": {
                              "post": {
                                "type": "object",
                                "description": "Canonical Post object (unified across all platforms)",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "Platform-specific post ID (always a string; numeric upstream IDs are stringified)"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Direct URL to the post on the source platform"
                                  },
                                  "content": {
                                    "type": "object",
                                    "description": "Post content fields (text, media, thumbnail, duration)",
                                    "properties": {
                                      "text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Post caption, description, or text content"
                                      },
                                      "media_urls": {
                                        "type": [
                                          "string",
                                          "array",
                                          "null"
                                        ],
                                        "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels.",
                                        "items": {
                                          "type": "string",
                                          "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels."
                                        }
                                      },
                                      "thumbnail_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to thumbnail image"
                                      },
                                      "duration_seconds": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Video/clip duration in seconds (null for non-video posts)"
                                      }
                                    }
                                  },
                                  "author": {
                                    "type": "object",
                                    "description": "Subset of Author fields for the post creator",
                                    "properties": {
                                      "username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author username"
                                      },
                                      "display_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author display name"
                                      },
                                      "avatar_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to author profile picture"
                                      },
                                      "verified": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Whether the author account is verified"
                                      }
                                    }
                                  },
                                  "engagement": {
                                    "type": "object",
                                    "description": "Engagement counts",
                                    "properties": {
                                      "views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "View count (if available). For Instagram video/reels this is the play count: the headline 'Views' the IG app shows. Instagram removed per-post play counts from its public web pages in August 2026, so `GET /v1/instagram/post` now fills the count automatically from a second source within the same call: videos and reels keep a numeric `views` with no extra endpoint or workaround. Note: since mid-July 2026 Instagram's play count is Instagram-only. It no longer includes Facebook crosspost views (Meta-side change; the app UI changed identically). For combined reach, also fetch the Facebook crosspost via `/v1/facebook/post`."
                                      },
                                      "likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Like / reaction count"
                                      },
                                      "comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Comment count. Note: on `GET /v1/instagram/post` this is Instagram's `edge_media_to_parent_comment.count` (top-level comments); the IG list endpoints report the mobile `comment_count` total (includes replies). Both land on this same field."
                                      },
                                      "shares": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Share / repost / retweet count. On Instagram this is `reshare_count` (the paper-plane Share / Send count) and it exists only on Instagram's mobile surface, so it is returned by `/v1/instagram/post/stats`, `/v1/instagram/profile/reels/full`, and `/v1/instagram/profile/posts/full`. The web-sourced Instagram list and search endpoints return `null` (never fabricated)."
                                      },
                                      "saves": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Save / bookmark count. `null` on Instagram: the save count is platform-private and Instagram exposes no numeric save metric on any surface (never fabricated)."
                                      }
                                    }
                                  },
                                  "flags": {
                                    "type": "object",
                                    "description": "Boolean flags on the post",
                                    "properties": {
                                      "nsfw": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "NSFW flag (null when platform does not surface)"
                                      },
                                      "spoiler": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Spoiler flag (null when platform does not surface)"
                                      },
                                      "pinned": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Pinned-to-profile flag (null when platform does not surface)"
                                      },
                                      "deleted": {
                                        "type": "boolean",
                                        "description": "Whether the post is tombstoned (always present)"
                                      },
                                      "likes_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the creator has hidden the like count. `engagement.likes` is `null` in that case (never the platform's decoy preview number). Absent on normal posts."
                                      },
                                      "comments_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the upstream reports the comment count as hidden. `engagement.comments` is `null` in that case. Absent on normal posts."
                                      },
                                      "shares_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.shares_hidden"
                                      },
                                      "views_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.views_hidden"
                                      },
                                      "saves_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.saves_hidden"
                                      }
                                    }
                                  },
                                  "published_at": {
                                    "type": [
                                      "string",
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Post creation timestamp as an ISO 8601 UTC string. When the upstream sent a Unix epoch it is converted here and the raw epoch is preserved under `post.ext.published_at_epoch` for one deprecation cycle."
                                  },
                                  "ext": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Platform-specific passthrough fields for cross-endpoint chains (present only on platforms that surface them)",
                                    "properties": {
                                      "music_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok music/clip id (exact string): pass to `/v1/tiktok/song/videos?clipId=` to find videos using the same sound"
                                      },
                                      "matched_song_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The catalogue song TikTok matched the video's sound to, as an exact digit string. An official clip and the original sounds creators upload with it have different `music_id` values and the same `matched_song_id`, so group rows on it to count every use of one song. It is not a clipId: `/v1/tiktok/song` and `/v1/tiktok/song/videos` do not accept it. `/v1/tiktok/search/music` carries it on each sound, so a search on the song's title and artist, kept to the sounds with the same `matched_song_id`, gives the song's official sounds and their `video_count`. Absent when TikTok matched the sound to no song, and on rows served from a source that does not report the match."
                                      },
                                      "matched_song_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the song in `matched_song_id`. Absent when there is no matched song."
                                      },
                                      "matched_song_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist of the song in `matched_song_id`, as TikTok's catalogue names it. Absent when there is no matched song."
                                      },
                                      "music_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the video's own sound (`music_id`). An uploaded sound is titled like `original sound - <handle>`; the song it plays, when TikTok recognised one, is `matched_song_title`."
                                      },
                                      "music_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist TikTok shows for the video's own sound. On an original sound this is the uploader's display name, not the song's artist; use `matched_song_artist` for that."
                                      },
                                      "music_is_original": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "TikTok only. `true` when the video's sound is an original sound a creator uploaded, `false` when it is a catalogue track. Absent when the source does not say."
                                      },
                                      "author_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's platform-native numeric user id. On TikTok search and list items, pass to `/v1/tiktok/profile?user_id=` for the creator's current follower count (survives username changes). On Instagram `/v1/instagram/search/reels`, `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` items it is present on every row, accepted by `/v1/instagram/profile/country?user_id=` and `/v1/instagram/basic-profile?userId=`. On Facebook it appears when the upstream exposed a numeric actor id and no real handle."
                                      },
                                      "author_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The posting account's profile URL, so a matching post can be followed to its account. Present on `/v1/facebook/search/posts` rows: the vanity or `/people/<name>/<id>/` URL when Facebook sends one, otherwise `https://www.facebook.com/profile.php?id=<numeric id>` built from the account id. Pass it as `url` to `/v1/facebook/profile` (or to `/v1/prism/profiles` with `platform: facebook`). Null when the row names neither an account URL nor a numeric account id. Absent on other endpoints."
                                      },
                                      "author_followers": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "The creator's follower count as embedded in the search payload itself, when the search source happens to carry one. On Instagram `search/reels` it is null on a plain call, because Instagram stopped sending follower counts in its search payload in August 2026; send `include=creator` (or `country`) and it is filled from the creator's profile, 2 credits per creator looked up. It stays null when that lookup does not resolve."
                                      },
                                      "author_following": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_following"
                                      },
                                      "author_posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_posts_count"
                                      },
                                      "author_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The free text the author wrote in their profile's location field, exactly as written (for example `Johannesburg, South Africa`). It is not a country code and is not checked. Present on X tweet and reply rows; null or absent when the author left it blank."
                                      },
                                      "in_reply_to_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_id"
                                      },
                                      "in_reply_to_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_username"
                                      },
                                      "conversation_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.conversation_id"
                                      },
                                      "author_country": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's country. On Instagram it is the country the creator declares on the About this account panel, as a country name (for example `Spain`), and it is not where the post was filmed. It is present on `/v1/instagram/search/reels` when the request sends `include=creator`, `include=country` or `country`, and on `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` when it sends `include=country`, filled by looking the creator up. On YouTube rows joined with `include=channel` it is the channel's own country as an ISO 3166-1 alpha-2 code (for example `ZA`). Null when the platform publishes no country for the creator or the lookup did not resolve, and nothing is guessed; absent on a plain call."
                                      },
                                      "author_public_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact email on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public email or the lookup did not resolve; absent on a plain call."
                                      },
                                      "author_public_phone": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact phone number on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public phone or the lookup did not resolve; absent on a plain call."
                                      },
                                      "download_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "How many times the video has been saved to a device. TikTok only, and distinct from `engagement.saves`: a save keeps the video in a private collection on the platform, a download takes a copy off it, and TikTok counts the two separately. Present on TikTok post, search and post-list responses; absent everywhere else."
                                      },
                                      "region": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only: the country TikTok registers the video to, as an ISO 3166-1 alpha-2 code (normally the creator's account country when they posted). It is not the viewer's country, not the `region` you requested, and not a language. On `/v1/tiktok/trending`, `/v1/tiktok/search`, `/v1/tiktok/search/top`, `/v1/tiktok/profile/videos`, `/v1/tiktok/search/hashtag` and `/v1/tiktok/song/videos` it is how you tell which rows are from a given country: filter on it when you need only that country. A row whose source omits the country stays null. The `region` request parameter still only sets the proxy."
                                      },
                                      "subreddit": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Reddit subreddit name (search/list items): pass to `/v1/reddit/subreddit/details?subreddit=`"
                                      },
                                      "title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.title"
                                      },
                                      "selftext": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.selftext"
                                      },
                                      "upvote_ratio": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Reddit only: the share of a post's votes that are upvotes, as a fraction from 0 to 1 and usually close to 1 (six live rows measured 1, 1, 1, 0.86, 0.75, 1). Fractional despite the integer type this schema emits for every numeric leaf, the same caveat as `author.ext.average_rating`. Populated on `/v1/reddit/search` rows whose source carries it, and null everywhere else on Reddit including `/v1/reddit/post` and `/v1/reddit/subreddit`."
                                      },
                                      "flair": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.flair"
                                      },
                                      "content_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The language the platform itself tags the post with, when it sends one: Reddit's own language tag on Reddit lanes, and TikTok's caption-language tag (for example `de`) on `/v1/tiktok/trending?feed=local`. Null when the platform could not tell (Reddit `und`, TikTok `un`, common on short or emoji-only captions); absent where the source sends no tag. Never inferred from the text by us: that is `post.computed.language`."
                                      },
                                      "type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.type"
                                      },
                                      "content_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.content_type"
                                      },
                                      "ticker_symbols": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.ticker_symbols",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.ticker_symbols"
                                        }
                                      },
                                      "video_view_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram's legacy 3-second-view count. Historical: Instagram stopped serving it in August 2026 (removed from its web post surface along with the web play count), so fresh `/v1/instagram/post` lookups no longer carry it and no source can restore it. Use `engagement.views` (the play count) instead."
                                      },
                                      "ig_play_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram-only play count (`ig_play_count`). Since mid-July 2026 Instagram's headline play count (`engagement.views`) no longer includes Facebook crosspost views and equals this value; it is surfaced explicitly so you can tell the Instagram-only figure apart and detect any future re-divergence. For combined Instagram + Facebook reach, also fetch the Facebook crosspost via `/v1/facebook/post`. Present on `/v1/instagram/post/stats` and, since the August 2026 views fix, on `/v1/instagram/post` for video posts."
                                      },
                                      "repost_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.repost_count"
                                      },
                                      "media_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.media_type"
                                      },
                                      "text_truncated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.text_truncated"
                                      },
                                      "ip_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.ip_location"
                                      },
                                      "carousel_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.carousel_count"
                                      },
                                      "remix_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.remix_count"
                                      },
                                      "audio_cluster_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram's audio cluster for a reel, as an exact digit string: the id Instagram uses to group different uploads of the same sound. Present on `/v1/instagram/audio/reels` rows and on `/v1/instagram/profile/reels` with `include=stats`; absent on a row when it is not available and on every other surface."
                                      },
                                      "facebook_likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.likes` on this row. A post shared to Facebook arrives from some sources with its Facebook likes already folded into the Instagram count, so the share is subtracted and published here, which keeps `engagement.likes` the Instagram-only figure instagram.com shows on the post. Add the two together for the combined number. Absent when the read carried no Facebook share, and absent on a post whose owner hides the like count, because nothing can be subtracted from a null. A response that excluded a share also carries a note in `data._warnings`."
                                      },
                                      "facebook_comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.comments` on this row, the comment counterpart of `post.ext.facebook_likes`. Each leaf appears only for the count it actually changed, so a post whose likes are hidden but whose comments were reconciled carries this one alone."
                                      },
                                      "instagram_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Instagram-only play count of a video, the same figure on every Instagram endpoint. `engagement.views` keeps each endpoint's established meaning: on `/v1/instagram/profile/reels`, `/v1/instagram/audio/reels`, `/v1/instagram/search/reels` and `/v1/instagram/search/hashtag` it can include the post's Facebook cross-post views, while on `/v1/instagram/post` and `/v1/instagram/post/stats` it is Instagram-only. Read this leaf when you compare one post across endpoints. Absent on photos and when the source did not report the Instagram-only figure."
                                      },
                                      "facebook_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post part of a video's play count, the counterpart of `post.ext.instagram_views`. Present only when the source reported the Facebook part, or a combined total above the Instagram figure. Absent does not mean zero: some sources report the Instagram figure alone even for a cross-posted video."
                                      },
                                      "published_at_epoch": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Raw Unix epoch for `published_at` (seconds, or milliseconds when the upstream sent millis). Present only when the upstream sent a numeric epoch that was normalised to the ISO 8601 `published_at` string. Kept for one deprecation cycle for integrations pinned to the numeric form."
                                      },
                                      "usertags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.usertags",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.usertags"
                                        }
                                      },
                                      "coauthors": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post).",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post)."
                                        }
                                      },
                                      "music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.music"
                                      },
                                      "sponsor_tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                        }
                                      },
                                      "sponsored_disclosed": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "The platform's own disclosure that the post is paid or promotional: on Instagram the paid-partnership label (`is_paid_partnership`) or a tagged brand partner, on TikTok the label TikTok shows viewers (\"Paid partnership\", \"Commission paid\", \"Promotional content\"). `false` when the post carries the flag unset, null when it carries none. Present on `/v1/instagram/post/stats`, `/v1/instagram/search/reels` and `/v1/tiktok/search`; absent on every other endpoint."
                                      },
                                      "ai_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram only: Instagram's AI-content label on the post, as the method Instagram reports: `classifier_score_high` (Instagram detected it, shown as \"Likely made with AI\"), `ai_created` or `ai_edited` (declared or detected as made or edited with AI). Null when the post carries no AI label. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                      },
                                      "story_mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "story_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint."
                                        }
                                      },
                                      "story_reshared_posts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.location"
                                      },
                                      "media": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.media",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.media",
                                          "properties": {
                                            "type": {
                                              "type": "string",
                                              "description": "Leaf at post.ext.media.type"
                                            },
                                            "url": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.media.url"
                                            },
                                            "width": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.width"
                                            },
                                            "height": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.height"
                                            }
                                          }
                                        }
                                      },
                                      "top_comments": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.top_comments",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.top_comments",
                                          "properties": {
                                            "id": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.id"
                                            },
                                            "text": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.text"
                                            },
                                            "username": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.username"
                                            },
                                            "likes": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.top_comments.likes"
                                            },
                                            "published_at": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.published_at"
                                            }
                                          }
                                        }
                                      },
                                      "hashtags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.hashtags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.hashtags"
                                        }
                                      },
                                      "mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentions",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentions"
                                        }
                                      },
                                      "mentioned_user_ids": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentioned_user_ids",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentioned_user_ids"
                                        }
                                      },
                                      "quoted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Threads quote posts: the post this one quotes, as `{ id, url, author: { id, username }, text, media_urls, thumbnail_url }`. A quote post usually carries no caption or media of its own, and the text and video you see on the post's page belong to this attachment, by a different author. It is returned here rather than merged into `post.content`, so `content.*` always stays the outer post's own content and one account's media is never attributed to another. Absent on posts that are not quote posts."
                                      },
                                      "retweeted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.retweeted_post"
                                      },
                                      "quote_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.quote_count"
                                      },
                                      "all_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.all_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.all_media_urls"
                                        }
                                      },
                                      "reaction_counts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.reaction_counts",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.reaction_counts"
                                        }
                                      },
                                      "share_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.share_urn"
                                      },
                                      "post_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.post_type"
                                      },
                                      "activity_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.activity_id"
                                      },
                                      "published_at_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_at_precision"
                                      },
                                      "author_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_urn"
                                      },
                                      "author_headline": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_headline"
                                      },
                                      "author_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_type"
                                      },
                                      "is_repost_quote": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.is_repost_quote"
                                      },
                                      "article": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.article"
                                      },
                                      "reaction_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.reaction_type"
                                      },
                                      "download_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.download_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.download_media_urls"
                                        }
                                      },
                                      "tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.tags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.tags"
                                        }
                                      },
                                      "categoryId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryId"
                                      },
                                      "categoryTitle": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryTitle"
                                      },
                                      "topicCategories": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.topicCategories",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.topicCategories"
                                        }
                                      },
                                      "duration": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.duration"
                                      },
                                      "license": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.license"
                                      },
                                      "madeForKids": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.madeForKids"
                                      },
                                      "defaultAudioLanguage": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.defaultAudioLanguage"
                                      },
                                      "hasPaidProductPlacement": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.hasPaidProductPlacement"
                                      },
                                      "caption": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.caption"
                                      },
                                      "position": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.position"
                                      },
                                      "playlistId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlistId"
                                      },
                                      "videoOwnerChannelId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoOwnerChannelId"
                                      },
                                      "videoPublishedAt": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoPublishedAt"
                                      },
                                      "description": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.description"
                                      },
                                      "default_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.default_language"
                                      },
                                      "localizations": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.localizations"
                                      },
                                      "playlist_item_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_item_id"
                                      },
                                      "playlist_owner_channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_channel_id"
                                      },
                                      "playlist_owner_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_title"
                                      },
                                      "channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.channel_id"
                                      },
                                      "published_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_label"
                                      },
                                      "published_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.published_precision"
                                      },
                                      "title_maybe_translated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.title_maybe_translated"
                                      },
                                      "video_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.video_count"
                                      },
                                      "posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "`/v1/instagram/hashtag` only: the exact number of public posts Instagram counts under the hashtag. Live: it moves between calls minutes apart."
                                      },
                                      "commerce": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.commerce"
                                      },
                                      "on_screen_texts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.on_screen_texts",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.on_screen_texts"
                                        }
                                      },
                                      "topic_tag": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag"
                                      },
                                      "reshare_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.reshare_count"
                                      },
                                      "dsp_ids": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.dsp_ids"
                                      },
                                      "topic_tag_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag_id"
                                      },
                                      "amazon_shop_lists": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_lists",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_lists"
                                        }
                                      },
                                      "amazon_shop_trending_picks": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_trending_picks",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_trending_picks"
                                        }
                                      },
                                      "amazon_shop_curations": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_curations",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_curations"
                                        }
                                      },
                                      "amazon_shop_socials": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_socials",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.amazon_shop_socials"
                                        }
                                      },
                                      "ad": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Ad Library envelope (Facebook `adlibrary/ad` and `adlibrary/company/ads` items): page_id, currency, spend, reach_estimate, publisher_platforms, categories, targeted_or_reached_countries, cta_text, cta_type, link_url, is_active, end_date_iso, display_format, title, video_hd_url, video_sd_url. Absent on every non-ad surface."
                                      },
                                      "apple_music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.apple_music"
                                      },
                                      "feedback_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.feedback_id"
                                      },
                                      "question_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN (`/v1/naver/kin/search`) only: the question's id (Naver's `docId`), read from the row's link. Kin returns one row per answer, so several rows can share it; send `group=question` for one row per question."
                                      },
                                      "answer_no": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: which answer of the question this row is (Naver's `answerNo`), read from the row's link."
                                      },
                                      "answer_nos": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first.",
                                        "items": {
                                          "type": "integer",
                                          "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first."
                                        }
                                      },
                                      "published_at_est": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: the question's date ESTIMATED from its id (`YYYY-MM-DD`, Korea time), never a published date, so `published_at` stays null. Absent for questions older than the calibration table."
                                      },
                                      "date_basis": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "How `post.ext.published_at_est` was derived. `kin_docid_estimate`: interpolated from the question id against question pages whose posted date was read."
                                      },
                                      "event": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.event"
                                      },
                                      "trend": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Trend-board envelope: what TikTok's own trend board says about the row. On `/v1/tiktok/hashtags/popular`: `rank`, `country_code`, `period_days`, `posts` and `views` for the window (not lifetime totals), `industry` / `industry_id` / `industry_label` for the first board the hashtag was read from (null for the overall board), `boards` listing EVERY board it ranks on as `{ industry, industry_id, industry_label, rank }` in board order (so a hashtag in the top 3 overall and on an industry board shows both), `popularity_curve` as `{ date, value }` with value 0 to 100 relative to the window's peak, and `top_creators`. On `/v1/tiktok/videos/popular`: `rank`, `country_code`, `period_days`, `order_by`, `period_views`, `organic_views`, `engagement_rate`, `six_second_view_through_rate`, `content_tags`. Absent on every non-board surface."
                                      },
                                      "updated_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.updated_at"
                                      },
                                      "alt_text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.alt_text"
                                      },
                                      "board_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.board_name"
                                      }
                                    }
                                  }
                                }
                              },
                              "computed": {
                                "type": "object",
                                "description": "Server-computed analytics fields (consistent across platforms)",
                                "properties": {
                                  "engagement_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Computed engagement rate (0..1). Null when the upstream lacks enough signal."
                                  },
                                  "language": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "ISO 639-1 language code detected from the post text. Null when undetectable."
                                  },
                                  "content_category": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Keyword-classified content category (e.g. tech, food, gaming). Null when undetectable."
                                  },
                                  "estimated_reach": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Estimated reach based on views or follower count. Null when uncomputable."
                                  },
                                  "save_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at computed.save_rate"
                                  },
                                  "relevance": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Nested object: computed.relevance",
                                    "properties": {
                                      "p": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.p"
                                      },
                                      "sense": {
                                        "type": "string",
                                        "description": "Leaf at computed.relevance.sense"
                                      },
                                      "depth": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.depth"
                                      },
                                      "spam": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.spam"
                                      }
                                    }
                                  },
                                  "labels": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels"
                                  },
                                  "labels_evidence": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels_evidence"
                                  }
                                }
                              }
                            }
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/location/posts",
                  "data": {
                    "items": [
                      {
                        "post": {
                          "id": "3998800860666248959",
                          "url": "https://www.instagram.com/p/Dd-mDI7ib7_/",
                          "content": {
                            "text": "Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted).",
                            "media_urls": [
                              "https://instagram.fkiv3-1.fna.fbcdn.net/v/t51.82787-15/834222590_18637899742038111_8408779761228572461_n.jpg?stp=dst-jpg_e35_s1080x1080_sh2.08_tt6&_nc_cat=111&_nc_map=urlgen_bucketless&ig_cache_key=Mzk5ODgwMDYwNzMwNzAxMjEwMQ%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNBUk9VU0VMX0lURU0ueHBpZHMuMzQ2NC5zZHIucmVndWxhcl9waG90by5DMyJ9&_nc_ohc=pFuMt6i-gscQ7kNvwGWJnAD&_nc_oc=AdqeQsO5_AcZtzAe-XWeftqZQoIjXbVctswb3YVSk_pLD9a_uPmr7o79d0YN3Nh5Qkw&_nc_ad=z-m&_nc_cid=1490&_nc_zt=23&_nc_ht=instagram.fkiv3-1.fna&_nc_gid=L6l3Z7XzIWQu_NVuUqGzAA&_nc_ss=7a3ba&oh=00_AQOQLZv8CWZIYBYWYIj2oP8Ie9MDx2x2uXBlkMEZaVaqgg&oe=6AC52A4B",
                              "https://instagram.fkiv3-1.fna.fbcdn.net/v/t51.82787-15/831400907_18637899763038111_422115493201431996_n.jpg?stp=dst-jpg_e35_s1080x1080_sh2.08_tt6&_nc_cat=111&_nc_map=urlgen_bucketless&ig_cache_key=Mzk5ODgwMDYxNzYxNjUwMjY3NA%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNBUk9VU0VMX0lURU0ueHBpZHMuMzQ2NC5zZHIucmVndWxhcl9waG90by5DMyJ9&_nc_ohc=148TtqMFqUsQ7kNvwG1j76k&_nc_oc=AdrMhlwqhrR41okT_xSYVYqwR7B3bKOVl-wGdrvKkfZg0ZqGcAHJAhR3n7h5k4gm2S8&_nc_ad=z-m&_nc_cid=1490&_nc_zt=23&_nc_ht=instagram.fkiv3-1.fna&_nc_gid=L6l3Z7XzIWQu_NVuUqGzAA&_nc_ss=7a3ba&oh=00_AQObWVhpOYzaoYPMybW2IaICX2FS8fveCYtPAC3XikY__A&oe=6AC52D15"
                            ],
                            "thumbnail_url": null,
                            "duration_seconds": null
                          },
                          "author": {
                            "username": "user_a221c7",
                            "display_name": null,
                            "avatar_url": "https://example.com/avatars/user_e2a444.png",
                            "verified": false
                          },
                          "engagement": {
                            "views": null,
                            "likes": 378,
                            "comments": 7,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false
                          },
                          "published_at": "2026-10-02T04:10:31.000Z",
                          "ext": {
                            "media_type": "carousel",
                            "carousel_count": 3,
                            "published_at_epoch": 1790914231,
                            "coauthors": []
                          }
                        },
                        "computed": {
                          "engagement_rate": null,
                          "language": "en",
                          "content_category": "other",
                          "estimated_reach": null
                        }
                      },
                      {
                        "post": {
                          "id": "3998702974086269080",
                          "url": "https://www.instagram.com/reel/Dd-Pys8tciY/",
                          "content": {
                            "text": "Sample comment text (redacted).",
                            "media_urls": "https://instagram.fkiv3-1.fna.fbcdn.net/o1/v/t2/f2/m86/AQPk-aHW2d3DMcgoey291av60JbV6YSUEpyE8VQXu8JBzelRQQvXpVWKLUBIadInlbo4BlIOTtgrc0FtHx1ejJDoN7FAc8shfWrb1Kg.mp4?_nc_cat=105&_nc_oc=AdqUatdWF50GJQxCBWhmp-zH9JAna21q0zagbg0kH2dfpqD0Vxx99hK8F3ygY5D9ols&_nc_sid=5e9851&_nc_ht=instagram.fkiv3-1.fna.fbcdn.net&_nc_ohc=0f4NMaoA9wUQ7kNvwE8jXf1&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTA4NDk1MjcwMTE3OTAzMSwiYXNzZXRfYWdlX2RheXMiOjAsInZpX3VzZWNhc2VfaWQiOjEwMDk5LCJkdXJhdGlvbl9zIjozMSwidXJsZ2VuX3NvdXJjZSI6Ind3dyJ9&ccb=17-1&vs=b0ddd2026b445a13&_nc_vs=HBkcFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC9CRjcwNjZCQTVDRjI0Q0Y5QkQ3QUM2NUU2QjEwRTcwNF92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAKAAYABsCiAd1c2Vfb2lsATEScHJvZ3Jlc3NpdmVfcmVjaXBlATEVAAAmrtLQxcew7QMVAigCQzMsF0A_wo9cKPXDGBJkYXNoX2Jhc2VsaW5lXzFfdjERAHX-B2XmnQEA&_nc_gid=L6l3Z7XzIWQu_NVuUqGzAA&_nc_ss=7a3ba&_nc_map=urlgen_bucketless&_nc_zt=28&oh=00_AQOAfKwpcuO8cnAHCUcnW7sbFyXv-q0SgcNAwPpmL1CJ4w&oe=6AC12586",
                            "thumbnail_url": "https://instagram.fkiv3-1.fna.fbcdn.net/v/t51.71878-15/830197508_1125505283483118_3903127523939470317_n.jpg?stp=dst-jpg_e15_p360x360_tt6&_nc_cat=109&_nc_map=urlgen_bucketless&ig_cache_key=Mzk5ODcwMjk3NDA4NjI2OTA4MDEwODQ5NTUzMDExNzg3NzE%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjY0MC5zZHIudmlkZW9fdXNlcl9zZWxlY3RlZF90aHVtYm5haWwuQzMifQ%3D%3D&_nc_ohc=HM_UUiNEWLcQ7kNvwFtZqrg&_nc_oc=AdqLo0JTWVynTbBYwtVRgnvw0pf2AloIRGPysir32O_CJ3l435kLceLfcC2-3x1Q8sk&_nc_ad=z-m&_nc_cid=1490&_nc_zt=23&_nc_ht=instagram.fkiv3-1.fna&_nc_gid=L6l3Z7XzIWQu_NVuUqGzAA&_nc_ss=7a3ba&oh=00_AQPbXAxzSHy8kz2hF22ffVZTeq47DO4f3XuqBNyhhWwoCA&oe=6AC532D7",
                            "duration_seconds": 31.76
                          },
                          "author": {
                            "username": "user_aa80d8",
                            "display_name": null,
                            "avatar_url": "https://example.com/avatars/user_3aa77c.png",
                            "verified": true
                          },
                          "engagement": {
                            "views": 150,
                            "likes": 2,
                            "comments": 0,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false
                          },
                          "published_at": "2026-10-02T00:59:31.000Z",
                          "ext": {
                            "media_type": "video",
                            "published_at_epoch": 1790902771,
                            "coauthors": []
                          }
                        },
                        "computed": {
                          "engagement_rate": 0.013333,
                          "language": null,
                          "content_category": "other",
                          "estimated_reach": 180
                        }
                      }
                    ],
                    "next_cursor": "sc2.eyJzIjoibCIsImMiOiJsZzEuZXlKdElqb2lVVlpHUkdFd2RIbE9WR1JhVTBaak5WVnRXbGRYUkU1UlUxUlZNMlJYYkZGUlZYUkRVa2RrYms1c2JIbFNSbWQ0VjI1d1VrNVdUbmRqYlRRd1VYcENjRll3ZEhOa01qVXlVa2hzVkdKc09WaFVNMFphWTFWa1JWbDZTbkpTVkZaWldsaEdNMUZVWkdoWmJYUldZbTFLYkU1cWFEWlhVVDA5SWl3aWNDSTZNU3dpYVNJNlcxMTkifQ",
                    "total": null,
                    "dropped": 0
                  },
                  "credits_used": 5,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": "sc.eyJ2IjoyLCJjIjoic2MyLmV5SnpJam9pYkNJc0ltTWlPaUpzWnpFdVpYbEtkRWxxYjJsVlZscEhVa2RGZDJSSWJFOVdSMUpoVlRCYWFrNVdWblJYYkdSWVVrVTFVbFV4VWxaTk1sSllZa1pHVWxaWVVrUlZhMlJyWW1zMWMySkliRk5TYldRMFZqSTFkMVZyTlZkVWJtUnFZbFJSZDFWWWNFTmpSbGwzWkVoT2EwMXFWWGxWYTJoelZrZEtjMDlXYUZWTk1GcGhXVEZXYTFKV2JEWlRia3BUVmtaYVdsZHNhRWROTVVaVldrZG9XbUpZVWxkWmJURkxZa1UxY1dGRVdsaFZWREE1U1dsM2FXTkRTVFpOVTNkcFlWTkpObGN4TVRraWZRIiwiZSI6Imluc3RhZ3JhbS9sb2NhdGlvbi9wb3N0cyIsInAiOiJjdXJzb3IifQ",
                    "has_more": true,
                    "page_size": 63
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T07:29:04.798Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/engagement": {
      "get": {
        "summary": "Get Instagram engagement statistics",
        "description": "Returns computed engagement statistics for an Instagram account based on its recent posts: an overall engagement rate, follower count, total likes and comments across the sampled posts, and a per-post breakdown with likes, comments, post time, and likes/comments-per-hour velocity. Pass the account `handle`.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_engagement",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "advanced",
        "x-credit-cost": 5,
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": true,
            "description": "Instagram username without the @ symbol.",
            "schema": {
              "type": "string"
            },
            "example": "mrbeast"
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/engagement"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "metrics": {
                          "type": "object",
                          "description": "Key performance metrics",
                          "properties": {
                            "total_views": {
                              "type": "integer",
                              "description": "Total view count"
                            },
                            "total_likes": {
                              "type": "integer",
                              "description": "Total like count"
                            },
                            "total_comments": {
                              "type": "integer",
                              "description": "Total comment count"
                            },
                            "engagement_rate": {
                              "type": "number",
                              "description": "Computed engagement rate (0-1)"
                            }
                          }
                        },
                        "period": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Time period for the analytics data"
                        },
                        "breakdown": {
                          "type": [
                            "array",
                            "null"
                          ],
                          "description": "Per-item or per-period breakdown",
                          "items": {
                            "type": "object",
                            "description": "Breakdown entry"
                          }
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      }
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/engagement",
                  "data": {
                    "engagement_rate_percentages": 54.51,
                    "recent_posts": 12,
                    "followers": 90044323,
                    "comments": 789670,
                    "likes": 48292943,
                    "recent_posts_explanation": "Statistics based on the last 12 posts",
                    "id_user": "2278169415",
                    "username": "mrbeast",
                    "is_private": false,
                    "posts_details": [
                      {
                        "likes": 9575262,
                        "comments": 186062,
                        "taken_at": 1784649621,
                        "datetime": "2026-07-21 19:00:21",
                        "hours_since_post": 1752,
                        "time_ago": "2 months ago",
                        "likes_per_hour": 5465,
                        "comments_per_hour": 106
                      },
                      {
                        "likes": 6229551,
                        "comments": 142349,
                        "taken_at": 1781457954,
                        "datetime": "2026-06-14 20:25:54",
                        "hours_since_post": 2638,
                        "time_ago": "4 months ago",
                        "likes_per_hour": 2361,
                        "comments_per_hour": 54
                      }
                    ]
                  },
                  "credits_used": 5,
                  "request_id": "req_example000000",
                  "cached": false,
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T15:37:03.374Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/search/location": {
      "get": {
        "summary": "Search Instagram locations",
        "description": "Searches Instagram locations by keyword. Returns matching places, each with location.pk, a name, and coordinates, plus a display title and subtitle. There is no location.id. Pass location.pk as location_id to the Instagram location posts endpoint. location.facebook_places_id is another identifier for the same place.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_search_location",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "advanced",
        "x-credit-cost": 5,
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Search keyword or phrase to find Instagram locations.",
            "schema": {
              "type": "string"
            },
            "example": "Paris"
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/search/location"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of search result objects",
                          "items": {
                            "type": "object",
                            "description": "Search result item"
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/search/location",
                  "data": {
                    "items": [
                      {
                        "location": {
                          "pk": 1619558008055426,
                          "facebook_places_id": 1619558008055426,
                          "external_source": "facebook_places",
                          "name": "Paris, France",
                          "address": "",
                          "city": null,
                          "has_viewer_saved": false,
                          "short_name": "Paris",
                          "lng": 2.30746037,
                          "lat": 48.85907505
                        },
                        "title": "Paris, France",
                        "subtitle": ""
                      },
                      {
                        "location": {
                          "pk": 478332502177267,
                          "facebook_places_id": 478332502177267,
                          "external_source": "facebook_places",
                          "name": "Louvre Museum Paris",
                          "address": "",
                          "city": null,
                          "has_viewer_saved": false,
                          "short_name": "Louvre Museum Paris",
                          "lng": 2.33764596,
                          "lat": 48.86061393
                        },
                        "title": "Louvre Museum Paris",
                        "subtitle": "Paris, France"
                      }
                    ],
                    "dropped": 0
                  },
                  "credits_used": 5,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": null,
                    "has_more": false,
                    "page_size": 30
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T12:51:43.723Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/search": {
      "get": {
        "summary": "Search Instagram accounts, hashtags, and places",
        "description": "Returns mixed Instagram search matches for a query: accounts, hashtags, and places in one payload, the same mix Instagram's own search box shows. It matches account, hashtag and place names, not the text of posts, so a multi-word topic sentence usually matches nothing and answers 404. For posts about a topic or keyword, use `GET /v1/instagram/search/reels?query=`.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_search",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 1,
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "An account, hashtag or place name as typed in Instagram's search box (a name, not a topic sentence). For posts about a topic use instagram/search/reels.",
            "schema": {
              "type": "string"
            },
            "example": "nike"
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/search"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "metrics": {
                          "type": "object",
                          "description": "Key performance metrics",
                          "properties": {
                            "total_views": {
                              "type": "integer",
                              "description": "Total view count"
                            },
                            "total_likes": {
                              "type": "integer",
                              "description": "Total like count"
                            },
                            "total_comments": {
                              "type": "integer",
                              "description": "Total comment count"
                            },
                            "engagement_rate": {
                              "type": "number",
                              "description": "Computed engagement rate (0-1)"
                            }
                          }
                        },
                        "period": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Time period for the analytics data"
                        },
                        "breakdown": {
                          "type": [
                            "array",
                            "null"
                          ],
                          "description": "Per-item or per-period breakdown",
                          "items": {
                            "type": "object",
                            "description": "Breakdown entry"
                          }
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      }
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/search",
                  "data": {
                    "query": "nike",
                    "users": [
                      {
                        "position": 0,
                        "id": "user_cf8e81",
                        "username": "user_5dd95c",
                        "full_name": "user_cd5b7b",
                        "is_verified": true,
                        "profile_pic_url": "https://example.com/user_2a8627"
                      },
                      {
                        "position": 2,
                        "id": "user_ee6456",
                        "username": "user_56d35e",
                        "full_name": "user_1ff939",
                        "is_verified": true,
                        "profile_pic_url": "https://example.com/user_796daf"
                      }
                    ],
                    "hashtags": [
                      {
                        "position": 1,
                        "id": "user_3fc9fb",
                        "name": "user_0ec973",
                        "media_count": 2031440,
                        "search_result_subtitle": null
                      },
                      {
                        "position": 8,
                        "id": "user_a5e159",
                        "name": "user_51695f",
                        "media_count": 4854541,
                        "search_result_subtitle": null
                      }
                    ],
                    "places": [
                      {
                        "position": 51,
                        "id": "715603272",
                        "name": "Nike",
                        "title": "Nike",
                        "subtitle": "",
                        "facebook_places_id": "106068296090172"
                      }
                    ],
                    "keywords": [],
                    "rank_token": "de78dda5-df22-434e-9df9-3ae94dc0d1fb"
                  },
                  "credits_used": 1,
                  "request_id": "req_example000000",
                  "cached": false,
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T12:51:46.708Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/search/popular": {
      "get": {
        "summary": "Search popular Instagram posts",
        "description": "Returns popular Instagram posts matching a keyword. Each post includes caption, play count, permalink, thumbnail, and the owner's username. The popular surface itself does not publish like or comment counts, the post date or the duration, so on a plain call `post.engagement.likes`, `.comments`, `.shares`, `post.published_at` and `post.content.duration_seconds` are null. Send `include=engagement` and every row is joined, in the same call, to the per-post lookup that carries them: likes, comments, shares (the paper-plane send count), views, the exact publish time and the duration land on each row. Cost: 1 credit for the page plus 1 credit per row that was filled from a fresh lookup (12 rows max, so 13 credits at most); rows already in cache are filled for free, rows that could not be filled are refunded, and a repeat of the same call within the cache window is 0 credits. Time: a plain call is 2 to 3 seconds; `include=engagement` adds 2 to 9 seconds on a fresh page (the twelve lookups run in parallel and the call waits for the slowest, never more than 12 seconds) and nothing when the rows are already cached. `limit=N` caps the rows and the credits together. The response carries a `hydration` block itemising rows, lookups, cache hits, credits and milliseconds. Accounts that hide their like count keep `likes` null. `post.engagement.saves` is not available on this surface and stays null either way. Page with cursor. Instagram has no popular page for some queries, often place names or rare phrases: those calls return 404 at no charge, so use /v1/instagram/search/reels for the same keyword instead.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_search_popular",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 1,
        "x-credit-cost-min": 1,
        "x-credit-cost-max": 13,
        "x-credit-cost-formula": "1 credit for the page. include=engagement holds 1 credit per row, at most 12 (or `limit`), and keeps only the rows filled from a fresh lookup, so a full page is at most 13 credits; rows served from cache are free, unfilled rows are refunded, and a repeat of the same call within the cache window costs 0. Search pages are cached for 2 minutes and the per-post lookups for 10 minutes. With `max_pages`, `max_items` or `max_credits`, each page walked is billed at this price (a cached page is free), and `max_credits` caps the total.",
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Keyword or topic to find popular Instagram posts.",
            "schema": {
              "type": "string"
            },
            "example": "basketball"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Cursor from the previous response to fetch the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include",
            "in": "query",
            "required": false,
            "description": "Set to `engagement` (one token only) to fill `post.engagement.likes`, `.comments`, `.shares`, `.views`, `post.published_at` and `post.content.duration_seconds` on every row in this one call. Holds 1 credit per row (at most 12, or `limit`) and keeps only the rows filled from a fresh lookup; rows already in cache and rows that could not be filled are refunded, so the most a call can cost is 1 + rows and the usual bill is lower. Adds 2 to 9 seconds on a fresh page (never more than 12) and nothing when the rows are already cached; read `data.hydration` for the rows, the credits held and kept, and the time.",
            "schema": {
              "type": "string",
              "enum": [
                "engagement"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Take the top N rows of the page (1 to 12) after the search has run. With `include=engagement` it also caps the extra credits at N: `limit=5&include=engagement` costs at most 6. It is not a page size: `next_cursor` still advances past the full page, so rows beyond N on this page are not returned by the next page.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 12
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "Only rows published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Rows older than it are left off each page. This list is not in date order, so the walk does not stop at the date: keep following `next_cursor`, and each page costs what a page costs even when every row on it is filtered out. A row with no date is kept. `published_after`, `start_date`, `from_date`, `publish_time` (`yesterday`, `this-week`, `this-month`, `last-3-months`, `last-6-months`) and `max_age_days` are accepted and applied as `since`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "description": "Only rows published on or before this date: YYYY-MM-DD (that whole UTC day is included) or an ISO 8601 timestamp. Newer rows are left off each page and the walk does not stop, so older pages follow. A row with no date is kept. `published_before`, `end_date` and `to_date` are accepted and applied as `until`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max_pages",
            "in": "query",
            "required": false,
            "description": "1 to 50 (default 1, or 50 when `max_items` or `max_credits` is sent). Walk up to this many pages in one call and return the rows from all of them. Each page walked is billed exactly as one call to this endpoint (a cached page is free) and counts against your rate limit; its charge and any refund are recorded under the page's own request id, listed in `data.walk.request_ids`. The walk stops early at the last page, or when the request's time budget runs low; `data.walk.stopped` says why (`end`, `max_pages`, `max_items`, `max_credits`, `time_budget`, `page_error`) and `pagination.next_cursor` continues from where it stopped.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "max_items",
            "in": "query",
            "required": false,
            "description": "1 to 5000. Get more in one call: keep walking pages until the response holds at least this many rows, then stop with `data.walk.stopped: \"max_items\"`. The last page is returned whole (it was billed), so `data.items` can hold up to one page more than this, and `pagination.next_cursor` resumes right after it without skipping a row. Walks up to 50 pages unless `max_pages` says fewer; each page is billed as one call (a cached page is free). Add `max_credits` to cap the spend. A long walk can stop on the time budget first (`\"time_budget\"`): send the returned cursor with the same params to continue.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5000
            }
          },
          {
            "name": "max_credits",
            "in": "query",
            "required": false,
            "description": "1 to 100000. The most this call may spend, across every page it walks. A page starts only while the credits already spent plus that page's price (or, when higher, the most any page of this walk has cost) still fit, so the call never goes past it; the walk then stops with `data.walk.stopped: \"max_credits\"` and the cursor to resume. Sent alone, it walks as far as the budget goes (up to 50 pages). A value below the price of one page is a free 400 whose `error.details.page_credits` names that price. Credits a row join (`include=`) adds are known only once a page has run, so page 1 is checked against its own price.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100000
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/search/popular"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of canonical post wrappers ({ post, computed })",
                          "items": {
                            "type": "object",
                            "description": "Canonical post wrapper",
                            "properties": {
                              "post": {
                                "type": "object",
                                "description": "Canonical Post object (unified across all platforms)",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "Platform-specific post ID (always a string; numeric upstream IDs are stringified)"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Direct URL to the post on the source platform"
                                  },
                                  "content": {
                                    "type": "object",
                                    "description": "Post content fields (text, media, thumbnail, duration)",
                                    "properties": {
                                      "text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Post caption, description, or text content"
                                      },
                                      "media_urls": {
                                        "type": [
                                          "string",
                                          "array",
                                          "null"
                                        ],
                                        "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels.",
                                        "items": {
                                          "type": "string",
                                          "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels."
                                        }
                                      },
                                      "thumbnail_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to thumbnail image"
                                      },
                                      "duration_seconds": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Video/clip duration in seconds (null for non-video posts)"
                                      }
                                    }
                                  },
                                  "author": {
                                    "type": "object",
                                    "description": "Subset of Author fields for the post creator",
                                    "properties": {
                                      "username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author username"
                                      },
                                      "display_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author display name"
                                      },
                                      "avatar_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to author profile picture"
                                      },
                                      "verified": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Whether the author account is verified"
                                      }
                                    }
                                  },
                                  "engagement": {
                                    "type": "object",
                                    "description": "Engagement counts",
                                    "properties": {
                                      "views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "View count (if available). For Instagram video/reels this is the play count: the headline 'Views' the IG app shows. Instagram removed per-post play counts from its public web pages in August 2026, so `GET /v1/instagram/post` now fills the count automatically from a second source within the same call: videos and reels keep a numeric `views` with no extra endpoint or workaround. Note: since mid-July 2026 Instagram's play count is Instagram-only. It no longer includes Facebook crosspost views (Meta-side change; the app UI changed identically). For combined reach, also fetch the Facebook crosspost via `/v1/facebook/post`."
                                      },
                                      "likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Like / reaction count"
                                      },
                                      "comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Comment count. Note: on `GET /v1/instagram/post` this is Instagram's `edge_media_to_parent_comment.count` (top-level comments); the IG list endpoints report the mobile `comment_count` total (includes replies). Both land on this same field."
                                      },
                                      "shares": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Share / repost / retweet count. On Instagram this is `reshare_count` (the paper-plane Share / Send count) and it exists only on Instagram's mobile surface, so it is returned by `/v1/instagram/post/stats`, `/v1/instagram/profile/reels/full`, and `/v1/instagram/profile/posts/full`. The web-sourced Instagram list and search endpoints return `null` (never fabricated)."
                                      },
                                      "saves": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Save / bookmark count. `null` on Instagram: the save count is platform-private and Instagram exposes no numeric save metric on any surface (never fabricated)."
                                      }
                                    }
                                  },
                                  "flags": {
                                    "type": "object",
                                    "description": "Boolean flags on the post",
                                    "properties": {
                                      "nsfw": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "NSFW flag (null when platform does not surface)"
                                      },
                                      "spoiler": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Spoiler flag (null when platform does not surface)"
                                      },
                                      "pinned": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Pinned-to-profile flag (null when platform does not surface)"
                                      },
                                      "deleted": {
                                        "type": "boolean",
                                        "description": "Whether the post is tombstoned (always present)"
                                      },
                                      "likes_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the creator has hidden the like count. `engagement.likes` is `null` in that case (never the platform's decoy preview number). Absent on normal posts."
                                      },
                                      "comments_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the upstream reports the comment count as hidden. `engagement.comments` is `null` in that case. Absent on normal posts."
                                      },
                                      "shares_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.shares_hidden"
                                      },
                                      "views_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.views_hidden"
                                      },
                                      "saves_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.saves_hidden"
                                      }
                                    }
                                  },
                                  "published_at": {
                                    "type": [
                                      "string",
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Post creation timestamp as an ISO 8601 UTC string. When the upstream sent a Unix epoch it is converted here and the raw epoch is preserved under `post.ext.published_at_epoch` for one deprecation cycle."
                                  },
                                  "ext": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Platform-specific passthrough fields for cross-endpoint chains (present only on platforms that surface them)",
                                    "properties": {
                                      "music_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok music/clip id (exact string): pass to `/v1/tiktok/song/videos?clipId=` to find videos using the same sound"
                                      },
                                      "matched_song_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The catalogue song TikTok matched the video's sound to, as an exact digit string. An official clip and the original sounds creators upload with it have different `music_id` values and the same `matched_song_id`, so group rows on it to count every use of one song. It is not a clipId: `/v1/tiktok/song` and `/v1/tiktok/song/videos` do not accept it. `/v1/tiktok/search/music` carries it on each sound, so a search on the song's title and artist, kept to the sounds with the same `matched_song_id`, gives the song's official sounds and their `video_count`. Absent when TikTok matched the sound to no song, and on rows served from a source that does not report the match."
                                      },
                                      "matched_song_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the song in `matched_song_id`. Absent when there is no matched song."
                                      },
                                      "matched_song_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist of the song in `matched_song_id`, as TikTok's catalogue names it. Absent when there is no matched song."
                                      },
                                      "music_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the video's own sound (`music_id`). An uploaded sound is titled like `original sound - <handle>`; the song it plays, when TikTok recognised one, is `matched_song_title`."
                                      },
                                      "music_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist TikTok shows for the video's own sound. On an original sound this is the uploader's display name, not the song's artist; use `matched_song_artist` for that."
                                      },
                                      "music_is_original": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "TikTok only. `true` when the video's sound is an original sound a creator uploaded, `false` when it is a catalogue track. Absent when the source does not say."
                                      },
                                      "author_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's platform-native numeric user id. On TikTok search and list items, pass to `/v1/tiktok/profile?user_id=` for the creator's current follower count (survives username changes). On Instagram `/v1/instagram/search/reels`, `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` items it is present on every row, accepted by `/v1/instagram/profile/country?user_id=` and `/v1/instagram/basic-profile?userId=`. On Facebook it appears when the upstream exposed a numeric actor id and no real handle."
                                      },
                                      "author_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The posting account's profile URL, so a matching post can be followed to its account. Present on `/v1/facebook/search/posts` rows: the vanity or `/people/<name>/<id>/` URL when Facebook sends one, otherwise `https://www.facebook.com/profile.php?id=<numeric id>` built from the account id. Pass it as `url` to `/v1/facebook/profile` (or to `/v1/prism/profiles` with `platform: facebook`). Null when the row names neither an account URL nor a numeric account id. Absent on other endpoints."
                                      },
                                      "author_followers": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "The creator's follower count as embedded in the search payload itself, when the search source happens to carry one. On Instagram `search/reels` it is null on a plain call, because Instagram stopped sending follower counts in its search payload in August 2026; send `include=creator` (or `country`) and it is filled from the creator's profile, 2 credits per creator looked up. It stays null when that lookup does not resolve."
                                      },
                                      "author_following": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_following"
                                      },
                                      "author_posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_posts_count"
                                      },
                                      "author_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The free text the author wrote in their profile's location field, exactly as written (for example `Johannesburg, South Africa`). It is not a country code and is not checked. Present on X tweet and reply rows; null or absent when the author left it blank."
                                      },
                                      "in_reply_to_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_id"
                                      },
                                      "in_reply_to_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_username"
                                      },
                                      "conversation_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.conversation_id"
                                      },
                                      "author_country": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's country. On Instagram it is the country the creator declares on the About this account panel, as a country name (for example `Spain`), and it is not where the post was filmed. It is present on `/v1/instagram/search/reels` when the request sends `include=creator`, `include=country` or `country`, and on `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` when it sends `include=country`, filled by looking the creator up. On YouTube rows joined with `include=channel` it is the channel's own country as an ISO 3166-1 alpha-2 code (for example `ZA`). Null when the platform publishes no country for the creator or the lookup did not resolve, and nothing is guessed; absent on a plain call."
                                      },
                                      "author_public_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact email on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public email or the lookup did not resolve; absent on a plain call."
                                      },
                                      "author_public_phone": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact phone number on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public phone or the lookup did not resolve; absent on a plain call."
                                      },
                                      "download_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "How many times the video has been saved to a device. TikTok only, and distinct from `engagement.saves`: a save keeps the video in a private collection on the platform, a download takes a copy off it, and TikTok counts the two separately. Present on TikTok post, search and post-list responses; absent everywhere else."
                                      },
                                      "region": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only: the country TikTok registers the video to, as an ISO 3166-1 alpha-2 code (normally the creator's account country when they posted). It is not the viewer's country, not the `region` you requested, and not a language. On `/v1/tiktok/trending`, `/v1/tiktok/search`, `/v1/tiktok/search/top`, `/v1/tiktok/profile/videos`, `/v1/tiktok/search/hashtag` and `/v1/tiktok/song/videos` it is how you tell which rows are from a given country: filter on it when you need only that country. A row whose source omits the country stays null. The `region` request parameter still only sets the proxy."
                                      },
                                      "subreddit": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Reddit subreddit name (search/list items): pass to `/v1/reddit/subreddit/details?subreddit=`"
                                      },
                                      "title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.title"
                                      },
                                      "selftext": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.selftext"
                                      },
                                      "upvote_ratio": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Reddit only: the share of a post's votes that are upvotes, as a fraction from 0 to 1 and usually close to 1 (six live rows measured 1, 1, 1, 0.86, 0.75, 1). Fractional despite the integer type this schema emits for every numeric leaf, the same caveat as `author.ext.average_rating`. Populated on `/v1/reddit/search` rows whose source carries it, and null everywhere else on Reddit including `/v1/reddit/post` and `/v1/reddit/subreddit`."
                                      },
                                      "flair": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.flair"
                                      },
                                      "content_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The language the platform itself tags the post with, when it sends one: Reddit's own language tag on Reddit lanes, and TikTok's caption-language tag (for example `de`) on `/v1/tiktok/trending?feed=local`. Null when the platform could not tell (Reddit `und`, TikTok `un`, common on short or emoji-only captions); absent where the source sends no tag. Never inferred from the text by us: that is `post.computed.language`."
                                      },
                                      "type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.type"
                                      },
                                      "content_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.content_type"
                                      },
                                      "ticker_symbols": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.ticker_symbols",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.ticker_symbols"
                                        }
                                      },
                                      "video_view_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram's legacy 3-second-view count. Historical: Instagram stopped serving it in August 2026 (removed from its web post surface along with the web play count), so fresh `/v1/instagram/post` lookups no longer carry it and no source can restore it. Use `engagement.views` (the play count) instead."
                                      },
                                      "ig_play_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram-only play count (`ig_play_count`). Since mid-July 2026 Instagram's headline play count (`engagement.views`) no longer includes Facebook crosspost views and equals this value; it is surfaced explicitly so you can tell the Instagram-only figure apart and detect any future re-divergence. For combined Instagram + Facebook reach, also fetch the Facebook crosspost via `/v1/facebook/post`. Present on `/v1/instagram/post/stats` and, since the August 2026 views fix, on `/v1/instagram/post` for video posts."
                                      },
                                      "repost_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.repost_count"
                                      },
                                      "media_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.media_type"
                                      },
                                      "text_truncated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.text_truncated"
                                      },
                                      "ip_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.ip_location"
                                      },
                                      "carousel_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.carousel_count"
                                      },
                                      "remix_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.remix_count"
                                      },
                                      "audio_cluster_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram's audio cluster for a reel, as an exact digit string: the id Instagram uses to group different uploads of the same sound. Present on `/v1/instagram/audio/reels` rows and on `/v1/instagram/profile/reels` with `include=stats`; absent on a row when it is not available and on every other surface."
                                      },
                                      "facebook_likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.likes` on this row. A post shared to Facebook arrives from some sources with its Facebook likes already folded into the Instagram count, so the share is subtracted and published here, which keeps `engagement.likes` the Instagram-only figure instagram.com shows on the post. Add the two together for the combined number. Absent when the read carried no Facebook share, and absent on a post whose owner hides the like count, because nothing can be subtracted from a null. A response that excluded a share also carries a note in `data._warnings`."
                                      },
                                      "facebook_comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.comments` on this row, the comment counterpart of `post.ext.facebook_likes`. Each leaf appears only for the count it actually changed, so a post whose likes are hidden but whose comments were reconciled carries this one alone."
                                      },
                                      "instagram_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Instagram-only play count of a video, the same figure on every Instagram endpoint. `engagement.views` keeps each endpoint's established meaning: on `/v1/instagram/profile/reels`, `/v1/instagram/audio/reels`, `/v1/instagram/search/reels` and `/v1/instagram/search/hashtag` it can include the post's Facebook cross-post views, while on `/v1/instagram/post` and `/v1/instagram/post/stats` it is Instagram-only. Read this leaf when you compare one post across endpoints. Absent on photos and when the source did not report the Instagram-only figure."
                                      },
                                      "facebook_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post part of a video's play count, the counterpart of `post.ext.instagram_views`. Present only when the source reported the Facebook part, or a combined total above the Instagram figure. Absent does not mean zero: some sources report the Instagram figure alone even for a cross-posted video."
                                      },
                                      "published_at_epoch": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Raw Unix epoch for `published_at` (seconds, or milliseconds when the upstream sent millis). Present only when the upstream sent a numeric epoch that was normalised to the ISO 8601 `published_at` string. Kept for one deprecation cycle for integrations pinned to the numeric form."
                                      },
                                      "usertags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.usertags",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.usertags"
                                        }
                                      },
                                      "coauthors": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post).",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post)."
                                        }
                                      },
                                      "music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.music"
                                      },
                                      "sponsor_tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                        }
                                      },
                                      "sponsored_disclosed": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "The platform's own disclosure that the post is paid or promotional: on Instagram the paid-partnership label (`is_paid_partnership`) or a tagged brand partner, on TikTok the label TikTok shows viewers (\"Paid partnership\", \"Commission paid\", \"Promotional content\"). `false` when the post carries the flag unset, null when it carries none. Present on `/v1/instagram/post/stats`, `/v1/instagram/search/reels` and `/v1/tiktok/search`; absent on every other endpoint."
                                      },
                                      "ai_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram only: Instagram's AI-content label on the post, as the method Instagram reports: `classifier_score_high` (Instagram detected it, shown as \"Likely made with AI\"), `ai_created` or `ai_edited` (declared or detected as made or edited with AI). Null when the post carries no AI label. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                      },
                                      "story_mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "story_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint."
                                        }
                                      },
                                      "story_reshared_posts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.location"
                                      },
                                      "media": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.media",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.media",
                                          "properties": {
                                            "type": {
                                              "type": "string",
                                              "description": "Leaf at post.ext.media.type"
                                            },
                                            "url": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.media.url"
                                            },
                                            "width": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.width"
                                            },
                                            "height": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.height"
                                            }
                                          }
                                        }
                                      },
                                      "top_comments": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.top_comments",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.top_comments",
                                          "properties": {
                                            "id": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.id"
                                            },
                                            "text": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.text"
                                            },
                                            "username": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.username"
                                            },
                                            "likes": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.top_comments.likes"
                                            },
                                            "published_at": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.published_at"
                                            }
                                          }
                                        }
                                      },
                                      "hashtags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.hashtags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.hashtags"
                                        }
                                      },
                                      "mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentions",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentions"
                                        }
                                      },
                                      "mentioned_user_ids": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentioned_user_ids",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentioned_user_ids"
                                        }
                                      },
                                      "quoted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Threads quote posts: the post this one quotes, as `{ id, url, author: { id, username }, text, media_urls, thumbnail_url }`. A quote post usually carries no caption or media of its own, and the text and video you see on the post's page belong to this attachment, by a different author. It is returned here rather than merged into `post.content`, so `content.*` always stays the outer post's own content and one account's media is never attributed to another. Absent on posts that are not quote posts."
                                      },
                                      "retweeted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.retweeted_post"
                                      },
                                      "quote_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.quote_count"
                                      },
                                      "all_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.all_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.all_media_urls"
                                        }
                                      },
                                      "reaction_counts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.reaction_counts",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.reaction_counts"
                                        }
                                      },
                                      "share_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.share_urn"
                                      },
                                      "post_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.post_type"
                                      },
                                      "activity_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.activity_id"
                                      },
                                      "published_at_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_at_precision"
                                      },
                                      "author_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_urn"
                                      },
                                      "author_headline": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_headline"
                                      },
                                      "author_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_type"
                                      },
                                      "is_repost_quote": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.is_repost_quote"
                                      },
                                      "article": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.article"
                                      },
                                      "reaction_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.reaction_type"
                                      },
                                      "download_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.download_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.download_media_urls"
                                        }
                                      },
                                      "tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.tags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.tags"
                                        }
                                      },
                                      "categoryId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryId"
                                      },
                                      "categoryTitle": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryTitle"
                                      },
                                      "topicCategories": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.topicCategories",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.topicCategories"
                                        }
                                      },
                                      "duration": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.duration"
                                      },
                                      "license": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.license"
                                      },
                                      "madeForKids": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.madeForKids"
                                      },
                                      "defaultAudioLanguage": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.defaultAudioLanguage"
                                      },
                                      "hasPaidProductPlacement": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.hasPaidProductPlacement"
                                      },
                                      "caption": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.caption"
                                      },
                                      "position": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.position"
                                      },
                                      "playlistId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlistId"
                                      },
                                      "videoOwnerChannelId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoOwnerChannelId"
                                      },
                                      "videoPublishedAt": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoPublishedAt"
                                      },
                                      "description": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.description"
                                      },
                                      "default_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.default_language"
                                      },
                                      "localizations": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.localizations"
                                      },
                                      "playlist_item_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_item_id"
                                      },
                                      "playlist_owner_channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_channel_id"
                                      },
                                      "playlist_owner_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_title"
                                      },
                                      "channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.channel_id"
                                      },
                                      "published_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_label"
                                      },
                                      "published_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.published_precision"
                                      },
                                      "title_maybe_translated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.title_maybe_translated"
                                      },
                                      "video_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.video_count"
                                      },
                                      "posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "`/v1/instagram/hashtag` only: the exact number of public posts Instagram counts under the hashtag. Live: it moves between calls minutes apart."
                                      },
                                      "commerce": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.commerce"
                                      },
                                      "on_screen_texts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.on_screen_texts",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.on_screen_texts"
                                        }
                                      },
                                      "topic_tag": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag"
                                      },
                                      "reshare_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.reshare_count"
                                      },
                                      "dsp_ids": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.dsp_ids"
                                      },
                                      "topic_tag_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag_id"
                                      },
                                      "amazon_shop_lists": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_lists",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_lists"
                                        }
                                      },
                                      "amazon_shop_trending_picks": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_trending_picks",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_trending_picks"
                                        }
                                      },
                                      "amazon_shop_curations": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_curations",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_curations"
                                        }
                                      },
                                      "amazon_shop_socials": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_socials",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.amazon_shop_socials"
                                        }
                                      },
                                      "ad": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Ad Library envelope (Facebook `adlibrary/ad` and `adlibrary/company/ads` items): page_id, currency, spend, reach_estimate, publisher_platforms, categories, targeted_or_reached_countries, cta_text, cta_type, link_url, is_active, end_date_iso, display_format, title, video_hd_url, video_sd_url. Absent on every non-ad surface."
                                      },
                                      "apple_music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.apple_music"
                                      },
                                      "feedback_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.feedback_id"
                                      },
                                      "question_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN (`/v1/naver/kin/search`) only: the question's id (Naver's `docId`), read from the row's link. Kin returns one row per answer, so several rows can share it; send `group=question` for one row per question."
                                      },
                                      "answer_no": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: which answer of the question this row is (Naver's `answerNo`), read from the row's link."
                                      },
                                      "answer_nos": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first.",
                                        "items": {
                                          "type": "integer",
                                          "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first."
                                        }
                                      },
                                      "published_at_est": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: the question's date ESTIMATED from its id (`YYYY-MM-DD`, Korea time), never a published date, so `published_at` stays null. Absent for questions older than the calibration table."
                                      },
                                      "date_basis": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "How `post.ext.published_at_est` was derived. `kin_docid_estimate`: interpolated from the question id against question pages whose posted date was read."
                                      },
                                      "event": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.event"
                                      },
                                      "trend": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Trend-board envelope: what TikTok's own trend board says about the row. On `/v1/tiktok/hashtags/popular`: `rank`, `country_code`, `period_days`, `posts` and `views` for the window (not lifetime totals), `industry` / `industry_id` / `industry_label` for the first board the hashtag was read from (null for the overall board), `boards` listing EVERY board it ranks on as `{ industry, industry_id, industry_label, rank }` in board order (so a hashtag in the top 3 overall and on an industry board shows both), `popularity_curve` as `{ date, value }` with value 0 to 100 relative to the window's peak, and `top_creators`. On `/v1/tiktok/videos/popular`: `rank`, `country_code`, `period_days`, `order_by`, `period_views`, `organic_views`, `engagement_rate`, `six_second_view_through_rate`, `content_tags`. Absent on every non-board surface."
                                      },
                                      "updated_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.updated_at"
                                      },
                                      "alt_text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.alt_text"
                                      },
                                      "board_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.board_name"
                                      }
                                    }
                                  }
                                }
                              },
                              "computed": {
                                "type": "object",
                                "description": "Server-computed analytics fields (consistent across platforms)",
                                "properties": {
                                  "engagement_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Computed engagement rate (0..1). Null when the upstream lacks enough signal."
                                  },
                                  "language": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "ISO 639-1 language code detected from the post text. Null when undetectable."
                                  },
                                  "content_category": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Keyword-classified content category (e.g. tech, food, gaming). Null when undetectable."
                                  },
                                  "estimated_reach": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Estimated reach based on views or follower count. Null when uncomputable."
                                  },
                                  "save_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at computed.save_rate"
                                  },
                                  "relevance": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Nested object: computed.relevance",
                                    "properties": {
                                      "p": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.p"
                                      },
                                      "sense": {
                                        "type": "string",
                                        "description": "Leaf at computed.relevance.sense"
                                      },
                                      "depth": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.depth"
                                      },
                                      "spam": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.spam"
                                      }
                                    }
                                  },
                                  "labels": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels"
                                  },
                                  "labels_evidence": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels_evidence"
                                  }
                                }
                              }
                            }
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/search/popular",
                  "data": {
                    "items": [
                      {
                        "post": {
                          "id": "3950673596807175488",
                          "url": "https://www.instagram.com/p/DbTnLRpNN1A/",
                          "content": {
                            "text": "Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted).",
                            "media_urls": "https://scontent-atl3-2.cdninstagram.com/user_2352da/v/t2/f2/m86/AQPjapwgpHIbntj7xCnWHwz2onav5nntg60vFtkT3XEg3vLplqV1m54WXDWboklrnPnTb5LRnuie3--Xhp85yLGPMVZNiL22EVhayiE.mp4?_nc_cat=101&_nc_sid=5e9851&_nc_ht=scontent-atl3-2.cdninstagram.com&_nc_ohc=Ku8eCGUzKEAQ7kNvwGawbVS&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTUxMjcwMzU5MzQ3NDYxMCwiYXNzZXRfYWdlX2RheXMiOjY2LCJ2aV91c2VjYXNlX2lkIjoxMDA5OSwiZHVyYXRpb25fcyI6NiwidXJsZ2VuX3NvdXJjZSI6Ind3dyJ9&ccb=17-1&vs=d9ad7592b11e0b4b&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC8wRjRCQzlEOTk1RjYyNTU1NDZGMzBBRTZDNDVFODI5Q192aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyLzZFNDYyNDkxRjAxQjRCMEQ4NEE5Rjk5OUEyMzU5NzkxX2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACbkqLeF-PKvBRUCKAJDMywXQBuZmZmZmZoYEmRhc2hfYmFzZWxpbmVfMV92MREAdf4HZeadAQA&_nc_gid=BIu8ZnzDHfpvMUjQ9L9nuw&_nc_zt=28&_nc_ss=70689&oh=00_AQNjB-k28kccDbaP7uBLZx1B4pffpJy9wpDTmiZRKqSopA&oe=6AC12EDE",
                            "thumbnail_url": "https://scontent-atl3-2.cdninstagram.com/user_4c9448/t51.82787-15/758401726_17888212497667117_4059043247986072264_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=105&ig_cache_key=Mzk1MDY3MzU5NjgwNzE3NTQ4ODE3ODg4MjEyNDk0NjY3MTE3.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjEzMjAuc2RyLnZpZGVvX2RlZmF1bHRfY292ZXJfZnJhbWUuQzMifQ%3D%3D&_nc_ohc=x5H9DJ4XcvUQ7kNvwF2PS4r&_nc_oc=Adp9cIaTK7bzDrpPR8zCZaBX0C1iuKAM6Kbpr8z87t6aajvbjx8ExInO0-gL9BzgZAgOmzFsQFYNORSCQs531Adk&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-atl3-2.cdninstagram.com&_nc_gid=BIu8ZnzDHfpvMUjQ9L9nuw&_nc_ss=7a22e&oh=00_AQNdcm9xObHQY5UpL-6NRD0SwNkPTcqGrtciEpO8X5No9g&oe=6AC51A89",
                            "duration_seconds": 6.9
                          },
                          "author": {
                            "username": "user_7690fa",
                            "display_name": "user_e155be",
                            "avatar_url": null,
                            "verified": null
                          },
                          "engagement": {
                            "views": 22493648,
                            "likes": 217344,
                            "comments": 1015,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": null,
                            "deleted": false
                          },
                          "published_at": "2026-07-27T18:30:48.000Z",
                          "ext": {
                            "author_id": "user_5eb746"
                          }
                        },
                        "computed": {
                          "engagement_rate": 0.009708,
                          "language": "en",
                          "content_category": "sports",
                          "estimated_reach": 26992378
                        }
                      },
                      {
                        "post": {
                          "id": "3936030195327313495",
                          "url": "https://www.instagram.com/p/DaflpvRsiZX/",
                          "content": {
                            "text": "Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted).",
                            "media_urls": "https://scontent-ord5-2.cdninstagram.com/user_2352da/v/t2/f2/m86/AQO6Ryht2XWYR4pWhleM2XYutOpq1v-FAiDNbdtyeh3t8nSN_agBcrKgWm-ds8R9SpJt2rKRu3qQvT0hL8r3anMqPerxtnB6R2IPXjQ.mp4?_nc_cat=107&_nc_sid=5e9851&_nc_ht=scontent-ord5-2.cdninstagram.com&_nc_ohc=_7YKdYie2MYQ7kNvwGc2W77&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTczNjk3NTE3Mzk5MDkwMCwiYXNzZXRfYWdlX2RheXMiOjg2LCJ2aV91c2VjYXNlX2lkIjoxMDA5OSwiZHVyYXRpb25fcyI6NjMsInVybGdlbl9zb3VyY2UiOiJ3d3cifQ%3D%3D&ccb=17-1&vs=3410cb87e2d78d0&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC8wRjRBODI4OEM1ODkzQUI2N0YwRTY3RkMwNzM3NTNBQV92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyLzY2NDEzMTgxMkU2MUMzRjRBOTJEMDQ1MzY4Nzg3MjhFX2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACbo59XDofGVBhUCKAJDMywXQE-IcrAgxJwYEmRhc2hfYmFzZWxpbmVfMV92MREAdf4HZeadAQA&_nc_gid=lwBbpEv5e9FwHBF5N7XThg&_nc_zt=28&_nc_ss=70689&oh=00_AQOxCEHYciuzoRVAO2UR1jLAVtDLqDSmZrD7daXJSnF9ZQ&oe=6AC12578",
                            "thumbnail_url": "https://scontent-ord5-1.cdninstagram.com/user_4c9448/t51.71878-15/735110142_1458102316081576_7528806419597014383_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=109&ig_cache_key=MzkzNjAzMDE5NTMyNzMxMzQ5NQ%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjY0MC5zZHIudmlkZW9fZGVmYXVsdF9jb3Zlcl9mcmFtZS5DMyJ9&_nc_ohc=hrgb-s8TAUQQ7kNvwFSCGEI&_nc_oc=Adpu9BAy1COYG2YfcxGJ3AyVyQEvkb2DoJscIljwhSilKWGgCf4Hu7qAY_IqvTdnkeA&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ord5-1.cdninstagram.com&_nc_gid=lwBbpEv5e9FwHBF5N7XThg&_nc_ss=7a22e&oh=00_AQN9VCSKPKIbs6HUuvanVNeAmj-jLWzHOZuMPOT0ICbToA&oe=6AC532E3",
                            "duration_seconds": 63.067
                          },
                          "author": {
                            "username": "user_738ab0",
                            "display_name": "user_d1a2cb",
                            "avatar_url": null,
                            "verified": null
                          },
                          "engagement": {
                            "views": 8452481,
                            "likes": 727970,
                            "comments": 3116,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": null,
                            "deleted": false
                          },
                          "published_at": "2026-07-07T13:37:19.000Z",
                          "ext": {
                            "author_id": "user_3ea8ef"
                          }
                        },
                        "computed": {
                          "engagement_rate": 0.086494,
                          "language": "en",
                          "content_category": "sports",
                          "estimated_reach": 10142977
                        }
                      }
                    ],
                    "total": 12,
                    "dropped": 0
                  },
                  "credits_used": 1,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": null,
                    "has_more": false,
                    "page_size": 2
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T07:29:41.509Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/post/comment/replies": {
      "get": {
        "summary": "List replies under an Instagram comment",
        "description": "Returns replies under one Instagram comment. Each reply includes text, like count, nested reply count, author, and timestamp. Pass the post URL and the parent comment_id. Page with cursor.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_post_comment_replies",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 1,
        "x-credit-cost-min": 1,
        "x-credit-cost-max": 5,
        "x-credit-cost-formula": "1 credit per page, with the default labels (sentiment, question, purchase_intent, complaint) included free. label=spam, toxic or low_quality holds 4 extra credits and refunds down to 1 credit per started 25 comments that were newly judged: comments already labelled are free, a page where nothing could be judged refunds the whole extra, and a cached page is free. With `max_pages`, `max_items` or `max_credits`, each page walked is billed at this price (a cached page is free), and `max_credits` caps the total.",
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL of the Instagram post that holds the parent comment. A share link copied from the app (`instagram.com/share/...`) works too; a share link to a profile is refused at no charge with the handle to send, and a dead one is a free 404.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.instagram.com/reel/C8rKmYvsrck"
          },
          {
            "name": "comment_id",
            "in": "query",
            "required": true,
            "description": "Id of the parent comment whose replies to list.",
            "schema": {
              "type": "string"
            },
            "example": "18038110327814211"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Cursor from the previous response to fetch the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "label",
            "in": "query",
            "required": false,
            "description": "Optional CSV of SocialCrawl labels to add to every comment: sentiment, spam, question, purchase_intent, complaint, toxic, low_quality, injection. Without this param every page already carries sentiment, question, purchase_intent and complaint, free; label= adds the labels you name to them (the defaults keep running). Each comment gains computed.labels with probabilities (0 to 1), so you choose the cut-off; a comment that could not be judged carries labels: null. sentiment, question, purchase_intent and complaint are free when asked for too; spam, toxic, low_quality and injection add 1 credit per started 25 newly judged comments (comments already labelled for anyone are free, and so is a cached page). injection flags text that addresses an AI system and tries to direct it (flagged, p); it never drops or rewrites a row. judgments=off (or label=none) turns the default labels off. data.labels reports what was judged and billed.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "exclude",
            "in": "query",
            "required": false,
            "description": "Optional CSV (spam, low_quality), only with the same preset in label. Drops comments whose probability is 0.8 or higher and lists their ids in data.labels.dropped_ids. A comment that could not be judged is never dropped.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "judgments",
            "in": "query",
            "required": false,
            "description": "Optional, on (the default) or off. By default every row gains free SocialCrawl judgments (computed.labels, and computed.relevance on search endpoints), reported in data.labels (mode default) and data.relevance (origin default), each with a status (complete, partial or skipped) and pending: the rows still being judged when the page was sent, which carry null now and are filled on your next call or cached read. Default judgments never add credits, never change an existing field, and never drop or reorder a row. off returns the page exactly as before, with none of those keys. label=none does the same.",
            "schema": {
              "type": "string",
              "enum": [
                "on",
                "off"
              ]
            }
          },
          {
            "name": "dry_run",
            "in": "query",
            "required": false,
            "description": "Optional. When 1, return a cost preview for this labelled or relevance-filtered request without fetching the page or judging any row. data.estimate reports rows_expected, rows_cached, label_credits_min, label_credits_max and base_credits. 0 credits charged.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ]
            }
          },
          {
            "name": "label_evidence",
            "in": "query",
            "required": false,
            "description": "Optional, only with label=. When 1, every labelled row also carries computed.labels_evidence.<preset> = { quote, sentence_index }: the sentence in the row that most clearly shows the label, copied verbatim. Absent or null when no single sentence shows it.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ]
            }
          },
          {
            "name": "fit",
            "in": "query",
            "required": false,
            "description": "Optional. When goal, keep the rows and fields needed for the goal you pass in goal= (plus any that are uncertain, and the first and last), and replace the rest with a stub. data.held_back lists the held ids and a recall id that re-reads the full page from cache at no extra charge. Without this param the page is unchanged.",
            "schema": {
              "type": "string",
              "enum": [
                "goal"
              ]
            }
          },
          {
            "name": "goal",
            "in": "query",
            "required": false,
            "description": "Required by fit=goal. What you are trying to do, in your own words, up to 300 characters.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fit_tokens",
            "in": "query",
            "required": false,
            "description": "Optional, only with fit=goal. Soft cap on how much of the page to keep, in tokens. Uncertain blocks and the first and last block are kept even if they exceed it.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "Only rows published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Rows older than it are left off each page. This list is not in date order, so the walk does not stop at the date: keep following `next_cursor`, and each page costs what a page costs even when every row on it is filtered out. A row with no date is kept. `published_after`, `start_date`, `from_date`, `publish_time` (`yesterday`, `this-week`, `this-month`, `last-3-months`, `last-6-months`) and `max_age_days` are accepted and applied as `since`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "description": "Only rows published on or before this date: YYYY-MM-DD (that whole UTC day is included) or an ISO 8601 timestamp. Newer rows are left off each page and the walk does not stop, so older pages follow. A row with no date is kept. `published_before`, `end_date` and `to_date` are accepted and applied as `until`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max_pages",
            "in": "query",
            "required": false,
            "description": "1 to 50 (default 1, or 50 when `max_items` or `max_credits` is sent). Walk up to this many pages in one call and return the rows from all of them. Each page walked is billed exactly as one call to this endpoint (a cached page is free) and counts against your rate limit; its charge and any refund are recorded under the page's own request id, listed in `data.walk.request_ids`. The walk stops early at the last page, or when the request's time budget runs low; `data.walk.stopped` says why (`end`, `max_pages`, `max_items`, `max_credits`, `time_budget`, `page_error`) and `pagination.next_cursor` continues from where it stopped.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "max_items",
            "in": "query",
            "required": false,
            "description": "1 to 5000. Get more in one call: keep walking pages until the response holds at least this many rows, then stop with `data.walk.stopped: \"max_items\"`. The last page is returned whole (it was billed), so `data.items` can hold up to one page more than this, and `pagination.next_cursor` resumes right after it without skipping a row. Walks up to 50 pages unless `max_pages` says fewer; each page is billed as one call (a cached page is free). Add `max_credits` to cap the spend. A long walk can stop on the time budget first (`\"time_budget\"`): send the returned cursor with the same params to continue.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5000
            }
          },
          {
            "name": "max_credits",
            "in": "query",
            "required": false,
            "description": "1 to 100000. The most this call may spend, across every page it walks. A page starts only while the credits already spent plus that page's price (or, when higher, the most any page of this walk has cost) still fit, so the call never goes past it; the walk then stops with `data.walk.stopped: \"max_credits\"` and the cursor to resume. Sent alone, it walks as far as the budget goes (up to 50 pages). A value below the price of one page is a free 400 whose `error.details.page_credits` names that price. Credits a row join (`include=`) adds are known only once a page has run, so page 1 is checked against its own price.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100000
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/post/comment/replies"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of canonical comment wrappers ({ comment })",
                          "items": {
                            "type": "object",
                            "description": "Canonical comment wrapper",
                            "properties": {
                              "comment": {
                                "type": "object",
                                "description": "Canonical Comment object (unified across all platforms)",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "Platform-specific comment ID (always a string)"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Direct URL to the comment on the source platform"
                                  },
                                  "parent_id": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Parent comment ID for nested replies, or null for top-level comments"
                                  },
                                  "post_id": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "ID of the post this comment belongs to"
                                  },
                                  "text": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Comment body. Tombstone sentinels ([deleted] / [removed]) are collapsed to null upstream: customers never see them."
                                  },
                                  "author": {
                                    "type": "object",
                                    "description": "Subset of Author fields for the comment author",
                                    "properties": {
                                      "username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Comment author username (null when tombstoned)"
                                      },
                                      "display_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Comment author display name"
                                      },
                                      "avatar_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to comment author profile picture"
                                      },
                                      "verified": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Whether the comment author is verified"
                                      }
                                    }
                                  },
                                  "engagement": {
                                    "type": "object",
                                    "description": "Engagement counts on the comment",
                                    "properties": {
                                      "likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Like / upvote count"
                                      },
                                      "replies": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Reply / child-comment count. `0` when the upstream structurally reports the count and the comment has no replies; `null` only when the upstream does not surface a reply count at all."
                                      }
                                    }
                                  },
                                  "flags": {
                                    "type": "object",
                                    "description": "Boolean flags on the comment",
                                    "properties": {
                                      "pinned": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Pinned flag (null when platform does not surface)"
                                      },
                                      "deleted": {
                                        "type": "boolean",
                                        "description": "Whether the comment is tombstoned (always present, even when false)"
                                      },
                                      "liked_by_creator": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "`/v1/instagram/post/comments` only: true when the post's creator liked (hearted) the comment, false when not, null when the source that served the call could not tell. Absent on every other endpoint."
                                      }
                                    }
                                  },
                                  "published_at": {
                                    "type": [
                                      "string",
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Comment creation timestamp as an ISO 8601 UTC string. When the upstream sent a Unix epoch it is converted here and the raw epoch is preserved under `comment.ext.published_at_epoch` for one deprecation cycle."
                                  },
                                  "ext": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Platform-specific passthrough tokens for reply expansion (present only on platforms that surface them)",
                                    "properties": {
                                      "replies_token": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "YouTube reply continuation token: pass to `/v1/youtube/video/comment/replies?continuationToken=`"
                                      },
                                      "replies_cursor": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Reddit reply-branch continuation cursor. Present when this comment's reply tree is truncated upstream: pass it back as `?cursor=` on `/v1/reddit/post/comments` to load the rest of the branch."
                                      },
                                      "depth": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Reddit comment nesting depth as the source reports it: 0 on a top-level comment, 1 on a direct reply, and so on. Present when the thread arrived flat and was re-nested into `replies[]`, so you can verify that nesting independently."
                                      },
                                      "published_at_epoch": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Raw Unix epoch for `published_at` (present only when the upstream sent a numeric epoch that was normalised to the ISO 8601 string)."
                                      },
                                      "feedback_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Facebook comment feedback id: feeds `/v1/facebook/post/comment/replies`"
                                      },
                                      "expansion_token": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Facebook comment expansion/paginator token: feeds `/v1/facebook/post/comment/replies`"
                                      },
                                      "author_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The commenter's platform-native numeric user id, where the upstream exposes one."
                                      },
                                      "ip_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.ip_location"
                                      },
                                      "urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.urn"
                                      },
                                      "reaction_counts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at comment.ext.reaction_counts",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at comment.ext.reaction_counts"
                                        }
                                      },
                                      "is_edited": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at comment.ext.is_edited"
                                      },
                                      "previous_replies_token": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.previous_replies_token"
                                      },
                                      "author_headline": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.author_headline"
                                      },
                                      "updated_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.updated_at"
                                      },
                                      "author_channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.author_channel_id"
                                      },
                                      "author_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.author_url"
                                      },
                                      "viewer_rating": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.viewer_rating"
                                      },
                                      "text_original": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.text_original"
                                      },
                                      "preview_replies": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at comment.ext.preview_replies",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at comment.ext.preview_replies"
                                        }
                                      },
                                      "lookup": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at comment.ext.lookup"
                                      },
                                      "post_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.post_title"
                                      },
                                      "post_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.post_url"
                                      },
                                      "subreddit": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.subreddit"
                                      },
                                      "subreddit_subscribers": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at comment.ext.subreddit_subscribers"
                                      },
                                      "post_score": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at comment.ext.post_score"
                                      },
                                      "post_comment_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at comment.ext.post_comment_count"
                                      },
                                      "post_author": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.post_author"
                                      },
                                      "post_published_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.post_published_at"
                                      },
                                      "post_flair": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.post_flair"
                                      },
                                      "is_submitter": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at comment.ext.is_submitter"
                                      },
                                      "edited_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.edited_at"
                                      },
                                      "controversiality": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at comment.ext.controversiality"
                                      },
                                      "content_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "ISO 639-1 language tag for this comment, when the source reports one. X writes `zxx` / `und` for no linguistic content; those collapse to null."
                                      },
                                      "author_followers": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "The commenter's follower count as embedded in this row. Snapshot as of whenever the replies source saw the account, not a live figure. On X this is present on every `tweet/replies` row."
                                      },
                                      "author_following": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "The commenter's following count as embedded in this row. Same snapshot caveat as `author_followers`."
                                      },
                                      "author_posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "The commenter's post count as embedded in this row. Same snapshot caveat as `author_followers`."
                                      },
                                      "author_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at comment.ext.author_location"
                                      },
                                      "quote_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "How many quote-posts this comment has, when the source reports it. On X a reply is a tweet, so this is the same figure `post.ext.quote_count` carries on tweet lanes."
                                      },
                                      "views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "View count for this comment, when the source reports it. On X a reply is a tweet and the count is public on posts from ~2022 onward."
                                      },
                                      "saves": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Bookmark / save count for this comment, when the source reports it. On X this is `legacy.bookmark_count`."
                                      }
                                    }
                                  },
                                  "replies": {
                                    "type": [
                                      "array",
                                      "null"
                                    ],
                                    "description": "Nested reply tree: array of child comments, each itself a full Comment object with its own `replies`. Populated on threaded platforms (Reddit); absent on flat-comment platforms, which thread only via `parent_id`.",
                                    "items": {
                                      "type": "object",
                                      "description": "Nested reply tree: array of child comments, each itself a full Comment object with its own `replies`. Populated on threaded platforms (Reddit); absent on flat-comment platforms, which thread only via `parent_id`."
                                    }
                                  }
                                }
                              }
                            }
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/post/comment/replies",
                  "data": {
                    "items": [
                      {
                        "comment": {
                          "id": "17863605315161991",
                          "url": "https://example.com/redacted",
                          "parent_id": "18038110327814211",
                          "post_id": "C8rKmYvsrck",
                          "text": "Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted).",
                          "author": {
                            "username": "user_0efd57",
                            "display_name": null,
                            "avatar_url": "https://example.com/avatars/user_2ffb96.png",
                            "verified": false
                          },
                          "engagement": {
                            "likes": null,
                            "replies": 0
                          },
                          "flags": {
                            "pinned": null,
                            "deleted": false
                          },
                          "published_at": "2024-06-28T09:21:43.000Z"
                        },
                        "computed": {
                          "language": "de",
                          "labels": {
                            "sentiment": {
                              "level": 2,
                              "score_0_1": 0.6,
                              "confidence": 0.65
                            },
                            "question": {
                              "p": 0.72
                            },
                            "purchase_intent": {
                              "p": 0.01
                            },
                            "complaint": {
                              "p": 0.01
                            }
                          }
                        }
                      },
                      {
                        "comment": {
                          "id": "18118112077374440",
                          "url": "https://example.com/redacted",
                          "parent_id": "18038110327814211",
                          "post_id": "C8rKmYvsrck",
                          "text": "Sample comment text (redacted).",
                          "author": {
                            "username": "user_0efd57",
                            "display_name": null,
                            "avatar_url": "https://example.com/avatars/user_2ffb96.png",
                            "verified": false
                          },
                          "engagement": {
                            "likes": null,
                            "replies": 0
                          },
                          "flags": {
                            "pinned": null,
                            "deleted": false
                          },
                          "published_at": "2024-06-28T09:22:10.000Z"
                        },
                        "computed": {
                          "language": "de",
                          "labels": {
                            "sentiment": {
                              "level": 3,
                              "score_0_1": 0.65,
                              "confidence": 0.64
                            },
                            "question": {
                              "p": 0.03
                            },
                            "purchase_intent": {
                              "p": 0.02
                            },
                            "complaint": {
                              "p": 0.02
                            }
                          }
                        }
                      }
                    ],
                    "total": null,
                    "labels": {
                      "presets": [
                        "sentiment",
                        "question"
                      ],
                      "rows": 2,
                      "labelled": 2,
                      "cached": 2,
                      "skipped": 0,
                      "unjudged": 0,
                      "dropped": 0,
                      "dropped_ids": [],
                      "extra_credits": 0,
                      "methodology_version": "labels/1",
                      "mode": "default",
                      "status": "complete",
                      "pending": 0,
                      "pending_ids": []
                    },
                    "label_share": {
                      "policy_version": "share/1",
                      "presets": {
                        "question": {
                          "n": 2,
                          "counted": 1,
                          "abstained": 0,
                          "share": null,
                          "low": 0.1209,
                          "high": 0.8791,
                          "receipts": [
                            {
                              "id": "17863605315161991",
                              "text": "Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted)."
                            }
                          ],
                          "policy_version": "share/1",
                          "too_few": true,
                          "at_cut": 1,
                          "nulls": 0,
                          "low_confidence": 0
                        },
                        "purchase_intent": {
                          "n": 2,
                          "counted": 0,
                          "abstained": 0,
                          "share": null,
                          "low": 0,
                          "high": 0.575,
                          "receipts": [],
                          "policy_version": "share/1",
                          "too_few": true,
                          "at_cut": 0,
                          "nulls": 0,
                          "low_confidence": 0
                        },
                        "complaint": {
                          "n": 2,
                          "counted": 0,
                          "abstained": 0,
                          "share": null,
                          "low": 0,
                          "high": 0.575,
                          "receipts": [],
                          "policy_version": "share/1",
                          "too_few": true,
                          "at_cut": 0,
                          "nulls": 0,
                          "low_confidence": 0
                        },
                        "sentiment": {
                          "positive": {
                            "n": 2,
                            "counted": 1,
                            "abstained": 0,
                            "share": null,
                            "low": 0.1209,
                            "high": 0.8791,
                            "receipts": [
                              {
                                "id": "18118112077374440",
                                "text": "Sample comment text (redacted)."
                              }
                            ],
                            "policy_version": "share/1",
                            "too_few": true,
                            "at_cut": 1,
                            "nulls": 0,
                            "low_confidence": 0
                          },
                          "neutral": {
                            "n": 2,
                            "counted": 1,
                            "abstained": 0,
                            "share": null,
                            "low": 0.1209,
                            "high": 0.8791,
                            "receipts": [
                              {
                                "id": "17863605315161991",
                                "text": "Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted)."
                              }
                            ],
                            "policy_version": "share/1",
                            "too_few": true,
                            "at_cut": 1,
                            "nulls": 0,
                            "low_confidence": 0
                          },
                          "negative": {
                            "n": 2,
                            "counted": 0,
                            "abstained": 0,
                            "share": null,
                            "low": 0,
                            "high": 0.575,
                            "receipts": [],
                            "policy_version": "share/1",
                            "too_few": true,
                            "at_cut": 0,
                            "nulls": 0,
                            "low_confidence": 0
                          }
                        }
                      }
                    },
                    "comment_language": {
                      "policy_version": "share/1",
                      "n": 2,
                      "abstained": 0,
                      "judged_by": {
                        "script": 0,
                        "choice": 2
                      },
                      "shares": {
                        "de": {
                          "n": 2,
                          "counted": 2,
                          "abstained": 0,
                          "share": null,
                          "low": 0.425,
                          "high": 1,
                          "receipts": [
                            {
                              "id": "17863605315161991",
                              "text": "Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted)."
                            },
                            {
                              "id": "18118112077374440",
                              "text": "Sample comment text (redacted)."
                            }
                          ],
                          "policy_version": "share/1",
                          "too_few": true
                        }
                      }
                    },
                    "comment_recency": {
                      "policy_version": "d09-1",
                      "n": 2,
                      "counted": 2,
                      "abstained": 0,
                      "share_last_24h": 0,
                      "share_later_half": null,
                      "too_few": true,
                      "stage": "unknown",
                      "order": "default",
                      "recent_share_is_floor": true,
                      "receipts": []
                    },
                    "dropped": 0
                  },
                  "credits_used": 1,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": null,
                    "has_more": false,
                    "page_size": 2
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T15:37:06.588Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/username-suggestions": {
      "get": {
        "summary": "Get Instagram username suggestions",
        "description": "Returns suggested available Instagram usernames derived from a keyword: useful for choosing a new handle. Pass a `query` keyword to seed the suggestions.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_username_suggestions",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "advanced",
        "x-credit-cost": 5,
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Keyword to seed the username suggestions.",
            "schema": {
              "type": "string"
            },
            "example": "mrbeast"
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/username-suggestions"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of search result objects",
                          "items": {
                            "type": "object",
                            "description": "Search result item"
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "google",
                  "endpoint": "/v1/google/search",
                  "data": {
                    "items": [
                      {
                        "title": "My Top 50 London Restaurants (26 Jan-9 Feb 2025)",
                        "url": "https://anguscolwell.substack.com/p/my-top-50-london-restaurants-26-jan",
                        "description": "Feb 9, 2025 · 1) Bouchon Racine, Farringdon. I'm completely obsessed with it, I love it more than anywhere else, it's operating on a level above any other ..."
                      },
                      {
                        "title": "The 38 Best London Restaurants According to Eater's Local Dining ...",
                        "url": "https://www.eater.com/maps/best-london-restaurants-eater-38",
                        "description": "The best meals in London, from Michelin fine dining to beloved street food, according to a longtime restaurant editor."
                      },
                      {
                        "title": "LONDON by The MICHELIN Guide",
                        "url": "https://guide.michelin.com/us/en/travel-guide/london",
                        "description": "Discover the beloved restaurants and exciting new openings that everyone is talking about: London's bustling pubs, MICHELIN-Starred restaurants that are among ..."
                      }
                    ],
                    "dropped": 0
                  },
                  "credits_used": 1,
                  "credits_remaining": 9999,
                  "request_id": "req-8Kq2ZmR4vT9xLb3P",
                  "cached": false,
                  "pagination": {
                    "next_cursor": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0",
                    "has_more": true,
                    "page_size": 10
                  },
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/search/music": {
      "get": {
        "summary": "Search Instagram music",
        "description": "Searches Instagram's audio (music) library by keyword. Returns matching tracks, each with artist and title, audio and cover-artwork URLs, duration, and usage metadata. Page through with `cursor`. When the main source is unavailable, page 1 can come from a backup source: about 10 tracks, `song_monetization_info` null, and no `next_cursor`. That page is not cached, so calling again later returns the full page with its cursor.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_search_music",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "advanced",
        "x-credit-cost": 5,
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Search keyword or phrase to find Instagram audio tracks.",
            "schema": {
              "type": "string"
            },
            "example": "beyonce"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Pagination cursor. Use the `next_cursor` from the previous response to fetch the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max_pages",
            "in": "query",
            "required": false,
            "description": "1 to 50 (default 1, or 50 when `max_items` or `max_credits` is sent). Walk up to this many pages in one call and return the rows from all of them. Each page walked is billed exactly as one call to this endpoint (a cached page is free) and counts against your rate limit; its charge and any refund are recorded under the page's own request id, listed in `data.walk.request_ids`. The walk stops early at the last page, or when the request's time budget runs low; `data.walk.stopped` says why (`end`, `max_pages`, `max_items`, `max_credits`, `time_budget`, `page_error`) and `pagination.next_cursor` continues from where it stopped.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "max_items",
            "in": "query",
            "required": false,
            "description": "1 to 5000. Get more in one call: keep walking pages until the response holds at least this many rows, then stop with `data.walk.stopped: \"max_items\"`. The last page is returned whole (it was billed), so `data.items` can hold up to one page more than this, and `pagination.next_cursor` resumes right after it without skipping a row. Walks up to 50 pages unless `max_pages` says fewer; each page is billed as one call (a cached page is free). Add `max_credits` to cap the spend. A long walk can stop on the time budget first (`\"time_budget\"`): send the returned cursor with the same params to continue.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5000
            }
          },
          {
            "name": "max_credits",
            "in": "query",
            "required": false,
            "description": "1 to 100000. The most this call may spend, across every page it walks. A page starts only while the credits already spent plus that page's price (or, when higher, the most any page of this walk has cost) still fit, so the call never goes past it; the walk then stops with `data.walk.stopped: \"max_credits\"` and the cursor to resume. Sent alone, it walks as far as the budget goes (up to 50 pages). A value below the price of one page is a free 400 whose `error.details.page_credits` names that price. Credits a row join (`include=`) adds are known only once a page has run, so page 1 is checked against its own price.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100000
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/search/music"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of search result objects",
                          "items": {
                            "type": "object",
                            "description": "Search result item"
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/search/music",
                  "data": {
                    "items": [
                      {
                        "metadata": {
                          "allow_media_creation_with_music": true,
                          "is_bookmarked": false,
                          "is_trending_in_clips": false
                        },
                        "track": {
                          "allows_saving": true,
                          "audio_asset_id": "1494662545202817",
                          "audio_cluster_id": "2252835162207684",
                          "cover_artwork_thumbnail_uri": "https://scontent-hel3-1.cdninstagram.com/v/t39.30808-6/737075669_71061199190385_7495716542981038660_n.jpg",
                          "cover_artwork_uri": "https://scontent-hel3-1.cdninstagram.com/v/t39.30808-6/737075669_71061199190385_7495716542981038660_n.jpg",
                          "dark_message": null,
                          "display_artist": "Beyoncé",
                          "duration_in_ms": 243896,
                          "fast_start_progressive_download_url": "https://scontent-hel3-1.cdninstagram.com/o1/v/t2/f2/m69/AQOjRWAyAjBN8YHI-zS7HbSIDhRkA15-OJ-0kS3FseG5r2P1hlwQ6tVv4Kzgs_6ozE_-7_3xbl1pqUXoynm5nYWV.mp4",
                          "has_lyrics": false,
                          "highlight_start_times_in_ms": [
                            10500,
                            36500,
                            61500
                          ],
                          "id": "1494662545202817",
                          "is_eligible_for_audio_effects": false,
                          "is_eligible_for_vinyl_sticker": true,
                          "is_explicit": false,
                          "licensed_music_subtype": "DEFAULT",
                          "progressive_download_url": "https://scontent-hel3-1.cdninstagram.com/o1/v/t2/f2/m69/AQOjRWAyAjBN8YHI-zS7HbSIDhRkA15-OJ-0kS3FseG5r2P1hlwQ6tVv4Kzgs_6ozE_-7_3xbl1pqUXoynm5nYWV.mp4",
                          "reactive_audio_download_url": null,
                          "sanitized_title": null,
                          "song_monetization_info": "REVSHARE",
                          "subtitle": "",
                          "title": "MORNING DEW (DONK)",
                          "web_30s_preview_download_url": "https://scontent-hel3-1.cdninstagram.com/o1/v/t2/f2/m69/AQPlzIe8B3TBtMu3lNNeoD8Rm9WV4SncV_3zfPRBQgSfBJSlVs7YsP3X0xwwgr-ex84A5YOn6OHyXCWZByQPrx9o.mp4",
                          "duration_seconds": 243.896
                        }
                      },
                      {
                        "metadata": {
                          "allow_media_creation_with_music": true,
                          "is_bookmarked": false,
                          "is_trending_in_clips": false
                        },
                        "track": {
                          "allows_saving": true,
                          "audio_asset_id": "203162623835617",
                          "audio_cluster_id": "178714732818051",
                          "cover_artwork_thumbnail_uri": "https://scontent-hel3-1.cdninstagram.com/v/t39.30808-6/426569212_2248773155514537_1424354714209947880_n.jpg",
                          "cover_artwork_uri": "https://scontent-hel3-1.cdninstagram.com/v/t39.30808-6/426569212_2248773155514537_1424354714209947880_n.jpg",
                          "dark_message": null,
                          "display_artist": "Beyoncé",
                          "duration_in_ms": 200613,
                          "fast_start_progressive_download_url": "https://scontent-hel3-1.cdninstagram.com/o1/v/t2/f2/m69/AQMrTpSLE7CU7Bepu9hbNRV9gxJmg-ZuV_eYmkOlzOxeOht_EEHNeN1Bs_3rEjeelhSOUsSmpocYu9UhVD7BcAE8.mp4",
                          "has_lyrics": true,
                          "highlight_start_times_in_ms": [
                            12000,
                            101000,
                            39000
                          ],
                          "id": "203162623835617",
                          "is_eligible_for_audio_effects": false,
                          "is_eligible_for_vinyl_sticker": true,
                          "is_explicit": false,
                          "licensed_music_subtype": "DEFAULT",
                          "progressive_download_url": "https://scontent-hel3-1.cdninstagram.com/o1/v/t2/f2/m69/AQMrTpSLE7CU7Bepu9hbNRV9gxJmg-ZuV_eYmkOlzOxeOht_EEHNeN1Bs_3rEjeelhSOUsSmpocYu9UhVD7BcAE8.mp4",
                          "reactive_audio_download_url": null,
                          "sanitized_title": null,
                          "song_monetization_info": "REVSHARE",
                          "subtitle": "",
                          "title": "Diva",
                          "web_30s_preview_download_url": "https://scontent-hel3-1.cdninstagram.com/o1/v/t2/f2/m69/AQNxpNH5SP0wRVuDr-Qwtpgt_FAycLYpxa9AKnRz-zxz-fSg-GYfYl31UxsE-WA7kYaH0kUuGGuTlTyeXdk3GMUq.mp4",
                          "duration_seconds": 200.613
                        }
                      }
                    ],
                    "next_cursor": "30",
                    "dropped": 0
                  },
                  "credits_used": 5,
                  "credits_remaining": 9995,
                  "request_id": "req-a1b2c3d4e5f6",
                  "cached": false,
                  "pagination": {
                    "next_cursor": "sc.eyJ2IjoyLCJjIjoiMzAiLCJwIjoiY3Vyc29yIn0",
                    "has_more": true,
                    "page_size": 30
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/stories": {
      "get": {
        "summary": "List an Instagram user's active stories",
        "description": "Returns the active stories currently in a user's story tray. Each story includes its id, media URLs (image or video), thumbnail, duration, capture time, and the author. Pass either `handle` or `user_id`. Passing `user_id` is faster because no username lookup is needed. A public account with no active stories returns an empty list at no charge, not an error; a private account returns 404. Stories carry no public caption and no public like, comment, or view count: Instagram shows story engagement only to the account owner, and it is never fabricated here.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_stories",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "advanced",
        "x-credit-cost": 5,
        "x-socialcrawl-oneOf": [
          [
            "handle",
            "user_id"
          ]
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Instagram username without the @ symbol. (one of: handle, user_id; at least one required)",
            "schema": {
              "type": "string"
            },
            "example": "instagram"
          },
          {
            "name": "user_id",
            "in": "query",
            "required": false,
            "description": "Instagram numeric user ID. Use this for faster responses. (one of: handle, user_id; at least one required)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "safe_url",
            "in": "query",
            "required": false,
            "description": "Optional and usually ignored: most responses carry ordinary media URLs whether or not you send it. Same price either way.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "Only rows published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Rows older than it are left off each page. This list is not in date order, so the walk does not stop at the date: keep following `next_cursor`, and each page costs what a page costs even when every row on it is filtered out. A row with no date is kept. `published_after`, `start_date`, `from_date`, `publish_time` (`yesterday`, `this-week`, `this-month`, `last-3-months`, `last-6-months`) and `max_age_days` are accepted and applied as `since`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "description": "Only rows published on or before this date: YYYY-MM-DD (that whole UTC day is included) or an ISO 8601 timestamp. Newer rows are left off each page and the walk does not stop, so older pages follow. A row with no date is kept. `published_before`, `end_date` and `to_date` are accepted and applied as `until`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/stories"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of canonical post wrappers ({ post, computed })",
                          "items": {
                            "type": "object",
                            "description": "Canonical post wrapper",
                            "properties": {
                              "post": {
                                "type": "object",
                                "description": "Canonical Post object (unified across all platforms)",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "Platform-specific post ID (always a string; numeric upstream IDs are stringified)"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Direct URL to the post on the source platform"
                                  },
                                  "content": {
                                    "type": "object",
                                    "description": "Post content fields (text, media, thumbnail, duration)",
                                    "properties": {
                                      "text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Post caption, description, or text content"
                                      },
                                      "media_urls": {
                                        "type": [
                                          "string",
                                          "array",
                                          "null"
                                        ],
                                        "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels.",
                                        "items": {
                                          "type": "string",
                                          "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels."
                                        }
                                      },
                                      "thumbnail_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to thumbnail image"
                                      },
                                      "duration_seconds": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Video/clip duration in seconds (null for non-video posts)"
                                      }
                                    }
                                  },
                                  "author": {
                                    "type": "object",
                                    "description": "Subset of Author fields for the post creator",
                                    "properties": {
                                      "username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author username"
                                      },
                                      "display_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Author display name"
                                      },
                                      "avatar_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "URL to author profile picture"
                                      },
                                      "verified": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Whether the author account is verified"
                                      }
                                    }
                                  },
                                  "engagement": {
                                    "type": "object",
                                    "description": "Engagement counts",
                                    "properties": {
                                      "views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "View count (if available). For Instagram video/reels this is the play count: the headline 'Views' the IG app shows. Instagram removed per-post play counts from its public web pages in August 2026, so `GET /v1/instagram/post` now fills the count automatically from a second source within the same call: videos and reels keep a numeric `views` with no extra endpoint or workaround. Note: since mid-July 2026 Instagram's play count is Instagram-only. It no longer includes Facebook crosspost views (Meta-side change; the app UI changed identically). For combined reach, also fetch the Facebook crosspost via `/v1/facebook/post`."
                                      },
                                      "likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Like / reaction count"
                                      },
                                      "comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Comment count. Note: on `GET /v1/instagram/post` this is Instagram's `edge_media_to_parent_comment.count` (top-level comments); the IG list endpoints report the mobile `comment_count` total (includes replies). Both land on this same field."
                                      },
                                      "shares": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Share / repost / retweet count. On Instagram this is `reshare_count` (the paper-plane Share / Send count) and it exists only on Instagram's mobile surface, so it is returned by `/v1/instagram/post/stats`, `/v1/instagram/profile/reels/full`, and `/v1/instagram/profile/posts/full`. The web-sourced Instagram list and search endpoints return `null` (never fabricated)."
                                      },
                                      "saves": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Save / bookmark count. `null` on Instagram: the save count is platform-private and Instagram exposes no numeric save metric on any surface (never fabricated)."
                                      }
                                    }
                                  },
                                  "flags": {
                                    "type": "object",
                                    "description": "Boolean flags on the post",
                                    "properties": {
                                      "nsfw": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "NSFW flag (null when platform does not surface)"
                                      },
                                      "spoiler": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Spoiler flag (null when platform does not surface)"
                                      },
                                      "pinned": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Pinned-to-profile flag (null when platform does not surface)"
                                      },
                                      "deleted": {
                                        "type": "boolean",
                                        "description": "Whether the post is tombstoned (always present)"
                                      },
                                      "likes_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the creator has hidden the like count. `engagement.likes` is `null` in that case (never the platform's decoy preview number). Absent on normal posts."
                                      },
                                      "comments_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Present and `true` when the upstream reports the comment count as hidden. `engagement.comments` is `null` in that case. Absent on normal posts."
                                      },
                                      "shares_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.shares_hidden"
                                      },
                                      "views_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.views_hidden"
                                      },
                                      "saves_hidden": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.flags.saves_hidden"
                                      }
                                    }
                                  },
                                  "published_at": {
                                    "type": [
                                      "string",
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Post creation timestamp as an ISO 8601 UTC string. When the upstream sent a Unix epoch it is converted here and the raw epoch is preserved under `post.ext.published_at_epoch` for one deprecation cycle."
                                  },
                                  "ext": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Platform-specific passthrough fields for cross-endpoint chains (present only on platforms that surface them)",
                                    "properties": {
                                      "music_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok music/clip id (exact string): pass to `/v1/tiktok/song/videos?clipId=` to find videos using the same sound"
                                      },
                                      "matched_song_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The catalogue song TikTok matched the video's sound to, as an exact digit string. An official clip and the original sounds creators upload with it have different `music_id` values and the same `matched_song_id`, so group rows on it to count every use of one song. It is not a clipId: `/v1/tiktok/song` and `/v1/tiktok/song/videos` do not accept it. `/v1/tiktok/search/music` carries it on each sound, so a search on the song's title and artist, kept to the sounds with the same `matched_song_id`, gives the song's official sounds and their `video_count`. Absent when TikTok matched the sound to no song, and on rows served from a source that does not report the match."
                                      },
                                      "matched_song_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the song in `matched_song_id`. Absent when there is no matched song."
                                      },
                                      "matched_song_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist of the song in `matched_song_id`, as TikTok's catalogue names it. Absent when there is no matched song."
                                      },
                                      "music_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The title of the video's own sound (`music_id`). An uploaded sound is titled like `original sound - <handle>`; the song it plays, when TikTok recognised one, is `matched_song_title`."
                                      },
                                      "music_artist": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only. The artist TikTok shows for the video's own sound. On an original sound this is the uploader's display name, not the song's artist; use `matched_song_artist` for that."
                                      },
                                      "music_is_original": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "TikTok only. `true` when the video's sound is an original sound a creator uploaded, `false` when it is a catalogue track. Absent when the source does not say."
                                      },
                                      "author_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's platform-native numeric user id. On TikTok search and list items, pass to `/v1/tiktok/profile?user_id=` for the creator's current follower count (survives username changes). On Instagram `/v1/instagram/search/reels`, `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` items it is present on every row, accepted by `/v1/instagram/profile/country?user_id=` and `/v1/instagram/basic-profile?userId=`. On Facebook it appears when the upstream exposed a numeric actor id and no real handle."
                                      },
                                      "author_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The posting account's profile URL, so a matching post can be followed to its account. Present on `/v1/facebook/search/posts` rows: the vanity or `/people/<name>/<id>/` URL when Facebook sends one, otherwise `https://www.facebook.com/profile.php?id=<numeric id>` built from the account id. Pass it as `url` to `/v1/facebook/profile` (or to `/v1/prism/profiles` with `platform: facebook`). Null when the row names neither an account URL nor a numeric account id. Absent on other endpoints."
                                      },
                                      "author_followers": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "The creator's follower count as embedded in the search payload itself, when the search source happens to carry one. On Instagram `search/reels` it is null on a plain call, because Instagram stopped sending follower counts in its search payload in August 2026; send `include=creator` (or `country`) and it is filled from the creator's profile, 2 credits per creator looked up. It stays null when that lookup does not resolve."
                                      },
                                      "author_following": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_following"
                                      },
                                      "author_posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.author_posts_count"
                                      },
                                      "author_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The free text the author wrote in their profile's location field, exactly as written (for example `Johannesburg, South Africa`). It is not a country code and is not checked. Present on X tweet and reply rows; null or absent when the author left it blank."
                                      },
                                      "in_reply_to_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_id"
                                      },
                                      "in_reply_to_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.in_reply_to_username"
                                      },
                                      "conversation_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.conversation_id"
                                      },
                                      "author_country": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The creator's country. On Instagram it is the country the creator declares on the About this account panel, as a country name (for example `Spain`), and it is not where the post was filmed. It is present on `/v1/instagram/search/reels` when the request sends `include=creator`, `include=country` or `country`, and on `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` when it sends `include=country`, filled by looking the creator up. On YouTube rows joined with `include=channel` it is the channel's own country as an ISO 3166-1 alpha-2 code (for example `ZA`). Null when the platform publishes no country for the creator or the lookup did not resolve, and nothing is guessed; absent on a plain call."
                                      },
                                      "author_public_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact email on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public email or the lookup did not resolve; absent on a plain call."
                                      },
                                      "author_public_phone": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The public contact phone number on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public phone or the lookup did not resolve; absent on a plain call."
                                      },
                                      "download_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "How many times the video has been saved to a device. TikTok only, and distinct from `engagement.saves`: a save keeps the video in a private collection on the platform, a download takes a copy off it, and TikTok counts the two separately. Present on TikTok post, search and post-list responses; absent everywhere else."
                                      },
                                      "region": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok only: the country TikTok registers the video to, as an ISO 3166-1 alpha-2 code (normally the creator's account country when they posted). It is not the viewer's country, not the `region` you requested, and not a language. On `/v1/tiktok/trending`, `/v1/tiktok/search`, `/v1/tiktok/search/top`, `/v1/tiktok/profile/videos`, `/v1/tiktok/search/hashtag` and `/v1/tiktok/song/videos` it is how you tell which rows are from a given country: filter on it when you need only that country. A row whose source omits the country stays null. The `region` request parameter still only sets the proxy."
                                      },
                                      "subreddit": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Reddit subreddit name (search/list items): pass to `/v1/reddit/subreddit/details?subreddit=`"
                                      },
                                      "title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.title"
                                      },
                                      "selftext": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.selftext"
                                      },
                                      "upvote_ratio": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Reddit only: the share of a post's votes that are upvotes, as a fraction from 0 to 1 and usually close to 1 (six live rows measured 1, 1, 1, 0.86, 0.75, 1). Fractional despite the integer type this schema emits for every numeric leaf, the same caveat as `author.ext.average_rating`. Populated on `/v1/reddit/search` rows whose source carries it, and null everywhere else on Reddit including `/v1/reddit/post` and `/v1/reddit/subreddit`."
                                      },
                                      "flair": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.flair"
                                      },
                                      "content_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "The language the platform itself tags the post with, when it sends one: Reddit's own language tag on Reddit lanes, and TikTok's caption-language tag (for example `de`) on `/v1/tiktok/trending?feed=local`. Null when the platform could not tell (Reddit `und`, TikTok `un`, common on short or emoji-only captions); absent where the source sends no tag. Never inferred from the text by us: that is `post.computed.language`."
                                      },
                                      "type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.type"
                                      },
                                      "content_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.content_type"
                                      },
                                      "ticker_symbols": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.ticker_symbols",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.ticker_symbols"
                                        }
                                      },
                                      "video_view_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram's legacy 3-second-view count. Historical: Instagram stopped serving it in August 2026 (removed from its web post surface along with the web play count), so fresh `/v1/instagram/post` lookups no longer carry it and no source can restore it. Use `engagement.views` (the play count) instead."
                                      },
                                      "ig_play_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram-only play count (`ig_play_count`). Since mid-July 2026 Instagram's headline play count (`engagement.views`) no longer includes Facebook crosspost views and equals this value; it is surfaced explicitly so you can tell the Instagram-only figure apart and detect any future re-divergence. For combined Instagram + Facebook reach, also fetch the Facebook crosspost via `/v1/facebook/post`. Present on `/v1/instagram/post/stats` and, since the August 2026 views fix, on `/v1/instagram/post` for video posts."
                                      },
                                      "repost_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.repost_count"
                                      },
                                      "media_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.media_type"
                                      },
                                      "text_truncated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.text_truncated"
                                      },
                                      "ip_location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.ip_location"
                                      },
                                      "carousel_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.carousel_count"
                                      },
                                      "remix_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.remix_count"
                                      },
                                      "audio_cluster_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram's audio cluster for a reel, as an exact digit string: the id Instagram uses to group different uploads of the same sound. Present on `/v1/instagram/audio/reels` rows and on `/v1/instagram/profile/reels` with `include=stats`; absent on a row when it is not available and on every other surface."
                                      },
                                      "facebook_likes": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.likes` on this row. A post shared to Facebook arrives from some sources with its Facebook likes already folded into the Instagram count, so the share is subtracted and published here, which keeps `engagement.likes` the Instagram-only figure instagram.com shows on the post. Add the two together for the combined number. Absent when the read carried no Facebook share, and absent on a post whose owner hides the like count, because nothing can be subtracted from a null. A response that excluded a share also carries a note in `data._warnings`."
                                      },
                                      "facebook_comments": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.comments` on this row, the comment counterpart of `post.ext.facebook_likes`. Each leaf appears only for the count it actually changed, so a post whose likes are hidden but whose comments were reconciled carries this one alone."
                                      },
                                      "instagram_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Instagram-only play count of a video, the same figure on every Instagram endpoint. `engagement.views` keeps each endpoint's established meaning: on `/v1/instagram/profile/reels`, `/v1/instagram/audio/reels`, `/v1/instagram/search/reels` and `/v1/instagram/search/hashtag` it can include the post's Facebook cross-post views, while on `/v1/instagram/post` and `/v1/instagram/post/stats` it is Instagram-only. Read this leaf when you compare one post across endpoints. Absent on photos and when the source did not report the Instagram-only figure."
                                      },
                                      "facebook_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram only: the Facebook cross-post part of a video's play count, the counterpart of `post.ext.instagram_views`. Present only when the source reported the Facebook part, or a combined total above the Instagram figure. Absent does not mean zero: some sources report the Instagram figure alone even for a cross-posted video."
                                      },
                                      "published_at_epoch": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Raw Unix epoch for `published_at` (seconds, or milliseconds when the upstream sent millis). Present only when the upstream sent a numeric epoch that was normalised to the ISO 8601 `published_at` string. Kept for one deprecation cycle for integrations pinned to the numeric form."
                                      },
                                      "usertags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.usertags",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.usertags"
                                        }
                                      },
                                      "coauthors": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post).",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post)."
                                        }
                                      },
                                      "music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.music"
                                      },
                                      "sponsor_tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                        }
                                      },
                                      "sponsored_disclosed": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "The platform's own disclosure that the post is paid or promotional: on Instagram the paid-partnership label (`is_paid_partnership`) or a tagged brand partner, on TikTok the label TikTok shows viewers (\"Paid partnership\", \"Commission paid\", \"Promotional content\"). `false` when the post carries the flag unset, null when it carries none. Present on `/v1/instagram/post/stats`, `/v1/instagram/search/reels` and `/v1/tiktok/search`; absent on every other endpoint."
                                      },
                                      "ai_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram only: Instagram's AI-content label on the post, as the method Instagram reports: `classifier_score_high` (Instagram detected it, shown as \"Likely made with AI\"), `ai_created` or `ai_edited` (declared or detected as made or edited with AI). Null when the post carries no AI label. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                                      },
                                      "story_mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "story_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint."
                                        }
                                      },
                                      "story_reshared_posts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                                        "items": {
                                          "type": "string",
                                          "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint."
                                        }
                                      },
                                      "location": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.location"
                                      },
                                      "media": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.media",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.media",
                                          "properties": {
                                            "type": {
                                              "type": "string",
                                              "description": "Leaf at post.ext.media.type"
                                            },
                                            "url": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.media.url"
                                            },
                                            "width": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.width"
                                            },
                                            "height": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.media.height"
                                            }
                                          }
                                        }
                                      },
                                      "top_comments": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.top_comments",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: post.ext.top_comments",
                                          "properties": {
                                            "id": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.id"
                                            },
                                            "text": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.text"
                                            },
                                            "username": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.username"
                                            },
                                            "likes": {
                                              "type": [
                                                "integer",
                                                "null"
                                              ],
                                              "description": "Numeric at post.ext.top_comments.likes"
                                            },
                                            "published_at": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at post.ext.top_comments.published_at"
                                            }
                                          }
                                        }
                                      },
                                      "hashtags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.hashtags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.hashtags"
                                        }
                                      },
                                      "mentions": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentions",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentions"
                                        }
                                      },
                                      "mentioned_user_ids": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.mentioned_user_ids",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.mentioned_user_ids"
                                        }
                                      },
                                      "quoted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Threads quote posts: the post this one quotes, as `{ id, url, author: { id, username }, text, media_urls, thumbnail_url }`. A quote post usually carries no caption or media of its own, and the text and video you see on the post's page belong to this attachment, by a different author. It is returned here rather than merged into `post.content`, so `content.*` always stays the outer post's own content and one account's media is never attributed to another. Absent on posts that are not quote posts."
                                      },
                                      "retweeted_post": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.retweeted_post"
                                      },
                                      "quote_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.quote_count"
                                      },
                                      "all_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.all_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.all_media_urls"
                                        }
                                      },
                                      "reaction_counts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.reaction_counts",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.reaction_counts"
                                        }
                                      },
                                      "share_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.share_urn"
                                      },
                                      "post_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.post_type"
                                      },
                                      "activity_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.activity_id"
                                      },
                                      "published_at_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_at_precision"
                                      },
                                      "author_urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_urn"
                                      },
                                      "author_headline": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_headline"
                                      },
                                      "author_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.author_type"
                                      },
                                      "is_repost_quote": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.is_repost_quote"
                                      },
                                      "article": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.article"
                                      },
                                      "reaction_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.reaction_type"
                                      },
                                      "download_media_urls": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.download_media_urls",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.download_media_urls"
                                        }
                                      },
                                      "tags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.tags",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.tags"
                                        }
                                      },
                                      "categoryId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryId"
                                      },
                                      "categoryTitle": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.categoryTitle"
                                      },
                                      "topicCategories": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.topicCategories",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.topicCategories"
                                        }
                                      },
                                      "duration": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.duration"
                                      },
                                      "license": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.license"
                                      },
                                      "madeForKids": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.madeForKids"
                                      },
                                      "defaultAudioLanguage": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.defaultAudioLanguage"
                                      },
                                      "hasPaidProductPlacement": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.hasPaidProductPlacement"
                                      },
                                      "caption": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.caption"
                                      },
                                      "position": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.position"
                                      },
                                      "playlistId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlistId"
                                      },
                                      "videoOwnerChannelId": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoOwnerChannelId"
                                      },
                                      "videoPublishedAt": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.videoPublishedAt"
                                      },
                                      "description": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.description"
                                      },
                                      "default_language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.default_language"
                                      },
                                      "localizations": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.localizations"
                                      },
                                      "playlist_item_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_item_id"
                                      },
                                      "playlist_owner_channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_channel_id"
                                      },
                                      "playlist_owner_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.playlist_owner_title"
                                      },
                                      "channel_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.channel_id"
                                      },
                                      "published_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.published_label"
                                      },
                                      "published_precision": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.published_precision"
                                      },
                                      "title_maybe_translated": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at post.ext.title_maybe_translated"
                                      },
                                      "video_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.video_count"
                                      },
                                      "posts_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "`/v1/instagram/hashtag` only: the exact number of public posts Instagram counts under the hashtag. Live: it moves between calls minutes apart."
                                      },
                                      "commerce": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.commerce"
                                      },
                                      "on_screen_texts": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.on_screen_texts",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.on_screen_texts"
                                        }
                                      },
                                      "topic_tag": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag"
                                      },
                                      "reshare_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at post.ext.reshare_count"
                                      },
                                      "dsp_ids": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.dsp_ids"
                                      },
                                      "topic_tag_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.topic_tag_id"
                                      },
                                      "amazon_shop_lists": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_lists",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_lists"
                                        }
                                      },
                                      "amazon_shop_trending_picks": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_trending_picks",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_trending_picks"
                                        }
                                      },
                                      "amazon_shop_curations": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_curations",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at post.ext.amazon_shop_curations"
                                        }
                                      },
                                      "amazon_shop_socials": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at post.ext.amazon_shop_socials",
                                        "items": {
                                          "type": "string",
                                          "description": "String at post.ext.amazon_shop_socials"
                                        }
                                      },
                                      "ad": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Ad Library envelope (Facebook `adlibrary/ad` and `adlibrary/company/ads` items): page_id, currency, spend, reach_estimate, publisher_platforms, categories, targeted_or_reached_countries, cta_text, cta_type, link_url, is_active, end_date_iso, display_format, title, video_hd_url, video_sd_url. Absent on every non-ad surface."
                                      },
                                      "apple_music": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.apple_music"
                                      },
                                      "feedback_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.feedback_id"
                                      },
                                      "question_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN (`/v1/naver/kin/search`) only: the question's id (Naver's `docId`), read from the row's link. Kin returns one row per answer, so several rows can share it; send `group=question` for one row per question."
                                      },
                                      "answer_no": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: which answer of the question this row is (Naver's `answerNo`), read from the row's link."
                                      },
                                      "answer_nos": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first.",
                                        "items": {
                                          "type": "integer",
                                          "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first."
                                        }
                                      },
                                      "published_at_est": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Naver KnowledgeiN only: the question's date ESTIMATED from its id (`YYYY-MM-DD`, Korea time), never a published date, so `published_at` stays null. Absent for questions older than the calibration table."
                                      },
                                      "date_basis": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "How `post.ext.published_at_est` was derived. `kin_docid_estimate`: interpolated from the question id against question pages whose posted date was read."
                                      },
                                      "event": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at post.ext.event"
                                      },
                                      "trend": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Trend-board envelope: what TikTok's own trend board says about the row. On `/v1/tiktok/hashtags/popular`: `rank`, `country_code`, `period_days`, `posts` and `views` for the window (not lifetime totals), `industry` / `industry_id` / `industry_label` for the first board the hashtag was read from (null for the overall board), `boards` listing EVERY board it ranks on as `{ industry, industry_id, industry_label, rank }` in board order (so a hashtag in the top 3 overall and on an industry board shows both), `popularity_curve` as `{ date, value }` with value 0 to 100 relative to the window's peak, and `top_creators`. On `/v1/tiktok/videos/popular`: `rank`, `country_code`, `period_days`, `order_by`, `period_views`, `organic_views`, `engagement_rate`, `six_second_view_through_rate`, `content_tags`. Absent on every non-board surface."
                                      },
                                      "updated_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.updated_at"
                                      },
                                      "alt_text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.alt_text"
                                      },
                                      "board_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at post.ext.board_name"
                                      }
                                    }
                                  }
                                }
                              },
                              "computed": {
                                "type": "object",
                                "description": "Server-computed analytics fields (consistent across platforms)",
                                "properties": {
                                  "engagement_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Computed engagement rate (0..1). Null when the upstream lacks enough signal."
                                  },
                                  "language": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "ISO 639-1 language code detected from the post text. Null when undetectable."
                                  },
                                  "content_category": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Keyword-classified content category (e.g. tech, food, gaming). Null when undetectable."
                                  },
                                  "estimated_reach": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Estimated reach based on views or follower count. Null when uncomputable."
                                  },
                                  "save_rate": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at computed.save_rate"
                                  },
                                  "relevance": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Nested object: computed.relevance",
                                    "properties": {
                                      "p": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.p"
                                      },
                                      "sense": {
                                        "type": "string",
                                        "description": "Leaf at computed.relevance.sense"
                                      },
                                      "depth": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.depth"
                                      },
                                      "spam": {
                                        "type": "integer",
                                        "description": "Numeric at computed.relevance.spam"
                                      }
                                    }
                                  },
                                  "labels": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels"
                                  },
                                  "labels_evidence": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Leaf at computed.labels_evidence"
                                  }
                                }
                              }
                            }
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/stories",
                  "data": {
                    "items": [
                      {
                        "post": {
                          "id": "3998435105545705197",
                          "url": "https://www.instagram.com/reel/Dd9S4s7gNbt/",
                          "content": {
                            "text": null,
                            "media_urls": "https://scontent-iad3-1.cdninstagram.com/user_2352da/v/t2/f2/m78/AQOtHdIvDsqOW9v7UGl5HGWG7FSY-gi2cGglrt5m_5ZCuCVaUpu_scjuGOhhtWwDyU4nUncGq28MbxDksOoAGZQGGu5o9r6gzcrbn78.mp4?_nc_cat=104&_nc_sid=5e9851&_nc_ht=scontent-iad3-1.cdninstagram.com&_nc_ohc=QlEfUkcWJTEQ7kNvwH2T6tD&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uU1RPUlkuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTg3OTg5NjUzNzcwMDEzMjEsImFzc2V0X2FnZV9kYXlzIjowLCJ2aV91c2VjYXNlX2lkIjoxMDgyNiwiZHVyYXRpb25fcyI6MTYsIndhdGNoX3RpbWVfcyI6MjczNTY1MDYsInVybGdlbl9zb3VyY2UiOiJ3d3cifQ%3D%3D&ccb=17-1&vs=ba7de382da825823&_nc_vs=HBksFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyLzQ0QUUzNERDMjhFNzQzMzk4NzkwRjREMkNEMDQ5QkZEX3ZpZGVvX2Rhc2hpbml0Lm1wNBUAAsgBEgAVAhhRaWdfeHB2X3BsYWNlbWVudF9wZXJtYW5lbnRfdjIvNTIyMEQyNERFRUM1NDRCN0E0NjdGMDIyQUZCNjY2RDJfYXVkaW9fZGFzaGluaXQubXA0FQICyAESACgAGAAbAogHdXNlX29pbAExEnByb2dyZXNzaXZlX3JlY2lwZQExFQAAJtKdh9fm4-RCFQIoAkMzLBdAMLul41P3zxgSZGFzaF9iYXNlbGluZV8xX3YxEQB16AdllKkBAA&_nc_gid=8bKhF703SFckB3MqUWlE9Q&_nc_ss=733ba&_nc_zt=28&oh=00_AQPFuFW9F3vRoYBYD6jkiO2d3qXJaHx1Xnw7sfct3hibVw&oe=6AC1A361",
                            "thumbnail_url": "https://scontent-iad3-1.cdninstagram.com/user_4c9448/t51.71878-15/832678838_4380746102187889_2225297799503381246_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=1&ig_cache_key=Mzk5ODQzNTEwNTU0NTcwNTE5Nw%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IlNUT1JZLnhwaWRzLjY0MC5zZHIudmlkZW9fZmlyc3RfZnJhbWVfdGh1bWJuYWlsLkMzIn0%3D&_nc_ohc=IpVpvaMLcdEQ7kNvwE-pZ2g&_nc_oc=AdphR8fIN8y3oSr1H6I9-1L5k761xH9hQ3CF1foZ4aRUgztJeyj5-dNz2d24wQ2_3GM&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-iad3-1.cdninstagram.com&_nc_gid=8bKhF703SFckB3MqUWlE9Q&_nc_ss=733ba&oh=00_AQPduOjKkdMnDRbPB1ciY_ipXaLL-q--rUXr3lCHm26VaA&oe=6AC58F24",
                            "duration_seconds": 16.766
                          },
                          "author": {
                            "username": "instagram",
                            "display_name": "user_bad57e",
                            "avatar_url": "https://example.com/avatars/user_01351d.png",
                            "verified": true
                          },
                          "engagement": {
                            "views": null,
                            "likes": null,
                            "comments": null,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": null,
                            "deleted": false
                          },
                          "published_at": "2026-10-01T16:03:44.000Z",
                          "ext": {
                            "media_type": "video",
                            "published_at_epoch": 1790870624,
                            "coauthors": []
                          }
                        },
                        "computed": {
                          "engagement_rate": null,
                          "language": null,
                          "content_category": null,
                          "estimated_reach": null
                        }
                      }
                    ],
                    "total": null,
                    "dropped": 0
                  },
                  "credits_used": 5,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": null,
                    "has_more": false,
                    "page_size": 1
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T13:08:57.437Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/story/download": {
      "get": {
        "summary": "Download a single Instagram story",
        "description": "Returns the downloadable media for one specific story: the full-resolution image or video URLs and the story's metadata. Pass the `user_id` of the story's author and the `story_id` of the individual story (get story ids from the Instagram stories endpoint).",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_story_download",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "advanced",
        "x-credit-cost": 5,
        "x-socialcrawl-oneOf": [
          [
            "user_id"
          ],
          [
            "story_id"
          ]
        ],
        "parameters": [
          {
            "name": "user_id",
            "in": "query",
            "required": false,
            "description": "Instagram numeric user ID of the story's author. (one of: user_id; at least one required)",
            "schema": {
              "type": "string"
            },
            "example": "25025320"
          },
          {
            "name": "story_id",
            "in": "query",
            "required": false,
            "description": "ID of the individual story to download. (one of: story_id; at least one required)",
            "schema": {
              "type": "string"
            },
            "example": "3926693776893966474"
          },
          {
            "name": "safe_url",
            "in": "query",
            "required": false,
            "description": "When true, returns URL-safe media links suitable for embedding.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/story/download"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "metrics": {
                          "type": "object",
                          "description": "Key performance metrics",
                          "properties": {
                            "total_views": {
                              "type": "integer",
                              "description": "Total view count"
                            },
                            "total_likes": {
                              "type": "integer",
                              "description": "Total like count"
                            },
                            "total_comments": {
                              "type": "integer",
                              "description": "Total comment count"
                            },
                            "engagement_rate": {
                              "type": "number",
                              "description": "Computed engagement rate (0-1)"
                            }
                          }
                        },
                        "period": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Time period for the analytics data"
                        },
                        "breakdown": {
                          "type": [
                            "array",
                            "null"
                          ],
                          "description": "Per-item or per-period breakdown",
                          "items": {
                            "type": "object",
                            "description": "Breakdown entry"
                          }
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      }
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/engagement",
                  "data": {
                    "engagement_rate_percentages": 38.33,
                    "recent_posts": 12,
                    "followers": 87608035,
                    "comments": 528912,
                    "likes": 33049046,
                    "recent_posts_explanation": "Statistics based on the last 12 posts",
                    "id_user": "2278169415",
                    "username": "mrbeast",
                    "is_private": false,
                    "posts_details": [
                      {
                        "likes": 5636982,
                        "comments": 69484,
                        "taken_at": 1781457954,
                        "datetime": "2026-06-14 20:25:54",
                        "hours_since_post": 461,
                        "time_ago": "19 days ago",
                        "likes_per_hour": 12228,
                        "comments_per_hour": 151
                      },
                      {
                        "likes": 20000768,
                        "comments": 223510,
                        "taken_at": 1732824650,
                        "datetime": "2024-11-28 23:10:50",
                        "hours_since_post": 13971,
                        "time_ago": "2 years ago",
                        "likes_per_hour": 1432,
                        "comments_per_hour": 16
                      },
                      {
                        "likes": 929226,
                        "comments": 30633,
                        "taken_at": 1782232475,
                        "datetime": "2026-06-23 19:34:35",
                        "hours_since_post": 246,
                        "time_ago": "10 days ago",
                        "likes_per_hour": 3777,
                        "comments_per_hour": 125
                      },
                      {
                        "likes": 487761,
                        "comments": 22482,
                        "taken_at": 1781799425,
                        "datetime": "2026-06-18 19:17:05",
                        "hours_since_post": 366,
                        "time_ago": "15 days ago",
                        "likes_per_hour": 1333,
                        "comments_per_hour": 61
                      },
                      {
                        "likes": 712265,
                        "comments": 15716,
                        "taken_at": 1781366405,
                        "datetime": "2026-06-13 19:00:05",
                        "hours_since_post": 487,
                        "time_ago": "20 days ago",
                        "likes_per_hour": 1463,
                        "comments_per_hour": 32
                      },
                      {
                        "likes": 1475116,
                        "comments": 35386,
                        "taken_at": 1781277094,
                        "datetime": "2026-06-12 18:11:34",
                        "hours_since_post": 512,
                        "time_ago": "21 days ago",
                        "likes_per_hour": 2881,
                        "comments_per_hour": 69
                      },
                      {
                        "likes": 1108220,
                        "comments": 26632,
                        "taken_at": 1780160249,
                        "datetime": "2026-05-30 19:57:29",
                        "hours_since_post": 822,
                        "time_ago": "1 months ago",
                        "likes_per_hour": 1348,
                        "comments_per_hour": 32
                      },
                      {
                        "likes": 542948,
                        "comments": 28476,
                        "taken_at": 1779375582,
                        "datetime": "2026-05-21 17:59:42",
                        "hours_since_post": 1040,
                        "time_ago": "1 months ago",
                        "likes_per_hour": 522,
                        "comments_per_hour": 27
                      },
                      {
                        "likes": 698514,
                        "comments": 24401,
                        "taken_at": 1779120014,
                        "datetime": "2026-05-18 19:00:14",
                        "hours_since_post": 1111,
                        "time_ago": "2 months ago",
                        "likes_per_hour": 629,
                        "comments_per_hour": 22
                      },
                      {
                        "likes": 468000,
                        "comments": 13548,
                        "taken_at": 1778947209,
                        "datetime": "2026-05-16 19:00:09",
                        "hours_since_post": 1159,
                        "time_ago": "2 months ago",
                        "likes_per_hour": 404,
                        "comments_per_hour": 12
                      },
                      {
                        "likes": 526594,
                        "comments": 24411,
                        "taken_at": 1777737719,
                        "datetime": "2026-05-02 19:01:59",
                        "hours_since_post": 1495,
                        "time_ago": "2 months ago",
                        "likes_per_hour": 352,
                        "comments_per_hour": 16
                      },
                      {
                        "likes": 462652,
                        "comments": 14233,
                        "taken_at": 1777580305,
                        "datetime": "2026-04-30 23:18:25",
                        "hours_since_post": 1538,
                        "time_ago": "2 months ago",
                        "likes_per_hour": 301,
                        "comments_per_hour": 9
                      }
                    ]
                  },
                  "credits_used": 5,
                  "credits_remaining": 9999,
                  "request_id": "req-8Kq2ZmR4vT9xLb3P",
                  "cached": false,
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/music/trending": {
      "get": {
        "summary": "List trending Instagram music",
        "description": "Returns a chart of licensed audio tracks trending on Instagram. Each track includes its title, artist, audio and cover-artwork URLs, and usage metadata: useful for spotting sounds to ride for reach. Takes no parameters, and there is no region or country option: Instagram builds this chart for the account viewing it, so the chart reflects that account's market and cannot be selected. Every response carries `data.fetched_at`, the time the chart was read from Instagram, and `data.stale`: `false` when it was read on this call, `true` when Instagram showed only its royalty-free sound library on this call and the most recent chart read in the last 6 hours is returned instead (the chart moves slowly; check `fetched_at` if you need it fresher). When no chart has been read in the last 6 hours either, the call returns 503 and your credits are refunded; retry after a minute. For region-scoped Instagram data, use /v1/instagram/search/location and /v1/instagram/location/posts. A fresh read can take 20 to 40 seconds, so allow at least 50 seconds before timing out.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_music_trending",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "advanced",
        "x-credit-cost": 5,
        "parameters": [
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/music/trending"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of search result objects",
                          "items": {
                            "type": "object",
                            "description": "Search result item"
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "google",
                  "endpoint": "/v1/google/search",
                  "data": {
                    "items": [
                      {
                        "title": "My Top 50 London Restaurants (26 Jan-9 Feb 2025)",
                        "url": "https://anguscolwell.substack.com/p/my-top-50-london-restaurants-26-jan",
                        "description": "Feb 9, 2025 · 1) Bouchon Racine, Farringdon. I'm completely obsessed with it, I love it more than anywhere else, it's operating on a level above any other ..."
                      },
                      {
                        "title": "The 38 Best London Restaurants According to Eater's Local Dining ...",
                        "url": "https://www.eater.com/maps/best-london-restaurants-eater-38",
                        "description": "The best meals in London, from Michelin fine dining to beloved street food, according to a longtime restaurant editor."
                      },
                      {
                        "title": "LONDON by The MICHELIN Guide",
                        "url": "https://guide.michelin.com/us/en/travel-guide/london",
                        "description": "Discover the beloved restaurants and exciting new openings that everyone is talking about: London's bustling pubs, MICHELIN-Starred restaurants that are among ..."
                      }
                    ],
                    "dropped": 0
                  },
                  "credits_used": 1,
                  "credits_remaining": 9999,
                  "request_id": "req-8Kq2ZmR4vT9xLb3P",
                  "cached": false,
                  "pagination": {
                    "next_cursor": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0",
                    "has_more": true,
                    "page_size": 10
                  },
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/hashtag": {
      "get": {
        "summary": "Get an Instagram hashtag's size: its exact media count",
        "description": "Returns Instagram's own record for a hashtag: its id (`post.id`), its name (`post.content.text`), its explore page (`post.url`) and the exact number of public posts Instagram counts under it (`post.ext.posts_count`). The count is live and moves between calls minutes apart. Pass the tag with or without the leading `#`; it is matched exactly and case-insensitively, never to a similar tag, and a tag with spaces is refused free. A tag Instagram does not know returns 404 and is not charged. A hashtag has no author, media or engagement, so those leaves are null. Use /v1/instagram/search/hashtag to read the posts themselves.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_hashtag",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 1,
        "x-socialcrawl-oneOf": [
          [
            "hashtag"
          ]
        ],
        "parameters": [
          {
            "name": "hashtag",
            "in": "query",
            "required": false,
            "description": "Hashtag name, with or without the leading # symbol. (one of: hashtag; at least one required)",
            "schema": {
              "type": "string"
            },
            "example": "streetfood"
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/hashtag"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Platform-specific post ID (always a string; numeric upstream IDs are stringified)"
                        },
                        "url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Direct URL to the post on the source platform"
                        },
                        "content": {
                          "type": "object",
                          "description": "Post content fields (text, media, thumbnail, duration)",
                          "properties": {
                            "text": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Post caption, description, or text content"
                            },
                            "media_urls": {
                              "type": [
                                "string",
                                "array",
                                "null"
                              ],
                              "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels.",
                              "items": {
                                "type": "string",
                                "description": "URL(s) of the primary media. Single string for video/photo posts; array of strings for carousels."
                              }
                            },
                            "thumbnail_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "URL to thumbnail image"
                            },
                            "duration_seconds": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Video/clip duration in seconds (null for non-video posts)"
                            }
                          }
                        },
                        "author": {
                          "type": "object",
                          "description": "Subset of Author fields for the post creator",
                          "properties": {
                            "username": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Author username"
                            },
                            "display_name": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Author display name"
                            },
                            "avatar_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "URL to author profile picture"
                            },
                            "verified": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Whether the author account is verified"
                            }
                          }
                        },
                        "engagement": {
                          "type": "object",
                          "description": "Engagement counts",
                          "properties": {
                            "views": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "View count (if available). For Instagram video/reels this is the play count: the headline 'Views' the IG app shows. Instagram removed per-post play counts from its public web pages in August 2026, so `GET /v1/instagram/post` now fills the count automatically from a second source within the same call: videos and reels keep a numeric `views` with no extra endpoint or workaround. Note: since mid-July 2026 Instagram's play count is Instagram-only. It no longer includes Facebook crosspost views (Meta-side change; the app UI changed identically). For combined reach, also fetch the Facebook crosspost via `/v1/facebook/post`."
                            },
                            "likes": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Like / reaction count"
                            },
                            "comments": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Comment count. Note: on `GET /v1/instagram/post` this is Instagram's `edge_media_to_parent_comment.count` (top-level comments); the IG list endpoints report the mobile `comment_count` total (includes replies). Both land on this same field."
                            },
                            "shares": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Share / repost / retweet count. On Instagram this is `reshare_count` (the paper-plane Share / Send count) and it exists only on Instagram's mobile surface, so it is returned by `/v1/instagram/post/stats`, `/v1/instagram/profile/reels/full`, and `/v1/instagram/profile/posts/full`. The web-sourced Instagram list and search endpoints return `null` (never fabricated)."
                            },
                            "saves": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Save / bookmark count. `null` on Instagram: the save count is platform-private and Instagram exposes no numeric save metric on any surface (never fabricated)."
                            }
                          }
                        },
                        "flags": {
                          "type": "object",
                          "description": "Boolean flags on the post",
                          "properties": {
                            "nsfw": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "NSFW flag (null when platform does not surface)"
                            },
                            "spoiler": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Spoiler flag (null when platform does not surface)"
                            },
                            "pinned": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Pinned-to-profile flag (null when platform does not surface)"
                            },
                            "deleted": {
                              "type": "boolean",
                              "description": "Whether the post is tombstoned (always present)"
                            },
                            "likes_hidden": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Present and `true` when the creator has hidden the like count. `engagement.likes` is `null` in that case (never the platform's decoy preview number). Absent on normal posts."
                            },
                            "comments_hidden": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Present and `true` when the upstream reports the comment count as hidden. `engagement.comments` is `null` in that case. Absent on normal posts."
                            },
                            "shares_hidden": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.flags.shares_hidden"
                            },
                            "views_hidden": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.flags.views_hidden"
                            },
                            "saves_hidden": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.flags.saves_hidden"
                            }
                          }
                        },
                        "published_at": {
                          "type": [
                            "string",
                            "integer",
                            "null"
                          ],
                          "description": "Post creation timestamp as an ISO 8601 UTC string. When the upstream sent a Unix epoch it is converted here and the raw epoch is preserved under `post.ext.published_at_epoch` for one deprecation cycle."
                        },
                        "ext": {
                          "type": [
                            "object",
                            "null"
                          ],
                          "description": "Platform-specific passthrough fields for cross-endpoint chains (present only on platforms that surface them)",
                          "properties": {
                            "music_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok music/clip id (exact string): pass to `/v1/tiktok/song/videos?clipId=` to find videos using the same sound"
                            },
                            "matched_song_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok only. The catalogue song TikTok matched the video's sound to, as an exact digit string. An official clip and the original sounds creators upload with it have different `music_id` values and the same `matched_song_id`, so group rows on it to count every use of one song. It is not a clipId: `/v1/tiktok/song` and `/v1/tiktok/song/videos` do not accept it. `/v1/tiktok/search/music` carries it on each sound, so a search on the song's title and artist, kept to the sounds with the same `matched_song_id`, gives the song's official sounds and their `video_count`. Absent when TikTok matched the sound to no song, and on rows served from a source that does not report the match."
                            },
                            "matched_song_title": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok only. The title of the song in `matched_song_id`. Absent when there is no matched song."
                            },
                            "matched_song_artist": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok only. The artist of the song in `matched_song_id`, as TikTok's catalogue names it. Absent when there is no matched song."
                            },
                            "music_title": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok only. The title of the video's own sound (`music_id`). An uploaded sound is titled like `original sound - <handle>`; the song it plays, when TikTok recognised one, is `matched_song_title`."
                            },
                            "music_artist": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok only. The artist TikTok shows for the video's own sound. On an original sound this is the uploader's display name, not the song's artist; use `matched_song_artist` for that."
                            },
                            "music_is_original": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "TikTok only. `true` when the video's sound is an original sound a creator uploaded, `false` when it is a catalogue track. Absent when the source does not say."
                            },
                            "author_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The creator's platform-native numeric user id. On TikTok search and list items, pass to `/v1/tiktok/profile?user_id=` for the creator's current follower count (survives username changes). On Instagram `/v1/instagram/search/reels`, `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` items it is present on every row, accepted by `/v1/instagram/profile/country?user_id=` and `/v1/instagram/basic-profile?userId=`. On Facebook it appears when the upstream exposed a numeric actor id and no real handle."
                            },
                            "author_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The posting account's profile URL, so a matching post can be followed to its account. Present on `/v1/facebook/search/posts` rows: the vanity or `/people/<name>/<id>/` URL when Facebook sends one, otherwise `https://www.facebook.com/profile.php?id=<numeric id>` built from the account id. Pass it as `url` to `/v1/facebook/profile` (or to `/v1/prism/profiles` with `platform: facebook`). Null when the row names neither an account URL nor a numeric account id. Absent on other endpoints."
                            },
                            "author_followers": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "The creator's follower count as embedded in the search payload itself, when the search source happens to carry one. On Instagram `search/reels` it is null on a plain call, because Instagram stopped sending follower counts in its search payload in August 2026; send `include=creator` (or `country`) and it is filled from the creator's profile, 2 credits per creator looked up. It stays null when that lookup does not resolve."
                            },
                            "author_following": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.author_following"
                            },
                            "author_posts_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.author_posts_count"
                            },
                            "author_location": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The free text the author wrote in their profile's location field, exactly as written (for example `Johannesburg, South Africa`). It is not a country code and is not checked. Present on X tweet and reply rows; null or absent when the author left it blank."
                            },
                            "in_reply_to_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.in_reply_to_id"
                            },
                            "in_reply_to_username": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.in_reply_to_username"
                            },
                            "conversation_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.conversation_id"
                            },
                            "author_country": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The creator's country. On Instagram it is the country the creator declares on the About this account panel, as a country name (for example `Spain`), and it is not where the post was filmed. It is present on `/v1/instagram/search/reels` when the request sends `include=creator`, `include=country` or `country`, and on `/v1/instagram/search/hashtag` and `/v1/instagram/location/posts` when it sends `include=country`, filled by looking the creator up. On YouTube rows joined with `include=channel` it is the channel's own country as an ISO 3166-1 alpha-2 code (for example `ZA`). Null when the platform publishes no country for the creator or the lookup did not resolve, and nothing is guessed; absent on a plain call."
                            },
                            "author_public_email": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The public contact email on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public email or the lookup did not resolve; absent on a plain call."
                            },
                            "author_public_phone": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The public contact phone number on the creator's profile. Present only on `/v1/instagram/search/reels` when the request sends `include=creator`, filled by looking the creator up. Null when the creator lists no public phone or the lookup did not resolve; absent on a plain call."
                            },
                            "download_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "How many times the video has been saved to a device. TikTok only, and distinct from `engagement.saves`: a save keeps the video in a private collection on the platform, a download takes a copy off it, and TikTok counts the two separately. Present on TikTok post, search and post-list responses; absent everywhere else."
                            },
                            "region": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "TikTok only: the country TikTok registers the video to, as an ISO 3166-1 alpha-2 code (normally the creator's account country when they posted). It is not the viewer's country, not the `region` you requested, and not a language. On `/v1/tiktok/trending`, `/v1/tiktok/search`, `/v1/tiktok/search/top`, `/v1/tiktok/profile/videos`, `/v1/tiktok/search/hashtag` and `/v1/tiktok/song/videos` it is how you tell which rows are from a given country: filter on it when you need only that country. A row whose source omits the country stays null. The `region` request parameter still only sets the proxy."
                            },
                            "subreddit": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Reddit subreddit name (search/list items): pass to `/v1/reddit/subreddit/details?subreddit=`"
                            },
                            "title": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.title"
                            },
                            "selftext": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.selftext"
                            },
                            "upvote_ratio": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Reddit only: the share of a post's votes that are upvotes, as a fraction from 0 to 1 and usually close to 1 (six live rows measured 1, 1, 1, 0.86, 0.75, 1). Fractional despite the integer type this schema emits for every numeric leaf, the same caveat as `author.ext.average_rating`. Populated on `/v1/reddit/search` rows whose source carries it, and null everywhere else on Reddit including `/v1/reddit/post` and `/v1/reddit/subreddit`."
                            },
                            "flair": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.flair"
                            },
                            "content_language": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The language the platform itself tags the post with, when it sends one: Reddit's own language tag on Reddit lanes, and TikTok's caption-language tag (for example `de`) on `/v1/tiktok/trending?feed=local`. Null when the platform could not tell (Reddit `und`, TikTok `un`, common on short or emoji-only captions); absent where the source sends no tag. Never inferred from the text by us: that is `post.computed.language`."
                            },
                            "type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.type"
                            },
                            "content_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.content_type"
                            },
                            "ticker_symbols": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.ticker_symbols",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.ticker_symbols"
                              }
                            },
                            "video_view_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram's legacy 3-second-view count. Historical: Instagram stopped serving it in August 2026 (removed from its web post surface along with the web play count), so fresh `/v1/instagram/post` lookups no longer carry it and no source can restore it. Use `engagement.views` (the play count) instead."
                            },
                            "ig_play_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram-only play count (`ig_play_count`). Since mid-July 2026 Instagram's headline play count (`engagement.views`) no longer includes Facebook crosspost views and equals this value; it is surfaced explicitly so you can tell the Instagram-only figure apart and detect any future re-divergence. For combined Instagram + Facebook reach, also fetch the Facebook crosspost via `/v1/facebook/post`. Present on `/v1/instagram/post/stats` and, since the August 2026 views fix, on `/v1/instagram/post` for video posts."
                            },
                            "repost_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.repost_count"
                            },
                            "media_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.media_type"
                            },
                            "text_truncated": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.ext.text_truncated"
                            },
                            "ip_location": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.ip_location"
                            },
                            "carousel_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.carousel_count"
                            },
                            "remix_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.remix_count"
                            },
                            "audio_cluster_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Instagram's audio cluster for a reel, as an exact digit string: the id Instagram uses to group different uploads of the same sound. Present on `/v1/instagram/audio/reels` rows and on `/v1/instagram/profile/reels` with `include=stats`; absent on a row when it is not available and on every other surface."
                            },
                            "facebook_likes": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.likes` on this row. A post shared to Facebook arrives from some sources with its Facebook likes already folded into the Instagram count, so the share is subtracted and published here, which keeps `engagement.likes` the Instagram-only figure instagram.com shows on the post. Add the two together for the combined number. Absent when the read carried no Facebook share, and absent on a post whose owner hides the like count, because nothing can be subtracted from a null. A response that excluded a share also carries a note in `data._warnings`."
                            },
                            "facebook_comments": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram only: the Facebook cross-post share that was EXCLUDED from `engagement.comments` on this row, the comment counterpart of `post.ext.facebook_likes`. Each leaf appears only for the count it actually changed, so a post whose likes are hidden but whose comments were reconciled carries this one alone."
                            },
                            "instagram_views": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram only: the Instagram-only play count of a video, the same figure on every Instagram endpoint. `engagement.views` keeps each endpoint's established meaning: on `/v1/instagram/profile/reels`, `/v1/instagram/audio/reels`, `/v1/instagram/search/reels` and `/v1/instagram/search/hashtag` it can include the post's Facebook cross-post views, while on `/v1/instagram/post` and `/v1/instagram/post/stats` it is Instagram-only. Read this leaf when you compare one post across endpoints. Absent on photos and when the source did not report the Instagram-only figure."
                            },
                            "facebook_views": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Instagram only: the Facebook cross-post part of a video's play count, the counterpart of `post.ext.instagram_views`. Present only when the source reported the Facebook part, or a combined total above the Instagram figure. Absent does not mean zero: some sources report the Instagram figure alone even for a cross-posted video."
                            },
                            "published_at_epoch": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Raw Unix epoch for `published_at` (seconds, or milliseconds when the upstream sent millis). Present only when the upstream sent a numeric epoch that was normalised to the ISO 8601 `published_at` string. Kept for one deprecation cycle for integrations pinned to the numeric form."
                            },
                            "usertags": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.usertags",
                              "items": {
                                "type": "string",
                                "description": "Leaf at post.ext.usertags"
                              }
                            },
                            "coauthors": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post).",
                              "items": {
                                "type": "string",
                                "description": "Instagram collaborative posts (the native \"Collab\" feature). The full list of co-author accounts on the post, as `{ id, username, full_name, is_verified, profile_pic_url }`. A collab post has ONE producer and appears in every co-author's grid, so `post.author` is whichever account created it, which is not necessarily the profile you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in this array. An empty array means Instagram reports the post as NOT a collab; the field is absent on surfaces that carry no co-author signal, including `/v1/instagram/post` (its web source ships the field permanently empty, so use `/v1/instagram/post/stats` for a single post)."
                              }
                            },
                            "music": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.music"
                            },
                            "sponsor_tags": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint.",
                              "items": {
                                "type": "string",
                                "description": "Instagram only: the brand accounts the post tags as its paid partner, as usernames (`[\"rolex\"]`). `[]` on a post with no partner tagged. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                              }
                            },
                            "sponsored_disclosed": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "The platform's own disclosure that the post is paid or promotional: on Instagram the paid-partnership label (`is_paid_partnership`) or a tagged brand partner, on TikTok the label TikTok shows viewers (\"Paid partnership\", \"Commission paid\", \"Promotional content\"). `false` when the post carries the flag unset, null when it carries none. Present on `/v1/instagram/post/stats`, `/v1/instagram/search/reels` and `/v1/tiktok/search`; absent on every other endpoint."
                            },
                            "ai_label": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Instagram only: Instagram's AI-content label on the post, as the method Instagram reports: `classifier_score_high` (Instagram detected it, shown as \"Likely made with AI\"), `ai_created` or `ai_edited` (declared or detected as made or edited with AI). Null when the post carries no AI label. Present on `/v1/instagram/post/stats`; absent on every other endpoint."
                            },
                            "story_mentions": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                              "items": {
                                "type": "string",
                                "description": "Instagram stories only: the accounts the story mentions with a mention sticker, as usernames in alphabetical order. `[]` when it mentions nobody. Present on `/v1/instagram/stories`; absent on every other endpoint."
                              }
                            },
                            "story_links": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint.",
                              "items": {
                                "type": "string",
                                "description": "Instagram stories only: where the story's link stickers lead, as URLs in alphabetical order. Instagram wraps each link in its own redirect with a per-view click id; both are removed, so this is the destination itself. `[]` when the story has no link sticker. Present on `/v1/instagram/stories` and `/v1/instagram/highlight/detail`; absent on every other endpoint."
                              }
                            },
                            "story_reshared_posts": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint.",
                              "items": {
                                "type": "string",
                                "description": "Instagram stories only: the feed posts the story reshares, as post URLs (`https://www.instagram.com/p/{shortcode}/`, which `/v1/instagram/post` takes). `[]` when it reshares none. Present on `/v1/instagram/stories`; absent on every other endpoint."
                              }
                            },
                            "location": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.location"
                            },
                            "media": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.media",
                              "items": {
                                "type": "object",
                                "description": "Nested object: post.ext.media",
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "description": "Leaf at post.ext.media.type"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at post.ext.media.url"
                                  },
                                  "width": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at post.ext.media.width"
                                  },
                                  "height": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at post.ext.media.height"
                                  }
                                }
                              }
                            },
                            "top_comments": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.top_comments",
                              "items": {
                                "type": "object",
                                "description": "Nested object: post.ext.top_comments",
                                "properties": {
                                  "id": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at post.ext.top_comments.id"
                                  },
                                  "text": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at post.ext.top_comments.text"
                                  },
                                  "username": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at post.ext.top_comments.username"
                                  },
                                  "likes": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at post.ext.top_comments.likes"
                                  },
                                  "published_at": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at post.ext.top_comments.published_at"
                                  }
                                }
                              }
                            },
                            "hashtags": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.hashtags",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.hashtags"
                              }
                            },
                            "mentions": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.mentions",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.mentions"
                              }
                            },
                            "mentioned_user_ids": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.mentioned_user_ids",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.mentioned_user_ids"
                              }
                            },
                            "quoted_post": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Threads quote posts: the post this one quotes, as `{ id, url, author: { id, username }, text, media_urls, thumbnail_url }`. A quote post usually carries no caption or media of its own, and the text and video you see on the post's page belong to this attachment, by a different author. It is returned here rather than merged into `post.content`, so `content.*` always stays the outer post's own content and one account's media is never attributed to another. Absent on posts that are not quote posts."
                            },
                            "retweeted_post": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.retweeted_post"
                            },
                            "quote_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.quote_count"
                            },
                            "all_media_urls": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.all_media_urls",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.all_media_urls"
                              }
                            },
                            "reaction_counts": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.reaction_counts",
                              "items": {
                                "type": "string",
                                "description": "Leaf at post.ext.reaction_counts"
                              }
                            },
                            "share_urn": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.share_urn"
                            },
                            "post_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.post_type"
                            },
                            "activity_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.activity_id"
                            },
                            "published_at_precision": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.published_at_precision"
                            },
                            "author_urn": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.author_urn"
                            },
                            "author_headline": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.author_headline"
                            },
                            "author_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.author_type"
                            },
                            "is_repost_quote": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.ext.is_repost_quote"
                            },
                            "article": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.article"
                            },
                            "reaction_type": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.reaction_type"
                            },
                            "download_media_urls": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.download_media_urls",
                              "items": {
                                "type": "string",
                                "description": "Leaf at post.ext.download_media_urls"
                              }
                            },
                            "tags": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.tags",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.tags"
                              }
                            },
                            "categoryId": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.categoryId"
                            },
                            "categoryTitle": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.categoryTitle"
                            },
                            "topicCategories": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.topicCategories",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.topicCategories"
                              }
                            },
                            "duration": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.duration"
                            },
                            "license": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.license"
                            },
                            "madeForKids": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.ext.madeForKids"
                            },
                            "defaultAudioLanguage": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.defaultAudioLanguage"
                            },
                            "hasPaidProductPlacement": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.ext.hasPaidProductPlacement"
                            },
                            "caption": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.caption"
                            },
                            "position": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.position"
                            },
                            "playlistId": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.playlistId"
                            },
                            "videoOwnerChannelId": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.videoOwnerChannelId"
                            },
                            "videoPublishedAt": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.videoPublishedAt"
                            },
                            "description": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.description"
                            },
                            "default_language": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.default_language"
                            },
                            "localizations": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.localizations"
                            },
                            "playlist_item_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.playlist_item_id"
                            },
                            "playlist_owner_channel_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.playlist_owner_channel_id"
                            },
                            "playlist_owner_title": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.playlist_owner_title"
                            },
                            "channel_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.channel_id"
                            },
                            "published_label": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.published_label"
                            },
                            "published_precision": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.published_precision"
                            },
                            "title_maybe_translated": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at post.ext.title_maybe_translated"
                            },
                            "video_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.video_count"
                            },
                            "posts_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "`/v1/instagram/hashtag` only: the exact number of public posts Instagram counts under the hashtag. Live: it moves between calls minutes apart."
                            },
                            "commerce": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.commerce"
                            },
                            "on_screen_texts": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.on_screen_texts",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.on_screen_texts"
                              }
                            },
                            "topic_tag": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.topic_tag"
                            },
                            "reshare_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at post.ext.reshare_count"
                            },
                            "dsp_ids": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.dsp_ids"
                            },
                            "topic_tag_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.topic_tag_id"
                            },
                            "amazon_shop_lists": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.amazon_shop_lists",
                              "items": {
                                "type": "string",
                                "description": "Leaf at post.ext.amazon_shop_lists"
                              }
                            },
                            "amazon_shop_trending_picks": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.amazon_shop_trending_picks",
                              "items": {
                                "type": "string",
                                "description": "Leaf at post.ext.amazon_shop_trending_picks"
                              }
                            },
                            "amazon_shop_curations": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.amazon_shop_curations",
                              "items": {
                                "type": "string",
                                "description": "Leaf at post.ext.amazon_shop_curations"
                              }
                            },
                            "amazon_shop_socials": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at post.ext.amazon_shop_socials",
                              "items": {
                                "type": "string",
                                "description": "String at post.ext.amazon_shop_socials"
                              }
                            },
                            "ad": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Ad Library envelope (Facebook `adlibrary/ad` and `adlibrary/company/ads` items): page_id, currency, spend, reach_estimate, publisher_platforms, categories, targeted_or_reached_countries, cta_text, cta_type, link_url, is_active, end_date_iso, display_format, title, video_hd_url, video_sd_url. Absent on every non-ad surface."
                            },
                            "apple_music": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.apple_music"
                            },
                            "feedback_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.feedback_id"
                            },
                            "question_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Naver KnowledgeiN (`/v1/naver/kin/search`) only: the question's id (Naver's `docId`), read from the row's link. Kin returns one row per answer, so several rows can share it; send `group=question` for one row per question."
                            },
                            "answer_no": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Naver KnowledgeiN only: which answer of the question this row is (Naver's `answerNo`), read from the row's link."
                            },
                            "answer_nos": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first.",
                              "items": {
                                "type": "integer",
                                "description": "Naver KnowledgeiN with `group=question` only: every answer number of the question that was on the page, best-ranked first."
                              }
                            },
                            "published_at_est": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Naver KnowledgeiN only: the question's date ESTIMATED from its id (`YYYY-MM-DD`, Korea time), never a published date, so `published_at` stays null. Absent for questions older than the calibration table."
                            },
                            "date_basis": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "How `post.ext.published_at_est` was derived. `kin_docid_estimate`: interpolated from the question id against question pages whose posted date was read."
                            },
                            "event": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at post.ext.event"
                            },
                            "trend": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Trend-board envelope: what TikTok's own trend board says about the row. On `/v1/tiktok/hashtags/popular`: `rank`, `country_code`, `period_days`, `posts` and `views` for the window (not lifetime totals), `industry` / `industry_id` / `industry_label` for the first board the hashtag was read from (null for the overall board), `boards` listing EVERY board it ranks on as `{ industry, industry_id, industry_label, rank }` in board order (so a hashtag in the top 3 overall and on an industry board shows both), `popularity_curve` as `{ date, value }` with value 0 to 100 relative to the window's peak, and `top_creators`. On `/v1/tiktok/videos/popular`: `rank`, `country_code`, `period_days`, `order_by`, `period_views`, `organic_views`, `engagement_rate`, `six_second_view_through_rate`, `content_tags`. Absent on every non-board surface."
                            },
                            "updated_at": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.updated_at"
                            },
                            "alt_text": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.alt_text"
                            },
                            "board_name": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at post.ext.board_name"
                            }
                          }
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      }
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "youtube",
                  "endpoint": "/v1/youtube/video",
                  "data": {
                    "post": {
                      "id": "dQw4w9WgXcQ",
                      "content": {
                        "text": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
                        "thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
                        "duration_seconds": 214,
                        "media_urls": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw"
                      },
                      "author": {
                        "username": "UCuAXFkgsw1L7xaCfnd5JJOw",
                        "display_name": "Rick Astley",
                        "avatar_url": null,
                        "verified": null
                      },
                      "engagement": {
                        "views": 1789065639,
                        "likes": 19216844,
                        "comments": 2443809,
                        "shares": null,
                        "saves": null
                      },
                      "published_at": "2009-10-25T06:57:33Z",
                      "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
                      "ext": {
                        "content_type": "video",
                        "tags": [
                          "rick astley",
                          "Never Gonna Give You Up",
                          "nggyu",
                          "never gonna give you up lyrics",
                          "rick rolled",
                          "Rick Roll",
                          "rick astley official",
                          "rickrolled",
                          "Fortnite song",
                          "Fortnite event",
                          "Fortnite dance",
                          "fortnite never gonna give you up",
                          "rick roll",
                          "rickrolling",
                          "rick rolling",
                          "never gonna give you up",
                          "80s music",
                          "rick astley new",
                          "animated video",
                          "rickroll",
                          "meme songs",
                          "never gonna give u up lyrics",
                          "Rick Astley 2022",
                          "never gonna let you down",
                          "animated",
                          "rick rolls 2022",
                          "never gonna give you up karaoke"
                        ],
                        "categoryId": "10",
                        "categoryTitle": "Music",
                        "topicCategories": [
                          "https://en.wikipedia.org/wiki/Electronic_music",
                          "https://en.wikipedia.org/wiki/Music",
                          "https://en.wikipedia.org/wiki/Pop_music",
                          "https://en.wikipedia.org/wiki/Rhythm_and_blues",
                          "https://en.wikipedia.org/wiki/Soul_music"
                        ],
                        "duration": "PT3M34S",
                        "license": "youtube",
                        "madeForKids": false,
                        "defaultAudioLanguage": "en",
                        "hasPaidProductPlacement": false,
                        "caption": "true",
                        "description": "The official video for “Never Gonna Give You Up” by Rick Astley. \n\nNever: The Autobiography 📚 OUT NOW! \nFollow this link to get your copy and listen to Rick’s ‘Never’ playlist ❤️ #RickAstleyNever\nhttps://linktr.ee/rickastleynever\n\n“Never Gonna Give You Up” was a global smash on its release in July 1987, topping the charts in 25 countries including Rick’s native UK and the US Billboard Hot 100.  It also won the Brit Award for Best single in 1988. Stock Aitken and Waterman wrote and produced the track which was the lead-off single and lead track from Rick’s debut LP “Whenever You Need Somebody”.  The album was itself a UK number one and would go on to sell over 15 million copies worldwide.\n\nThe legendary video was directed by Simon West – who later went on to make Hollywood blockbusters such as Con Air, Lara Croft – Tomb Raider and The Expendables 2.  The video passed the 1bn YouTube views milestone on 28 July 2021.\n\nSubscribe to the official Rick Astley YouTube channel: https://RickAstley.lnk.to/YTSubID\n\nFollow Rick Astley:\nFacebook: https://RickAstley.lnk.to/FBFollowID \nTwitter: https://RickAstley.lnk.to/TwitterID \nInstagram: https://RickAstley.lnk.to/InstagramID \nWebsite: https://RickAstley.lnk.to/storeID \nTikTok: https://RickAstley.lnk.to/TikTokID\n\nListen to Rick Astley:\nSpotify: https://RickAstley.lnk.to/SpotifyID \nApple Music: https://RickAstley.lnk.to/AppleMusicID \nAmazon Music: https://RickAstley.lnk.to/AmazonMusicID \nDeezer: https://RickAstley.lnk.to/DeezerID \n\nLyrics:\nWe’re no strangers to love\nYou know the rules and so do I\nA full commitment’s what I’m thinking of\nYou wouldn’t get this from any other guy\n\nI just wanna tell you how I’m feeling\nGotta make you understand\n\nNever gonna give you up\nNever gonna let you down\nNever gonna run around and desert you\nNever gonna make you cry\nNever gonna say goodbye\nNever gonna tell a lie and hurt you\n\nWe’ve known each other for so long\nYour heart’s been aching but you’re too shy to say it\nInside we both know what’s been going on\nWe know the game and we’re gonna play it\n\nAnd if you ask me how I’m feeling\nDon’t tell me you’re too blind to see\n\nNever gonna give you up\nNever gonna let you down\nNever gonna run around and desert you\nNever gonna make you cry\nNever gonna say goodbye\nNever gonna tell a lie and hurt you\n\n#RickAstley #NeverGonnaGiveYouUp #WheneverYouNeedSomebody #OfficialMusicVideo",
                        "default_language": "en"
                      },
                      "flags": {
                        "deleted": false,
                        "nsfw": null,
                        "spoiler": null,
                        "pinned": null
                      }
                    },
                    "computed": {
                      "engagement_rate": 0.012107,
                      "language": "en",
                      "content_category": "entertainment",
                      "estimated_reach": 2146878767
                    }
                  },
                  "credits_used": 1,
                  "credits_remaining": 9999,
                  "request_id": "req-8Kq2ZmR4vT9xLb3P",
                  "cached": false,
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/location": {
      "get": {
        "summary": "Get an Instagram location's profile",
        "description": "Returns the public profile of an Instagram location (a place posts can be tagged at): name, category, address, phone, price level, its Instagram page as `place.url`, and on `place.ext` the number of public posts tagged there (`posts_count`), the venue's own `website`, `city` and `postal_code`, the weekly opening `hours`, its `facebook_places_id` and the username of the Instagram business account linked to the place (`business_username`). Pass `location_id`, the `location.pk` returned by /v1/instagram/search/location. Coordinates are filled only when Instagram's place search lists this exact place, and are null otherwise. Fields a venue leaves blank are null. An unknown id returns 404 and is not charged. Use /v1/instagram/location/posts to read the posts tagged there.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_location",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 1,
        "x-socialcrawl-oneOf": [
          [
            "location_id"
          ]
        ],
        "parameters": [
          {
            "name": "location_id",
            "in": "query",
            "required": false,
            "description": "Instagram location id: the numeric `location.pk` from /v1/instagram/search/location, or the number in an instagram.com/explore/locations/{location_id}/ URL. (one of: location_id; at least one required)",
            "schema": {
              "type": "string"
            },
            "example": "103912118089363"
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/location"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Place ID (Google cid for a business, hotel_identifier for a hotel)"
                        },
                        "name": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Business / hotel name"
                        },
                        "url": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Website or canonical URL"
                        },
                        "category": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Primary category (e.g. \"Coffee shop\", \"Hotel\")"
                        },
                        "rating": {
                          "type": "object",
                          "description": "Aggregate rating (value + max)",
                          "properties": {
                            "value": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at place.rating.value"
                            },
                            "max": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at place.rating.max"
                            }
                          }
                        },
                        "reviews_count": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Number of ratings"
                        },
                        "price_level": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Price band (\"inexpensive\" / \"$$\" / null)"
                        },
                        "address": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "String at place.address"
                        },
                        "phone": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "String at place.phone"
                        },
                        "latitude": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Numeric at place.latitude"
                        },
                        "longitude": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Numeric at place.longitude"
                        },
                        "verified": {
                          "type": [
                            "boolean",
                            "null"
                          ],
                          "description": "Claimed-business flag (Google is_claimed)"
                        },
                        "description": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "String at place.description"
                        },
                        "image_urls": {
                          "type": [
                            "string",
                            "array",
                            "null"
                          ],
                          "description": "Union: string | array | null",
                          "items": {
                            "type": "string",
                            "description": "String at place.image_urls"
                          }
                        },
                        "categories": {
                          "type": [
                            "array",
                            "null"
                          ],
                          "description": "Array at place.categories",
                          "items": {
                            "type": "string",
                            "description": "String at place.categories"
                          }
                        },
                        "hotel": {
                          "type": [
                            "object",
                            "null"
                          ],
                          "description": "Hotel-only richness (stars, amenities, review topics, prices); null for plain places",
                          "properties": {
                            "stars": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at place.hotel.stars"
                            },
                            "stars_description": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at place.hotel.stars_description"
                            },
                            "check_in_time": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at place.hotel.check_in_time"
                            },
                            "check_out_time": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at place.hotel.check_out_time"
                            },
                            "amenities": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at place.hotel.amenities",
                              "items": {
                                "type": "object",
                                "description": "Nested object: place.hotel.amenities",
                                "properties": {
                                  "category": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at place.hotel.amenities.category"
                                  },
                                  "name": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at place.hotel.amenities.name"
                                  },
                                  "available": {
                                    "type": [
                                      "boolean",
                                      "null"
                                    ],
                                    "description": "Boolean at place.hotel.amenities.available"
                                  },
                                  "hint": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at place.hotel.amenities.hint"
                                  }
                                }
                              }
                            },
                            "review_topics": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at place.hotel.review_topics",
                              "items": {
                                "type": "object",
                                "description": "Nested object: place.hotel.review_topics",
                                "properties": {
                                  "title": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at place.hotel.review_topics.title"
                                  },
                                  "positive_score": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at place.hotel.review_topics.positive_score"
                                  },
                                  "positive_count": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at place.hotel.review_topics.positive_count"
                                  },
                                  "negative_count": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at place.hotel.review_topics.negative_count"
                                  },
                                  "total_count": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at place.hotel.review_topics.total_count"
                                  }
                                }
                              }
                            },
                            "prices": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at place.hotel.prices",
                              "items": {
                                "type": "object",
                                "description": "Nested object: place.hotel.prices",
                                "properties": {
                                  "title": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at place.hotel.prices.title"
                                  },
                                  "price": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Numeric at place.hotel.prices.price"
                                  },
                                  "currency": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at place.hotel.prices.currency"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at place.hotel.prices.url"
                                  },
                                  "official_site": {
                                    "type": [
                                      "boolean",
                                      "null"
                                    ],
                                    "description": "Boolean at place.hotel.prices.official_site"
                                  }
                                }
                              }
                            }
                          }
                        },
                        "ext": {
                          "type": [
                            "object",
                            "null"
                          ],
                          "description": "Nested object: place.ext",
                          "properties": {
                            "distance": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at place.ext.distance"
                            },
                            "status": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at place.ext.status"
                            },
                            "timezone": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at place.ext.timezone"
                            },
                            "hours": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at place.ext.hours",
                              "items": {
                                "type": "object",
                                "description": "Nested object: place.ext.hours",
                                "properties": {
                                  "date": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at place.ext.hours.date"
                                  },
                                  "day_name": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at place.ext.hours.day_name"
                                  },
                                  "is_open": {
                                    "type": [
                                      "boolean",
                                      "null"
                                    ],
                                    "description": "Boolean at place.ext.hours.is_open"
                                  },
                                  "opens_at": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at place.ext.hours.opens_at"
                                  },
                                  "closes_at": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at place.ext.hours.closes_at"
                                  }
                                }
                              }
                            },
                            "place_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at place.ext.place_id"
                            },
                            "attributes": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at place.ext.attributes"
                            },
                            "rating_distribution": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Leaf at place.ext.rating_distribution"
                            },
                            "people_also_search": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at place.ext.people_also_search",
                              "items": {
                                "type": "object",
                                "description": "Nested object: place.ext.people_also_search",
                                "properties": {
                                  "cid": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at place.ext.people_also_search.cid"
                                  },
                                  "title": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at place.ext.people_also_search.title"
                                  },
                                  "rating": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Nested object: place.ext.people_also_search.rating",
                                    "properties": {
                                      "value": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at place.ext.people_also_search.rating.value"
                                      },
                                      "votes_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at place.ext.people_also_search.rating.votes_count"
                                      }
                                    }
                                  }
                                }
                              }
                            },
                            "menu_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at place.ext.menu_url"
                            },
                            "domain": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at place.ext.domain"
                            },
                            "maps_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at place.ext.maps_url"
                            },
                            "rank": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at place.ext.rank"
                            },
                            "city": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at place.ext.city"
                            },
                            "postal_code": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at place.ext.postal_code"
                            },
                            "region": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at place.ext.region"
                            },
                            "country_code": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at place.ext.country_code"
                            },
                            "posts_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "`/v1/instagram/location` only: the number of public posts Instagram counts at the place."
                            },
                            "website": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "`/v1/instagram/location` only: the venue's own website (`place.url` is its Instagram page)."
                            },
                            "facebook_places_id": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "`/v1/instagram/location` only: the Facebook Places id of the same place."
                            },
                            "business_username": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "`/v1/instagram/location` only: the username of the Instagram business account linked to the place, or null when none is linked."
                            },
                            "is_ad": {
                              "type": [
                                "boolean",
                                "null"
                              ],
                              "description": "Boolean at place.ext.is_ad"
                            },
                            "ad_rank": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at place.ext.ad_rank"
                            },
                            "ad_description": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at place.ext.ad_description"
                            },
                            "status_description": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at place.ext.status_description"
                            },
                            "visitor_reviews_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at place.ext.visitor_reviews_count"
                            },
                            "blog_reviews_count": {
                              "type": [
                                "integer",
                                "null"
                              ],
                              "description": "Numeric at place.ext.blog_reviews_count"
                            },
                            "booking_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "String at place.ext.booking_url"
                            },
                            "keywords": {
                              "type": [
                                "array",
                                "null"
                              ],
                              "description": "Array at place.ext.keywords",
                              "items": {
                                "type": "string",
                                "description": "String at place.ext.keywords"
                              }
                            }
                          }
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      }
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "yelp",
                  "endpoint": "/v1/yelp/business/info",
                  "data": {
                    "place": {
                      "id": "zj8Lq1T8KIC5zwFief15jg",
                      "name": "Prince Street Pizza",
                      "url": "https://www.yelp.com/biz/prince-street-pizza-new-york-2",
                      "category": "Pizza",
                      "rating": {
                        "value": 4.3,
                        "max": 5
                      },
                      "reviews_count": 5716,
                      "price_level": "$",
                      "address": "27 Prince St\nNew York, NY 10012\nUnited States",
                      "phone": null,
                      "latitude": 40.7230777,
                      "longitude": -73.9945444,
                      "verified": null,
                      "description": null,
                      "image_urls": [
                        "https://s3-media0.fl.yelpcdn.com/bphoto/Jo9jBP5y6G_bG_g3H31fiw/ls.jpg",
                        "https://s3-media0.fl.yelpcdn.com/bphoto/Jo9jBP5y6G_bG_g3H31fiw/258s.jpg"
                      ],
                      "categories": [
                        "Pizza"
                      ],
                      "ext": {
                        "timezone": "America/New_York",
                        "hours": [
                          {
                            "date": null,
                            "day_name": "Sunday",
                            "is_open": true,
                            "opens_at": "10:00",
                            "closes_at": "03:00"
                          },
                          {
                            "date": null,
                            "day_name": "Monday",
                            "is_open": true,
                            "opens_at": "10:00",
                            "closes_at": "03:00"
                          }
                        ]
                      }
                    }
                  },
                  "credits_used": 1,
                  "request_id": "req_example000000",
                  "cached": false,
                  "credits_remaining": 9999,
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/comment/likers": {
      "get": {
        "summary": "List the accounts that liked an Instagram comment",
        "description": "Returns the accounts that liked one Instagram comment, each with username, display name, avatar URL, verification status and profile URL. Pass the comment's numeric id as `comment_id` (the `comment.id` on /v1/instagram/post/comments rows), or its permalink (`https://www.instagram.com/p/{shortcode}/c/{comment_id}/`) as `url`. A page carries up to about 50 accounts; pass `next_cursor` back as `cursor` for the next page. A comment with no likes returns an empty list, which is not charged. There is no total like count here: read `comment.engagement.likes` on the comment itself.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_comment_likers",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 1,
        "x-socialcrawl-oneOf": [
          [
            "comment_id",
            "url"
          ]
        ],
        "parameters": [
          {
            "name": "comment_id",
            "in": "query",
            "required": false,
            "description": "Numeric id of the Instagram comment. (one of: comment_id, url; at least one required)",
            "schema": {
              "type": "string"
            },
            "example": "18133095883781285"
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Permalink of the comment: https://www.instagram.com/p/{shortcode}/c/{comment_id}/ (a reply permalink names the reply). (one of: comment_id, url; at least one required)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Pagination cursor. Use the `next_cursor` from the previous response to fetch the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max_pages",
            "in": "query",
            "required": false,
            "description": "1 to 50 (default 1, or 50 when `max_items` or `max_credits` is sent). Walk up to this many pages in one call and return the rows from all of them. Each page walked is billed exactly as one call to this endpoint (a cached page is free) and counts against your rate limit; its charge and any refund are recorded under the page's own request id, listed in `data.walk.request_ids`. The walk stops early at the last page, or when the request's time budget runs low; `data.walk.stopped` says why (`end`, `max_pages`, `max_items`, `max_credits`, `time_budget`, `page_error`) and `pagination.next_cursor` continues from where it stopped.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "max_items",
            "in": "query",
            "required": false,
            "description": "1 to 5000. Get more in one call: keep walking pages until the response holds at least this many rows, then stop with `data.walk.stopped: \"max_items\"`. The last page is returned whole (it was billed), so `data.items` can hold up to one page more than this, and `pagination.next_cursor` resumes right after it without skipping a row. Walks up to 50 pages unless `max_pages` says fewer; each page is billed as one call (a cached page is free). Add `max_credits` to cap the spend. A long walk can stop on the time budget first (`\"time_budget\"`): send the returned cursor with the same params to continue.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5000
            }
          },
          {
            "name": "max_credits",
            "in": "query",
            "required": false,
            "description": "1 to 100000. The most this call may spend, across every page it walks. A page starts only while the credits already spent plus that page's price (or, when higher, the most any page of this walk has cost) still fit, so the call never goes past it; the walk then stops with `data.walk.stopped: \"max_credits\"` and the cursor to resume. Sent alone, it walks as far as the budget goes (up to 50 pages). A value below the price of one page is a free 400 whose `error.details.page_credits` names that price. Credits a row join (`include=`) adds are known only once a page has run, so page 1 is checked against its own price.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100000
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/comment/likers"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Array of canonical author wrappers ({ author })",
                          "items": {
                            "type": "object",
                            "description": "Canonical author wrapper",
                            "properties": {
                              "author": {
                                "type": "object",
                                "description": "Canonical Author object (unified across all platforms)",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "Platform-specific user ID (always a string; platform-specific prefixes like `did:`, `spotify:artist:`, `t2_` are stripped)"
                                  },
                                  "username": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "User handle or username"
                                  },
                                  "display_name": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Display name or full name"
                                  },
                                  "avatar_url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "URL to profile picture"
                                  },
                                  "bio": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Profile biography or description"
                                  },
                                  "verified": {
                                    "type": [
                                      "boolean",
                                      "null"
                                    ],
                                    "description": "Whether the account is verified"
                                  },
                                  "followers": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Follower or subscriber count as an integer. Exact on Instagram and on TikTok when the source exposes an unrounded figure. YouTube above 1,000 subscribers is YouTube's published three-significant-figure figure. When the integer is a published/rounded value, `author.ext.followers_approximate` is true."
                                  },
                                  "following": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Number of accounts followed"
                                  },
                                  "posts_count": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Total number of posts / videos / tracks / episodes"
                                  },
                                  "likes_count": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "description": "Total likes received across the author's content (when surfaced)"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Direct URL to the profile page"
                                  },
                                  "location": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "ISO region code (e.g. `US`) or freeform location string when surfaced"
                                  },
                                  "external_url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Bio link / external website URL when surfaced by the platform"
                                  },
                                  "private": {
                                    "type": [
                                      "boolean",
                                      "null"
                                    ],
                                    "description": "Boolean at author.private"
                                  },
                                  "joined_at": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.joined_at"
                                  },
                                  "last_post_at": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "String at author.last_post_at"
                                  },
                                  "ext": {
                                    "type": [
                                      "object",
                                      "null"
                                    ],
                                    "description": "Nested object: author.ext",
                                    "properties": {
                                      "social_context": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.social_context"
                                      },
                                      "account_created": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.account_created"
                                      },
                                      "country": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.country"
                                      },
                                      "country_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.country_name"
                                      },
                                      "collects_received": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.collects_received"
                                      },
                                      "former_usernames": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.former_usernames",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.former_usernames"
                                        }
                                      },
                                      "former_usernames_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Instagram profile/about: how many former usernames Instagram's \"About this account\" panel lists for the account. 0 when the panel lists none, null when the panel could not be read on this call (the response then carries a note saying so). A count above 0 means the handle was renamed at least once; the names themselves are not published."
                                      },
                                      "verified_at": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Instagram profile/about, opt-in (`include=verified_at`): the month Instagram verified the account, as the panel shows it (\"April 2024\"). A month, not a date. Null when the account is not verified or the panel shows no verification date. Absent unless requested."
                                      },
                                      "public_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.public_email"
                                      },
                                      "contact_email": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Opt-in (`contact_email=1` on instagram/profile, youtube/channel and youtube/channel/about). When the bio lists two or more email addresses, the one the creator gives for contacting them personally, copied verbatim. Null when there is one address or none, when every address belongs to a manager, agency or brand, or when the choice was not confident. `author.ext.public_email` (the first address in the bio) is unchanged."
                                      },
                                      "public_phone": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.public_phone"
                                      },
                                      "similar_source": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.similar_source"
                                      },
                                      "instagram_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.instagram_username"
                                      },
                                      "similar_via": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.similar_via"
                                      },
                                      "business_category": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.business_category"
                                      },
                                      "bio_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.bio_links",
                                        "items": {
                                          "type": "object",
                                          "description": "Nested object: author.ext.bio_links",
                                          "properties": {
                                            "title": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at author.ext.bio_links.title"
                                            },
                                            "url": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at author.ext.bio_links.url"
                                            },
                                            "link_type": {
                                              "type": [
                                                "string",
                                                "null"
                                              ],
                                              "description": "String at author.ext.bio_links.link_type"
                                            }
                                          }
                                        }
                                      },
                                      "is_business": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_business"
                                      },
                                      "is_professional": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_professional"
                                      },
                                      "creator_marketplace": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.creator_marketplace"
                                      },
                                      "verification_label": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.verification_label"
                                      },
                                      "fbid": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.fbid"
                                      },
                                      "hd_avatar_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.hd_avatar_url"
                                      },
                                      "website": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.website"
                                      },
                                      "cover_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.cover_url"
                                      },
                                      "page_active": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.page_active"
                                      },
                                      "employee_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.employee_count"
                                      },
                                      "employee_count_range": {
                                        "type": [
                                          "object",
                                          "null"
                                        ],
                                        "description": "Nested object: author.ext.employee_count_range",
                                        "properties": {
                                          "start": {
                                            "type": [
                                              "integer",
                                              "null"
                                            ],
                                            "description": "Numeric at author.ext.employee_count_range.start"
                                          },
                                          "end": {
                                            "type": [
                                              "integer",
                                              "null"
                                            ],
                                            "description": "Numeric at author.ext.employee_count_range.end"
                                          }
                                        }
                                      },
                                      "founded_year": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.founded_year"
                                      },
                                      "company_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.company_type"
                                      },
                                      "tagline": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.tagline"
                                      },
                                      "specialities": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.specialities",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.specialities"
                                        }
                                      },
                                      "industries": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.industries",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.industries"
                                        }
                                      },
                                      "headquarters": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.headquarters"
                                      },
                                      "locations": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.locations",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.locations"
                                        }
                                      },
                                      "hashtags": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.hashtags",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.hashtags"
                                        }
                                      },
                                      "funding": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.funding"
                                      },
                                      "address": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.address"
                                      },
                                      "price_range": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.price_range"
                                      },
                                      "rating": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.rating"
                                      },
                                      "rating_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.rating_count"
                                      },
                                      "talking_about_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.talking_about_count"
                                      },
                                      "business_hours": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.business_hours",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.business_hours"
                                        }
                                      },
                                      "links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.links",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.links"
                                        }
                                      },
                                      "ad_library_page_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.ad_library_page_id"
                                      },
                                      "ad_library_status": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.ad_library_status"
                                      },
                                      "urn": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.urn"
                                      },
                                      "is_top_voice": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_top_voice"
                                      },
                                      "is_premium": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_premium"
                                      },
                                      "is_creator": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_creator"
                                      },
                                      "is_influencer": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_influencer"
                                      },
                                      "is_open_to_work": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_open_to_work"
                                      },
                                      "is_hiring": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_hiring"
                                      },
                                      "member_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.member_id"
                                      },
                                      "company_id": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.company_id"
                                      },
                                      "reaction_type": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.reaction_type"
                                      },
                                      "followers_approximate": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "True when `author.followers` is a published or rounded figure rather than an unrounded census: LinkedIn people-list display buckets, TikTok `stats.followerCount` when the exact sibling is absent, and YouTube subscriber counts at or above 1,000. Null or absent on exact counts."
                                      },
                                      "counts_source": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "TikTok profile only. Which of TikTok's two live counter sets `author.followers`, `author.following`, `author.likes_count` and `author.posts_count` carry: `app` (TikTok's app counters, the default) or `web` (the website's `statsV2`, returned with `counts=web`). The two sets can differ by a few percent in either direction."
                                      },
                                      "keywords": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.keywords"
                                      },
                                      "total_views": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.total_views"
                                      },
                                      "joined_at_timestamp": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.joined_at_timestamp"
                                      },
                                      "topicCategories": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.topicCategories",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.topicCategories"
                                        }
                                      },
                                      "bannerExternalUrl": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.bannerExternalUrl"
                                      },
                                      "madeForKids": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.madeForKids"
                                      },
                                      "hiddenSubscriberCount": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.hiddenSubscriberCount"
                                      },
                                      "related_playlists": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.related_playlists"
                                      },
                                      "topic_ids": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.topic_ids",
                                        "items": {
                                          "type": "string",
                                          "description": "String at author.ext.topic_ids"
                                        }
                                      },
                                      "unsubscribed_trailer": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.unsubscribed_trailer"
                                      },
                                      "localizations": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.localizations"
                                      },
                                      "monthly_listeners": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.monthly_listeners"
                                      },
                                      "total_ratings": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Spotify podcasts only: how many listeners have rated the show. Cumulative over the show's whole run, so it reflects longevity as well as size, and it is NOT an audience count (Spotify publishes no play, download, subscriber or follower count for a podcast)"
                                      },
                                      "average_rating": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Spotify podcasts only: mean listener rating from 0 to 5. Fractional (e.g. 4.66) despite the integer type this schema emits for every numeric leaf"
                                      },
                                      "creator_username": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.creator_username"
                                      },
                                      "join_policy": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.join_policy"
                                      },
                                      "is_nsfw": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.is_nsfw"
                                      },
                                      "rules": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.rules",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.rules"
                                        }
                                      },
                                      "weekly_active_users": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.weekly_active_users"
                                      },
                                      "weekly_contributions": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.weekly_contributions"
                                      },
                                      "rules_text": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.rules_text"
                                      },
                                      "language": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.language"
                                      },
                                      "post_karma": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.post_karma"
                                      },
                                      "comment_karma": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.comment_karma"
                                      },
                                      "awardee_karma": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.awardee_karma"
                                      },
                                      "trophy_count": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.trophy_count"
                                      },
                                      "banner_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.banner_url"
                                      },
                                      "profile_title": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.profile_title"
                                      },
                                      "social_links": {
                                        "type": [
                                          "array",
                                          "null"
                                        ],
                                        "description": "Array at author.ext.social_links",
                                        "items": {
                                          "type": "string",
                                          "description": "Leaf at author.ext.social_links"
                                        }
                                      },
                                      "bio_link": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.bio_link"
                                      },
                                      "embed_html": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.embed_html"
                                      },
                                      "embed_url": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.embed_url"
                                      },
                                      "group": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "Leaf at author.ext.group"
                                      },
                                      "search_hit": {
                                        "type": [
                                          "object",
                                          "null"
                                        ],
                                        "description": "Nested object: author.ext.search_hit",
                                        "properties": {
                                          "match": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "Leaf at author.ext.search_hit.match"
                                          },
                                          "title": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "String at author.ext.search_hit.title"
                                          },
                                          "snippet": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "String at author.ext.search_hit.snippet"
                                          },
                                          "evidence_url": {
                                            "type": [
                                              "string",
                                              "null"
                                            ],
                                            "description": "String at author.ext.search_hit.evidence_url"
                                          },
                                          "matched_urls": {
                                            "type": [
                                              "array",
                                              "null"
                                            ],
                                            "description": "Array at author.ext.search_hit.matched_urls",
                                            "items": {
                                              "type": "string",
                                              "description": "String at author.ext.search_hit.matched_urls"
                                            }
                                          }
                                        }
                                      },
                                      "blog_name": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.blog_name"
                                      },
                                      "blog_no": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.blog_no"
                                      },
                                      "visitors_today": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.visitors_today"
                                      },
                                      "visitors_total": {
                                        "type": [
                                          "integer",
                                          "null"
                                        ],
                                        "description": "Numeric at author.ext.visitors_total"
                                      },
                                      "topic": {
                                        "type": [
                                          "string",
                                          "null"
                                        ],
                                        "description": "String at author.ext.topic"
                                      },
                                      "power_blog": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.power_blog"
                                      },
                                      "official_blog": {
                                        "type": [
                                          "boolean",
                                          "null"
                                        ],
                                        "description": "Boolean at author.ext.official_blog"
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque cursor for the next page. Pass it back as a query parameter on endpoints that support pagination. Present only when the upstream reports more results."
                        },
                        "total": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Total number of matching results, when the upstream provides a count. Omitted otherwise."
                        },
                        "dropped": {
                          "type": "integer",
                          "description": "Number of upstream list items dropped because they could not be repaired to the endpoint schema. Valid list responses include 0.",
                          "example": 0
                        },
                        "empty_reason": {
                          "type": "string",
                          "enum": [
                            "no_matches",
                            "end_of_list",
                            "nothing_new_since",
                            "window_filtered",
                            "relevance_filtered",
                            "row_filtered",
                            "already_seen",
                            "source_empty_unverified"
                          ],
                          "description": "Present only when `items` is empty: why this page has no rows. Read it with `pagination.has_more`, which still says whether to keep paging. `no_matches`: The source answered and has no rows for this request. The same call returns the same answer, so change the query or the filters to get rows. `end_of_list`: This page was requested with a cursor and the list has no more rows. Stop paging. `nothing_new_since`: The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary. `window_filtered`: Every row on this page fell outside your date window (since, until, recent_days) or was a pinned post you excluded. Keep paging while pagination.has_more is true, or widen the window. `relevance_filtered`: relevance=filter judged every row on this page off-topic, and their ids are in data.relevance.dropped_ids. Keep paging while pagination.has_more is true, or send relevance=score to keep every row. `row_filtered`: A row filter you sent (such as country or min_views) kept no row on this page, and the report beside items counts what it dropped. Keep paging while pagination.has_more is true, or loosen the filter. `already_seen`: Every row on this page was one already returned to you on this walk, so there is nothing new here. Keep paging while pagination.has_more is true. `source_empty_unverified`: The source returned no rows and nothing confirmed it: no second source agreed, a source failed on the way, or a page mid-list came back empty. Retry later or with Cache-Control: no-cache, and keep paging while pagination.has_more is true.",
                          "example": "nothing_new_since"
                        },
                        "empty_reason_note": {
                          "type": "string",
                          "description": "Present only beside `empty_reason`: one or two sentences for a person or an agent saying what the code means and what to do next. The wording can improve; branch on `empty_reason`.",
                          "example": "The walk reached your since or stop_at_id boundary before any newer row, so nothing was published after it. Poll again later with the same boundary."
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      },
                      "required": [
                        "dropped"
                      ]
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "description": "Cursor state for this page. Present on every list response.",
                      "properties": {
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Opaque token to send back as `cursor` for the next page, or null at end-of-list. Pass it back verbatim; never decode or trim it.",
                          "example": "sc.eyJ2IjoyLCJjIjoiMiIsInAiOiJwYWdlIn0"
                        },
                        "has_more": {
                          "type": "boolean",
                          "description": "Explicit stop signal. Prefer this over inspecting next_cursor or comparing against total.",
                          "example": true
                        },
                        "page_size": {
                          "type": "integer",
                          "description": "Number of items in THIS page.",
                          "example": 30
                        },
                        "stopped_at": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "enum": [
                            "since",
                            "known_id",
                            "end",
                            null
                          ],
                          "description": "Present only when the request sent `since` or `stop_at_id`. Why the walk stopped: `since` (this page reached a post older than the date), `known_id` (this page reached the post you already hold), `end` (the list ran out first), or null (not yet, keep walking with `next_cursor`).",
                          "example": "known_id"
                        },
                        "typical_page_size": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "How many items a full page of this endpoint usually holds for this request, or null when it has not been verified, as on a source whose page changes with the request's parameters. An endpoint that merges several sources can return more. A page_size below it while has_more is true is a short page from the source, not the end of the list.",
                          "example": 10
                        },
                        "next_page_credits": {
                          "type": [
                            "integer",
                            "null"
                          ],
                          "description": "Credits the next page costs: what sending next_cursor back holds up front, priced from that request by the same pricer that charges it. Flat endpoints charge exactly this; metered endpoints refund what the page does not use; a cached page is free. Null when there is no next page.",
                          "example": 1
                        }
                      },
                      "required": [
                        "next_cursor",
                        "has_more",
                        "page_size"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached",
                    "pagination"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "tiktok",
                  "endpoint": "/v1/tiktok/search/users",
                  "data": {
                    "items": [
                      {
                        "author": {
                          "id": "user_0e9522",
                          "username": "user_759369",
                          "display_name": "user_f0b019",
                          "avatar_url": "https://example.com/avatars/user_0ab01c.png",
                          "bio": null,
                          "verified": null,
                          "followers": 4214875,
                          "following": 1,
                          "posts_count": 2341,
                          "likes_count": 62731828,
                          "url": null,
                          "location": null
                        }
                      },
                      {
                        "author": {
                          "id": "user_d26411",
                          "username": "user_1f51ed",
                          "display_name": "user_1f51ed",
                          "avatar_url": "https://example.com/avatars/user_a81e65.png",
                          "bio": null,
                          "verified": null,
                          "followers": 1780390,
                          "following": 1,
                          "posts_count": 995,
                          "likes_count": 10060260,
                          "url": null,
                          "location": null
                        }
                      },
                      {
                        "author": {
                          "id": "user_679d13",
                          "username": "user_c5d687",
                          "display_name": "user_8803ea",
                          "avatar_url": "https://example.com/avatars/user_67de4c.png",
                          "bio": null,
                          "verified": null,
                          "followers": 338243,
                          "following": 374,
                          "posts_count": 464,
                          "likes_count": 2140124,
                          "url": null,
                          "location": null
                        }
                      }
                    ],
                    "next_cursor": "30",
                    "total": 30,
                    "dropped": 0
                  },
                  "credits_used": 1,
                  "credits_remaining": 9999,
                  "request_id": "req-8Kq2ZmR4vT9xLb3P",
                  "cached": false,
                  "pagination": {
                    "next_cursor": "sc.eyJ2IjoyLCJjIjoiMzAiLCJwIjoiY3Vyc29yIn0",
                    "has_more": true,
                    "page_size": 30
                  },
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/profile/full": {
      "get": {
        "summary": "Instagram profile, recent posts, and computed analytics in one call.",
        "description": "Fans out to the Instagram profile and recent-posts endpoints in parallel and returns the unified author, the recent-post list, and computed metrics: avg_engagement_rate, avg_engagement_rate_by_followers, posting cadence (with the window it was measured over), the top post, and the format mix. avg_engagement_rate is view-based: the mean of each post's (likes + comments + shares) / views, so only posts that carry a view count contribute, and it is null when none does. avg_engagement_rate_by_followers is the mean of likes + comments per post divided by the account's follower count, over every post that carries both, so it covers posts with no view count. One call reads one page of recent posts, which on Instagram is 12 posts, and computes the metrics over that page: `posts` can shorten the window but not lengthen it past one page, and `_warnings` says so when fewer posts came back than `posts` asked for. Pass `posts_cursor` back as `cursor` to read the next page, 5 credits a call. The profile leg is the only critical leg: if posts can't be fetched the call still returns the profile with post-dependent metrics null, and every leg's status is surfaced in legs[]. Flat 5 credits. Photo and carousel rows have no view count, because Instagram does not publish one on stills, and neither does a video whose owner hides like and view counts. On a mostly-photo grid avg_engagement_rate is therefore null and `_warnings` says why: read avg_engagement_rate_by_followers, which uses the same formula as `computed.engagement_rate` on `/v1/instagram/profile`. Share counts are on `/v1/instagram/profile/posts/full` and `/v1/instagram/post/stats`, not this call.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_profile_full",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 5,
        "x-socialcrawl-oneOf": [
          [
            "handle"
          ]
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Instagram username or handle, with or without a leading @. One of the identity params is required. (one of: handle; at least one required)",
            "schema": {
              "type": "string"
            },
            "example": "mrbeast"
          },
          {
            "name": "posts",
            "in": "query",
            "required": false,
            "description": "How many of the fetched recent posts to return and compute the metrics over (1-100, default 25). One call reads one page, which on Instagram is 12 posts, so a larger value returns that page and a `_warnings` note; pass posts_cursor back as cursor for the next page.",
            "schema": {
              "type": "integer"
            },
            "example": 25
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Pass a prior response's posts_cursor to read the next page of posts. Each call is a separate 5-credit call whose metrics cover that page only.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include",
            "in": "query",
            "required": false,
            "description": "CSV subset of posts,computed (default both). include=computed omits the raw posts[] array from the response to save payload. The metrics are computed from the same fetched posts either way, so they do not change.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/profile/full"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "metrics": {
                          "type": "object",
                          "description": "Key performance metrics",
                          "properties": {
                            "total_views": {
                              "type": "integer",
                              "description": "Total view count"
                            },
                            "total_likes": {
                              "type": "integer",
                              "description": "Total like count"
                            },
                            "total_comments": {
                              "type": "integer",
                              "description": "Total comment count"
                            },
                            "engagement_rate": {
                              "type": "number",
                              "description": "Computed engagement rate (0-1)"
                            }
                          }
                        },
                        "period": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Time period for the analytics data"
                        },
                        "breakdown": {
                          "type": [
                            "array",
                            "null"
                          ],
                          "description": "Per-item or per-period breakdown",
                          "items": {
                            "type": "object",
                            "description": "Breakdown entry"
                          }
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      }
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/profile/full",
                  "data": {
                    "profile": {
                      "id": "2278169415",
                      "username": "mrbeast",
                      "display_name": "MrBeast",
                      "avatar_url": "https://scontent-ord5-2.cdninstagram.com/v/t51.2885-19/31077884_211593632905749_1394765701385814016_n.jpg?_nc_cat=1&ccb=7-5&_nc_sid=bf7eb4&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLnd3dy41MDAuQzMifQ%3D%3D&_nc_ohc=xQAB0Z8ixJwQ7kNvwEEadrK&_nc_oc=Adpc9PtiMmpA4UmVh365c49-7bSZUdsGkwcfYMp0foJKvXW_p6WOGaOdgYPNrRQGD4c&_nc_zt=24&_nc_ht=scontent-ord5-2.cdninstagram.com&_nc_ss=78a8c&oh=00_AQN0wqefL66sLB5xx8JXmm7Mi9Bw2sZIHZE6Rd5-vNGYeA&oe=6AC5838F",
                      "bio": "Watch my latest video!! 👇",
                      "verified": true,
                      "followers": 90043463,
                      "following": 1008,
                      "posts_count": 515,
                      "likes_count": null,
                      "url": "https://youtu.be/v9QtM6qnG50?is=3OMbMzzRVSGxQTcy",
                      "private": false,
                      "joined_at": null,
                      "last_post_at": "2026-09-24T16:00:27.000Z",
                      "ext": {
                        "business_category": null
                      }
                    },
                    "posts": [
                      {
                        "post": {
                          "id": "3946249480127175223",
                          "url": "https://www.instagram.com/mrbeast/p/DbD5P56DNo3/",
                          "content": {
                            "text": "I found MrsBeast ❤️❤️❤️\n\nand\n\nit\n\nwas\n\nthe\n\nbest\n\nday\n\nof\n\nmy\n\nlife ❤️❤️❤️",
                            "media_urls": [
                              "https://scontent-lga3-2.cdninstagram.com/user_4c9448/t51.82787-15/754097429_18561544909073416_3723623249090384868_n.jpg?stp=dst-jpg_e35_p1080x1080_sh2.08_tt6&_nc_cat=1&ig_cache_key=Mzk0NjIzODQyODA2MzA2NzMwNQ%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNBUk9VU0VMX0lURU0ueHBpZHMuMzA3Mi5zZHIucmVndWxhcl9waG90by5DMyJ9&_nc_ohc=ML4Nyv181mEQ7kNvwFBUZSt&_nc_oc=AdpSf-kLjZ6XSq_rczNjMfurY6W7rJho_gbBT5nT7pjiXwkal9h5y3N6o3BpD3hKNiE&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-lga3-2.cdninstagram.com&_nc_gid=GJ7QWM9wODq-udySI_sQlw&_nc_ss=7a3ba&oh=00_AQOdycrwvv3GbGWbgX8KOQ8sevFzYXlahTLDb3hBW6RdQg&oe=6AC583AA",
                              "https://scontent-lga3-2.cdninstagram.com/user_4c9448/t51.82787-15/753288123_18561544927073416_4142254327993067420_n.jpg?stp=dst-jpg_e35_p1080x1080_sh2.08_tt6&_nc_cat=101&ig_cache_key=Mzk0NjIzODQ0NTg4MDQxNTk0NQ%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNBUk9VU0VMX0lURU0ueHBpZHMuMzA3Mi5zZHIucmVndWxhcl9waG90by5DMyJ9&_nc_ohc=TSlHX8yRTRwQ7kNvwG0_tyT&_nc_oc=Adr6SplIpfUF8Qi2-HMa9Yx8enrilC5I7w7IDURcrBe7vxwVCN0H60B_MwvwoGSoZUM&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-lga3-2.cdninstagram.com&_nc_gid=GJ7QWM9wODq-udySI_sQlw&_nc_ss=7a3ba&oh=00_AQMLPWVP7NMbNwTqcKg4QAf8KhCKDkkhoLV6r3CRHDY_5A&oe=6AC56BFA"
                            ],
                            "thumbnail_url": null,
                            "duration_seconds": null
                          },
                          "author": {
                            "username": "mrbeast",
                            "display_name": "MrBeast",
                            "avatar_url": "https://example.com/redacted",
                            "verified": true
                          },
                          "engagement": {
                            "views": null,
                            "likes": 9573650,
                            "comments": 185840,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": true,
                            "deleted": false
                          },
                          "published_at": "2026-07-21T16:00:18.000Z",
                          "ext": {
                            "author_id": "2278169415",
                            "media_type": "carousel",
                            "carousel_count": 10,
                            "published_at_epoch": 1784649618,
                            "coauthors": [
                              {
                                "id": "user_56d68d",
                                "username": "user_1b353c",
                                "full_name": "user_11e285",
                                "is_verified": true,
                                "profile_pic_url": "https://example.com/user_af7bf0"
                              }
                            ],
                            "author_followers": 90043463
                          }
                        },
                        "computed": {
                          "engagement_rate": null,
                          "language": "en",
                          "content_category": "other",
                          "estimated_reach": null
                        }
                      },
                      {
                        "post": {
                          "id": "3919432775825251100",
                          "url": "https://www.instagram.com/mrbeast/p/DZkn1f0Flsc/",
                          "content": {
                            "text": "Had to update the play button wall ❤️",
                            "media_urls": [
                              "https://scontent-lga3-2.cdninstagram.com/user_4c9448/t51.82787-15/724164279_18552629014073416_4362895695729846432_n.jpg?stp=dst-jpg_e35_p1080x1080_sh2.08_tt6&_nc_cat=1&ig_cache_key=MzkxOTQxODEzOTc1MTExMTY2OA%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNBUk9VU0VMX0lURU0ueHBpZHMuMzI4My5zZHIucmVndWxhcl9waG90by5DMyJ9&_nc_ohc=NMo8q_Dzv9IQ7kNvwFdt31c&_nc_oc=Adpsl1h2FN2gQjxSA6ecpwpaFR87ka1dmHWSxlCQSsfSrinXZHWovWQ9NT1JL4mS1zA&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-lga3-2.cdninstagram.com&_nc_gid=GJ7QWM9wODq-udySI_sQlw&_nc_ss=7a3ba&oh=00_AQNH4FHirXcG1igknWxBSIfayO1E1hl7JqbVvDv8jyC5TA&oe=6AC583AA",
                              "https://scontent-lga3-1.cdninstagram.com/user_4c9448/t51.82787-15/723190586_18552628999073416_154235896152329272_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=109&ig_cache_key=MzkxOTQxODEzOTc3NjI2NDAxMQ%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNBUk9VU0VMX0lURU0ueHBpZHMuMTE3OS5zZHIucmVndWxhcl9waG90by5DMyJ9&_nc_ohc=JdGWenLG2nwQ7kNvwGVMpPT&_nc_oc=AdpMcOzBKFYLB61QoK2sFbMKA_4GeCPtvZoneeXwVjxMhg0-qFK1xCo8sJTeXwRLRuY&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&se=8&_nc_ht=scontent-lga3-1.cdninstagram.com&_nc_gid=GJ7QWM9wODq-udySI_sQlw&_nc_ss=7a3ba&oh=00_AQOx1E0kCOZeIKN4kefoqYdMK72m9LFskiOr2-bQeos5nA&oe=6AC56F33"
                            ],
                            "thumbnail_url": null,
                            "duration_seconds": null
                          },
                          "author": {
                            "username": "mrbeast",
                            "display_name": "MrBeast",
                            "avatar_url": "https://example.com/redacted",
                            "verified": true
                          },
                          "engagement": {
                            "views": null,
                            "likes": 6228520,
                            "comments": 141816,
                            "shares": null,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": true,
                            "deleted": false
                          },
                          "published_at": "2026-06-14T16:00:06.000Z",
                          "ext": {
                            "author_id": "2278169415",
                            "media_type": "carousel",
                            "carousel_count": 2,
                            "published_at_epoch": 1781452806,
                            "coauthors": [],
                            "author_followers": 90043463
                          }
                        },
                        "computed": {
                          "engagement_rate": null,
                          "language": "en",
                          "content_category": "other",
                          "estimated_reach": null
                        }
                      }
                    ],
                    "computed": {
                      "avg_engagement_rate": 0.03020516666666667,
                      "avg_engagement_rate_by_followers": 0.045404,
                      "posts_per_week": 0.13,
                      "cadence_window_days": 664.8,
                      "top_post": {
                        "url": "https://www.instagram.com/mrbeast/p/DdhX9zXsP-x/",
                        "engagement_total": 143301634
                      },
                      "format_mix": {
                        "image": 6,
                        "video": 6
                      }
                    },
                    "posts_cursor": "3979646055975810406_2278169415",
                    "legs": [
                      {
                        "endpoint": "/v1/instagram/profile",
                        "status": 200,
                        "credits_used": 1,
                        "latency_ms": 3474,
                        "error": null
                      },
                      {
                        "endpoint": "/v1/instagram/profile/posts",
                        "status": 200,
                        "credits_used": 1,
                        "latency_ms": 2596,
                        "error": null
                      }
                    ],
                    "_warnings": [
                      "posts=25 was requested and 12 came back: one call reads one page of recent posts, and the metrics are computed over that page. Pass posts_cursor back as cursor to read the next page."
                    ]
                  },
                  "credits_used": 5,
                  "request_id": "req_example000000",
                  "cached": false,
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T12:41:20.239Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/profile/reels/full": {
      "get": {
        "summary": "Instagram reels with views, likes, comments, and per-reel share counts where available, in one call.",
        "description": "Returns a creator's recent reels with views, likes, comments, and the per-reel share count merged in wherever the upstream exposes it: in a single call. The standard /v1/instagram/profile/reels endpoint returns views/likes/comments but leaves engagement.shares null (its upstream has no per-post reshare count); this composite fans out to a second mobile source that carries the share number and merges it back onto each item by post id. Share coverage is best-effort and varies by account: the mobile source only exposes reshare_count for the items it returns, so some (sometimes most) items keep engagement.shares null. That null means \"upstream doesn't expose it\", not \"zero\". Read shares_coverage (the fraction of returned items that got a real share number) before relying on shares; legs[] shows each leg's status. Billing: the standard leg is critical (its failure refunds the full call); the shares leg is best-effort: if it fails OUTRIGHT the items still return with shares null and 4 of the 5 credits are refunded (you pay the standard 1-credit list price). A successful shares leg with low coverage is still the flat 5 credits, since the second source was queried regardless of how many items it happened to cover. Paginate with next_cursor.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_profile_reels_full",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "advanced",
        "x-credit-cost": 5,
        "x-credit-cost-min": 5,
        "x-credit-cost-max": 25,
        "x-credit-cost-formula": "5 credits per upstream page of about 12 reels. With no `limit` that is one page and a flat 5 credits. With `limit` set the composite walks `ceil(limit / 12)` pages - 3 for limit=30, 5 for the 50 maximum, so 25 credits at the top - holds that many up front and refunds every page it did not need. One partial refund sits inside the per-page price: a shares leg that fails outright refunds 4 of the 5 credits for that page, leaving the 1-credit list price. A shares leg that succeeds with low coverage is still the full 5, because the second source was queried either way. A `user_id` call is priced exactly like a `handle` call",
        "x-socialcrawl-oneOf": [
          [
            "handle",
            "user_id"
          ]
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Instagram username (with or without a leading @). Required unless user_id is given. (one of: handle, user_id; at least one required)",
            "schema": {
              "type": "string"
            },
            "example": "sid.and.listen"
          },
          {
            "name": "user_id",
            "in": "query",
            "required": false,
            "description": "Numeric Instagram user id. Alternative to handle: the account's username is looked up from the id first, so a user_id call returns the same items, share counts and price as a handle call. An id that matches no account returns 404 and is not charged. (one of: handle, user_id; at least one required)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from a prior response's next_cursor to page deeper.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Return up to this many items in one call (1-50). The endpoint pages the underlying source server-side until it has collected this many (or runs out), and bills per upstream page consumed (5 credits/page). Omit for a single page.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/profile/reels/full"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "metrics": {
                          "type": "object",
                          "description": "Key performance metrics",
                          "properties": {
                            "total_views": {
                              "type": "integer",
                              "description": "Total view count"
                            },
                            "total_likes": {
                              "type": "integer",
                              "description": "Total like count"
                            },
                            "total_comments": {
                              "type": "integer",
                              "description": "Total comment count"
                            },
                            "engagement_rate": {
                              "type": "number",
                              "description": "Computed engagement rate (0-1)"
                            }
                          }
                        },
                        "period": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Time period for the analytics data"
                        },
                        "breakdown": {
                          "type": [
                            "array",
                            "null"
                          ],
                          "description": "Per-item or per-period breakdown",
                          "items": {
                            "type": "object",
                            "description": "Breakdown entry"
                          }
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      }
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/profile/reels/full",
                  "data": {
                    "items": [
                      {
                        "post": {
                          "id": "3998704004249217033",
                          "url": "https://www.instagram.com/reel/Dd-QBsXNOgJ/",
                          "content": {
                            "text": "Brb gonna go find my boo 😈 #wickedgame",
                            "media_urls": "https://scontent-phl2-1.cdninstagram.com/user_2352da/v/t2/f2/m86/AQOjZ3S5rLhbEEsYOD3AdVL27SCbfDS_cRwSzOhVRooju7EfQ2umWugssAnzTwa5A3NLPDTjykoJifDKfqpPCXRH6l7ZSXhL5RyWIR0.mp4?_nc_cat=101&_nc_sid=5e9851&_nc_ht=scontent-phl2-1.cdninstagram.com&_nc_ohc=3a3jSI03tJcQ7kNvwF_8fSD&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTQ1MDc2Nzc4MzU5MjA1MiwiYXNzZXRfYWdlX2RheXMiOjAsInZpX3VzZWNhc2VfaWQiOjEwMDk5LCJkdXJhdGlvbl9zIjo2LCJ1cmxnZW5fc291cmNlIjoid3d3In0%3D&ccb=17-1&vs=88f40aa7c1d396ed&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC9FNEVFMTU3NDE4NDU0RjYxOEU1MjEwQTdCRjg1QTg0N192aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyL0MyN0Q1MjY4MjVDNzRBQTRCM0RENDU3MzU4QThFQUY2X2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACbogaSm5t2TBRUCKAJDMywXQBu7ZFocrAgYEmRhc2hfYmFzZWxpbmVfMV92MREAdf4HZeadAQA&_nc_gid=nlnEByf57-ceyiHG5GMTcQ&_nc_ss=7a3ba&_nc_zt=28&oh=00_AQN1BEbz4FT0fuj-PB3abmgBeoRhNX27UYXyQ5WLGtDDdw&oe=6AC17E52",
                            "thumbnail_url": "https://scontent-phl2-1.cdninstagram.com/user_4c9448/t51.82787-15/829543985_17938051206376492_2559055587439547907_n.jpg?stp=dst-jpg_e15_p480x480_tt6&_nc_cat=106&ig_cache_key=Mzk5ODcwNDAwNDI0OTIxNzAzMzE3OTM4MDUxMjAzMzc2NDky.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjEyMDYuc2RyLnZpZGVvX2RlZmF1bHRfY292ZXJfZnJhbWUuQzMifQ%3D%3D&_nc_ohc=kfdSHlXPDJIQ7kNvwGNHgZZ&_nc_oc=AdoR_x16S6nV_M4ChDXClB46ba32B08Ap9oYpeHu6xmWR5fVpZJQblD8vr088LLooEo&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-phl2-1.cdninstagram.com&_nc_gid=nlnEByf57-ceyiHG5GMTcQ&_nc_ss=7a3ba&oh=00_AQOVp5iWhvuqrsOlzuRirS7ZOi6Drq2a-Ymoa3Q1EjvNnA&oe=6AC57383",
                            "duration_seconds": 6.941
                          },
                          "author": {
                            "username": "sid.and.listen",
                            "display_name": "user_c3dfec",
                            "avatar_url": "https://example.com/avatars/user_d063bd.png",
                            "verified": false
                          },
                          "engagement": {
                            "views": 209010,
                            "likes": 3518,
                            "comments": 47,
                            "shares": 118,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false
                          },
                          "published_at": "2026-10-02T00:58:35.000Z",
                          "ext": {
                            "author_id": "user_dcfa76",
                            "media_type": "video",
                            "remix_count": 0,
                            "published_at_epoch": 1790902715,
                            "coauthors": [],
                            "shares_source": "mobile_list"
                          }
                        },
                        "computed": {
                          "engagement_rate": 0.017057,
                          "language": null,
                          "content_category": "other",
                          "estimated_reach": 250812
                        }
                      },
                      {
                        "post": {
                          "id": "3998546241744362329",
                          "url": "https://www.instagram.com/reel/Dd9sJ8lJVtZ/",
                          "content": {
                            "text": "I swear it goes a long way but some of these work for guys too 💕",
                            "media_urls": "https://scontent-phl2-1.cdninstagram.com/user_2352da/v/t2/f2/m86/AQMLoSNtwXRd2ic33Z0eL88J_MAJEWYEr7Q95LEz-bzx6gn5kAz4r-SAh8KJNsY_1OmU4-rb5hmyWCieT05k6mcQ-LD3Ql8kANuV1pM.mp4?_nc_cat=109&_nc_sid=5e9851&_nc_ht=scontent-phl2-1.cdninstagram.com&_nc_ohc=bzlTxwf8UVkQ7kNvwFu8bF2&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTk2OTQ0Mzk3NzA1ODU2NSwiYXNzZXRfYWdlX2RheXMiOjAsInZpX3VzZWNhc2VfaWQiOjEwMDk5LCJkdXJhdGlvbl9zIjoxMjQsInVybGdlbl9zb3VyY2UiOiJ3d3cifQ%3D%3D&ccb=17-1&vs=707251bf1115d92c&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC9GRTQxN0U0RTg2MTQ0NjlDOTQ5NEQ4N0U0NzZBRTc5NF92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyLzgwRUVFRDdBNkYwNzRBNzA5RjJGMTEzQ0UxNDI4QTQ3X2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACaK5MKK3cz_BhUCKAJDMywXQF8XbItDlYEYEmRhc2hfYmFzZWxpbmVfMV92MREAdf4HZeadAQA&_nc_gid=nlnEByf57-ceyiHG5GMTcQ&_nc_ss=7a3ba&_nc_zt=28&oh=00_AQPVF534YLVAwFPd6IXi6jAAJvQxRcuVc-xNcqVoO8BYPw&oe=6AC19A1E",
                            "thumbnail_url": "https://scontent-phl2-1.cdninstagram.com/user_4c9448/t51.82787-15/831034167_17938022793376492_1025661852699935295_n.jpg?stp=dst-jpg_e15_p480x480_tt6&_nc_cat=104&ig_cache_key=Mzk5ODU0NjI0MTc0NDM2MjMyOTE3OTM4MDIyNzg3Mzc2NDky.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjEyMDYuc2RyLnZpZGVvX2RlZmF1bHRfY292ZXJfZnJhbWUuQzMifQ%3D%3D&_nc_ohc=-EO7odBrUJ8Q7kNvwELvOXC&_nc_oc=AdpR79I90aNG7IhloK2HTCqQWscVrekXzAw5LeEBhJI9ZxehrhQiC16G_--tG_w6u3Q&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-phl2-1.cdninstagram.com&_nc_gid=nlnEByf57-ceyiHG5GMTcQ&_nc_ss=7a3ba&oh=00_AQOcCEDSrTd6UQQvELl9okfsCqhPzl_EMZvEtdKTsLKUNw&oe=6AC583D5",
                            "duration_seconds": 124.433
                          },
                          "author": {
                            "username": "sid.and.listen",
                            "display_name": "user_c3dfec",
                            "avatar_url": "https://example.com/avatars/user_d063bd.png",
                            "verified": false
                          },
                          "engagement": {
                            "views": 248938,
                            "likes": 10067,
                            "comments": 156,
                            "shares": 1902,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false
                          },
                          "published_at": "2026-10-01T19:50:31.000Z",
                          "ext": {
                            "author_id": "user_dcfa76",
                            "media_type": "video",
                            "remix_count": 0,
                            "published_at_epoch": 1790884231,
                            "coauthors": [],
                            "shares_source": "mobile_list"
                          }
                        },
                        "computed": {
                          "engagement_rate": 0.041066,
                          "language": "en",
                          "content_category": "other",
                          "estimated_reach": 298726
                        }
                      }
                    ],
                    "next_cursor": "eyJzYyI6IlFWRkJRME5QV0hkUlNUWXlXRkpsYUVwQlIwRlZZV3AxY0RsNGFucHZaVk0wTWxVeFRraEZXRkY2Y2t4clRrZHlXbE5QZFVWbmNHSXROV1J2UmpFd1N6a3dkVFJOTWt4a1psaFJZMEphWmxFeE5HaHJjRkZzZFE9PSIsImlnIjoiMzk5NDI1Njc5NTk1ODQ2OTQ3Nl83MTMzNjA0MDQ5MSJ9",
                    "legs": [
                      {
                        "endpoint": "/v1/instagram/profile/reels",
                        "status": 200,
                        "credits_used": 1,
                        "latency_ms": 5600,
                        "error": null
                      },
                      {
                        "endpoint": "/v1/instagram/profile/reels/full#shares",
                        "status": 200,
                        "credits_used": 4,
                        "latency_ms": 3804,
                        "error": null
                      }
                    ],
                    "shares_coverage": 1,
                    "pages_consumed": 1,
                    "_warnings": [
                      "limit_truncated_mid_page"
                    ],
                    "dropped": 0
                  },
                  "credits_used": 5,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": "sc.eyJ2IjoyLCJjIjoiZXlKell5STZJbEZXUmtKUk1FNVFWMGhrVWxOVVdYbFhSa3BzWVVWd1FsSXdSbFpaVjNBeFkwUnNOR0Z1Y0haYVZrMHdUV3hWZUZScmFFWlhSa1kyWTJ0NGNsUnJaSGxYYkU1UVpGVldibU5IU1hST1YxSjJVbXBGZDFONmEzZGtWRkpPVFd0NGExcHNhRkpaTUVwaFdteEZlRTVIYUhKalJrWnpaRkU5UFNJc0ltbG5Jam9pTXprNU5ESTFOamM1TlRrMU9EUTJPVFEzTmw4M01UTXpOakEwTURRNU1TSjkiLCJlIjoiaW5zdGFncmFtL3Byb2ZpbGUvcmVlbHMvZnVsbCIsInAiOiJjdXJzb3IifQ",
                    "has_more": true,
                    "page_size": 2
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T12:42:14.181Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/profile/posts/full": {
      "get": {
        "summary": "Instagram posts with views, likes, comments, and per-post share counts where available, in one call.",
        "description": "Returns a creator's recent posts with views, likes, comments, and the per-post share count merged in wherever the upstream exposes it: in a single call. The standard /v1/instagram/profile/posts endpoint returns views/likes/comments but leaves engagement.shares null (its upstream has no per-post reshare count); this composite fans out to a second mobile source that carries the share number and merges it back onto each item by post id. Share coverage is best-effort and varies by account: the mobile source only exposes reshare_count for the items it returns, so some (sometimes most) items keep engagement.shares null. That null means \"upstream doesn't expose it\", not \"zero\". Read shares_coverage (the fraction of returned items that got a real share number) before relying on shares; legs[] shows each leg's status. Billing: the standard leg is critical (its failure refunds the full call); the shares leg is best-effort: if it fails OUTRIGHT the items still return with shares null and 4 of the 5 credits are refunded (you pay the standard 1-credit list price). A successful shares leg with low coverage is still the flat 5 credits, since the second source was queried regardless of how many items it happened to cover. Paginate with next_cursor.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_profile_posts_full",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "advanced",
        "x-credit-cost": 5,
        "x-credit-cost-min": 5,
        "x-credit-cost-max": 25,
        "x-credit-cost-formula": "5 credits per upstream page of about 12 posts. With no `limit` that is one page and a flat 5 credits. With `limit` set the composite walks `ceil(limit / 12)` pages - 3 for limit=30, 5 for the 50 maximum, so 25 credits at the top - holds that many up front and refunds every page it did not need. One partial refund sits inside the per-page price: a shares leg that fails outright refunds 4 of the 5 credits for that page, leaving the 1-credit list price. A shares leg that succeeds with low coverage is still the full 5, because the second source was queried either way. A `user_id` call is priced exactly like a `handle` call",
        "x-socialcrawl-oneOf": [
          [
            "handle",
            "user_id"
          ]
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Instagram username (with or without a leading @). Required unless user_id is given. (one of: handle, user_id; at least one required)",
            "schema": {
              "type": "string"
            },
            "example": "sid.and.listen"
          },
          {
            "name": "user_id",
            "in": "query",
            "required": false,
            "description": "Numeric Instagram user id. Alternative to handle: the account's username is looked up from the id first, so a user_id call returns the same items, share counts and price as a handle call. An id that matches no account returns 404 and is not charged. (one of: handle, user_id; at least one required)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from a prior response's next_cursor to page deeper.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Return up to this many items in one call (1-50). The endpoint pages the underlying source server-side until it has collected this many (or runs out), and bills per upstream page consumed (5 credits/page). Omit for a single page.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/profile/posts/full"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "metrics": {
                          "type": "object",
                          "description": "Key performance metrics",
                          "properties": {
                            "total_views": {
                              "type": "integer",
                              "description": "Total view count"
                            },
                            "total_likes": {
                              "type": "integer",
                              "description": "Total like count"
                            },
                            "total_comments": {
                              "type": "integer",
                              "description": "Total comment count"
                            },
                            "engagement_rate": {
                              "type": "number",
                              "description": "Computed engagement rate (0-1)"
                            }
                          }
                        },
                        "period": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Time period for the analytics data"
                        },
                        "breakdown": {
                          "type": [
                            "array",
                            "null"
                          ],
                          "description": "Per-item or per-period breakdown",
                          "items": {
                            "type": "object",
                            "description": "Breakdown entry"
                          }
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      }
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/profile/posts/full",
                  "data": {
                    "items": [
                      {
                        "post": {
                          "id": "3998704004249217033",
                          "url": "https://www.instagram.com/sid.and.listen/p/Dd-QBsXNOgJ/",
                          "content": {
                            "text": "Brb gonna go find my boo 😈 #wickedgame",
                            "media_urls": "https://scontent-lga3-2.cdninstagram.com/user_2352da/v/t2/f2/m86/AQOjZ3S5rLhbEEsYOD3AdVL27SCbfDS_cRwSzOhVRooju7EfQ2umWugssAnzTwa5A3NLPDTjykoJifDKfqpPCXRH6l7ZSXhL5RyWIR0.mp4?_nc_cat=101&_nc_sid=5e9851&_nc_ht=scontent-lga3-2.cdninstagram.com&_nc_ohc=3a3jSI03tJcQ7kNvwGsEKu0&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTQ1MDc2Nzc4MzU5MjA1MiwiYXNzZXRfYWdlX2RheXMiOjAsInZpX3VzZWNhc2VfaWQiOjEwMDk5LCJkdXJhdGlvbl9zIjo2LCJ1cmxnZW5fc291cmNlIjoid3d3In0%3D&ccb=17-1&vs=88f40aa7c1d396ed&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC9FNEVFMTU3NDE4NDU0RjYxOEU1MjEwQTdCRjg1QTg0N192aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyL0MyN0Q1MjY4MjVDNzRBQTRCM0RENDU3MzU4QThFQUY2X2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACbogaSm5t2TBRUCKAJDMywXQBu7ZFocrAgYEmRhc2hfYmFzZWxpbmVfMV92MREAdf4HZeadAQA&_nc_gid=btaO1eIDZWXE91OsUMzeGQ&_nc_ss=7a3ba&_nc_zt=28&oh=00_AQPgXAH8Lxu0yndCf-sOFR2bbXRR9r8qgLa9o7tWnoeWLw&oe=6AC17E52",
                            "thumbnail_url": "https://scontent-lga3-3.cdninstagram.com/user_4c9448/t51.82787-15/829543985_17938051206376492_2559055587439547907_n.jpg?stp=dst-jpg_e15_p480x480_tt6&_nc_cat=106&ig_cache_key=Mzk5ODcwNDAwNDI0OTIxNzAzMzE3OTM4MDUxMjAzMzc2NDky.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjEyMDYuc2RyLnZpZGVvX2RlZmF1bHRfY292ZXJfZnJhbWUuQzMifQ%3D%3D&_nc_ohc=kfdSHlXPDJIQ7kNvwGAgcM8&_nc_oc=AdptS270VIOjLUIyaM2Ic97Eudp7o_5cY_FXw-3oKuX_nAwKrv8lYVDwrLVbG329Suo&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_gid=btaO1eIDZWXE91OsUMzeGQ&_nc_ss=7a3ba&oh=00_AQMBwnkw_PUp2g7NU594J68sc1i2uMNp9er0_v7_15J-Fg&oe=6AC57383",
                            "duration_seconds": 6.941
                          },
                          "author": {
                            "username": "sid.and.listen",
                            "display_name": "user_c3dfec",
                            "avatar_url": "https://example.com/avatars/user_72ea20.png",
                            "verified": false
                          },
                          "engagement": {
                            "views": 209010,
                            "likes": 3518,
                            "comments": 47,
                            "shares": 118,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false
                          },
                          "published_at": "2026-10-02T00:58:35.000Z",
                          "ext": {
                            "author_id": "user_dcfa76",
                            "media_type": "video",
                            "published_at_epoch": 1790902715,
                            "coauthors": [],
                            "shares_source": "mobile_list"
                          }
                        },
                        "computed": {
                          "engagement_rate": 0.017057,
                          "language": null,
                          "content_category": "other",
                          "estimated_reach": 250812
                        }
                      },
                      {
                        "post": {
                          "id": "3998546241744362329",
                          "url": "https://www.instagram.com/sid.and.listen/p/Dd9sJ8lJVtZ/",
                          "content": {
                            "text": "I swear it goes a long way but some of these work for guys too 💕",
                            "media_urls": "https://scontent-lga3-1.cdninstagram.com/user_2352da/v/t2/f2/m86/AQMLoSNtwXRd2ic33Z0eL88J_MAJEWYEr7Q95LEz-bzx6gn5kAz4r-SAh8KJNsY_1OmU4-rb5hmyWCieT05k6mcQ-LD3Ql8kANuV1pM.mp4?_nc_cat=109&_nc_sid=5e9851&_nc_ht=scontent-lga3-1.cdninstagram.com&_nc_ohc=bzlTxwf8UVkQ7kNvwGE9_QH&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTk2OTQ0Mzk3NzA1ODU2NSwiYXNzZXRfYWdlX2RheXMiOjAsInZpX3VzZWNhc2VfaWQiOjEwMDk5LCJkdXJhdGlvbl9zIjoxMjQsInVybGdlbl9zb3VyY2UiOiJ3d3cifQ%3D%3D&ccb=17-1&vs=707251bf1115d92c&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC9GRTQxN0U0RTg2MTQ0NjlDOTQ5NEQ4N0U0NzZBRTc5NF92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyLzgwRUVFRDdBNkYwNzRBNzA5RjJGMTEzQ0UxNDI4QTQ3X2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACaK5MKK3cz_BhUCKAJDMywXQF8XbItDlYEYEmRhc2hfYmFzZWxpbmVfMV92MREAdf4HZeadAQA&_nc_gid=btaO1eIDZWXE91OsUMzeGQ&_nc_ss=7a3ba&_nc_zt=28&oh=00_AQMxiqRcjga8JErBeoJeSq8H6pV9x7pBgH4YGLNlP8MnNg&oe=6AC19A1E",
                            "thumbnail_url": "https://scontent-lga3-3.cdninstagram.com/user_4c9448/t51.82787-15/831034167_17938022793376492_1025661852699935295_n.jpg?stp=dst-jpg_e15_p480x480_tt6&_nc_cat=104&ig_cache_key=Mzk5ODU0NjI0MTc0NDM2MjMyOTE3OTM4MDIyNzg3Mzc2NDky.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjEyMDYuc2RyLnZpZGVvX2RlZmF1bHRfY292ZXJfZnJhbWUuQzMifQ%3D%3D&_nc_ohc=-EO7odBrUJ8Q7kNvwFZefbx&_nc_oc=Ado-UgW_WbWfYzLUu5g9ijd42vHJ6ZvQMBvzf9B88g8oiCpeE0S34kvuqfcMnfesPms&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-lga3-3.cdninstagram.com&_nc_gid=btaO1eIDZWXE91OsUMzeGQ&_nc_ss=7a3ba&oh=00_AQMr0uD-Dvycp0wXyOQAb5W_Q8vOiCsXCe6OftI4kJrkfw&oe=6AC583D5",
                            "duration_seconds": 124.428
                          },
                          "author": {
                            "username": "sid.and.listen",
                            "display_name": "user_c3dfec",
                            "avatar_url": "https://example.com/avatars/user_72ea20.png",
                            "verified": false
                          },
                          "engagement": {
                            "views": 248954,
                            "likes": 10067,
                            "comments": 156,
                            "shares": 1902,
                            "saves": null
                          },
                          "flags": {
                            "nsfw": null,
                            "spoiler": null,
                            "pinned": false,
                            "deleted": false
                          },
                          "published_at": "2026-10-01T19:50:31.000Z",
                          "ext": {
                            "author_id": "user_dcfa76",
                            "media_type": "video",
                            "published_at_epoch": 1790884231,
                            "coauthors": [],
                            "shares_source": "mobile_list"
                          }
                        },
                        "computed": {
                          "engagement_rate": 0.041064,
                          "language": "en",
                          "content_category": "other",
                          "estimated_reach": 298745
                        }
                      }
                    ],
                    "next_cursor": "eyJzYyI6IjM5OTQxOTM1MjkwNTE4NzMwOTNfNzEzMzYwNDA0OTEiLCJpZyI6IjM5OTQyNTY3OTU5NTg0Njk0NzZfNzEzMzYwNDA0OTEifQ",
                    "legs": [
                      {
                        "endpoint": "/v1/instagram/profile/posts",
                        "status": 200,
                        "credits_used": 1,
                        "latency_ms": 2234,
                        "error": null
                      },
                      {
                        "endpoint": "/v1/instagram/profile/posts/full#shares",
                        "status": 200,
                        "credits_used": 4,
                        "latency_ms": 2870,
                        "error": null
                      }
                    ],
                    "shares_coverage": 1,
                    "pages_consumed": 1,
                    "_warnings": [
                      "limit_truncated_mid_page"
                    ],
                    "dropped": 0
                  },
                  "credits_used": 5,
                  "request_id": "req_example000000",
                  "cached": false,
                  "pagination": {
                    "next_cursor": "sc.eyJ2IjoyLCJjIjoiZXlKell5STZJak01T1RReE9UTTFNamt3TlRFNE56TXdPVE5mTnpFek16WXdOREEwT1RFaUxDSnBaeUk2SWpNNU9UUXlOVFkzT1RVNU5UZzBOamswTnpaZk56RXpNell3TkRBME9URWlmUSIsImUiOiJpbnN0YWdyYW0vcHJvZmlsZS9wb3N0cy9mdWxsIiwicCI6ImN1cnNvciJ9",
                    "has_more": true,
                    "page_size": 2
                  },
                  "credits_remaining": 9999,
                  "source": "captured",
                  "captured_at": "2026-10-02T12:42:17.805Z",
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    },
    "/instagram/search/mentions": {
      "get": {
        "summary": "Search Instagram posts that tag or mention an account",
        "description": "Returns Instagram posts by other accounts that tag an account or @mention it in the caption. Each call runs two searches: the account's Tagged tab (/v1/instagram/tagged, `match_kind` `tag`) and reels whose caption mentions `@handle` (/v1/instagram/search/reels, kept only when the caption carries the @handle or links the profile, `match_kind` `mention` or `link`). The Tagged tab is the one Instagram surface for posts that tag an account, and an account that approves its tags by hand can show older posts there, which is why the caption search runs as well. The account's own posts are left out unless `include_self=true`. Rows are merged newest first and a post found twice appears once. Each row in `data.items` is exactly the row the named search endpoint returns, with its `post` and `computed` blocks, plus `match_kind`. `since` and `until` keep only rows published inside the window. Send `data.next_cursor` back as `cursor` for the next page; it is null when every search has run out. `data.legs` reports each search: its endpoint, status, rows returned and kept, credits and `request_id`. `data.excluded` counts the rows left out (`unmatched`, `self`, `duplicate`, `outside_window`). Each call is one page of each search at its own price: 5 credits for the Tagged page and 1 for the reels page, so at most 6.",
        "tags": [
          "instagram"
        ],
        "operationId": "get_instagram_search_mentions",
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          }
        ],
        "x-credit-tier": "standard",
        "x-credit-cost": 0,
        "x-credit-cost-min": 0,
        "x-credit-cost-max": 6,
        "x-credit-cost-formula": "Metered, 0-6 credits: each call reads one page of /v1/instagram/tagged (5 credits) and /v1/instagram/search/reels (1 credit), each billed at that endpoint's own price exactly as a direct call is. A page that found nothing or failed costs nothing, and a page served from cache is free. A page is billed when it returned rows, even if none of them carried the mention; data.legs shows each page's charge and data.excluded what was left out.",
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": true,
            "description": "The account's username, with or without the @, or its profile URL.",
            "schema": {
              "type": "string"
            },
            "example": "myntra"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "data.next_cursor from the previous response, sent back verbatim for the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "Only posts published on or after this date, YYYY-MM-DD (UTC).",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "description": "Only posts published on or before this date, YYYY-MM-DD (UTC); that whole day is included.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_self",
            "in": "query",
            "required": false,
            "description": "When true, also keep posts by the account itself. Default false.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Cache-Control",
            "in": "header",
            "required": false,
            "description": "Send `no-cache` to bypass the response cache and force a live fetch. Billed at the normal endpoint cost; the fresh result is written back to cache for the next caller. Only the `no-cache` directive triggers this. See the Response Schema guide for details.",
            "schema": {
              "type": "string"
            },
            "example": "no-cache"
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional UUID that makes the request safely retriable. The key is reserved atomically per account before billing. A concurrent retry receives `409 IDEMPOTENCY_IN_PROGRESS` with a `Retry-After` of 1 second while the original is young, growing to a quarter of the time it has been running (at most 30); a crashed reservation expires after 5 minutes. A replay keeps the cached payload immutable except for billing metadata: `credits_used` becomes 0, `idempotent_replay` becomes true, and `credits_remaining` is refreshed to the current balance. A known current balance appears in both the body and `X-Credits-Remaining` header; no balance row resolves to 0. On a transient lookup failure, body `credits_remaining` is null and `X-Credits-Remaining` is omitted. Completed outcomes expire after 24 hours. If the claim store is unavailable, the request fails closed before billing. GET endpoints do not combine idempotent replay with Server-Sent Events: use `Accept: application/json` when sending this header. The unsupported key-plus-SSE combination is rejected before billing.",
            "schema": {
              "type": "string"
            },
            "example": "7a5e1b4c-2d8f-4a3b-9c1e-6e8b4d2a1f3c"
          },
          {
            "name": "Prefer",
            "in": "header",
            "required": false,
            "description": "Send `respond-async` to run this GET in the background instead of waiting on the socket (or add `?async=true` to the query). The answer is 202 with `data.job_id`, a `Location` header and `Retry-After`; read the result free at `GET /v1/prism/jobs/{job_id}`, where `results[0].response` is exactly what this call returns. Nothing is held at submit: the call is validated now and billed as this call when it runs. Use it for calls that can outlast your client's timeout (MCP and many HTTP clients stop at 30 s). `Idempotency-Key` returns the same job on a retry.",
            "schema": {
              "type": "string"
            },
            "example": "respond-async"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "headers": {
              "X-Credits-Used": {
                "description": "Net credits charged for this response. Idempotency replays report 0.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Credits-Remaining": {
                "description": "Current authoritative balance. Free cache hits and idempotency replays omit this header when the balance cannot be determined; body `credits_remaining` is null instead.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Key-Credits-Remaining": {
                "description": "Only when the API key has a credit limit: the credits this key may still spend under that limit, after this call (never below 0). Absent for a key with no limit. `GET /v1/keys/current` has the limit and what is used.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Idempotent-Replay": {
                "description": "Present with value `true` only when this response replays a settled idempotency record.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              },
              "Idempotent-Replayed": {
                "description": "Present with value `true` only when this response replays a settled idempotency record. Same meaning as `X-Idempotent-Replay`.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Whether the request succeeded",
                      "example": true
                    },
                    "platform": {
                      "type": "string",
                      "description": "Platform name",
                      "example": "instagram"
                    },
                    "endpoint": {
                      "type": "string",
                      "description": "API endpoint path",
                      "example": "/v1/instagram/search/mentions"
                    },
                    "data": {
                      "type": "object",
                      "description": "Platform-specific response data",
                      "properties": {
                        "metrics": {
                          "type": "object",
                          "description": "Key performance metrics",
                          "properties": {
                            "total_views": {
                              "type": "integer",
                              "description": "Total view count"
                            },
                            "total_likes": {
                              "type": "integer",
                              "description": "Total like count"
                            },
                            "total_comments": {
                              "type": "integer",
                              "description": "Total comment count"
                            },
                            "engagement_rate": {
                              "type": "number",
                              "description": "Computed engagement rate (0-1)"
                            }
                          }
                        },
                        "period": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Time period for the analytics data"
                        },
                        "breakdown": {
                          "type": [
                            "array",
                            "null"
                          ],
                          "description": "Per-item or per-period breakdown",
                          "items": {
                            "type": "object",
                            "description": "Breakdown entry"
                          }
                        },
                        "_warnings": {
                          "type": "array",
                          "description": "Non-fatal notices about this response (field-map drift, clamped computed values). Advisory only: its presence never means the request failed. Omitted entirely when there is nothing to report, so treat absent as 'no warnings'.",
                          "items": {
                            "type": "string",
                            "description": "One advisory notice."
                          }
                        }
                      }
                    },
                    "credits_used": {
                      "type": "integer",
                      "description": "Number of credits consumed",
                      "example": 1
                    },
                    "credits_remaining": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Current account balance, or null when this response could not establish one. Free cache hits always return null because they do not establish an authoritative post-request balance. An idempotency replay also returns null when its current-balance lookup fails. It is never a fabricated zero, so a zero here means the account really is empty. The authoritative reading is the one on a billed response, which comes straight from the deduction.",
                      "example": 4999
                    },
                    "request_id": {
                      "type": "string",
                      "description": "Unique request identifier for support",
                      "example": "req-abc123"
                    },
                    "cached": {
                      "type": "boolean",
                      "description": "Whether the response was served from cache",
                      "example": false
                    },
                    "idempotent_replay": {
                      "type": "boolean",
                      "description": "True only when this response is an idempotency replay",
                      "example": true
                    },
                    "meta": {
                      "type": "object",
                      "description": "Optional. Present only when this call completed a pattern that one other call does more cheaply or in one step, at most once per pattern per API key per day. Send the header `X-SocialCrawl-Hints: off` to never receive it.",
                      "properties": {
                        "hint": {
                          "type": "object",
                          "description": "One suggestion: what to call instead and why, with the price when the suggested call costs more than the calls it replaces.",
                          "properties": {
                            "code": {
                              "type": "string",
                              "description": "creator_card | batch_profiles | search_multi | incremental_sync | comment_labels | search_repeat | batch_comments | batch_jobs",
                              "example": "search_multi"
                            },
                            "message": {
                              "type": "string",
                              "description": "One sentence for a person or an agent to read.",
                              "example": "You searched \"matcha\" on 3 platforms one call at a time; /v1/search/multi returns each platform's own search rows in one call at the same price per platform, and a platform with no rows is not charged."
                            },
                            "method": {
                              "type": "string",
                              "description": "GET or POST.",
                              "example": "GET"
                            },
                            "path": {
                              "type": "string",
                              "description": "The call the hint points to.",
                              "example": "/v1/search/multi?query=matcha&platforms=instagram,tiktok,youtube"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "platform",
                    "endpoint",
                    "data",
                    "credits_used",
                    "credits_remaining",
                    "request_id",
                    "cached"
                  ]
                },
                "example": {
                  "success": true,
                  "platform": "instagram",
                  "endpoint": "/v1/instagram/engagement",
                  "data": {
                    "engagement_rate_percentages": 38.33,
                    "recent_posts": 12,
                    "followers": 87608035,
                    "comments": 528912,
                    "likes": 33049046,
                    "recent_posts_explanation": "Statistics based on the last 12 posts",
                    "id_user": "2278169415",
                    "username": "mrbeast",
                    "is_private": false,
                    "posts_details": [
                      {
                        "likes": 5636982,
                        "comments": 69484,
                        "taken_at": 1781457954,
                        "datetime": "2026-06-14 20:25:54",
                        "hours_since_post": 461,
                        "time_ago": "19 days ago",
                        "likes_per_hour": 12228,
                        "comments_per_hour": 151
                      },
                      {
                        "likes": 20000768,
                        "comments": 223510,
                        "taken_at": 1732824650,
                        "datetime": "2024-11-28 23:10:50",
                        "hours_since_post": 13971,
                        "time_ago": "2 years ago",
                        "likes_per_hour": 1432,
                        "comments_per_hour": 16
                      },
                      {
                        "likes": 929226,
                        "comments": 30633,
                        "taken_at": 1782232475,
                        "datetime": "2026-06-23 19:34:35",
                        "hours_since_post": 246,
                        "time_ago": "10 days ago",
                        "likes_per_hour": 3777,
                        "comments_per_hour": 125
                      },
                      {
                        "likes": 487761,
                        "comments": 22482,
                        "taken_at": 1781799425,
                        "datetime": "2026-06-18 19:17:05",
                        "hours_since_post": 366,
                        "time_ago": "15 days ago",
                        "likes_per_hour": 1333,
                        "comments_per_hour": 61
                      },
                      {
                        "likes": 712265,
                        "comments": 15716,
                        "taken_at": 1781366405,
                        "datetime": "2026-06-13 19:00:05",
                        "hours_since_post": 487,
                        "time_ago": "20 days ago",
                        "likes_per_hour": 1463,
                        "comments_per_hour": 32
                      },
                      {
                        "likes": 1475116,
                        "comments": 35386,
                        "taken_at": 1781277094,
                        "datetime": "2026-06-12 18:11:34",
                        "hours_since_post": 512,
                        "time_ago": "21 days ago",
                        "likes_per_hour": 2881,
                        "comments_per_hour": 69
                      },
                      {
                        "likes": 1108220,
                        "comments": 26632,
                        "taken_at": 1780160249,
                        "datetime": "2026-05-30 19:57:29",
                        "hours_since_post": 822,
                        "time_ago": "1 months ago",
                        "likes_per_hour": 1348,
                        "comments_per_hour": 32
                      },
                      {
                        "likes": 542948,
                        "comments": 28476,
                        "taken_at": 1779375582,
                        "datetime": "2026-05-21 17:59:42",
                        "hours_since_post": 1040,
                        "time_ago": "1 months ago",
                        "likes_per_hour": 522,
                        "comments_per_hour": 27
                      },
                      {
                        "likes": 698514,
                        "comments": 24401,
                        "taken_at": 1779120014,
                        "datetime": "2026-05-18 19:00:14",
                        "hours_since_post": 1111,
                        "time_ago": "2 months ago",
                        "likes_per_hour": 629,
                        "comments_per_hour": 22
                      },
                      {
                        "likes": 468000,
                        "comments": 13548,
                        "taken_at": 1778947209,
                        "datetime": "2026-05-16 19:00:09",
                        "hours_since_post": 1159,
                        "time_ago": "2 months ago",
                        "likes_per_hour": 404,
                        "comments_per_hour": 12
                      },
                      {
                        "likes": 526594,
                        "comments": 24411,
                        "taken_at": 1777737719,
                        "datetime": "2026-05-02 19:01:59",
                        "hours_since_post": 1495,
                        "time_ago": "2 months ago",
                        "likes_per_hour": 352,
                        "comments_per_hour": 16
                      },
                      {
                        "likes": 462652,
                        "comments": 14233,
                        "taken_at": 1777580305,
                        "datetime": "2026-04-30 23:18:25",
                        "hours_since_post": 1538,
                        "time_ago": "2 months ago",
                        "likes_per_hour": 301,
                        "comments_per_hour": 9
                      }
                    ]
                  },
                  "credits_used": 5,
                  "credits_remaining": 9999,
                  "request_id": "req-8Kq2ZmR4vT9xLb3P",
                  "cached": false,
                  "redacted": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid request - missing or malformed parameters",
            "x-error-codes": [
              "INVALID_REQUEST",
              "COHORT_MEMBER_LIMIT_EXCEEDED",
              "COHORT_LIMIT_EXCEEDED",
              "COHORT_IDENTITY_PLATFORM_UNSUPPORTED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INVALID_REQUEST",
                    "message": "Invalid request - missing or malformed parameters",
                    "status": 400,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - missing or invalid API key",
            "x-error-codes": [
              "MISSING_API_KEY",
              "INVALID_API_KEY"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "MISSING_API_KEY",
                    "message": "Unauthorized - missing or invalid API key",
                    "status": 401,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "402": {
            "description": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
            "x-error-codes": [
              "INSUFFICIENT_CREDITS",
              "KEY_BUDGET_EXCEEDED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INSUFFICIENT_CREDITS",
                    "message": "Payment required - the account balance is too low, or the calling key has spent its own per-key credit limit",
                    "status": 402,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "404": {
            "description": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
            "x-error-codes": [
              "ENDPOINT_NOT_FOUND",
              "RESOURCE_NOT_FOUND",
              "RUN_NOT_FOUND",
              "SCHEDULE_NOT_FOUND",
              "STREAM_NOT_FOUND"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "ENDPOINT_NOT_FOUND",
                    "message": "Not found - the endpoint does not exist, or the requested resource was not found upstream",
                    "status": 404,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed - wrong HTTP verb for this endpoint",
            "x-error-codes": [
              "METHOD_NOT_ALLOWED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "METHOD_NOT_ALLOWED",
                    "message": "Method not allowed - wrong HTTP verb for this endpoint",
                    "status": 405,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "409": {
            "description": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "IDEMPOTENCY_REPLAY_UNAVAILABLE",
              "COHORT_IDENTITY_CONFLICT",
              "COHORT_QUERY_NOT_CANCELLABLE",
              "COHORT_QUERY_NOT_READY",
              "RUN_STATE_CONFLICT",
              "STREAM_STATE_CONFLICT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_CONFLICT",
                    "message": "Conflict - an idempotent request is still in flight, its completed body exceeded the replay limit, or the cohort resource is not in a state that allows this operation",
                    "status": 409,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "410": {
            "description": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
            "x-error-codes": [
              "RUN_EXPIRED",
              "CURSOR_EXPIRED"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RUN_EXPIRED",
                    "message": "Gone - the discover run's retention passed and its rows were deleted; start a new run. On the events feed, the cursor is older than the 30-day retention; restart from cursor=oldest",
                    "status": 410,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "413": {
            "description": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE",
              "COHORT_RESULT_TOO_LARGE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "PAYLOAD_TOO_LARGE",
                    "message": "Payload too large: the JSON request body exceeds the 1 MB size limit and is rejected before parsing, or a single cohort result cannot fit beneath the 1 MB response-page ceiling",
                    "status": 413,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "422": {
            "description": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
              "NEEDS_ASYNC"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
                    "message": "Idempotency payload mismatch - this Idempotency-Key was already used with a different request payload; or a discover request with async=false is over what one call can answer (NEEDS_ASYNC)",
                    "status": 422,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "429": {
            "description": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
            "x-error-codes": [
              "RATE_LIMITED",
              "CONCURRENCY_LIMIT"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "RATE_LIMITED",
                    "message": "Rate or concurrency limit exceeded. `RATE_LIMITED`: more than 600 requests in a 1-minute sliding window on this API key (headers `X-RateLimit-Limit`/`Remaining`/`Reset`; `Retry-After` is seconds until the window resets). `CONCURRENCY_LIMIT`: more than 50 simultaneous in-flight requests (headers `X-Concurrency-Limit`/`Remaining`; short static `Retry-After`). Both are unbilled. Honor `Retry-After`, then back off with jitter. See /docs/rate-limits.",
                    "status": 429,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
            "x-error-codes": [
              "INTERNAL_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "INTERNAL_ERROR",
                    "message": "Internal server error - an immediate refund is attempted; credits_used reports the committed net charge and exact compensation is queued if that refund cannot commit",
                    "status": 500,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "502": {
            "description": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Upstream error - the platform returned an error; an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 502,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
            "x-error-codes": [
              "SERVICE_UNAVAILABLE"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "SERVICE_UNAVAILABLE",
                    "message": "Service unavailable - the request is unbilled when rejected before deduction, otherwise an immediate refund is attempted and credits_used reports the committed net charge",
                    "status": 503,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          },
          "504": {
            "description": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
            "x-error-codes": [
              "UPSTREAM_ERROR"
            ],
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                },
                "example": {
                  "success": false,
                  "error": {
                    "type": "UPSTREAM_ERROR",
                    "message": "Gateway timeout - the request was still running close to the platform time limit and is answered as UPSTREAM_ERROR, the same code as 502. An immediate refund is attempted and credits_used reports the committed net charge. When details.retry_with is set, retryable is false and there is no Retry-After",
                    "status": 504,
                    "doc_url": "https://www.socialcrawl.dev/docs/errors"
                  },
                  "credits_used": 0,
                  "credits_remaining": null,
                  "request_id": "req-abc123"
                }
              }
            }
          }
        }
      }
    }
  },
  "x-full-spec": "https://www.socialcrawl.dev/v1/openapi.json"
}
