{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "SocialTap API changelog",
  "home_page_url": "https://staging-fly.socialtap.dev/docs/changelog/",
  "feed_url": "https://staging-fly.socialtap.dev/changelog.json",
  "description": "Additions, deprecations, retirements and fixes to the SocialTap API.",
  "language": "en",
  "items": [
    {
      "id": "https://staging-fly.socialtap.dev/docs/changelog/#2026-10-30-contract",
      "url": "https://staging-fly.socialtap.dev/docs/changelog/#2026-10-30-contract",
      "title": "API contract changes",
      "content_html": "<details><summary>Contract changes (28)</summary><ul class=\"changes\"><li><code>endpoint facebook.post added (/v1/facebook/post)</code></li><li><code>resource post: field platform_specific.facebook added</code></li><li><code>resource post: field platform_specific.facebook.feedback_id added</code></li><li><code>resource post: field platform_specific.facebook.video_id added</code></li><li><code>resource post: field platform_specific.facebook.reactions added</code></li><li><code>resource post: field platform_specific.facebook.reactions[].type added</code></li><li><code>resource post: field platform_specific.facebook.reactions[].count added</code></li><li><code>resource post: field platform_specific.facebook.shared_post added</code></li><li><code>resource post: field platform_specific.facebook.shared_post.id added</code></li><li><code>resource post: field platform_specific.facebook.shared_post.url added</code></li><li><code>resource post: field platform_specific.facebook.shared_post.author added</code></li><li><code>resource post: field platform_specific.facebook.shared_post.author.id added</code></li><li><code>resource post: field platform_specific.facebook.shared_post.author.username added</code></li><li><code>resource post: field platform_specific.facebook.shared_post.author.display_name added</code></li><li><code>resource post: field platform_specific.facebook.shared_post.author.url added</code></li><li><code>resource post: field platform_specific.facebook.shared_post.author.avatar_url added</code></li><li><code>resource post: field platform_specific.facebook.shared_post.author.is_verified added</code></li><li><code>resource post: field platform_specific.facebook.link added</code></li><li><code>resource post: field platform_specific.facebook.link.url added</code></li><li><code>resource post: field platform_specific.facebook.link.title added</code></li><li><code>resource post: field platform_specific.facebook.link.image_url added</code></li><li><code>MCP tool get_post: platform facebook added</code></li><li><code>endpoint threads.profile added (/v1/threads/profile)</code></li><li><code>resource profile: field platform_specific.threads added</code></li><li><code>resource profile: field platform_specific.threads.interest_tags added</code></li><li><code>resource profile: field platform_specific.threads.verified_link_urls added</code></li><li><code>MCP tool find_endpoint: platform threads added</code></li><li><code>MCP tool get_profile: platform threads added</code></li></ul></details>",
      "date_published": "2026-10-30T00:00:00Z",
      "tags": [
        "changed"
      ],
      "_socialtap": {
        "kind": "changed",
        "endpoints": [],
        "changes": [
          "endpoint facebook.post added (/v1/facebook/post)",
          "resource post: field platform_specific.facebook added",
          "resource post: field platform_specific.facebook.feedback_id added",
          "resource post: field platform_specific.facebook.video_id added",
          "resource post: field platform_specific.facebook.reactions added",
          "resource post: field platform_specific.facebook.reactions[].type added",
          "resource post: field platform_specific.facebook.reactions[].count added",
          "resource post: field platform_specific.facebook.shared_post added",
          "resource post: field platform_specific.facebook.shared_post.id added",
          "resource post: field platform_specific.facebook.shared_post.url added",
          "resource post: field platform_specific.facebook.shared_post.author added",
          "resource post: field platform_specific.facebook.shared_post.author.id added",
          "resource post: field platform_specific.facebook.shared_post.author.username added",
          "resource post: field platform_specific.facebook.shared_post.author.display_name added",
          "resource post: field platform_specific.facebook.shared_post.author.url added",
          "resource post: field platform_specific.facebook.shared_post.author.avatar_url added",
          "resource post: field platform_specific.facebook.shared_post.author.is_verified added",
          "resource post: field platform_specific.facebook.link added",
          "resource post: field platform_specific.facebook.link.url added",
          "resource post: field platform_specific.facebook.link.title added",
          "resource post: field platform_specific.facebook.link.image_url added",
          "MCP tool get_post: platform facebook added",
          "endpoint threads.profile added (/v1/threads/profile)",
          "resource profile: field platform_specific.threads added",
          "resource profile: field platform_specific.threads.interest_tags added",
          "resource profile: field platform_specific.threads.verified_link_urls added",
          "MCP tool find_endpoint: platform threads added",
          "MCP tool get_profile: platform threads added"
        ]
      }
    },
    {
      "id": "https://staging-fly.socialtap.dev/docs/changelog/#2026-10-29-threads-profile",
      "url": "https://staging-fly.socialtap.dev/docs/changelog/#2026-10-29-threads-profile",
      "title": "Threads profiles",
      "content_html": "<p class=\"muted small\"><a href=\"/docs/reference/threads/profile/\">Threads Profile API</a></p><p><code>GET /v1/threads/profile</code> returns a public Threads account. Send a username with or without the @, the account&#39;s numeric id, or a threads.com or threads.net profile link, including the replies, reposts and media tabs.</p>\n<p>Follower counts are the exact integer Threads publishes. The response also lists the topic labels Threads shows on the profile and which bio links Threads marks verified. A private account&#39;s public header comes back with <code>is_private</code> true. An unknown account is <code>not_found</code>, and a post link is refused.</p>\n<details><summary>Contract changes (48)</summary><ul class=\"changes\"><li><code>operation GET /v1/security_events added (security_events.list)</code></li><li><code>route session.create: param body.agent_token added</code></li><li><code>docs path agent_confirm added (/agent/confirm/)</code></li><li><code>docs path check_email added (/signup/check-email/)</code></li><li><code>docs path forgot_password added (/signin/forgot/)</code></li><li><code>docs path reset_password added (/signin/reset/)</code></li><li><code>docs path security added (/security/)</code></li><li><code>docs path signin added (/signin/)</code></li><li><code>docs path start added (/start/)</code></li><li><code>docs path two_factor added (/signin/two-factor/)</code></li><li><code>docs path verify_email added (/signup/verify/)</code></li><li><code>breaking (accepted): operation POST /v1/signup removed</code></li><li><code>breaking (accepted): route session.create: auth changed none → session</code></li><li><code>breaking (accepted): route session.create: scope changed &quot;&quot; → &quot;account:read&quot;</code></li><li><code>breaking (accepted): route session.create: param body.token removed</code></li><li><code>breaking (accepted): docs path signup_confirm (/signup/confirm/) removed</code></li><li><code>endpoint instagram.posts added (/v1/instagram/posts)</code></li><li><code>MCP tool list_posts: platform instagram added</code></li><li><code>resource post: field platform_specific.instagram added</code></li><li><code>resource post: field platform_specific.instagram.is_ai_generated added</code></li><li><code>endpoint facebook.post added (/v1/facebook/post)</code></li><li><code>resource post: field platform_specific.facebook added</code></li><li><code>resource post: field platform_specific.facebook.feedback_id added</code></li><li><code>resource post: field platform_specific.facebook.video_id added</code></li><li><code>resource post: field platform_specific.facebook.reactions added</code></li><li><code>resource post: field platform_specific.facebook.reactions[].type added</code></li><li><code>resource post: field platform_specific.facebook.reactions[].count added</code></li><li><code>resource post: field platform_specific.facebook.shared_post added</code></li><li><code>resource post: field platform_specific.facebook.shared_post.id added</code></li><li><code>resource post: field platform_specific.facebook.shared_post.url added</code></li><li><code>resource post: field platform_specific.facebook.shared_post.author added</code></li><li><code>resource post: field platform_specific.facebook.shared_post.author.id added</code></li><li><code>resource post: field platform_specific.facebook.shared_post.author.username added</code></li><li><code>resource post: field platform_specific.facebook.shared_post.author.display_name added</code></li><li><code>resource post: field platform_specific.facebook.shared_post.author.url added</code></li><li><code>resource post: field platform_specific.facebook.shared_post.author.avatar_url added</code></li><li><code>resource post: field platform_specific.facebook.shared_post.author.is_verified added</code></li><li><code>resource post: field platform_specific.facebook.link added</code></li><li><code>resource post: field platform_specific.facebook.link.url added</code></li><li><code>resource post: field platform_specific.facebook.link.title added</code></li><li><code>resource post: field platform_specific.facebook.link.image_url added</code></li><li><code>MCP tool get_post: platform facebook added</code></li><li><code>endpoint threads.profile added (/v1/threads/profile)</code></li><li><code>resource profile: field platform_specific.threads added</code></li><li><code>resource profile: field platform_specific.threads.interest_tags added</code></li><li><code>MCP tool find_endpoint: platform threads added</code></li><li><code>MCP tool get_profile: platform threads added</code></li><li><code>resource profile: field platform_specific.threads.verified_link_urls added</code></li></ul></details>",
      "date_published": "2026-10-29T00:00:00Z",
      "tags": [
        "added"
      ],
      "_socialtap": {
        "kind": "added",
        "endpoints": [
          "threads.profile"
        ],
        "changes": [
          "operation GET /v1/security_events added (security_events.list)",
          "route session.create: param body.agent_token added",
          "docs path agent_confirm added (/agent/confirm/)",
          "docs path check_email added (/signup/check-email/)",
          "docs path forgot_password added (/signin/forgot/)",
          "docs path reset_password added (/signin/reset/)",
          "docs path security added (/security/)",
          "docs path signin added (/signin/)",
          "docs path start added (/start/)",
          "docs path two_factor added (/signin/two-factor/)",
          "docs path verify_email added (/signup/verify/)",
          "breaking (accepted): operation POST /v1/signup removed",
          "breaking (accepted): route session.create: auth changed none → session",
          "breaking (accepted): route session.create: scope changed \"\" → \"account:read\"",
          "breaking (accepted): route session.create: param body.token removed",
          "breaking (accepted): docs path signup_confirm (/signup/confirm/) removed",
          "endpoint instagram.posts added (/v1/instagram/posts)",
          "MCP tool list_posts: platform instagram added",
          "resource post: field platform_specific.instagram added",
          "resource post: field platform_specific.instagram.is_ai_generated added",
          "endpoint facebook.post added (/v1/facebook/post)",
          "resource post: field platform_specific.facebook added",
          "resource post: field platform_specific.facebook.feedback_id added",
          "resource post: field platform_specific.facebook.video_id added",
          "resource post: field platform_specific.facebook.reactions added",
          "resource post: field platform_specific.facebook.reactions[].type added",
          "resource post: field platform_specific.facebook.reactions[].count added",
          "resource post: field platform_specific.facebook.shared_post added",
          "resource post: field platform_specific.facebook.shared_post.id added",
          "resource post: field platform_specific.facebook.shared_post.url added",
          "resource post: field platform_specific.facebook.shared_post.author added",
          "resource post: field platform_specific.facebook.shared_post.author.id added",
          "resource post: field platform_specific.facebook.shared_post.author.username added",
          "resource post: field platform_specific.facebook.shared_post.author.display_name added",
          "resource post: field platform_specific.facebook.shared_post.author.url added",
          "resource post: field platform_specific.facebook.shared_post.author.avatar_url added",
          "resource post: field platform_specific.facebook.shared_post.author.is_verified added",
          "resource post: field platform_specific.facebook.link added",
          "resource post: field platform_specific.facebook.link.url added",
          "resource post: field platform_specific.facebook.link.title added",
          "resource post: field platform_specific.facebook.link.image_url added",
          "MCP tool get_post: platform facebook added",
          "endpoint threads.profile added (/v1/threads/profile)",
          "resource profile: field platform_specific.threads added",
          "resource profile: field platform_specific.threads.interest_tags added",
          "MCP tool find_endpoint: platform threads added",
          "MCP tool get_profile: platform threads added",
          "resource profile: field platform_specific.threads.verified_link_urls added"
        ]
      }
    },
    {
      "id": "https://staging-fly.socialtap.dev/docs/changelog/#2026-10-28-contract",
      "url": "https://staging-fly.socialtap.dev/docs/changelog/#2026-10-28-contract",
      "title": "API contract changes",
      "content_html": "<details><summary>Contract changes (100)</summary><ul class=\"changes\"><li><code>endpoint youtube.posts added (/v1/youtube/posts)</code></li><li><code>MCP tool list_posts added</code></li><li><code>endpoint tiktok.post added (/v1/tiktok/post)</code></li><li><code>resource post: field platform_specific.tiktok added</code></li><li><code>resource post: field platform_specific.tiktok.author_sec_uid added</code></li><li><code>resource post: field platform_specific.tiktok.country_code added</code></li><li><code>resource post: field platform_specific.tiktok.is_ad added</code></li><li><code>resource post: field platform_specific.tiktok.is_ai_generated added</code></li><li><code>resource post: field platform_specific.tiktok.location added</code></li><li><code>resource post: field platform_specific.tiktok.location.id added</code></li><li><code>resource post: field platform_specific.tiktok.location.name added</code></li><li><code>resource post: field platform_specific.tiktok.location.address added</code></li><li><code>resource post: field platform_specific.tiktok.location.city added</code></li><li><code>resource post: field platform_specific.tiktok.location.category added</code></li><li><code>resource post: field platform_specific.tiktok.music added</code></li><li><code>resource post: field platform_specific.tiktok.music.id added</code></li><li><code>resource post: field platform_specific.tiktok.music.title added</code></li><li><code>resource post: field platform_specific.tiktok.music.author_name added</code></li><li><code>resource post: field platform_specific.tiktok.music.is_original added</code></li><li><code>resource post: field platform_specific.tiktok.music.duration_ms added</code></li><li><code>resource post: field platform_specific.tiktok.music.cover_url added</code></li><li><code>resource post: field platform_specific.tiktok.music.play_url added</code></li><li><code>MCP tool get_post: platform tiktok added</code></li><li><code>endpoint tiktok.posts added (/v1/tiktok/posts)</code></li><li><code>MCP tool list_posts: platform tiktok added</code></li><li><code>endpoint tiktok.comments added (/v1/tiktok/comments)</code></li><li><code>resource comment: field platform_specific.tiktok added</code></li><li><code>resource comment: field platform_specific.tiktok.language added</code></li><li><code>MCP tool list_comments: platform tiktok added</code></li><li><code>endpoint instagram.profile added (/v1/instagram/profile)</code></li><li><code>resource profile: field platform_specific.instagram added</code></li><li><code>resource profile: field platform_specific.instagram.fbid added</code></li><li><code>resource profile: field platform_specific.instagram.is_memorialized added</code></li><li><code>resource profile: field platform_specific.instagram.is_story_live added</code></li><li><code>resource profile: field platform_specific.instagram.is_highlights_shown added</code></li><li><code>resource profile: field platform_specific.instagram.pronouns added</code></li><li><code>MCP tool get_profile: platform instagram added</code></li><li><code>endpoint rumble.search_posts added (/v1/rumble/search_posts)</code></li><li><code>resource post: field platform_specific.rumble added</code></li><li><code>resource post: field platform_specific.rumble.dislike_count added</code></li><li><code>resource post: field platform_specific.rumble.author_follower_count added</code></li><li><code>resource post: field platform_specific.rumble.is_age_restricted added</code></li><li><code>resource post: field platform_specific.rumble.is_live_now added</code></li><li><code>resource post: field platform_specific.rumble.concurrent_viewer_count added</code></li><li><code>resource post: field platform_specific.rumble.live_started_at added</code></li><li><code>resource post: field platform_specific.rumble.scheduled_start_at added</code></li><li><code>MCP tool find_endpoint: platform rumble added</code></li><li><code>MCP tool search: argument duration added</code></li><li><code>MCP tool search: platform rumble added</code></li><li><code>MCP tool search: argument sort added</code></li><li><code>MCP tool search: argument tab added</code></li><li><code>MCP tool search: type posts added</code></li><li><code>endpoint rumble.post added (/v1/rumble/post)</code></li><li><code>resource post: field platform_specific.rumble.embed_id added</code></li><li><code>resource post: field platform_specific.rumble.embed_url added</code></li><li><code>resource post: field platform_specific.rumble.numeric_id added</code></li><li><code>resource post: field platform_specific.rumble.category added</code></li><li><code>resource post: field platform_specific.rumble.secondary_category added</code></li><li><code>resource post: field platform_specific.rumble.keywords added</code></li><li><code>resource post: field platform_specific.rumble.caption_tracks added</code></li><li><code>resource post: field platform_specific.rumble.caption_tracks[].language added</code></li><li><code>resource post: field platform_specific.rumble.caption_tracks[].label added</code></li><li><code>resource post: field platform_specific.rumble.caption_tracks[].url added</code></li><li><code>resource post: field platform_specific.rumble.caption_tracks[].is_auto_generated added</code></li><li><code>resource post: field platform_specific.rumble.files added</code></li><li><code>resource post: field platform_specific.rumble.files[].kind added</code></li><li><code>resource post: field platform_specific.rumble.files[].format added</code></li><li><code>resource post: field platform_specific.rumble.files[].url added</code></li><li><code>resource post: field platform_specific.rumble.files[].width added</code></li><li><code>resource post: field platform_specific.rumble.files[].height added</code></li><li><code>resource post: field platform_specific.rumble.files[].bitrate_kbps added</code></li><li><code>resource post: field platform_specific.rumble.files[].size_bytes added</code></li><li><code>MCP tool get_post: platform rumble added</code></li><li><code>endpoint rumble.transcript added (/v1/rumble/transcript)</code></li><li><code>resource transcript: field platform_specific.rumble added</code></li><li><code>resource transcript: field platform_specific.rumble.track_label added</code></li><li><code>resource transcript: field platform_specific.rumble.caption_url added</code></li><li><code>resource transcript: field platform_specific.rumble.caption_tracks added</code></li><li><code>resource transcript: field platform_specific.rumble.caption_tracks[].language added</code></li><li><code>resource transcript: field platform_specific.rumble.caption_tracks[].label added</code></li><li><code>resource transcript: field platform_specific.rumble.caption_tracks[].url added</code></li><li><code>resource transcript: field platform_specific.rumble.caption_tracks[].is_auto_generated added</code></li><li><code>MCP tool get_transcript: platform rumble added</code></li><li><code>endpoint rumble.profile added (/v1/rumble/profile)</code></li><li><code>resource profile: field platform_specific.rumble added</code></li><li><code>resource profile: field platform_specific.rumble.account_type added</code></li><li><code>resource profile: field platform_specific.rumble.numeric_id added</code></li><li><code>resource profile: field platform_specific.rumble.user_id added</code></li><li><code>MCP tool get_profile: platform rumble added</code></li><li><code>endpoint rumble.comments added (/v1/rumble/comments)</code></li><li><code>resource comment: field platform_specific.rumble added</code></li><li><code>resource comment: field platform_specific.rumble.dislike_count added</code></li><li><code>resource comment: field platform_specific.rumble.author_badges added</code></li><li><code>MCP tool list_comments: platform rumble added</code></li><li><code>endpoint rumble.posts added (/v1/rumble/posts)</code></li><li><code>MCP tool list_posts: argument duration added</code></li><li><code>MCP tool list_posts: platform rumble added</code></li><li><code>endpoint rumble.posts: param since added</code></li><li><code>endpoint rumble.posts: param until added</code></li><li><code>endpoint rumble.posts: pages emptied by since/until are free</code></li></ul></details>",
      "date_published": "2026-10-28T00:00:00Z",
      "tags": [
        "changed"
      ],
      "_socialtap": {
        "kind": "changed",
        "endpoints": [],
        "changes": [
          "endpoint youtube.posts added (/v1/youtube/posts)",
          "MCP tool list_posts added",
          "endpoint tiktok.post added (/v1/tiktok/post)",
          "resource post: field platform_specific.tiktok added",
          "resource post: field platform_specific.tiktok.author_sec_uid added",
          "resource post: field platform_specific.tiktok.country_code added",
          "resource post: field platform_specific.tiktok.is_ad added",
          "resource post: field platform_specific.tiktok.is_ai_generated added",
          "resource post: field platform_specific.tiktok.location added",
          "resource post: field platform_specific.tiktok.location.id added",
          "resource post: field platform_specific.tiktok.location.name added",
          "resource post: field platform_specific.tiktok.location.address added",
          "resource post: field platform_specific.tiktok.location.city added",
          "resource post: field platform_specific.tiktok.location.category added",
          "resource post: field platform_specific.tiktok.music added",
          "resource post: field platform_specific.tiktok.music.id added",
          "resource post: field platform_specific.tiktok.music.title added",
          "resource post: field platform_specific.tiktok.music.author_name added",
          "resource post: field platform_specific.tiktok.music.is_original added",
          "resource post: field platform_specific.tiktok.music.duration_ms added",
          "resource post: field platform_specific.tiktok.music.cover_url added",
          "resource post: field platform_specific.tiktok.music.play_url added",
          "MCP tool get_post: platform tiktok added",
          "endpoint tiktok.posts added (/v1/tiktok/posts)",
          "MCP tool list_posts: platform tiktok added",
          "endpoint tiktok.comments added (/v1/tiktok/comments)",
          "resource comment: field platform_specific.tiktok added",
          "resource comment: field platform_specific.tiktok.language added",
          "MCP tool list_comments: platform tiktok added",
          "endpoint instagram.profile added (/v1/instagram/profile)",
          "resource profile: field platform_specific.instagram added",
          "resource profile: field platform_specific.instagram.fbid added",
          "resource profile: field platform_specific.instagram.is_memorialized added",
          "resource profile: field platform_specific.instagram.is_story_live added",
          "resource profile: field platform_specific.instagram.is_highlights_shown added",
          "resource profile: field platform_specific.instagram.pronouns added",
          "MCP tool get_profile: platform instagram added",
          "endpoint rumble.search_posts added (/v1/rumble/search_posts)",
          "resource post: field platform_specific.rumble added",
          "resource post: field platform_specific.rumble.dislike_count added",
          "resource post: field platform_specific.rumble.author_follower_count added",
          "resource post: field platform_specific.rumble.is_age_restricted added",
          "resource post: field platform_specific.rumble.is_live_now added",
          "resource post: field platform_specific.rumble.concurrent_viewer_count added",
          "resource post: field platform_specific.rumble.live_started_at added",
          "resource post: field platform_specific.rumble.scheduled_start_at added",
          "MCP tool find_endpoint: platform rumble added",
          "MCP tool search: argument duration added",
          "MCP tool search: platform rumble added",
          "MCP tool search: argument sort added",
          "MCP tool search: argument tab added",
          "MCP tool search: type posts added",
          "endpoint rumble.post added (/v1/rumble/post)",
          "resource post: field platform_specific.rumble.embed_id added",
          "resource post: field platform_specific.rumble.embed_url added",
          "resource post: field platform_specific.rumble.numeric_id added",
          "resource post: field platform_specific.rumble.category added",
          "resource post: field platform_specific.rumble.secondary_category added",
          "resource post: field platform_specific.rumble.keywords added",
          "resource post: field platform_specific.rumble.caption_tracks added",
          "resource post: field platform_specific.rumble.caption_tracks[].language added",
          "resource post: field platform_specific.rumble.caption_tracks[].label added",
          "resource post: field platform_specific.rumble.caption_tracks[].url added",
          "resource post: field platform_specific.rumble.caption_tracks[].is_auto_generated added",
          "resource post: field platform_specific.rumble.files added",
          "resource post: field platform_specific.rumble.files[].kind added",
          "resource post: field platform_specific.rumble.files[].format added",
          "resource post: field platform_specific.rumble.files[].url added",
          "resource post: field platform_specific.rumble.files[].width added",
          "resource post: field platform_specific.rumble.files[].height added",
          "resource post: field platform_specific.rumble.files[].bitrate_kbps added",
          "resource post: field platform_specific.rumble.files[].size_bytes added",
          "MCP tool get_post: platform rumble added",
          "endpoint rumble.transcript added (/v1/rumble/transcript)",
          "resource transcript: field platform_specific.rumble added",
          "resource transcript: field platform_specific.rumble.track_label added",
          "resource transcript: field platform_specific.rumble.caption_url added",
          "resource transcript: field platform_specific.rumble.caption_tracks added",
          "resource transcript: field platform_specific.rumble.caption_tracks[].language added",
          "resource transcript: field platform_specific.rumble.caption_tracks[].label added",
          "resource transcript: field platform_specific.rumble.caption_tracks[].url added",
          "resource transcript: field platform_specific.rumble.caption_tracks[].is_auto_generated added",
          "MCP tool get_transcript: platform rumble added",
          "endpoint rumble.profile added (/v1/rumble/profile)",
          "resource profile: field platform_specific.rumble added",
          "resource profile: field platform_specific.rumble.account_type added",
          "resource profile: field platform_specific.rumble.numeric_id added",
          "resource profile: field platform_specific.rumble.user_id added",
          "MCP tool get_profile: platform rumble added",
          "endpoint rumble.comments added (/v1/rumble/comments)",
          "resource comment: field platform_specific.rumble added",
          "resource comment: field platform_specific.rumble.dislike_count added",
          "resource comment: field platform_specific.rumble.author_badges added",
          "MCP tool list_comments: platform rumble added",
          "endpoint rumble.posts added (/v1/rumble/posts)",
          "MCP tool list_posts: argument duration added",
          "MCP tool list_posts: platform rumble added",
          "endpoint rumble.posts: param since added",
          "endpoint rumble.posts: param until added",
          "endpoint rumble.posts: pages emptied by since/until are free"
        ]
      }
    },
    {
      "id": "https://staging-fly.socialtap.dev/docs/changelog/#2026-10-27-sign-in",
      "url": "https://staging-fly.socialtap.dev/docs/changelog/#2026-10-27-sign-in",
      "title": "Sign in with Google, GitHub or a password, and two-factor authentication",
      "content_html": "<p>The dashboard has a new sign-in.</p>\n<ul>\n<li><strong>Sign up and sign in</strong> with Google, GitHub, or an email address and a password (the address is verified first).\nThe emailed sign-in links are gone: <code>POST /v1/signup</code> is removed, and <code>POST /v1/session</code> is now the dashboard&#39;s\nsetup call once you are signed in.</li>\n<li><strong>Two-factor authentication</strong> with an authenticator app and backup codes, for every way of signing in.</li>\n<li><strong>Security settings</strong>: your sign-in methods, password, sessions (sign out any of them), and a log of sign-ins and\nsecurity changes (<code>GET /v1/security_events</code>).</li>\n<li><strong>AI agents</strong> still sign up with <code>POST /v1/agent_signup</code>. To activate an agent&#39;s live key, its human now signs in\n(or signs up) with the address the agent used and approves the agent.</li>\n</ul>\n<details><summary>Contract changes (38)</summary><ul class=\"changes\"><li><code>error code insufficient_credits: details key purchase_url added</code></li><li><code>error code insufficient_credits: details key checkout added</code></li><li><code>error code unknown_endpoint added (HTTP 404)</code></li><li><code>warning code test_default_example added</code></li><li><code>MCP tool create_job: argument detail added</code></li><li><code>MCP tool create_job: argument idempotency_key added</code></li><li><code>MCP tool list_job_results added</code></li><li><code>resource ad: field platform_specific added</code></li><li><code>resource comment: field platform_specific added</code></li><li><code>resource post: field platform_specific added</code></li><li><code>resource profile: field platform_specific added</code></li><li><code>resource transcript: field platform_specific added</code></li><li><code>endpoint youtube.profile added (/v1/youtube/profile)</code></li><li><code>resource profile: field platform_specific.youtube added</code></li><li><code>resource profile: field platform_specific.youtube.keywords added</code></li><li><code>resource profile: field platform_specific.youtube.is_official_artist_channel added</code></li><li><code>MCP tool get_profile: platform youtube added</code></li><li><code>resource profile: field platform_specific.youtube.is_subscriber_count_hidden added</code></li><li><code>resource profile: field platform_specific.youtube.is_business_email_listed added</code></li><li><code>breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/apix ⇒ username apix</code></li><li><code>breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/cx ⇒ username cx</code></li><li><code>breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/jobsx ⇒ username jobsx</code></li><li><code>breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/livex ⇒ username livex</code></li><li><code>breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/logoutx ⇒ username logoutx</code></li><li><code>breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/select_sitex ⇒ username select_sitex</code></li><li><code>breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/sx ⇒ username sx</code></li><li><code>breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/testtubex ⇒ username testtubex</code></li><li><code>breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/trendsx ⇒ username trendsx</code></li><li><code>breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/tx ⇒ username tx</code></li><li><code>breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/ytx ⇒ username ytx</code></li><li><code>operation POST /v1/docs_feedback added (docs_feedback.create)</code></li><li><code>MCP tool read_doc added</code></li><li><code>MCP tool search_docs added</code></li><li><code>docs path api_catalog added (/.well-known/api-catalog)</code></li><li><code>docs path endpoint_reference added (/docs/reference/{platform}/{name}/)</code></li><li><code>docs path not_found_markdown added (/404.md)</code></li><li><code>docs path search_index added (/search.json)</code></li><li><code>docs path skill added (/skill.md)</code></li></ul></details>",
      "date_published": "2026-10-27T00:00:00Z",
      "tags": [
        "changed"
      ],
      "_socialtap": {
        "kind": "changed",
        "endpoints": [],
        "changes": [
          "error code insufficient_credits: details key purchase_url added",
          "error code insufficient_credits: details key checkout added",
          "error code unknown_endpoint added (HTTP 404)",
          "warning code test_default_example added",
          "MCP tool create_job: argument detail added",
          "MCP tool create_job: argument idempotency_key added",
          "MCP tool list_job_results added",
          "resource ad: field platform_specific added",
          "resource comment: field platform_specific added",
          "resource post: field platform_specific added",
          "resource profile: field platform_specific added",
          "resource transcript: field platform_specific added",
          "endpoint youtube.profile added (/v1/youtube/profile)",
          "resource profile: field platform_specific.youtube added",
          "resource profile: field platform_specific.youtube.keywords added",
          "resource profile: field platform_specific.youtube.is_official_artist_channel added",
          "MCP tool get_profile: platform youtube added",
          "resource profile: field platform_specific.youtube.is_subscriber_count_hidden added",
          "resource profile: field platform_specific.youtube.is_business_email_listed added",
          "breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/apix ⇒ username apix",
          "breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/cx ⇒ username cx",
          "breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/jobsx ⇒ username jobsx",
          "breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/livex ⇒ username livex",
          "breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/logoutx ⇒ username logoutx",
          "breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/select_sitex ⇒ username select_sitex",
          "breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/sx ⇒ username sx",
          "breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/testtubex ⇒ username testtubex",
          "breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/trendsx ⇒ username trendsx",
          "breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/tx ⇒ username tx",
          "breaking (accepted): endpoint youtube.profile: no longer accepts https://www.youtube.com/ytx ⇒ username ytx",
          "operation POST /v1/docs_feedback added (docs_feedback.create)",
          "MCP tool read_doc added",
          "MCP tool search_docs added",
          "docs path api_catalog added (/.well-known/api-catalog)",
          "docs path endpoint_reference added (/docs/reference/{platform}/{name}/)",
          "docs path not_found_markdown added (/404.md)",
          "docs path search_index added (/search.json)",
          "docs path skill added (/skill.md)"
        ]
      }
    },
    {
      "id": "https://staging-fly.socialtap.dev/docs/changelog/#2026-10-26-accounts",
      "url": "https://staging-fly.socialtap.dev/docs/changelog/#2026-10-26-accounts",
      "title": "Self-serve signup, test keys, API key management and usage",
      "content_html": "<p>You can now get started without talking to anyone, test for free, and manage your account through the API.</p>\n<ul>\n<li><strong>Sign up</strong> with your email address: the emailed link creates your account with free credits, a live key and a\ntest key, and opens the dashboard (keys, usage, balance, credit packs). <strong>AI agents</strong> can sign up with\n<code>POST /v1/agent_signup</code>: they get a test key at once and a live key that works once you confirm by email.</li>\n<li><strong>Test keys</strong> (<code>st_test_…</code>) answer every endpoint from recorded responses, free and deterministic, and reserved\n&quot;magic&quot; inputs trigger each error code, so integrations and CI can exercise every branch at no cost.</li>\n<li><strong>API keys</strong> have scopes (<code>endpoints</code>, <code>jobs</code>, <code>account:read</code>, <code>admin</code>), optional spend limits per day or month\n(<code>spend_limit_reached</code>), expiry and IP allowlists, managed through <code>/v1/api_keys</code>.</li>\n<li><strong>Account and usage</strong>: <code>GET /v1/account</code> (balance, plan, the calling key), <code>GET /v1/usage</code> (requests and credits\nover time by endpoint, key and outcome) and <code>GET /v1/credit_transactions</code> (the ledger). Set\n<code>low_balance_threshold</code> to get a <code>credits.low</code> email and event.</li>\n<li><code>meta.mode</code> says whether a response came from a live or a test key. <code>forbidden</code> is now returned (with\n<code>details.reason</code>), and a missing key&#39;s <code>unauthorized</code> says where to get one.</li>\n</ul>\n<details><summary>Contract changes (115)</summary><ul class=\"changes\"><li><code>endpoint facebook.transcript: accepts video links</code></li><li><code>endpoint instagram.transcript: accepts video links</code></li><li><code>endpoint instagram.transcript: accepts post links</code></li><li><code>endpoint tiktok.transcript: accepts video links</code></li><li><code>endpoint tiktok.transcript: accepts post links</code></li><li><code>endpoint youtube.transcript: accepts video links</code></li><li><code>error code endpoint_retired added (HTTP 410)</code></li><li><code>error code forbidden added (HTTP 403)</code></li><li><code>error code idempotency_key_in_progress added (HTTP 409)</code></li><li><code>error code idempotency_key_reused added (HTTP 422)</code></li><li><code>error code insufficient_credits: details key credits_required added</code></li><li><code>error code insufficient_credits: details key credits_available added</code></li><li><code>error code invalid_cursor: details key reason added</code></li><li><code>error code invalid_input: details key suggestion added</code></li><li><code>error code invalid_input: details key accepted_params added</code></li><li><code>error code invalid_input: details key url_kind added</code></li><li><code>error code invalid_input: details key url_platform added</code></li><li><code>error code invalid_input: details key accepted_url_kinds added</code></li><li><code>error code invalid_input: details key endpoints added</code></li><li><code>error code invalid_input: details key fields added</code></li><li><code>error code job_not_found added (HTTP 404)</code></li><li><code>error code overloaded: details key retry_after added</code></li><li><code>error code rate_limited: details key retry_after added</code></li><li><code>error code spend_limit_reached added (HTTP 402)</code></li><li><code>header cache-control added</code></li><li><code>header deprecation added</code></li><li><code>header link added</code></li><li><code>header ratelimit added</code></li><li><code>header ratelimit-policy added</code></li><li><code>header sunset added</code></li><li><code>header traceparent added</code></li><li><code>header x-client-request-id added</code></li><li><code>common param fields added</code></li><li><code>warning code deprecated_endpoint added</code></li><li><code>shared param country added</code></li><li><code>shared param lang added</code></li><li><code>shared param since added</code></li><li><code>shared param sort added</code></li><li><code>shared param until added</code></li><li><code>meta fields are part of the locked contract</code></li><li><code>page fields are part of the locked contract</code></li><li><code>error fields are part of the locked contract</code></li><li><code>MCP tool find_endpoint added</code></li><li><code>MCP tool get_transcript added</code></li><li><code>header authorization added</code></li><li><code>error code forbidden: details key reason added</code></li><li><code>error code forbidden: details key required_scope added</code></li><li><code>error code spend_limit_reached: details key api_key_id added</code></li><li><code>error code spend_limit_reached: details key spend_limit added</code></li><li><code>error code spend_limit_reached: details key interval added</code></li><li><code>error code spend_limit_reached: details key used added</code></li><li><code>error code spend_limit_reached: details key credits_required added</code></li><li><code>error code spend_limit_reached: details key resets_at added</code></li><li><code>error code unauthorized: details key signup_url added</code></li><li><code>error code unauthorized: details key agent_signup_url added</code></li><li><code>meta: field mode added</code></li><li><code>MCP tool get_account added</code></li><li><code>error code insufficient_credits: details key max_credits added</code></li><li><code>header idempotency-key added</code></li><li><code>header idempotent-replayed added</code></li><li><code>header location added</code></li><li><code>header prefer added</code></li><li><code>header preference-applied added</code></li><li><code>header webhook-id added</code></li><li><code>header webhook-signature added</code></li><li><code>header webhook-timestamp added</code></li><li><code>event type job.completed added</code></li><li><code>event type job.canceled added</code></li><li><code>event type job.expired added</code></li><li><code>event type credits.low added</code></li><li><code>event type credits.depleted added</code></li><li><code>event type api_key.spend_limit_reached added</code></li><li><code>event type webhook.test added</code></li><li><code>operation DELETE /v1/webhook_endpoints/{id} added (webhook_endpoints.delete)</code></li><li><code>operation GET /v1/events added (events.list)</code></li><li><code>operation GET /v1/events/{id} added (events.get)</code></li><li><code>operation GET /v1/jobs added (jobs.list)</code></li><li><code>operation GET /v1/jobs/{id} added (jobs.get)</code></li><li><code>operation GET /v1/jobs/{id}/results added (jobs.results.list)</code></li><li><code>operation GET /v1/jobs/{id}/results.jsonl added (jobs.results.download)</code></li><li><code>operation GET /v1/webhook_endpoints added (webhook_endpoints.list)</code></li><li><code>operation GET /v1/webhook_endpoints/{id} added (webhook_endpoints.get)</code></li><li><code>operation GET /v1/webhook_endpoints/{id}/deliveries added (webhook_endpoints.deliveries.list)</code></li><li><code>operation PATCH /v1/webhook_endpoints/{id} added (webhook_endpoints.update)</code></li><li><code>operation POST /v1/events/{id}/redeliver added (events.redeliver)</code></li><li><code>operation POST /v1/jobs added (jobs.create)</code></li><li><code>operation POST /v1/jobs/{id}/cancel added (jobs.cancel)</code></li><li><code>operation POST /v1/webhook_endpoints added (webhook_endpoints.create)</code></li><li><code>operation POST /v1/webhook_endpoints/{id}/rotate_secret added (webhook_endpoints.rotate_secret)</code></li><li><code>operation POST /v1/webhook_endpoints/{id}/test added (webhook_endpoints.test)</code></li><li><code>MCP tool create_job added</code></li><li><code>MCP tool get_job added</code></li><li><code>endpoint tiktok.profile added (/v1/tiktok/profile)</code></li><li><code>resource profile is live</code></li><li><code>MCP tool get_profile added</code></li><li><code>endpoint instagram.post added (/v1/instagram/post)</code></li><li><code>resource post is live</code></li><li><code>MCP tool get_post added</code></li><li><code>endpoint facebook.search_ads added (/v1/facebook/search_ads)</code></li><li><code>resource ad is live</code></li><li><code>MCP tool search added</code></li><li><code>endpoint youtube.comments added (/v1/youtube/comments)</code></li><li><code>resource comment is live</code></li><li><code>MCP tool list_comments added</code></li><li><code>endpoint facebook.search_ads: param lang added</code></li><li><code>shared param status added</code></li><li><code>MCP tool search: argument lang added</code></li><li><code>breaking (accepted): endpoint facebook.search_ads: param status default changed &quot;&quot; → &quot;all&quot;</code></li><li><code>warning code partial_data added</code></li><li><code>meta: field warnings[].fields added</code></li><li><code>resource ad: field unknown_fields added</code></li><li><code>resource comment: field unknown_fields added</code></li><li><code>resource post: field unknown_fields added</code></li><li><code>resource profile: field unknown_fields added</code></li><li><code>docs path pricing_feed added (/pricing.json)</code></li></ul></details>",
      "date_published": "2026-10-26T00:00:00Z",
      "tags": [
        "added"
      ],
      "_socialtap": {
        "kind": "added",
        "endpoints": [],
        "changes": [
          "endpoint facebook.transcript: accepts video links",
          "endpoint instagram.transcript: accepts video links",
          "endpoint instagram.transcript: accepts post links",
          "endpoint tiktok.transcript: accepts video links",
          "endpoint tiktok.transcript: accepts post links",
          "endpoint youtube.transcript: accepts video links",
          "error code endpoint_retired added (HTTP 410)",
          "error code forbidden added (HTTP 403)",
          "error code idempotency_key_in_progress added (HTTP 409)",
          "error code idempotency_key_reused added (HTTP 422)",
          "error code insufficient_credits: details key credits_required added",
          "error code insufficient_credits: details key credits_available added",
          "error code invalid_cursor: details key reason added",
          "error code invalid_input: details key suggestion added",
          "error code invalid_input: details key accepted_params added",
          "error code invalid_input: details key url_kind added",
          "error code invalid_input: details key url_platform added",
          "error code invalid_input: details key accepted_url_kinds added",
          "error code invalid_input: details key endpoints added",
          "error code invalid_input: details key fields added",
          "error code job_not_found added (HTTP 404)",
          "error code overloaded: details key retry_after added",
          "error code rate_limited: details key retry_after added",
          "error code spend_limit_reached added (HTTP 402)",
          "header cache-control added",
          "header deprecation added",
          "header link added",
          "header ratelimit added",
          "header ratelimit-policy added",
          "header sunset added",
          "header traceparent added",
          "header x-client-request-id added",
          "common param fields added",
          "warning code deprecated_endpoint added",
          "shared param country added",
          "shared param lang added",
          "shared param since added",
          "shared param sort added",
          "shared param until added",
          "meta fields are part of the locked contract",
          "page fields are part of the locked contract",
          "error fields are part of the locked contract",
          "MCP tool find_endpoint added",
          "MCP tool get_transcript added",
          "header authorization added",
          "error code forbidden: details key reason added",
          "error code forbidden: details key required_scope added",
          "error code spend_limit_reached: details key api_key_id added",
          "error code spend_limit_reached: details key spend_limit added",
          "error code spend_limit_reached: details key interval added",
          "error code spend_limit_reached: details key used added",
          "error code spend_limit_reached: details key credits_required added",
          "error code spend_limit_reached: details key resets_at added",
          "error code unauthorized: details key signup_url added",
          "error code unauthorized: details key agent_signup_url added",
          "meta: field mode added",
          "MCP tool get_account added",
          "error code insufficient_credits: details key max_credits added",
          "header idempotency-key added",
          "header idempotent-replayed added",
          "header location added",
          "header prefer added",
          "header preference-applied added",
          "header webhook-id added",
          "header webhook-signature added",
          "header webhook-timestamp added",
          "event type job.completed added",
          "event type job.canceled added",
          "event type job.expired added",
          "event type credits.low added",
          "event type credits.depleted added",
          "event type api_key.spend_limit_reached added",
          "event type webhook.test added",
          "operation DELETE /v1/webhook_endpoints/{id} added (webhook_endpoints.delete)",
          "operation GET /v1/events added (events.list)",
          "operation GET /v1/events/{id} added (events.get)",
          "operation GET /v1/jobs added (jobs.list)",
          "operation GET /v1/jobs/{id} added (jobs.get)",
          "operation GET /v1/jobs/{id}/results added (jobs.results.list)",
          "operation GET /v1/jobs/{id}/results.jsonl added (jobs.results.download)",
          "operation GET /v1/webhook_endpoints added (webhook_endpoints.list)",
          "operation GET /v1/webhook_endpoints/{id} added (webhook_endpoints.get)",
          "operation GET /v1/webhook_endpoints/{id}/deliveries added (webhook_endpoints.deliveries.list)",
          "operation PATCH /v1/webhook_endpoints/{id} added (webhook_endpoints.update)",
          "operation POST /v1/events/{id}/redeliver added (events.redeliver)",
          "operation POST /v1/jobs added (jobs.create)",
          "operation POST /v1/jobs/{id}/cancel added (jobs.cancel)",
          "operation POST /v1/webhook_endpoints added (webhook_endpoints.create)",
          "operation POST /v1/webhook_endpoints/{id}/rotate_secret added (webhook_endpoints.rotate_secret)",
          "operation POST /v1/webhook_endpoints/{id}/test added (webhook_endpoints.test)",
          "MCP tool create_job added",
          "MCP tool get_job added",
          "endpoint tiktok.profile added (/v1/tiktok/profile)",
          "resource profile is live",
          "MCP tool get_profile added",
          "endpoint instagram.post added (/v1/instagram/post)",
          "resource post is live",
          "MCP tool get_post added",
          "endpoint facebook.search_ads added (/v1/facebook/search_ads)",
          "resource ad is live",
          "MCP tool search added",
          "endpoint youtube.comments added (/v1/youtube/comments)",
          "resource comment is live",
          "MCP tool list_comments added",
          "endpoint facebook.search_ads: param lang added",
          "shared param status added",
          "MCP tool search: argument lang added",
          "breaking (accepted): endpoint facebook.search_ads: param status default changed \"\" → \"all\"",
          "warning code partial_data added",
          "meta: field warnings[].fields added",
          "resource ad: field unknown_fields added",
          "resource comment: field unknown_fields added",
          "resource post: field unknown_fields added",
          "resource profile: field unknown_fields added",
          "docs path pricing_feed added (/pricing.json)"
        ]
      }
    },
    {
      "id": "https://staging-fly.socialtap.dev/docs/changelog/#2026-10-26-api-conventions",
      "url": "https://staging-fly.socialtap.dev/docs/changelog/#2026-10-26-api-conventions",
      "title": "Request conventions, richer errors and response metadata",
      "content_html": "<p>Every endpoint now follows the same request conventions, and every response tells you more about itself.</p>\n<ul>\n<li><strong>Unknown parameters are rejected</strong> with <code>invalid_input</code>, free, naming the parameter and the one you most likely\nmeant (<code>username</code> → <code>handle</code>). Previously they were ignored. Common parameters (<code>max_age</code>, <code>fields</code>) are always\nknown.</li>\n<li><strong>Errors carry everything needed to react</strong> without parsing the message: <code>status</code>, <code>retryable</code>, <code>param</code>,\n<code>remediation</code>, <code>doc_url</code>, <code>details</code> (for example <code>credits_required</code>, or the endpoint a link belongs to) and\n<code>charged</code> (always false). <code>retry-after</code> is never sent on credit errors.</li>\n<li><strong>A link of the wrong kind</strong> (a profile link sent to a video endpoint, a link from another platform) is answered with\nthe endpoint that takes it.</li>\n<li><strong><code>meta</code></strong> gains <code>input</code> (what your url resolved to), <code>credits_remaining</code>, <code>client_request_id</code> and <code>warnings</code>.</li>\n<li><strong><code>fields</code></strong> selects only the fields you need, after the cache, at no cost.</li>\n<li><strong>Lists</strong> gain <code>page.end_reason</code> and a <code>Link: rel=&quot;next&quot;</code> header; <code>since</code> stops paging on newest-first lists.</li>\n<li><strong>Headers</strong>: send <code>x-client-request-id</code> to have your own ID echoed and logged, and <code>traceparent</code> to match traces.\n<code>RateLimit-Policy</code> and <code>RateLimit</code> describe the account&#39;s runaway-protection ceiling, and <code>Cache-Control: max-age</code>\nworks like <code>max_age</code>.</li>\n<li>Deprecated endpoints will announce themselves with <code>Deprecation</code> and <code>Sunset</code> headers and a warning, and answer\n<code>endpoint_retired</code> after their sunset. This changelog is also a <a href=\"/changelog.json\">JSON Feed</a>.</li>\n</ul>\n",
      "date_published": "2026-10-26T00:00:00Z",
      "tags": [
        "changed"
      ],
      "_socialtap": {
        "kind": "changed",
        "endpoints": [],
        "changes": []
      }
    },
    {
      "id": "https://staging-fly.socialtap.dev/docs/changelog/#2026-10-26-jobs",
      "url": "https://staging-fly.socialtap.dev/docs/changelog/#2026-10-26-jobs",
      "title": "Background jobs and batches, webhooks, events and Idempotency-Key",
      "content_html": "<p>Run many requests, or one long one, without holding a connection open, and hear back when they are done.</p>\n<ul>\n<li><strong>Jobs</strong>: <code>POST /v1/jobs</code> runs a batch of endpoint requests in the background, at each endpoint&#39;s own price, and\n<code>max_pages</code> walks a whole list server-side. With <code>?wait</code> a short job answers inline (a synchronous batch); otherwise\npoll <code>GET /v1/jobs/{id}</code> (free), page through <code>GET /v1/jobs/{id}/results</code> as items finish, or download every result\nfrom the job&#39;s signed <code>results_url</code>. <code>Prefer: respond-async</code> turns any endpoint request into a one-request job.</li>\n<li><strong>Credits</strong> are set aside per job (<code>max_credits</code>) and charged per item as it ends; failed items are free. A key&#39;s\nspend limit holds through its jobs, and a test key&#39;s jobs answer from recorded responses, free.</li>\n<li><strong>Webhooks</strong> (Standard Webhooks signatures, retried for days, secrets rotated without downtime) deliver\n<code>job.completed</code>, <code>job.canceled</code>, <code>job.expired</code>, <code>credits.low</code>, <code>credits.depleted</code> and\n<code>api_key.spend_limit_reached</code>; <code>/v1/events</code> lists every event and redelivers one on request.</li>\n<li><strong>Idempotency-Key</strong> on every POST: retrying with the same key and body never repeats the work.</li>\n</ul>\n",
      "date_published": "2026-10-26T00:00:00Z",
      "tags": [
        "added"
      ],
      "_socialtap": {
        "kind": "added",
        "endpoints": [],
        "changes": []
      }
    }
  ]
}
