{
  "openapi": "3.1.0",
  "info": {
    "title": "scraper-api.com API",
    "version": "0.1.0",
    "description": "Self-hosted social media scraping API — a drop-in replacement for scrapecreators.com.\n\n## Authentication\nEvery request must send your API key in the `x-api-key` header.\n\n## Credits\nBilling is credit-based: **1 request = 1 credit** (some endpoints cost more — see each endpoint's description). Credits are **non-expiring** — buy once, use whenever.\n\nResponse bodies match the ScrapeCreators shapes so existing integrations work unchanged.",
    "contact": {
      "name": "Fabian Bitter",
      "email": "fabian@bitter.de"
    }
  },
  "servers": [
    {
      "url": "https://api.scraper-api.com",
      "description": "Production"
    }
  ],
  "tags": [
    {
      "name": "Instagram",
      "description": "Instagram: read-only. 8 public endpoints, no account needed."
    },
    {
      "name": "TikTok",
      "description": "TikTok: read-only. 3 public endpoints, no account needed."
    },
    {
      "name": "YouTube",
      "description": "YouTube: read-only. 16 public endpoints, no account needed."
    },
    {
      "name": "Facebook",
      "description": "Facebook: read-only. 6 public endpoints, no account needed."
    },
    {
      "name": "LinkedIn",
      "description": "LinkedIn: read-only. 6 public endpoints, no account needed."
    },
    {
      "name": "Twitter",
      "description": "Twitter: read-only. 3 public endpoints, no account needed."
    },
    {
      "name": "Spotify",
      "description": "Spotify: read-only. 6 public endpoints, no account needed."
    },
    {
      "name": "Apple Music",
      "description": "Apple Music: read-only. 4 public endpoints, no account needed."
    },
    {
      "name": "Kleinanzeigen",
      "description": "Kleinanzeigen: 3 public endpoints, no account needed, plus 4 signed-in routes (login, logout, messages, account) behind an `x-session-id`."
    },
    {
      "name": "Quoka",
      "description": "Quoka: 3 public endpoints, no account needed, plus 6 signed-in routes (login, logout, messages, account, listings, register) behind an `x-session-id`."
    },
    {
      "name": "markt.de",
      "description": "markt.de: 3 public endpoints, no account needed, plus 7 signed-in routes (login, logout, messages, account, listings, register, activate) behind an `x-session-id`."
    },
    {
      "name": "mobile.de",
      "description": "mobile.de: read-only. 3 public endpoints, no account needed."
    },
    {
      "name": "11880",
      "description": "11880: read-only. 2 public endpoints, no account needed."
    },
    {
      "name": "Gelbe Seiten",
      "description": "Gelbe Seiten: read-only. 2 public endpoints, no account needed."
    },
    {
      "name": "ImmobilienScout24",
      "description": "ImmobilienScout24: read-only. 2 public endpoints, no account needed."
    },
    {
      "name": "immowelt",
      "description": "immowelt: read-only. 2 public endpoints, no account needed."
    },
    {
      "name": "Bayut",
      "description": "Bayut: read-only. 2 public endpoints, no account needed."
    },
    {
      "name": "LOVOO",
      "description": "LOVOO: 0 public endpoints, no account needed, plus 9 signed-in routes (login, logout, messages, account, search, profile, like, matches, register) behind an `x-session-id`."
    },
    {
      "name": "Jaumo",
      "description": "Jaumo: 0 public endpoints, no account needed, plus 11 signed-in routes (login, logout, messages, account, search, profile, like, matches, photos, photos/delete, register) behind an `x-session-id`."
    },
    {
      "name": "Tinder",
      "description": "Tinder: 0 public endpoints, no account needed, plus 9 signed-in routes (login, logout, messages, account, search, profile, like, matches, challenge) behind an `x-session-id`."
    },
    {
      "name": "Bumble",
      "description": "Bumble: 0 public endpoints, no account needed, plus 9 signed-in routes (login, logout, messages, account, search, profile, like, matches, challenge) behind an `x-session-id`."
    },
    {
      "name": "Snapchat",
      "description": "Snapchat: read-only. 1 public endpoint, no account needed."
    },
    {
      "name": "Google",
      "description": "Google: read-only. 1 public endpoint, no account needed."
    },
    {
      "name": "Arbeitsagentur",
      "description": "Arbeitsagentur: read-only. 2 public endpoints, no account needed."
    },
    {
      "name": "Ausbildung.de",
      "description": "Ausbildung.de: read-only. 2 public endpoints, no account needed."
    },
    {
      "name": "meinestadt.de",
      "description": "meinestadt.de: read-only. 2 public endpoints, no account needed."
    }
  ],
  "x-tagGroups": [
    {
      "name": "Platforms",
      "tags": [
        "Instagram",
        "TikTok",
        "YouTube",
        "Facebook",
        "LinkedIn",
        "Twitter",
        "Spotify",
        "Apple Music",
        "Kleinanzeigen",
        "Quoka",
        "markt.de",
        "mobile.de",
        "11880",
        "Gelbe Seiten",
        "ImmobilienScout24",
        "immowelt",
        "Bayut",
        "LOVOO",
        "Jaumo",
        "Tinder",
        "Bumble",
        "Snapchat",
        "Google",
        "Arbeitsagentur",
        "Ausbildung.de",
        "meinestadt.de"
      ]
    }
  ],
  "components": {
    "securitySchemes": {
      "apiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "x-api-key",
        "description": "Your scraper-api.com API key."
      }
    }
  },
  "security": [
    {
      "apiKeyAuth": []
    }
  ],
  "paths": {
    "/v1/instagram/profile": {
      "get": {
        "tags": [
          "Instagram"
        ],
        "summary": "Get an Instagram user's full profile by handle (followers, following, bio) (no login).",
        "operationId": "instagram_v1_profile",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "user": {
                      "id": "528817151",
                      "username": "nasa",
                      "full_name": "NASA",
                      "biography": "Explore the universe and discover our home planet with @NASA.",
                      "external_url": "https://www.nasa.gov",
                      "profile_pic_url": "https://instagram.fxxx.fna.fbcdn.net/mock-pic.jpg",
                      "profile_pic_url_hd": "https://instagram.fxxx.fna.fbcdn.net/mock-pic-hd.jpg",
                      "is_private": false,
                      "is_verified": true,
                      "is_business_account": false,
                      "edge_followed_by": {
                        "count": 97800000
                      },
                      "edge_follow": {
                        "count": 78
                      },
                      "edge_owner_to_timeline_media": {
                        "count": 4210,
                        "edges": []
                      }
                    }
                  },
                  "status": "ok"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/instagram/basic-profile": {
      "get": {
        "tags": [
          "Instagram"
        ],
        "summary": "Get an Instagram user's basic public profile (name, verified, private, picture) by handle.",
        "operationId": "instagram_v1_basic_profile",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "user": {
                      "id": "528817151",
                      "username": "nasa",
                      "full_name": "NASA",
                      "biography": "Explore the universe and discover our home planet with @NASA.",
                      "external_url": "https://www.nasa.gov",
                      "profile_pic_url": "https://instagram.fxxx.fna.fbcdn.net/mock-pic.jpg",
                      "profile_pic_url_hd": "https://instagram.fxxx.fna.fbcdn.net/mock-pic-hd.jpg",
                      "is_private": false,
                      "is_verified": true,
                      "is_business_account": false,
                      "edge_followed_by": {
                        "count": 97800000
                      },
                      "edge_follow": {
                        "count": 78
                      },
                      "edge_owner_to_timeline_media": {
                        "count": 4210,
                        "edges": []
                      }
                    }
                  },
                  "status": "ok"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/instagram/user/posts": {
      "get": {
        "tags": [
          "Instagram"
        ],
        "summary": "Get an Instagram user's posts (incl. reels) by handle; paginate via next_max_id (no login).",
        "operationId": "instagram_v2_user_posts",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "items": [
                    {
                      "pk": "3938228276934129521",
                      "id": "3938228276934129521_528817151",
                      "code": "DPmockCode",
                      "taken_at": 1735689600,
                      "media_type": 8,
                      "like_count": 257796,
                      "comment_count": 1204,
                      "caption": {
                        "text": "A mock caption from the drop-in fixture."
                      },
                      "image_versions2": {
                        "candidates": [
                          {
                            "url": "https://instagram.fxxx.fna.fbcdn.net/mock.jpg",
                            "width": 1080,
                            "height": 1080
                          }
                        ]
                      },
                      "user": {
                        "pk": "528817151",
                        "username": "nasa",
                        "is_verified": true
                      }
                    }
                  ],
                  "num_results": 1,
                  "more_available": true,
                  "next_max_id": "3932620782437825016_528817151",
                  "user": {
                    "pk": "528817151",
                    "username": "nasa",
                    "full_name": "NASA",
                    "is_private": false,
                    "is_verified": true
                  },
                  "auto_load_more_enabled": true,
                  "status": "ok"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/instagram/post": {
      "get": {
        "tags": [
          "Instagram"
        ],
        "summary": "Get a single Instagram post/reel by URL (no login).",
        "operationId": "instagram_v1_post",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "items": [
                    {
                      "pk": "3938228276934129521",
                      "id": "3938228276934129521_528817151",
                      "code": "DPmockCode",
                      "taken_at": 1735689600,
                      "media_type": 8,
                      "like_count": 257796,
                      "comment_count": 1204,
                      "caption": {
                        "text": "A mock caption from the drop-in fixture."
                      },
                      "image_versions2": {
                        "candidates": [
                          {
                            "url": "https://instagram.fxxx.fna.fbcdn.net/mock.jpg",
                            "width": 1080,
                            "height": 1080
                          }
                        ]
                      },
                      "user": {
                        "pk": "528817151",
                        "username": "nasa",
                        "is_verified": true
                      }
                    }
                  ],
                  "num_results": 1,
                  "data": {
                    "pk": "3938228276934129521",
                    "id": "3938228276934129521_528817151",
                    "code": "DPmockCode",
                    "taken_at": 1735689600,
                    "media_type": 8,
                    "like_count": 257796,
                    "comment_count": 1204,
                    "caption": {
                      "text": "A mock caption from the drop-in fixture."
                    },
                    "image_versions2": {
                      "candidates": [
                        {
                          "url": "https://instagram.fxxx.fna.fbcdn.net/mock.jpg",
                          "width": 1080,
                          "height": 1080
                        }
                      ]
                    },
                    "user": {
                      "pk": "528817151",
                      "username": "nasa",
                      "is_verified": true
                    }
                  },
                  "status": "ok"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/instagram/user/reels": {
      "get": {
        "tags": [
          "Instagram"
        ],
        "summary": "Get an Instagram user's reels by handle/user_id (paginated via max_id) (no login).",
        "operationId": "instagram_v1_user_reels",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, user_id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "user_id",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, user_id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "items": [],
                  "paging_info": {
                    "more_available": false,
                    "max_id": null
                  },
                  "status": "ok"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/instagram/post/comments": {
      "get": {
        "tags": [
          "Instagram"
        ],
        "summary": "Get comments on an Instagram post by URL (paginated via next_min_id) (no login).",
        "operationId": "instagram_v2_post_comments",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "comments": [],
                  "next_min_id": null,
                  "has_more_comments": false,
                  "comment_count": 0,
                  "status": "ok"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/instagram/reels/trending": {
      "get": {
        "tags": [
          "Instagram"
        ],
        "summary": "Temporarily unavailable. Get currently trending Instagram reels (paginated via max_id) (no login).",
        "operationId": "instagram_v1_reels_trending",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "items": [],
                  "paging_info": {
                    "more_available": false,
                    "max_id": null
                  },
                  "status": "ok"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/instagram/user/embed": {
      "get": {
        "tags": [
          "Instagram"
        ],
        "summary": "Get an embeddable HTML representation of an Instagram profile by handle.",
        "operationId": "instagram_v1_user_embed",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, url.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, url.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "html": "<blockquote class=\"instagram-media\"></blockquote>",
                  "status": "ok"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/tiktok/profile": {
      "get": {
        "tags": [
          "TikTok"
        ],
        "summary": "Get one TikTok profile (nickname, bio, verification, follower/like/video counts, avatar).",
        "operationId": "tiktok_v1_profile",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": true,
            "description": "TikTok handle, with or without the leading @.",
            "schema": {
              "type": "string",
              "example": "nasa"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "6614005710195802113",
                    "handle": "nasa",
                    "sec_uid": "MS4wLjABAAAAsBOTNZUYFhBrTFIrYzPRtBxDrmGuPTPSTGjb-eLwUYYaFPQGnZ_4KUTPCTZBnPfF",
                    "nickname": "NASA",
                    "bio": "Exploring the universe and our home planet.",
                    "verified": true,
                    "private": false,
                    "is_organization": true,
                    "region": "US",
                    "language": "en",
                    "created_at": "2018-12-12T18:41:52.000Z",
                    "avatar": "https://p16-common-sign.tiktokcdn-eu.com/tos-useast2a-avt-0068-giso/example~tplv-tiktokx-cropcenter:1080:1080.jpeg",
                    "bio_link": "https://www.nasa.gov",
                    "follower_count": 4200000,
                    "following_count": 8,
                    "like_count": 39000000,
                    "video_count": 6
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/tiktok/profile/videos": {
      "get": {
        "tags": [
          "TikTok"
        ],
        "summary": "Get a TikTok profile's videos (description, stats, media urls, music, hashtags), paged.",
        "operationId": "tiktok_v1_profile_videos",
        "description": "**Live endpoint.** Credit cost: **3** (1 request = 3 credits).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": true,
            "description": "TikTok handle, with or without the leading @.",
            "schema": {
              "type": "string",
              "example": "nasa"
            }
          },
          {
            "name": "pages",
            "in": "query",
            "required": false,
            "description": "Pages of 16 to read. Defaults to 1; each page costs one credit.",
            "schema": {
              "type": "string",
              "example": "2"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Resume from the `cursor` a previous call returned, instead of starting at the newest video. Together with `complete: false` this is how a whole profile is read in several calls.",
            "schema": {
              "type": "string",
              "example": "1780412195000"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "handle": "nasa",
                  "count": 1,
                  "complete": true,
                  "cursor": null,
                  "videos": [
                    {
                      "id": "7646906208133106966",
                      "url": "https://www.tiktok.com/@nasa/video/7646906208133106966",
                      "description": "Sunrise from the International Space Station.",
                      "created_at": "2026-06-02T09:14:22.000Z",
                      "duration_seconds": 15,
                      "cover": "https://p16-common-sign.tiktokcdn-eu.com/tos-no1a-p-4864-no/cover.jpeg",
                      "play_url": "https://v16-webapp-prime.tiktok.com/video/tos/no1a/play.mp4",
                      "download_url": "https://webapp-no1a.tiktok.com/download/main.mp4",
                      "width": 1080,
                      "height": 1920,
                      "play_count": 29300,
                      "like_count": 412,
                      "comment_count": 18,
                      "share_count": 7,
                      "collect_count": 22,
                      "music": {
                        "id": "7646906239209343766",
                        "title": "original sound",
                        "author": "NASA",
                        "original": true
                      },
                      "hashtags": [],
                      "mentions": [],
                      "is_ad": false
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/tiktok/video": {
      "get": {
        "tags": [
          "TikTok"
        ],
        "summary": "Get one TikTok video by url or id (description, stats, media urls, music, author).",
        "operationId": "tiktok_v1_video",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Video url. Short links (vm./vt.tiktok.com) and urls with tracking query are accepted and resolved. Provide at least one of: url, id.",
            "schema": {
              "type": "string",
              "example": "https://www.tiktok.com/@nasa/video/7646906208133106966"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Numeric video id, if you already have it. Provide at least one of: url, id.",
            "schema": {
              "type": "string",
              "example": "7646906208133106966"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "7646906208133106966",
                    "url": "https://www.tiktok.com/@nasa/video/7646906208133106966",
                    "description": "Sunrise from the International Space Station.",
                    "created_at": "2026-06-02T09:14:22.000Z",
                    "duration_seconds": 15,
                    "cover": "https://p16-common-sign.tiktokcdn-eu.com/tos-no1a-p-4864-no/cover.jpeg",
                    "play_url": "https://v16-webapp-prime.tiktok.com/video/tos/no1a/play.mp4",
                    "download_url": "https://webapp-no1a.tiktok.com/download/main.mp4",
                    "width": 1080,
                    "height": 1920,
                    "play_count": 29300,
                    "like_count": 412,
                    "comment_count": 18,
                    "share_count": 7,
                    "collect_count": 22,
                    "music": {
                      "id": "7646906239209343766",
                      "title": "original sound",
                      "author": "NASA",
                      "original": true
                    },
                    "hashtags": [],
                    "mentions": [],
                    "is_ad": false
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/youtube/channel": {
      "get": {
        "tags": [
          "YouTube"
        ],
        "summary": "Get a YouTube channel's details by channelId, handle or url.",
        "operationId": "youtube_v1_channel",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, channelId, url.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "channelId",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, channelId, url.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, channelId, url.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "channelId": "UCxcTeAKWJca6XyJ37_ZoKIQ",
                  "channel": "http://www.youtube.com/@ThePatMcAfeeShow",
                  "name": "The Pat McAfee Show",
                  "avatar": {
                    "image": {
                      "sources": [
                        {
                          "url": "https://yt3.googleusercontent.com/mock=s72",
                          "width": 72,
                          "height": 72
                        }
                      ]
                    }
                  },
                  "description": "",
                  "subscriberCount": 2750000,
                  "subscriberCountText": "2.75M subscribers",
                  "videoCountText": "9,221 videos",
                  "viewCountText": "2,170,355,382 views",
                  "joinedDateText": "Joined Aug 23, 2017",
                  "tags": "pat mcafee, football",
                  "email": null,
                  "store": "https://store.patmcafeeshow.com",
                  "twitter": "https://twitter.com/PatMcAfeeShow",
                  "instagram": "https://instagram.com/patmcafeeshow",
                  "links": [
                    "https://store.patmcafeeshow.com"
                  ],
                  "country": "United States"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/youtube/channel-videos": {
      "get": {
        "tags": [
          "YouTube"
        ],
        "summary": "Get a YouTube channel's videos (paginated via continuationToken).",
        "operationId": "youtube_v1_channel_videos",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, channelId, url.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "channelId",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, channelId, url.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, channelId, url.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "videos": [
                    {
                      "type": "video",
                      "id": "5EWaxmWgQMI",
                      "url": "https://www.youtube.com/watch?v=5EWaxmWgQMI",
                      "title": "Russell Wilson Hopes To Finish Career As A Steeler",
                      "description": "",
                      "thumbnail": "https://i.ytimg.com/vi/5EWaxmWgQMI/hqdefault.jpg",
                      "channel": {
                        "title": "",
                        "thumbnail": null
                      },
                      "viewCountText": "110,447 views",
                      "viewCountInt": 110447,
                      "publishedTimeText": "9 days ago",
                      "publishedTime": "2025-01-23T22:48:53.914Z",
                      "lengthText": "37:25",
                      "lengthSeconds": 2245,
                      "badges": []
                    }
                  ],
                  "continuationToken": "4qmFsgLlFhIYVmock"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/youtube/channel/playlists": {
      "get": {
        "tags": [
          "YouTube"
        ],
        "summary": "Get a YouTube channel's playlists.",
        "operationId": "youtube_v1_channel_playlists",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, channelId, url.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "channelId",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, channelId, url.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, channelId, url.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "playlists": [
                    {
                      "type": "playlist",
                      "id": "PLoSWVnSA9vG8hI-SUpAimvYJrPh-PRRvp",
                      "title": "If You Survive, You Win",
                      "thumbnail": "https://i.ytimg.com/vi/tnTPaLOaHz8/hqdefault.jpg",
                      "playlistUrl": "https://www.youtube.com/playlist?list=PLoSWVnSA9vG8hI-SUpAimvYJrPh-PRRvp",
                      "videoId": "tnTPaLOaHz8",
                      "videoUrl": "https://www.youtube.com/watch?v=tnTPaLOaHz8",
                      "videoCount": 4,
                      "channel": {
                        "id": "UCX6OQ3DkcsbYNE6H8uQQuVA",
                        "title": "MrBeast",
                        "handle": "MrBeast",
                        "channelUrl": "https://www.youtube.com/@MrBeast"
                      }
                    }
                  ],
                  "continuationToken": "4qmFsgLlFhIYVmock"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/youtube/channel/lives": {
      "get": {
        "tags": [
          "YouTube"
        ],
        "summary": "Get a YouTube channel's live streams.",
        "operationId": "youtube_v1_channel_lives",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, channelId, url.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "channelId",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, channelId, url.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, channelId, url.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "lives": [
                    {
                      "type": "live",
                      "id": "JpVtso3S9rM",
                      "url": "https://www.youtube.com/watch?v=JpVtso3S9rM",
                      "title": "IShowSpeed Live Stream",
                      "description": "",
                      "thumbnail": "https://i.ytimg.com/vi/JpVtso3S9rM/hqdefault.jpg",
                      "viewCountText": "1.2M views",
                      "viewCountInt": 1200000,
                      "publishedTimeText": "Streamed 2 days ago",
                      "publishedTime": "2025-01-01T00:00:00.000Z",
                      "lengthText": "2:14:52",
                      "lengthSeconds": 8092,
                      "badges": [],
                      "channel": {
                        "id": "UCu6mSoMNzHQiBIOCkHUa2Aw",
                        "title": "IShowSpeed",
                        "handle": "IShowSpeed",
                        "thumbnail": null
                      }
                    }
                  ],
                  "continuationToken": "4qmFsgLlFhIYVmock"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/youtube/channel/community-posts": {
      "get": {
        "tags": [
          "YouTube"
        ],
        "summary": "Get a YouTube channel's community posts.",
        "operationId": "youtube_v1_channel_community_posts",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, channelId, url.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "channelId",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, channelId, url.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, channelId, url.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "posts": [
                    {
                      "id": "UgkxfMvMnSnV3Ww9HwAY2wFGmVevmhRaYAYO",
                      "url": "https://www.youtube.com/post/UgkxfMvMnSnV3Ww9HwAY2wFGmVevmhRaYAYO",
                      "channel": {
                        "id": "UCX6OQ3DkcsbYNE6H8uQQuVA",
                        "title": "MrBeast",
                        "url": "https://www.youtube.com/@MrBeast",
                        "handle": "MrBeast"
                      },
                      "content": "New video is live",
                      "image": "https://yt3.ggpht.com/example=s640",
                      "images": [
                        "https://yt3.ggpht.com/example=s640"
                      ],
                      "likeCountText": "250K",
                      "likeCount": 250000,
                      "publishedTimeText": "2 days ago",
                      "publishedTime": "2026-05-24T12:00:00.000Z",
                      "video": null
                    }
                  ],
                  "continuationToken": "4qmFsgLlFhIYVmock"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/youtube/channel/shorts": {
      "get": {
        "tags": [
          "YouTube"
        ],
        "summary": "Get a YouTube channel's shorts.",
        "operationId": "youtube_v1_channel_shorts",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, channelId, url.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "channelId",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, channelId, url.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: handle, channelId, url.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "videos": [],
                  "channels": [],
                  "playlists": [],
                  "shorts": [
                    {
                      "type": "short",
                      "id": "VREVC0wXPfs",
                      "url": "https://www.youtube.com/watch?v=VREVC0wXPfs",
                      "title": "This idea validation formula",
                      "thumbnail": "https://img.youtube.com/vi/VREVC0wXPfs/maxresdefault.jpg",
                      "viewCountText": "17,066 views",
                      "viewCountInt": 17066,
                      "description": "Most founders think their app isn't selling because of market conditions.",
                      "commentCountText": "2",
                      "commentCountInt": 2,
                      "likeCountInt": 495,
                      "likeCountText": "495",
                      "publishDate": "2026-04-22T10:44:35-07:00",
                      "genre": "People & Blogs",
                      "durationMs": 37000,
                      "durationFormatted": "00:00:37"
                    }
                  ],
                  "shelves": [],
                  "lives": [],
                  "continuationToken": "4qmFsgK7DBIYmock"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/youtube/video": {
      "get": {
        "tags": [
          "YouTube"
        ],
        "summary": "Get details of a YouTube video or short.",
        "operationId": "youtube_v1_video",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "id": "Y2Ah_DFr8cw",
                  "thumbnail": "https://img.youtube.com/vi/Y2Ah_DFr8cw/maxresdefault.jpg",
                  "url": "https://www.youtube.com/watch?v=Y2Ah_DFr8cw",
                  "publishDate": "20190222",
                  "type": "video",
                  "title": "Inside the NBA: Chuck Trolls Jussie Smollett",
                  "description": null,
                  "descriptionLinks": [],
                  "commentCountText": "358",
                  "commentCountInt": 358,
                  "likeCountText": "4043",
                  "likeCountInt": 4043,
                  "viewCountText": "372,864 views",
                  "viewCountInt": 372864,
                  "publishDateText": "Feb 22, 2019",
                  "collaborators": [],
                  "channel": {
                    "id": "UCWH3hing1Qb4LnkRfQdxsxQ",
                    "url": "https://www.youtube.com/@afroballer8906",
                    "handle": "afroballer8906",
                    "title": "Afroballer"
                  },
                  "chapters": [],
                  "watchNextVideos": [],
                  "keywords": [],
                  "genre": "People & Blogs",
                  "durationMs": 348000,
                  "durationFormatted": "00:05:48",
                  "captionTracks": [
                    {
                      "baseUrl": "https://www.youtube.com/api/timedtext?v=Y2Ah_DFr8cw&lang=en",
                      "name": {
                        "simpleText": "English (auto-generated)"
                      },
                      "vssId": "a.en",
                      "languageCode": "en",
                      "kind": "asr",
                      "isTranslatable": true,
                      "trackName": ""
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/youtube/video/transcript": {
      "get": {
        "tags": [
          "YouTube"
        ],
        "summary": "Get the transcript of a YouTube video or short.",
        "operationId": "youtube_v1_video_transcript",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "videoId": "bjVIDXPP7Uk",
                  "type": "video",
                  "url": "https://www.youtube.com/watch?v=bjVIDXPP7Uk",
                  "transcript": [
                    {
                      "text": "welcome back to the hell farm and the",
                      "startMs": "160",
                      "endMs": "1920",
                      "startTimeText": "0:00"
                    }
                  ],
                  "transcript_only_text": "welcome back to the hell farm and the backyard trails",
                  "language": "English"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/youtube/video/sponsors": {
      "get": {
        "tags": [
          "YouTube"
        ],
        "summary": "Detect suspected sponsors of a YouTube video.",
        "operationId": "youtube_v1_video_sponsors",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "video": {
                    "id": "AVO0ifle-OU",
                    "url": "https://www.youtube.com/watch?v=AVO0ifle-OU",
                    "title": "Why You Should Meal Prep Like A Restaurant",
                    "channel": {
                      "id": "UC3vQEjRhwgH2HAOBKwLjxNA",
                      "url": "https://www.youtube.com/@letsKWOOWK",
                      "handle": "letsKWOOWK",
                      "title": "KWOOWK"
                    },
                    "isPaidPromotion": true
                  },
                  "suspectedSponsors": [
                    {
                      "name": "Betterhelp",
                      "website": "betterhelp.com",
                      "confidence": "medium",
                      "evidence": [
                        {
                          "source": "description_link",
                          "text": "consider therapy with our sponsor BetterHelp"
                        }
                      ]
                    }
                  ],
                  "sponsorDetection": {
                    "status": "found",
                    "methods": [
                      "paid promotion badge"
                    ],
                    "transcriptAvailable": true,
                    "note": "Sponsors are inferred from public description, links, promo-code text, and transcript evidence."
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/youtube/search": {
      "get": {
        "tags": [
          "YouTube"
        ],
        "summary": "Search YouTube (videos, channels, playlists, shorts).",
        "operationId": "youtube_v1_search",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "videos": [
                    {
                      "type": "video",
                      "id": "BzSzwqb-OEE",
                      "url": "https://www.youtube.com/watch?v=BzSzwqb-OEE",
                      "title": "NF - RUNNING (Audio)",
                      "description": "",
                      "thumbnail": "https://i.ytimg.com/vi/BzSzwqb-OEE/hq720.jpg",
                      "channel": {
                        "id": "UCoRR6OLuIZ2-5VxtnQIaN2w",
                        "title": "NFrealmusic",
                        "handle": "channel/UCoRR6OLuIZ2-5VxtnQIaN2w",
                        "thumbnail": "https://yt3.ggpht.com/mock=s88"
                      },
                      "viewCountText": "14,860,541 views",
                      "viewCountInt": 14860541,
                      "publishedTimeText": "2 years ago",
                      "publishedTime": "2023-05-28T17:08:46.499Z",
                      "lengthText": "4:14",
                      "lengthSeconds": 254,
                      "badges": []
                    }
                  ],
                  "channels": [],
                  "playlists": [],
                  "shorts": [
                    {
                      "type": "short",
                      "id": "uMNvF-lSCHg",
                      "url": "https://www.youtube.com/watch?v=uMNvF-lSCHg",
                      "title": "LONG RUN ROUTINE",
                      "thumbnail": "https://i.ytimg.com/vi/uMNvF-lSCHg/hq720.jpg",
                      "channel": {
                        "id": "UCGRdcRxpJWi5Q2oDCrMDUuQ",
                        "title": "Abby and Ryan",
                        "handle": "abbyandryan",
                        "thumbnail": null
                      },
                      "viewCountText": "462,705 views",
                      "viewCountInt": 462705,
                      "publishedTimeText": null,
                      "publishedTime": null,
                      "lengthText": null,
                      "lengthSeconds": null,
                      "badges": []
                    }
                  ],
                  "shelves": [
                    {
                      "type": "shelf",
                      "title": "Shorts",
                      "items": [
                        {
                          "type": "short",
                          "id": "LLBR5nO05tE",
                          "url": "https://www.youtube.com/watch?v=LLBR5nO05tE",
                          "title": "running through walls",
                          "thumbnail": "https://i.ytimg.com/vi/LLBR5nO05tE/oardefault.jpg",
                          "viewCountText": "750K",
                          "viewCountInt": 750000
                        }
                      ]
                    }
                  ],
                  "lives": [],
                  "continuationToken": "EooDEgmock"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/youtube/search/hashtag": {
      "get": {
        "tags": [
          "YouTube"
        ],
        "summary": "Search YouTube by hashtag.",
        "operationId": "youtube_v1_search_hashtag",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "hashtag",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "videos": [
                    {
                      "type": "video",
                      "id": "jXMISgQq9MM",
                      "url": "https://www.youtube.com/watch?v=jXMISgQq9MM",
                      "title": "Epic fails #shorts #funny #fails",
                      "description": "",
                      "thumbnail": "https://i.ytimg.com/vi/jXMISgQq9MM/hqdefault.jpg",
                      "channel": {
                        "id": "UCvUzWu1Whyw1FWuLl9GOo_g",
                        "title": "ZZang Funny",
                        "thumbnail": "https://yt3.ggpht.com/mock=s68"
                      },
                      "viewCountText": "22,668,056 views",
                      "viewCountInt": 22668056,
                      "publishedTimeText": "4 weeks ago",
                      "publishedTime": "2025-01-04T23:12:42.919Z",
                      "lengthText": "1:00",
                      "lengthSeconds": 60,
                      "badges": []
                    }
                  ],
                  "continuationToken": "4qmFsgLtBRIJmock"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/youtube/video/comments": {
      "get": {
        "tags": [
          "YouTube"
        ],
        "summary": "Get comments of a YouTube video.",
        "operationId": "youtube_v1_video_comments",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "comments": [
                    {
                      "id": "UgwVfRopfS2F-WB3aF14AaABAg",
                      "content": "I love how in the middle he said...",
                      "publishedTimeText": "9 days ago",
                      "publishedTime": "2025-01-23T23:14:02.948Z",
                      "replyLevel": 0,
                      "author": {
                        "name": "@SimonT80",
                        "channelId": "UC8JC3uSUmmXTCTKl-bgr1DA",
                        "isVerified": false,
                        "isCreator": false,
                        "avatarUrl": "https://yt3.ggpht.com/mock=s88",
                        "channelUrl": "https://youtube.com/channel/UC8JC3uSUmmXTCTKl-bgr1DA"
                      },
                      "engagement": {
                        "likes": 110,
                        "replies": 5
                      },
                      "repliesContinuationToken": "Eg0SC2RRmock"
                    }
                  ],
                  "continuationToken": "Eg0SCzVFmock"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/youtube/video/comment/replies": {
      "get": {
        "tags": [
          "YouTube"
        ],
        "summary": "Get replies to a YouTube comment.",
        "operationId": "youtube_v1_video_comment_replies",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "continuationToken",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "comments": [
                    {
                      "id": "UgyfayX-QqgkPGkcKbt4AaABAg.AV5O1akOhw9AV5RdnpN-SY",
                      "content": "Me",
                      "publishedTimeText": "20 hours ago",
                      "publishedTime": "2026-04-03T05:52:36.883Z",
                      "replyLevel": 1,
                      "author": {
                        "name": "@pepisakkout2522",
                        "channelId": "UCjEBcO_VQ32GUzUZGwlxy1w",
                        "isVerified": false,
                        "isCreator": false,
                        "avatarUrl": "https://yt3.ggpht.com/mock=s88",
                        "channelUrl": "https://youtube.com/channel/UCjEBcO_VQ32GUzUZGwlxy1w"
                      },
                      "engagement": {
                        "likes": 2,
                        "replies": 0
                      }
                    }
                  ],
                  "continuationToken": "Eg0SC2RRmock"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/youtube/shorts/trending": {
      "get": {
        "tags": [
          "YouTube"
        ],
        "summary": "Get trending YouTube shorts.",
        "operationId": "youtube_v1_shorts_trending",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "shorts": [
                    {
                      "id": "ou0nl5ET0HA",
                      "thumbnail": "https://img.youtube.com/vi/ou0nl5ET0HA/maxresdefault.jpg",
                      "url": "https://www.youtube.com/watch?v=ou0nl5ET0HA",
                      "title": "That hooper who says their just shoes",
                      "description": null,
                      "commentCountText": "168",
                      "commentCountInt": 168,
                      "likeCountText": "151957",
                      "likeCountInt": 151957,
                      "viewCountText": "13,798,774 views",
                      "viewCountInt": 13798774,
                      "publishDateText": "Aug 7, 2025",
                      "publishDate": "2025-08-07T13:00:22-07:00",
                      "channel": {
                        "id": "UC3iObCgKLKr9xquQw7fCang",
                        "url": "https://www.youtube.com/@dameuniverse",
                        "handle": "dameuniverse",
                        "title": "Dame Universe"
                      },
                      "chapters": [],
                      "keywords": [
                        "Kobe"
                      ],
                      "durationMs": 19000,
                      "durationFormatted": "00:00:19"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/youtube/playlist": {
      "get": {
        "tags": [
          "YouTube"
        ],
        "summary": "Get the videos of a YouTube playlist.",
        "operationId": "youtube_v1_playlist",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "playlist_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "title": "Songs with Lyrics 2025",
                  "owner": {
                    "id": "UC0-wiBH12UgtWqLjo-EvpOw",
                    "name": "Lovely Tunes",
                    "url": "https://www.youtube.com/@lovelytunes7622",
                    "handle": "lovelytunes7622"
                  },
                  "totalVideos": 98,
                  "videos": [
                    {
                      "id": "AdBzzpq3xV4",
                      "title": "Lady Gaga, Bruno Mars - Die With A Smile",
                      "thumbnail": "https://i.ytimg.com/vi/AdBzzpq3xV4/hqdefault.jpg",
                      "url": "https://www.youtube.com/watch?v=AdBzzpq3xV4",
                      "lengthText": "4:15",
                      "lengthSeconds": 255,
                      "channel": {
                        "title": "LatinHype",
                        "url": "https://www.youtube.com/@LatinHype."
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/youtube/community-post": {
      "get": {
        "tags": [
          "YouTube"
        ],
        "summary": "Get details of a YouTube community post.",
        "operationId": "youtube_v1_community_post",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "id": "Ugkxvj2KoApYAXoqLWnKVr6zZe5JjeHrQeP8",
                  "channel": {
                    "id": "UChhw6DlKKTQ9mYSpTfXUYqA",
                    "title": "Starter Story",
                    "url": "https://www.youtube.com/@starterstory",
                    "handle": "starterstory"
                  },
                  "content": "How to build something meaningful",
                  "image": null,
                  "images": [
                    "https://yt3.ggpht.com/mock=s640"
                  ],
                  "likeCountText": "759",
                  "likeCount": 759,
                  "publishedTimeText": "5 days ago",
                  "publishedTime": "2025-11-07T18:49:57.492Z",
                  "video": null
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/facebook/profile": {
      "get": {
        "tags": [
          "Facebook"
        ],
        "summary": "Get a Facebook page/profile by URL (name, category, photos, likes, followers).",
        "operationId": "facebook_v1_profile",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, pageId, handle.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pageId",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, pageId, handle.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, pageId, handle.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "id": "100044561550831",
                  "name": "NASA - National Aeronautics and Space Administration",
                  "url": "https://www.facebook.com/NASA",
                  "isPrivate": false,
                  "gender": null,
                  "category": "Government organization",
                  "pageIntro": "Explore the universe and discover our home planet.",
                  "profilePhoto": "https://scontent.fbcdn.net/mock-profile.png",
                  "coverPhoto": "https://scontent.fbcdn.net/mock-cover.jpg",
                  "likeCount": 28664399,
                  "followerCount": 28664399,
                  "verified": true,
                  "email": null,
                  "phone": null,
                  "website": null,
                  "address": null,
                  "creationDate": null
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/facebook/profile/posts": {
      "get": {
        "tags": [
          "Facebook"
        ],
        "summary": "Get a Facebook page's posts (message, reactions, comments, shares); paginate via cursor.",
        "operationId": "facebook_v1_profile_posts",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, pageId, handle.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pageId",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, pageId, handle.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, pageId, handle.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "posts": [
                    {
                      "id": "1576597780502259",
                      "text": "\"Never a dull moment.\" On the latest Houston We Have a Podcast episode…",
                      "url": "https://www.facebook.com/NASA/posts/pfbid0MockPermalink",
                      "permalink": "https://www.facebook.com/NASA/posts/pfbid0MockPermalink",
                      "publishTime": 1783971380,
                      "author": {
                        "id": "100044561550831",
                        "name": "NASA - National Aeronautics and Space Administration",
                        "short_name": "NASA",
                        "__typename": "User"
                      },
                      "reactionCount": 131,
                      "commentCount": 14,
                      "shareCount": 11,
                      "videoViewCount": null,
                      "videoDetails": null,
                      "attachments": [],
                      "topComments": []
                    }
                  ],
                  "cursor": "Cg8Ob3JnYW5pY19jdXJzb3IJmockcursor",
                  "hasNextPage": true
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/facebook/post": {
      "get": {
        "tags": [
          "Facebook"
        ],
        "summary": "Get a single Facebook post by URL (message, reactions, comments, shares, video).",
        "operationId": "facebook_v1_post",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "post": {
                    "id": "1576597780502259",
                    "text": "A single mock post from the drop-in fixture.",
                    "url": "https://www.facebook.com/NASA/posts/pfbid0MockPermalink",
                    "permalink": "https://www.facebook.com/NASA/posts/pfbid0MockPermalink",
                    "publishTime": 1783971380,
                    "author": {
                      "id": "100044561550831",
                      "name": "NASA",
                      "short_name": "NASA",
                      "__typename": "User"
                    },
                    "reactionCount": 131,
                    "commentCount": 14,
                    "shareCount": 11,
                    "videoViewCount": null,
                    "videoDetails": null,
                    "attachments": [],
                    "topComments": []
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/facebook/post/comments": {
      "get": {
        "tags": [
          "Facebook"
        ],
        "summary": "Get the comments on a Facebook post by URL (embedded top comments; full list needs FB_SESSION).",
        "operationId": "facebook_v1_post_comments",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "comments": [
                    {
                      "id": "Y29tbWVudDptb2Nr",
                      "text": "A mock comment.",
                      "publishTime": 1783971500,
                      "reactionCount": 3,
                      "author": {
                        "id": "61550000000000",
                        "name": "Mock User",
                        "url": "https://www.facebook.com/mock"
                      }
                    }
                  ],
                  "cursor": null
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/facebook/profile/reels": {
      "get": {
        "tags": [
          "Facebook"
        ],
        "summary": "Get a Facebook page's videos/reels (id, title, thumbnail, play count).",
        "operationId": "facebook_v1_profile_reels",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, pageId, handle.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pageId",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, pageId, handle.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, pageId, handle.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "reels": [
                    {
                      "id": "1234567890",
                      "url": "https://www.facebook.com/watch/?v=1234567890",
                      "title": "Mock NASA video",
                      "thumbnail": "https://scontent.fbcdn.net/mock-thumb.jpg",
                      "publishTime": 1783971380,
                      "playCount": 1200000
                    }
                  ],
                  "cursor": null
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/facebook/profile/photos": {
      "get": {
        "tags": [
          "Facebook"
        ],
        "summary": "Get a Facebook page's photos (id, image url, link).",
        "operationId": "facebook_v1_profile_photos",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, pageId, handle.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pageId",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, pageId, handle.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, pageId, handle.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "photos": [
                    {
                      "id": "9876543210",
                      "url": "https://www.facebook.com/NASA/photos/9876543210",
                      "image": "https://scontent.fbcdn.net/mock-photo.jpg",
                      "accessibilityCaption": "May be an image of the moon."
                    }
                  ],
                  "cursor": null
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/linkedin/profile": {
      "get": {
        "tags": [
          "LinkedIn"
        ],
        "summary": "Get a LinkedIn member's public profile by URL.",
        "operationId": "linkedin_v1_profile",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "name": "Bill Gates",
                  "headline": "Creator, Top Voice",
                  "image": "https://media.licdn.com/dms/image/mock/profile.jpg",
                  "location": "Seattle, Washington, United States",
                  "followers": 40510011,
                  "connections": null,
                  "about": "Chair of the Gates Foundation. Founder of Breakthrough Energy. Co-founder of Microsoft.",
                  "jobTitle": [
                    "Co-chair",
                    "Founder",
                    "Co-founder"
                  ],
                  "experience": [
                    {
                      "@type": "Organization",
                      "name": "Gates Foundation",
                      "url": "https://www.linkedin.com/company/gates-foundation",
                      "member": {
                        "@type": "OrganizationRole",
                        "startDate": 2000
                      }
                    }
                  ],
                  "education": [
                    {
                      "@type": "EducationalOrganization",
                      "name": "Harvard University",
                      "url": "https://www.linkedin.com/school/harvard-university/",
                      "member": {
                        "@type": "OrganizationRole",
                        "startDate": 1973,
                        "endDate": 1975
                      }
                    }
                  ],
                  "articles": [],
                  "activity": [],
                  "recentPosts": [],
                  "publications": [],
                  "projects": [],
                  "recommendations": [],
                  "similarProfiles": [],
                  "url": "https://www.linkedin.com/in/williamhgates"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/linkedin/company": {
      "get": {
        "tags": [
          "LinkedIn"
        ],
        "summary": "Get a LinkedIn company page by URL.",
        "operationId": "linkedin_v1_company",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "id": "784652",
                  "name": "Shopify",
                  "description": "Shopify is a leading global commerce company.",
                  "location": {
                    "city": "Ottawa",
                    "state": "ON",
                    "country": "CA"
                  },
                  "employeeCount": 29382,
                  "website": "https://www.shopify.com",
                  "logo": "https://media.licdn.com/dms/image/mock/company-logo.jpg",
                  "coverImage": null,
                  "slogan": "Make commerce better for everyone",
                  "industry": "Software Development",
                  "size": "10,001+ employees",
                  "founded": 2006,
                  "headquarters": "Ottawa, ON",
                  "type": "Public Company",
                  "specialties": [
                    "ecommerce",
                    "API",
                    "marketplace"
                  ],
                  "followerCount": 4567000,
                  "similarPages": [],
                  "employees": [],
                  "url": "https://www.linkedin.com/company/shopify"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/linkedin/company/posts": {
      "get": {
        "tags": [
          "LinkedIn"
        ],
        "summary": "Get a LinkedIn company's posts (page 1 via guest; deeper pages via Voyager).",
        "operationId": "linkedin_v1_company_posts",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "posts": [
                    {
                      "url": "https://www.linkedin.com/posts/shopify_mock-activity-7480253997774172160-YbtK",
                      "id": "7480253997774172160",
                      "datePublished": "2026-07-07T13:38:49.450Z",
                      "headline": null,
                      "text": "Mock company post text.",
                      "reactionCount": 123
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/linkedin/post": {
      "get": {
        "tags": [
          "LinkedIn"
        ],
        "summary": "Get a single LinkedIn post or article by URL.",
        "operationId": "linkedin_v1_post",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "url": "https://www.linkedin.com/pulse/mock-article-austen-allred",
                  "name": "Being a father has made me a better leader",
                  "headline": "Being a father has made me a better leader",
                  "text": "Mock post body.",
                  "description": "Mock post body.",
                  "datePublished": "2024-01-15T12:00:00.000Z",
                  "likeCount": 210,
                  "commentCount": 18,
                  "image": "https://media.licdn.com/dms/image/mock/post.jpg",
                  "author": {
                    "name": "Austen Allred",
                    "url": "https://www.linkedin.com/in/austenallred",
                    "followers": 120000
                  },
                  "comments": [],
                  "moreArticles": []
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/linkedin/post/transcript": {
      "get": {
        "tags": [
          "LinkedIn"
        ],
        "summary": "Get the transcript of a LinkedIn video post by URL.",
        "operationId": "linkedin_v1_post_transcript",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "url": "https://www.linkedin.com/posts/mock-video-ugcPost-7465082215316525056-MHBd",
                  "transcript": "Hey, my name is Declan Jackson. I am a member of the team.",
                  "transcriptNotAvailable": false
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/linkedin/search/posts": {
      "get": {
        "tags": [
          "LinkedIn"
        ],
        "summary": "Search LinkedIn posts by keyword (authenticated Voyager API).",
        "operationId": "linkedin_v1_search_posts",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "query": "ai agents",
                  "posts": [
                    {
                      "url": "https://www.linkedin.com/posts/mock-search-activity-7465082215316525056-XXXX",
                      "datePublished": "2026-07-10T09:00:00.000Z",
                      "description": "Mock search result post about ai agents.",
                      "author": {
                        "name": "Mock Author",
                        "url": "https://www.linkedin.com/in/mockauthor",
                        "image": null,
                        "followers": 5000
                      },
                      "likeCount": 42,
                      "commentCount": 5,
                      "comments": []
                    }
                  ],
                  "cursor": null
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/twitter/profile": {
      "get": {
        "tags": [
          "Twitter"
        ],
        "summary": "Get an X/Twitter user's profile (stats, verification, metadata) by handle.",
        "operationId": "twitter_v1_profile",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "__typename": "User",
                  "id": "VXNlcjoxNTc3MjQxNDAz",
                  "rest_id": "1577241403",
                  "is_blue_verified": true,
                  "core": {
                    "created_at": "Mon Jul 08 09:31:59 +0000 2013",
                    "name": "levelsio",
                    "screen_name": "levelsio"
                  },
                  "avatar": {
                    "image_url": "https://pbs.twimg.com/profile_images/mock/levelsio_normal.jpg"
                  },
                  "location": {
                    "location": "🌍 Nomad"
                  },
                  "verification_info": {
                    "is_identity_verified": false
                  },
                  "highlights_info": {
                    "can_highlight_tweets": true,
                    "highlighted_tweets": "0"
                  },
                  "creator_subscriptions_count": 0,
                  "tipjar_settings": {},
                  "legacy": {
                    "followers_count": 914845,
                    "friends_count": 1784,
                    "favourites_count": 88231,
                    "statuses_count": 66120,
                    "listed_count": 11040,
                    "media_count": 9821,
                    "description": "📸 building AI startups in public",
                    "name": "levelsio",
                    "screen_name": "levelsio",
                    "location": "🌍 Nomad",
                    "created_at": "Mon Jul 08 09:31:59 +0000 2013",
                    "profile_image_url_https": "https://pbs.twimg.com/profile_images/mock/levelsio_normal.jpg",
                    "profile_banner_url": "https://pbs.twimg.com/profile_banners/1577241403/mock",
                    "url": "https://t.co/mocklink",
                    "verified": false
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/twitter/user-tweets": {
      "get": {
        "tags": [
          "Twitter"
        ],
        "summary": "Get an X/Twitter user's tweets by handle. Guest access returns the ~100 most popular tweets.",
        "operationId": "twitter_v1_user_tweets",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "tweets": [
                    {
                      "__typename": "Tweet",
                      "rest_id": "20",
                      "core": {
                        "user_results": {
                          "result": {
                            "__typename": "User",
                            "rest_id": "12",
                            "is_blue_verified": true,
                            "core": {
                              "name": "jack",
                              "screen_name": "jack"
                            },
                            "legacy": {
                              "name": "jack",
                              "screen_name": "jack",
                              "followers_count": 6600000
                            }
                          }
                        }
                      },
                      "edit_control": {
                        "edit_tweet_ids": [
                          "20"
                        ],
                        "is_edit_eligible": false,
                        "edits_remaining": "5"
                      },
                      "is_translatable": false,
                      "views": {
                        "count": "1234567",
                        "state": "EnabledWithCount"
                      },
                      "source": "<a href=\"https://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>",
                      "legacy": {
                        "bookmark_count": 12,
                        "created_at": "Tue Mar 21 20:50:14 +0000 2006",
                        "conversation_id_str": "20",
                        "full_text": "just setting up my twttr",
                        "favorite_count": 307712,
                        "reply_count": 190000,
                        "retweet_count": 130000,
                        "quote_count": 8000,
                        "lang": "en",
                        "is_quote_status": false,
                        "id_str": "20",
                        "user_id_str": "12",
                        "entities": {
                          "hashtags": [],
                          "symbols": [],
                          "urls": [],
                          "user_mentions": []
                        }
                      },
                      "url": "https://x.com/jack/status/20"
                    }
                  ],
                  "next_cursor": null
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/twitter/tweet": {
      "get": {
        "tags": [
          "Twitter"
        ],
        "summary": "Get a single X/Twitter tweet (content + engagement + author) by URL.",
        "operationId": "twitter_v1_tweet",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "__typename": "Tweet",
                  "rest_id": "20",
                  "core": {
                    "user_results": {
                      "result": {
                        "__typename": "User",
                        "rest_id": "12",
                        "is_blue_verified": true,
                        "core": {
                          "name": "jack",
                          "screen_name": "jack"
                        },
                        "legacy": {
                          "name": "jack",
                          "screen_name": "jack",
                          "followers_count": 6600000
                        }
                      }
                    }
                  },
                  "edit_control": {
                    "edit_tweet_ids": [
                      "20"
                    ],
                    "is_edit_eligible": false,
                    "edits_remaining": "5"
                  },
                  "is_translatable": false,
                  "views": {
                    "count": "1234567",
                    "state": "EnabledWithCount"
                  },
                  "source": "<a href=\"https://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>",
                  "legacy": {
                    "bookmark_count": 12,
                    "created_at": "Tue Mar 21 20:50:14 +0000 2006",
                    "conversation_id_str": "20",
                    "full_text": "just setting up my twttr",
                    "favorite_count": 307712,
                    "reply_count": 190000,
                    "retweet_count": 130000,
                    "quote_count": 8000,
                    "lang": "en",
                    "is_quote_status": false,
                    "id_str": "20",
                    "user_id_str": "12",
                    "entities": {
                      "hashtags": [],
                      "symbols": [],
                      "urls": [],
                      "user_mentions": []
                    }
                  },
                  "url": "https://x.com/jack/status/20"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/spotify/artist": {
      "get": {
        "tags": [
          "Spotify"
        ],
        "summary": "Get a Spotify artist (profile, stats, discography) by URL or id.",
        "operationId": "spotify_v1_artist",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "__typename": "Artist",
                  "id": "06HL4z0CvFAxyc27GXpf02",
                  "uri": "spotify:artist:06HL4z0CvFAxyc27GXpf02",
                  "profile": {
                    "name": "Mock Artist",
                    "biography": {
                      "text": "A mock artist."
                    },
                    "externalLinks": {
                      "items": []
                    }
                  },
                  "stats": {
                    "followers": 500000,
                    "monthlyListeners": 1000000,
                    "worldRank": 1,
                    "topCities": {
                      "items": []
                    }
                  },
                  "visuals": {
                    "avatarImage": {
                      "sources": [
                        {
                          "url": "https://i.scdn.co/image/mock",
                          "width": 640,
                          "height": 640
                        }
                      ]
                    }
                  },
                  "discography": {
                    "albums": [
                      {
                        "id": "mockalbumid",
                        "name": "Mock Album",
                        "type": "ALBUM",
                        "uri": "spotify:album:mockalbumid",
                        "date": {
                          "year": 2024,
                          "month": 1,
                          "day": 1,
                          "precision": "DAY"
                        },
                        "coverArt": {
                          "sources": [
                            {
                              "url": "https://i.scdn.co/image/mockcover",
                              "width": 640,
                              "height": 640
                            }
                          ]
                        },
                        "tracks": {
                          "totalCount": 12
                        }
                      }
                    ],
                    "compilations": [],
                    "latest": {},
                    "popularReleasesAlbums": [],
                    "singles": [],
                    "topTracks": [
                      {
                        "uid": "0",
                        "track": {
                          "id": "mocktrackid",
                          "name": "Mock Track",
                          "playcount": 12345678,
                          "uri": "spotify:track:mocktrackid"
                        }
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/spotify/track": {
      "get": {
        "tags": [
          "Spotify"
        ],
        "summary": "Get a single Spotify track by URL or id.",
        "operationId": "spotify_v1_track",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "__typename": "Track",
                  "id": "mocktrackid",
                  "uri": "spotify:track:mocktrackid",
                  "name": "Mock Track",
                  "duration": {
                    "totalMilliseconds": 210000
                  },
                  "playcount": 12345678,
                  "trackNumber": 1,
                  "playability": {
                    "playable": true,
                    "reason": "PLAYABLE"
                  },
                  "contentRating": {
                    "label": "NONE"
                  },
                  "albumOfTrack": {
                    "id": "mockalbumid",
                    "name": "Mock Album",
                    "uri": "spotify:album:mockalbumid",
                    "coverArt": {
                      "sources": [
                        {
                          "url": "https://i.scdn.co/image/mockcover",
                          "width": 640,
                          "height": 640
                        }
                      ]
                    }
                  },
                  "firstArtist": {
                    "items": [
                      {
                        "id": "06HL4z0CvFAxyc27GXpf02",
                        "profile": {
                          "name": "Mock Artist"
                        }
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/spotify/album": {
      "get": {
        "tags": [
          "Spotify"
        ],
        "summary": "Get a Spotify album (with tracks) by URL or id.",
        "operationId": "spotify_v1_album",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "__typename": "Album",
                  "id": "0pgrg7phBbnwGJ2HBEl9EG",
                  "uri": "spotify:album:0pgrg7phBbnwGJ2HBEl9EG",
                  "name": "Mock Album",
                  "type": "ALBUM",
                  "label": "Mock Records",
                  "date": {
                    "isoString": "2024-01-01T00:00:00Z",
                    "precision": "DAY"
                  },
                  "copyright": {
                    "items": [
                      {
                        "type": "C",
                        "text": "© 2024 Mock Records"
                      }
                    ]
                  },
                  "playability": {
                    "playable": true,
                    "reason": "PLAYABLE"
                  },
                  "coverArt": {
                    "sources": [
                      {
                        "url": "https://i.scdn.co/image/mockcover",
                        "width": 640,
                        "height": 640
                      }
                    ]
                  },
                  "artists": {
                    "items": [
                      {
                        "id": "06HL4z0CvFAxyc27GXpf02",
                        "profile": {
                          "name": "Mock Artist"
                        },
                        "uri": "spotify:artist:06HL4z0CvFAxyc27GXpf02"
                      }
                    ]
                  },
                  "tracksV2": {
                    "totalCount": 1,
                    "items": [
                      {
                        "uid": "0",
                        "track": {
                          "name": "Mock Track",
                          "trackNumber": 1,
                          "uri": "spotify:track:mocktrackid",
                          "duration": {
                            "totalMilliseconds": 210000
                          },
                          "playcount": 12345678
                        }
                      }
                    ]
                  },
                  "discs": {
                    "items": [
                      {
                        "number": 1,
                        "tracks": {
                          "totalCount": 1
                        }
                      }
                    ]
                  },
                  "moreAlbumsByArtist": {
                    "items": []
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/spotify/search": {
      "get": {
        "tags": [
          "Spotify"
        ],
        "summary": "Search Spotify across artists, albums, tracks, playlists, podcasts and episodes.",
        "operationId": "spotify_v1_search",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "albumsV2": [
                    {
                      "__typename": "Album",
                      "id": "0pgrg7phBbnwGJ2HBEl9EG",
                      "name": "Mock Album",
                      "uri": "spotify:album:0pgrg7phBbnwGJ2HBEl9EG"
                    }
                  ],
                  "artists": [
                    {
                      "__typename": "Artist",
                      "id": "06HL4z0CvFAxyc27GXpf02",
                      "profile": {
                        "name": "Mock Artist"
                      },
                      "uri": "spotify:artist:06HL4z0CvFAxyc27GXpf02"
                    }
                  ],
                  "audiobooks": [],
                  "episodes": [],
                  "genres": [],
                  "playlists": [],
                  "podcasts": [
                    {
                      "__typename": "Podcast",
                      "id": "3mliji9352UAk3XnWElnDV",
                      "name": "Mock Podcast",
                      "uri": "spotify:show:3mliji9352UAk3XnWElnDV"
                    }
                  ],
                  "topResultsV2": [],
                  "tracksV2": [
                    {
                      "__typename": "Track",
                      "id": "mocktrackid",
                      "name": "Mock Track",
                      "uri": "spotify:track:mocktrackid"
                    }
                  ],
                  "users": []
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/spotify/podcast": {
      "get": {
        "tags": [
          "Spotify"
        ],
        "summary": "Get a Spotify podcast/show's metadata by URL or id.",
        "operationId": "spotify_v1_podcast",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "__typename": "Podcast",
                  "id": "3mliji9352UAk3XnWElnDV",
                  "uri": "spotify:show:3mliji9352UAk3XnWElnDV",
                  "name": "Mock Podcast",
                  "description": "A mock podcast.",
                  "mediaType": "AUDIO",
                  "publisher": {
                    "name": "Mock Publisher"
                  },
                  "coverArt": {
                    "sources": [
                      {
                        "url": "https://i.scdn.co/image/mockshow",
                        "width": 640,
                        "height": 640
                      }
                    ]
                  },
                  "episodesV2": {
                    "totalCount": 1,
                    "items": [
                      {
                        "entity": {
                          "__typename": "Episode",
                          "data": {
                            "uri": "spotify:episode:mockepisodeid"
                          }
                        }
                      }
                    ]
                  },
                  "topics": {
                    "items": []
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/spotify/podcast/episodes": {
      "get": {
        "tags": [
          "Spotify"
        ],
        "summary": "Get a Spotify podcast's episodes by URL or id (paginate via ?cursor=).",
        "operationId": "spotify_v1_podcast_episodes",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "id": "3mliji9352UAk3XnWElnDV",
                  "uri": "spotify:show:3mliji9352UAk3XnWElnDV",
                  "episodes": [
                    {
                      "__typename": "Episode",
                      "id": "mockepisodeid",
                      "uri": "spotify:episode:mockepisodeid",
                      "name": "Mock Episode",
                      "description": "A mock episode.",
                      "duration": {
                        "totalMilliseconds": 3600000
                      },
                      "releaseDate": {
                        "isoString": "2024-01-01T00:00:00Z",
                        "precision": "DAY"
                      },
                      "coverArt": {
                        "sources": [
                          {
                            "url": "https://i.scdn.co/image/mockep",
                            "width": 640,
                            "height": 640
                          }
                        ]
                      }
                    }
                  ],
                  "cursor": null,
                  "totalCount": 1
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/applemusic/artist": {
      "get": {
        "tags": [
          "Apple Music"
        ],
        "summary": "Get an Apple Music artist (profile, top songs, discography) by URL or id.",
        "operationId": "applemusic_v1_artist",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "159260351",
                    "kind": "artist",
                    "name": "Taylor Swift",
                    "url": "https://music.apple.com/us/artist/taylor-swift/159260351",
                    "artwork": {
                      "url": "https://is1-ssl.mzstatic.com/image/thumb/mock/1200x1200bb.jpg",
                      "width": 5998,
                      "height": 5998
                    },
                    "editorial_notes": "Favorite Taylor's artist page for updates.",
                    "artist_bio": null,
                    "genre_names": [
                      "Pop"
                    ],
                    "origin": "West Reading, PA, United States",
                    "born_or_formed": "December 13, 1989",
                    "top_songs": [
                      {
                        "id": "1833328840",
                        "kind": "song",
                        "title": "The Fate of Ophelia",
                        "artist_name": "Taylor Swift",
                        "album_name": "The Life of a Showgirl",
                        "url": "https://music.apple.com/us/album/x/1833328839?i=1833328840",
                        "duration_ms": 226000,
                        "track_number": 1,
                        "disc_number": 1,
                        "explicit": false,
                        "artwork": null,
                        "preview_url": null
                      }
                    ],
                    "albums": [
                      {
                        "id": "1468058165",
                        "kind": "album",
                        "title": "Lover",
                        "subtitle": "Taylor Swift",
                        "artist_name": "Taylor Swift",
                        "track_count": 18,
                        "release_date": "2019-08-23",
                        "url": "https://music.apple.com/us/album/lover/1468058165",
                        "artwork": null
                      }
                    ],
                    "singles": []
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/applemusic/album": {
      "get": {
        "tags": [
          "Apple Music"
        ],
        "summary": "Get an Apple Music album (metadata + full tracklist) by URL or id.",
        "operationId": "applemusic_v1_album",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "1468058165",
                    "kind": "album",
                    "title": "Lover",
                    "artist_name": "Taylor Swift",
                    "artist_url": "https://music.apple.com/us/artist/taylor-swift/159260351",
                    "artist_id": "159260351",
                    "url": "https://music.apple.com/us/album/lover/1468058165",
                    "track_count": 18,
                    "release_date": "2019-08-23",
                    "release_info": "August 23, 2019\n18 songs, 1 hour 1 minute\n℗ 2019 Taylor Swift",
                    "record_label": "Taylor Swift",
                    "copyright": "℗ 2019 Taylor Swift",
                    "upc": "00602577928383",
                    "is_single": false,
                    "is_compilation": false,
                    "genre_names": [
                      "Pop"
                    ],
                    "editorial_notes": "A love letter to love itself.",
                    "artwork": {
                      "url": "https://is1-ssl.mzstatic.com/image/thumb/mock/1200x1200bb.jpg",
                      "width": 1200,
                      "height": 1200
                    },
                    "tracks": [
                      {
                        "id": "1468058169",
                        "kind": "song",
                        "title": "I Forgot That You Existed",
                        "duration_ms": 170651,
                        "track_number": 1,
                        "disc_number": 1,
                        "explicit": false,
                        "isrc": "USUG11901473",
                        "artist_name": "Taylor Swift",
                        "url": "https://music.apple.com/us/album/x/1468058165?i=1468058169",
                        "album_id": "1468058165",
                        "preview_url": null
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/applemusic/track": {
      "get": {
        "tags": [
          "Apple Music"
        ],
        "summary": "Get a single Apple Music song by URL or id.",
        "operationId": "applemusic_v1_track",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: url, id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "1468058169",
                    "kind": "song",
                    "title": "I Forgot That You Existed",
                    "album": "Lover",
                    "album_name": "Lover",
                    "album_id": "1468058165",
                    "url": "https://music.apple.com/us/album/i-forgot-that-you-existed/1468058165?i=1468058169",
                    "duration_ms": 170651,
                    "track_number": 1,
                    "disc_number": 1,
                    "artist_name": "Taylor Swift",
                    "composer_name": "Taylor Swift & Louis Bell",
                    "explicit": false,
                    "isrc": "USUG11901473",
                    "release_date": "2019-08-23",
                    "genre_names": [
                      "Pop"
                    ],
                    "artwork": {
                      "url": "https://is1-ssl.mzstatic.com/image/thumb/mock/1200x1200bb.jpg",
                      "width": 1200,
                      "height": 1200
                    },
                    "preview_url": null
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/applemusic/search": {
      "get": {
        "tags": [
          "Apple Music"
        ],
        "summary": "Search the Apple Music catalog (songs/albums/artists) by query.",
        "operationId": "applemusic_v1_search",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "query": "taylor swift",
                    "type": "all",
                    "results": [
                      {
                        "id": "159260351",
                        "kind": "artist",
                        "name": "Taylor Swift",
                        "url": "https://music.apple.com/us/artist/taylor-swift/159260351",
                        "artwork": null
                      },
                      {
                        "id": "1468058165",
                        "kind": "album",
                        "title": "Lover",
                        "subtitle": "Taylor Swift",
                        "artist_name": "Taylor Swift",
                        "track_count": 18,
                        "release_date": "2019-08-23",
                        "url": "https://music.apple.com/us/album/lover/1468058165",
                        "artwork": null
                      },
                      {
                        "id": "1833328840",
                        "kind": "song",
                        "title": "The Fate of Ophelia",
                        "artist_name": "Taylor Swift",
                        "album_name": "The Life of a Showgirl",
                        "url": "https://music.apple.com/us/album/x/1833328839?i=1833328840",
                        "duration_ms": 226000,
                        "track_number": 1,
                        "disc_number": 1,
                        "explicit": false,
                        "artwork": null,
                        "preview_url": null
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/kleinanzeigen/search": {
      "get": {
        "tags": [
          "Kleinanzeigen"
        ],
        "summary": "Search Kleinanzeigen listings by keyword and/or category+location, with filters (price, ad/poster type, sort, distance) and pagination. Provide a `query`, a `categoryId`, or a `locationId` (any combination).",
        "operationId": "kleinanzeigen_v1_search",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": false,
            "description": "Free-text keyword. Optional when a categoryId/locationId is given. Provide at least one of: query, categoryId, locationId.",
            "schema": {
              "type": "string",
              "example": "fahrrad"
            }
          },
          {
            "name": "categoryId",
            "in": "query",
            "required": false,
            "description": "Kleinanzeigen category id (e.g. 203 = Mietwohnungen). Browse without a keyword. Provide at least one of: query, categoryId, locationId.",
            "schema": {
              "type": "string",
              "example": "203"
            }
          },
          {
            "name": "locationId",
            "in": "query",
            "required": false,
            "description": "Location id from the /locations endpoint (city or ZIP). Anchors the search + `distance`. Provide at least one of: query, categoryId, locationId.",
            "schema": {
              "type": "string",
              "example": "996"
            }
          },
          {
            "name": "minPrice",
            "in": "query",
            "required": false,
            "description": "Minimum price in EUR.",
            "schema": {
              "type": "string",
              "example": "50"
            }
          },
          {
            "name": "maxPrice",
            "in": "query",
            "required": false,
            "description": "Maximum price in EUR.",
            "schema": {
              "type": "string",
              "example": "1500"
            }
          },
          {
            "name": "adType",
            "in": "query",
            "required": false,
            "description": "Listing type.",
            "schema": {
              "type": "string",
              "enum": [
                "OFFERED",
                "WANTED"
              ]
            }
          },
          {
            "name": "posterType",
            "in": "query",
            "required": false,
            "description": "Seller type.",
            "schema": {
              "type": "string",
              "enum": [
                "PRIVATE",
                "COMMERCIAL"
              ]
            }
          },
          {
            "name": "sortType",
            "in": "query",
            "required": false,
            "description": "Result ordering (default: newest first).",
            "schema": {
              "type": "string",
              "enum": [
                "PRICE_ASCENDING",
                "PRICE_DESCENDING",
                "DATE_DESCENDING",
                "DISTANCE"
              ]
            }
          },
          {
            "name": "distance",
            "in": "query",
            "required": false,
            "description": "Search radius in km around locationId.",
            "schema": {
              "type": "string",
              "example": "20"
            }
          },
          {
            "name": "attributes",
            "in": "query",
            "required": false,
            "description": "Category attribute filters (rooms, floor space, …) as `name:value` pairs separated by `|`. The names are the ones the listings carry in `attributes`. A numeric attribute takes a `min,max` range with either end optional: `4.0,` = at least four, `,2.0` = at most two, `2.0,2.0` = exactly two. Names the category does not know come back in `warnings`.",
            "schema": {
              "type": "string",
              "example": "wohnung_mieten.zimmer:4.0,"
            }
          },
          {
            "name": "pictureRequired",
            "in": "query",
            "required": false,
            "description": "Only listings with at least one photo.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "0-based page index for pagination.",
            "schema": {
              "type": "string",
              "example": "0"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "description": "Results per page (1–41, default 25).",
            "schema": {
              "type": "string",
              "example": "25"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "query": "fahrrad",
                  "page": 0,
                  "page_size": 25,
                  "count": 1,
                  "has_next_page": false,
                  "filters": {
                    "categoryId": null,
                    "locationId": null,
                    "minPrice": null,
                    "maxPrice": null,
                    "adType": null,
                    "posterType": null,
                    "sortType": null,
                    "distance": null,
                    "attributes": null
                  },
                  "warnings": [],
                  "listings": [
                    {
                      "id": "3460255282",
                      "title": "Bulls Sharptail Street 3 27,5 Zoll mit Originalrechnung",
                      "description": "Bulls Sharptail Street 3 27,5 Zoll zu verkaufen\nRahmengröße 51 cm, sehr guter Zustand.",
                      "url": "https://www.kleinanzeigen.de/s-anzeige/bulls-sharptail-street-3-27-5-zoll-mit-originalrechnung/3460255282-217-8124",
                      "price": {
                        "amount": 250,
                        "currency": "EUR",
                        "type": "SPECIFIED_AMOUNT"
                      },
                      "ad_type": "OFFERED",
                      "poster_type": "PRIVATE",
                      "status": "ACTIVE",
                      "category": {
                        "id": "217",
                        "name": "Fahrraeder",
                        "localized_name": "Fahrräder & Zubehör"
                      },
                      "location": {
                        "zip_code": "68775",
                        "state": "Ketsch",
                        "latitude": 49.371643,
                        "longitude": 8.526013,
                        "radius_km": 3.58
                      },
                      "user_id": "162153981",
                      "posted_at": "2026-07-16T12:54:14.000+0200",
                      "attributes": [
                        {
                          "name": "fahrraeder.art",
                          "label": "Art",
                          "type": "ENUM",
                          "unit": null,
                          "values": [
                            {
                              "value": "herren",
                              "label": "Herren"
                            }
                          ]
                        },
                        {
                          "name": "fahrraeder.type",
                          "label": "Typ",
                          "type": "ENUM",
                          "unit": null,
                          "values": [
                            {
                              "value": "cityraeder",
                              "label": "Cityräder"
                            }
                          ]
                        }
                      ],
                      "thumbnail": "https://img.kleinanzeigen.de/api/v1/prod-ads/images/1f/1f1fc57c-1f93-4ae1-88fb-bd6c2d2c837e?rule=$_2.AUTO",
                      "images": [
                        "https://img.kleinanzeigen.de/api/v1/prod-ads/images/1f/1f1fc57c-1f93-4ae1-88fb-bd6c2d2c837e?rule=$_59.AUTO"
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/kleinanzeigen/ad": {
      "get": {
        "tags": [
          "Kleinanzeigen"
        ],
        "summary": "Get a single Kleinanzeigen listing (full detail: price, attributes, images, seller) by id or URL.",
        "operationId": "kleinanzeigen_v1_ad",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Numeric ad id. Provide at least one of: id, url.",
            "schema": {
              "type": "string",
              "example": "3460253912"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Full listing URL (web or API) — the ad id is extracted from it. Provide at least one of: id, url.",
            "schema": {
              "type": "string",
              "example": "https://www.kleinanzeigen.de/s-anzeige/…/3460253912-203-996"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "3460253912",
                    "title": "Bulls Sharptail Street 3 27,5 Zoll mit Originalrechnung",
                    "description": "Bulls Sharptail Street 3 27,5 Zoll zu verkaufen\nRahmengröße 51 cm, sehr guter Zustand.",
                    "url": "https://www.kleinanzeigen.de/s-anzeige/bulls-sharptail-street-3-27-5-zoll-mit-originalrechnung/3460255282-217-8124",
                    "price": {
                      "amount": 250,
                      "currency": "EUR",
                      "type": "SPECIFIED_AMOUNT"
                    },
                    "ad_type": "OFFERED",
                    "poster_type": "PRIVATE",
                    "status": "ACTIVE",
                    "category": {
                      "id": "217",
                      "name": "Fahrraeder",
                      "localized_name": "Fahrräder & Zubehör"
                    },
                    "location": {
                      "zip_code": "68775",
                      "state": "Ketsch",
                      "latitude": 49.371643,
                      "longitude": 8.526013,
                      "radius_km": 3.58
                    },
                    "user_id": "162153981",
                    "posted_at": "2026-07-16T12:54:14.000+0200",
                    "attributes": [
                      {
                        "name": "fahrraeder.art",
                        "label": "Art",
                        "type": "ENUM",
                        "unit": null,
                        "values": [
                          {
                            "value": "herren",
                            "label": "Herren"
                          }
                        ]
                      },
                      {
                        "name": "fahrraeder.type",
                        "label": "Typ",
                        "type": "ENUM",
                        "unit": null,
                        "values": [
                          {
                            "value": "cityraeder",
                            "label": "Cityräder"
                          }
                        ]
                      }
                    ],
                    "thumbnail": "https://img.kleinanzeigen.de/api/v1/prod-ads/images/1f/1f1fc57c-1f93-4ae1-88fb-bd6c2d2c837e?rule=$_2.AUTO",
                    "images": [
                      "https://img.kleinanzeigen.de/api/v1/prod-ads/images/1f/1f1fc57c-1f93-4ae1-88fb-bd6c2d2c837e?rule=$_59.AUTO"
                    ],
                    "contact_name": "Caroline",
                    "phone": null,
                    "seller_account_type": "PRIVATE",
                    "user_rating": 0.8076923076923077,
                    "user_since": "2016-07-23T15:18:23.000+0200",
                    "last_edited": "2026-07-16T12:52:39.000+0200",
                    "locations": [
                      {
                        "id": "3331",
                        "name": "Berlin"
                      }
                    ],
                    "version": "1.16",
                    "locale": "de_DE"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/kleinanzeigen/locations": {
      "get": {
        "tags": [
          "Kleinanzeigen"
        ],
        "summary": "Resolve a place name (city / ZIP) to Kleinanzeigen locationId(s) for the search `locationId` filter.",
        "operationId": "kleinanzeigen_v1_locations",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "City name or ZIP code to resolve.",
            "schema": {
              "type": "string",
              "example": "51063"
            }
          },
          {
            "name": "depth",
            "in": "query",
            "required": false,
            "description": "How many sub-location levels to include (0 = the matched locations only).",
            "schema": {
              "type": "string",
              "example": "0"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "query": "Berlin",
                  "locations": [
                    {
                      "id": "3331",
                      "name": "Berlin",
                      "localized_name": "Berlin",
                      "latitude": 52.51607,
                      "longitude": 13.37698,
                      "radius_km": 15.35,
                      "parent_id": "0",
                      "children_count": 49
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/kleinanzeigen/login": {
      "post": {
        "tags": [
          "Kleinanzeigen"
        ],
        "summary": "Open a Kleinanzeigen session with the account's own credentials. Returns an opaque session id to carry in the x-session-id header on the session routes. The portal's own session is the only thing kept, sealed at rest; the password is not stored and cannot be read back out of the session. A Kleinanzeigen account is created in the Kleinanzeigen Android app, not through this API. Its password form is the one step behind a bot guard, so a plain HTTP client cannot post it: run that sign-in once in a browser, keep the refresh token it yields and send it as `login_token` instead of `password`. Everything after the login runs without a browser.",
        "operationId": "kleinanzeigen_v1_login",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "session_id": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4",
                  "user_id": "name@example.com",
                  "expires_at": "2026-08-09T22:02:00.000Z"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "The portal account's e-mail address, or its phone number in +49… form where the platform signs in with one.",
                    "example": "name@example.com"
                  },
                  "password": {
                    "type": "string",
                    "description": "The portal account's password, or the one-time code where the platform has no password.",
                    "example": "•••••••••"
                  },
                  "login_token": {
                    "type": "string",
                    "description": "The token the challenge route handed back, which binds the code to the attempt it was sent for. On a portal that only asks for a code when it does not recognise the sign-in, this carries that mailed code itself.",
                    "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…"
                  }
                },
                "required": [
                  "username"
                ]
              },
              "example": {
                "username": "name@example.com"
              }
            }
          }
        }
      }
    },
    "/v1/kleinanzeigen/logout": {
      "post": {
        "tags": [
          "Kleinanzeigen"
        ],
        "summary": "Close a Kleinanzeigen session and drop everything it stored. Free of charge.",
        "operationId": "kleinanzeigen_v1_logout",
        "description": "**Live endpoint.** Free of charge.",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": null
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/kleinanzeigen/messages": {
      "get": {
        "tags": [
          "Kleinanzeigen"
        ],
        "summary": "Read the signed-in Kleinanzeigen account's inbox, or one conversation in full when conversation_id is given.",
        "operationId": "kleinanzeigen_v1_messages",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "conversation_id",
            "in": "query",
            "required": false,
            "description": "One conversation of the inbox. Omit to list the inbox.",
            "schema": {
              "type": "string",
              "example": "412778905"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page number.",
            "schema": {
              "type": "string",
              "example": "1"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "description": "How many entries one page holds.",
            "schema": {
              "type": "string",
              "example": "20"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "page": 1,
                  "page_size": 20,
                  "count": 1,
                  "conversations": [
                    {
                      "id": "412778905",
                      "ad_id": "5i79di5993027eh1d70e6f5d9g0h5h66",
                      "ad_title": "E-bike Cube Stereo hibryd 120 pro 625 Allroad",
                      "partner": "Bauer Noth",
                      "unread": true,
                      "last_message": "Ist der Artikel noch verfuegbar?",
                      "last_message_at": "2026-08-08T18:24:00.000Z"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Kleinanzeigen"
        ],
        "summary": "Send a Kleinanzeigen message: a reply into conversation_id, or a first contact on ad_id or ad_url.",
        "operationId": "kleinanzeigen_v1_messages_send",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "conversation_id": "412778905",
                  "data": {
                    "delivered": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "message": {
                    "type": "string",
                    "description": "The message text.",
                    "example": "Ist der Artikel noch verfuegbar?"
                  },
                  "conversation_id": {
                    "type": "string",
                    "description": "One conversation of the inbox. Omit to list the inbox.",
                    "example": "412778905"
                  },
                  "ad_id": {
                    "type": "string",
                    "description": "Start a new thread on this listing (instead of replying to a conversation).",
                    "example": "5i79di5993027eh1d70e6f5d9g0h5h66"
                  },
                  "ad_url": {
                    "type": "string",
                    "description": "The listing's full URL, an alternative to ad_id.",
                    "example": "https://www.quoka.de/anzeigen/…/5i79di…html"
                  }
                },
                "required": [
                  "message"
                ]
              },
              "example": {
                "message": "Ist der Artikel noch verfuegbar?"
              }
            }
          }
        }
      }
    },
    "/v1/kleinanzeigen/account": {
      "get": {
        "tags": [
          "Kleinanzeigen"
        ],
        "summary": "The signed-in Kleinanzeigen account's own profile.",
        "operationId": "kleinanzeigen_v1_account",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "e63599e304f57gf2efi03735d45g21h6",
                    "name": "Fabian",
                    "url": "https://www.quoka.de/user-profile-e63599e304f57gf2efi03735d45g21h6",
                    "member_since": "13.07.2026",
                    "ad_count": 5,
                    "listings": []
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/quoka/search": {
      "get": {
        "tags": [
          "Quoka"
        ],
        "summary": "Search Quoka classifieds by keyword and/or category, state and city, with filters (price range, private vs commercial, radius, sort) and pagination.",
        "operationId": "quoka_v1_search",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": false,
            "description": "Free-text keyword. Optional when a category or location is given. Provide at least one of: query, category, state, city.",
            "schema": {
              "type": "string",
              "example": "fahrrad"
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Top-level category slug from the site's URL. Provide at least one of: query, category, state, city.",
            "schema": {
              "type": "string",
              "example": "auto-motorrad"
            }
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "description": "German state slug. Needs `category`. Provide at least one of: query, category, state, city.",
            "schema": {
              "type": "string",
              "example": "baden-wuerttemberg"
            }
          },
          {
            "name": "city",
            "in": "query",
            "required": false,
            "description": "City slug. Needs `category` (and normally `state`). Provide at least one of: query, category, state, city.",
            "schema": {
              "type": "string",
              "example": "steinheim-an-der-murr"
            }
          },
          {
            "name": "subcategory",
            "in": "query",
            "required": false,
            "description": "Sub-category slug. Needs `category`.",
            "schema": {
              "type": "string",
              "example": "alles-moegliche"
            }
          },
          {
            "name": "radius",
            "in": "query",
            "required": false,
            "description": "Search radius in km around the city.",
            "schema": {
              "type": "string",
              "example": "25"
            }
          },
          {
            "name": "minPrice",
            "in": "query",
            "required": false,
            "description": "Minimum price in EUR.",
            "schema": {
              "type": "string",
              "example": "500"
            }
          },
          {
            "name": "maxPrice",
            "in": "query",
            "required": false,
            "description": "Maximum price in EUR.",
            "schema": {
              "type": "string",
              "example": "800"
            }
          },
          {
            "name": "sellerType",
            "in": "query",
            "required": false,
            "description": "Restrict to private or commercial sellers.",
            "schema": {
              "type": "string",
              "enum": [
                "private",
                "commercial"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Result ordering (default: newest first).",
            "schema": {
              "type": "string",
              "enum": [
                "date",
                "price_asc",
                "price_desc",
                "popularity"
              ]
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page index.",
            "schema": {
              "type": "string",
              "example": "1"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "description": "Results per page — the site serves 20 or 50.",
            "schema": {
              "type": "string",
              "example": "20"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "query": "fahrrad",
                  "page": 1,
                  "page_size": 20,
                  "count": 1,
                  "total_results": 3319,
                  "has_next_page": true,
                  "url": "https://www.quoka.de/anzeigen/?q=fahrrad",
                  "filters": {
                    "category": null,
                    "subcategory": null,
                    "state": null,
                    "city": null,
                    "radius": null,
                    "minPrice": null,
                    "maxPrice": null,
                    "sellerType": null,
                    "sort": "date"
                  },
                  "listings": [
                    {
                      "id": "5i79di5993027eh1d70e6f5d9g0h5h66",
                      "article_id": "2F46AF26-6079-4BE8-A47B-3C2A6D7E2E33",
                      "title": "E-bike Cube Stereo hibryd 120 pro 625 Allroad",
                      "description": "Ich verkaufe mein Cube Fully-E-Mountainbike.",
                      "url": "https://www.quoka.de/anzeigen/alles-moegliche/alles-moegliche/anzeige/e-bike-cube-stereo-hibryd-120-pro-625-allroad/5i79di5993027eh1d70e6f5d9g0h5h66.html",
                      "price": {
                        "amount": 1375,
                        "currency": "EUR"
                      },
                      "original_price": null,
                      "location": {
                        "city": "Steinheim an der Murr",
                        "state": "Baden-Württemberg",
                        "zip_code": "71711"
                      },
                      "posted_label": "heute 18:24",
                      "image_count": 5,
                      "thumbnail": "https://s3.quoka.de/quoka/top/20260808/1819/3ff90a8360ee15c5afe7643ed3ed4610.webp",
                      "phone_token": "610c6d767d6c62567768587b0d61",
                      "promoted": false
                    }
                  ],
                  "promoted": []
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/quoka/ad": {
      "get": {
        "tags": [
          "Quoka"
        ],
        "summary": "Get one Quoka listing in full (price, attributes, images, location, seller) by public id or URL.",
        "operationId": "quoka_v1_ad",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "The public listing id (last URL segment before .html). Provide at least one of: id, url.",
            "schema": {
              "type": "string",
              "example": "5i79di5993027eh1d70e6f5d9g0h5h66"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Full listing URL — the id is taken from it. Provide at least one of: id, url.",
            "schema": {
              "type": "string",
              "example": "https://www.quoka.de/anzeigen/…/5i79di5993027eh1d70e6f5d9g0h5h66.html"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "5i79di5993027eh1d70e6f5d9g0h5h66",
                    "article_id": "2F46AF26-6079-4BE8-A47B-3C2A6D7E2E33",
                    "internal_id": "1786206795",
                    "title": "E-bike Cube Stereo hibryd 120 pro 625 Allroad",
                    "description": "Ich verkaufe mein Cube Fully-E-Mountainbike.\n\nPrivatverkauf. Versand möglich.",
                    "url": "https://www.quoka.de/anzeigen/alles-moegliche/alles-moegliche/anzeige/e-bike-cube-stereo-hibryd-120-pro-625-allroad/5i79di5993027eh1d70e6f5d9g0h5h66.html",
                    "price": {
                      "amount": 1375,
                      "currency": "EUR",
                      "type": "verhandelbar"
                    },
                    "original_price": null,
                    "location": {
                      "city": "Steinheim an der Murr",
                      "state": "Baden-Württemberg",
                      "zip_code": "71711"
                    },
                    "posted_at": "08.08.2026 18:24",
                    "category": {
                      "path": [
                        "Alles Mögliche",
                        "Alles Mögliche"
                      ],
                      "url": "/anzeigen/alles-moegliche/"
                    },
                    "attributes": [
                      {
                        "label": "Übergabe",
                        "value": "Versand"
                      }
                    ],
                    "images": [
                      "https://s3.quoka.de/quoka/large/20260808/1819/3ff90a8360ee15c5afe7643ed3ed4610.webp"
                    ],
                    "thumbnail": "https://s3.quoka.de/quoka/top/20260808/1819/3ff90a8360ee15c5afe7643ed3ed4610.webp",
                    "availability": "https://schema.org/InStock",
                    "phone_token": "610c6d767d6c62567768587b0d61",
                    "seller": {
                      "id": "e63599e304f57gf2efi03735d45g21h6",
                      "name": "Bauer Noth",
                      "avatar": "https://s3.quoka.de/quoka/avatars/20260719/2323/49e2ce84ce45ff25d027439f7ac2393f",
                      "profile_url": "https://www.quoka.de/user-profile-e63599e304f57gf2efi03735d45g21h6"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/quoka/profile": {
      "get": {
        "tags": [
          "Quoka"
        ],
        "summary": "Get a Quoka seller's public profile — name, avatar, region, member since, last login, follower count, ad count and their listings.",
        "operationId": "quoka_v1_profile",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "The seller's public (encrypted) user id, as it appears in /user-profile-{id}. Provide at least one of: id, url.",
            "schema": {
              "type": "string",
              "example": "e63599e304f57gf2efi03735d45g21h6"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Full profile URL, or any listing URL of that seller's profile link. Provide at least one of: id, url.",
            "schema": {
              "type": "string",
              "example": "https://www.quoka.de/user-profile-e63599e304f57gf2efi03735d45g21h6"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page of that seller's listings (20 per page).",
            "schema": {
              "type": "string",
              "example": "1"
            }
          },
          {
            "name": "all",
            "in": "query",
            "required": false,
            "description": "Walk every page of the seller's listings instead of one (up to 25 pages).",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "page": 1,
                  "pages_read": 1,
                  "has_next_page": false,
                  "data": {
                    "id": "e63599e304f57gf2efi03735d45g21h6",
                    "name": "Bauer Noth",
                    "avatar": "https://s3.quoka.de/quoka/avatars/20260719/2323/49e2ce84ce45ff25d027439f7ac2393f",
                    "location": "Nordrhein-Westfalen Bochum",
                    "url": "https://www.quoka.de/user-profile-e63599e304f57gf2efi03735d45g21h6",
                    "online": true,
                    "member_since": "13.07.2026",
                    "last_login": "08.08.2026",
                    "followers": 0,
                    "ad_count": 5,
                    "listings": [
                      {
                        "id": "5i79di5993027eh1d70e6f5d9g0h5h66",
                        "article_id": "2F46AF26-6079-4BE8-A47B-3C2A6D7E2E33",
                        "title": "E-bike Cube Stereo hibryd 120 pro 625 Allroad",
                        "description": "Ich verkaufe mein Cube Fully-E-Mountainbike.",
                        "url": "https://www.quoka.de/anzeigen/alles-moegliche/alles-moegliche/anzeige/e-bike-cube-stereo-hibryd-120-pro-625-allroad/5i79di5993027eh1d70e6f5d9g0h5h66.html",
                        "price": {
                          "amount": 1375,
                          "currency": "EUR"
                        },
                        "original_price": null,
                        "location": {
                          "city": "Steinheim an der Murr",
                          "state": "Baden-Württemberg",
                          "zip_code": "71711"
                        },
                        "posted_label": "heute 18:24",
                        "image_count": 5,
                        "thumbnail": "https://s3.quoka.de/quoka/top/20260808/1819/3ff90a8360ee15c5afe7643ed3ed4610.webp",
                        "phone_token": "610c6d767d6c62567768587b0d61",
                        "promoted": false
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/quoka/login": {
      "post": {
        "tags": [
          "Quoka"
        ],
        "summary": "Open a Quoka session with the account's own credentials. Returns an opaque session id to carry in the x-session-id header on the session routes. The portal's own session is the only thing kept, sealed at rest; the password is not stored and cannot be read back out of the session.",
        "operationId": "quoka_v1_login",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "session_id": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4",
                  "user_id": "name@example.com",
                  "expires_at": "2026-08-09T22:02:00.000Z"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "The portal account's e-mail address, or its phone number in +49… form where the platform signs in with one.",
                    "example": "name@example.com"
                  },
                  "password": {
                    "type": "string",
                    "description": "The portal account's password, or the one-time code where the platform has no password.",
                    "example": "•••••••••"
                  }
                },
                "required": [
                  "username",
                  "password"
                ]
              },
              "example": {
                "username": "name@example.com",
                "password": "•••••••••"
              }
            }
          }
        }
      }
    },
    "/v1/quoka/logout": {
      "post": {
        "tags": [
          "Quoka"
        ],
        "summary": "Close a Quoka session and drop everything it stored. Free of charge.",
        "operationId": "quoka_v1_logout",
        "description": "**Live endpoint.** Free of charge.",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": null
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/quoka/messages": {
      "get": {
        "tags": [
          "Quoka"
        ],
        "summary": "Read the signed-in Quoka account's inbox, or one conversation in full when conversation_id is given.",
        "operationId": "quoka_v1_messages",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "conversation_id",
            "in": "query",
            "required": false,
            "description": "One conversation of the inbox. Omit to list the inbox.",
            "schema": {
              "type": "string",
              "example": "412778905"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page number.",
            "schema": {
              "type": "string",
              "example": "1"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "description": "How many entries one page holds.",
            "schema": {
              "type": "string",
              "example": "20"
            }
          },
          {
            "name": "all",
            "in": "query",
            "required": false,
            "description": "Walk every page instead of one.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "page": 1,
                  "page_size": 20,
                  "count": 1,
                  "conversations": [
                    {
                      "id": "412778905",
                      "ad_id": "5i79di5993027eh1d70e6f5d9g0h5h66",
                      "ad_title": "E-bike Cube Stereo hibryd 120 pro 625 Allroad",
                      "partner": "Bauer Noth",
                      "unread": true,
                      "last_message": "Ist der Artikel noch verfuegbar?",
                      "last_message_at": "2026-08-08T18:24:00.000Z"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Quoka"
        ],
        "summary": "Send a Quoka message: a reply into conversation_id, or a first contact on ad_id or ad_url.",
        "operationId": "quoka_v1_messages_send",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "conversation_id": "412778905",
                  "data": {
                    "delivered": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "message": {
                    "type": "string",
                    "description": "The message text.",
                    "example": "Ist der Artikel noch verfuegbar?"
                  },
                  "conversation_id": {
                    "type": "string",
                    "description": "One conversation of the inbox. Omit to list the inbox.",
                    "example": "412778905"
                  },
                  "ad_id": {
                    "type": "string",
                    "description": "Start a new thread on this listing (instead of replying to a conversation).",
                    "example": "5i79di5993027eh1d70e6f5d9g0h5h66"
                  },
                  "ad_url": {
                    "type": "string",
                    "description": "The listing's full URL, an alternative to ad_id.",
                    "example": "https://www.quoka.de/anzeigen/…/5i79di…html"
                  },
                  "category_url": {
                    "type": "string",
                    "description": "The listing's category URL, as the send form carries it.",
                    "example": "/anzeigen/alles-moegliche/"
                  },
                  "ad_title": {
                    "type": "string",
                    "description": "The listing's title, as the send form carries it.",
                    "example": "E-bike Cube Stereo"
                  }
                },
                "required": [
                  "message"
                ]
              },
              "example": {
                "message": "Ist der Artikel noch verfuegbar?"
              }
            }
          }
        }
      }
    },
    "/v1/quoka/account": {
      "get": {
        "tags": [
          "Quoka"
        ],
        "summary": "The signed-in Quoka account's own profile, or another member's when id is given.",
        "operationId": "quoka_v1_account",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Another member's public id. Omit for the signed-in account's own profile.",
            "schema": {
              "type": "string",
              "example": "e63599e304f57gf2efi03735d45g21h6"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "e63599e304f57gf2efi03735d45g21h6",
                    "name": "Fabian",
                    "url": "https://www.quoka.de/user-profile-e63599e304f57gf2efi03735d45g21h6",
                    "member_since": "13.07.2026",
                    "ad_count": 5,
                    "listings": []
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/quoka/listings": {
      "get": {
        "tags": [
          "Quoka"
        ],
        "summary": "The signed-in Quoka account's OWN ads, the ones a public search cannot see included: parked, expired and in-review listings, with their state and view counts.",
        "operationId": "quoka_v1_listings",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page number.",
            "schema": {
              "type": "string",
              "example": "1"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "description": "How many entries one page holds.",
            "schema": {
              "type": "string",
              "example": "20"
            }
          },
          {
            "name": "all",
            "in": "query",
            "required": false,
            "description": "Walk every page instead of one.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "page": 1,
                  "count": 1,
                  "has_next_page": false,
                  "listings": [
                    {
                      "id": "5i79di5993027eh1d70e6f5d9g0h5h66",
                      "title": "E-bike Cube Stereo hybrid 120",
                      "url": "https://www.quoka.de/anzeigen/…/5i79di…html",
                      "state": "ACTIVE",
                      "price": "1.450 €",
                      "views": 214,
                      "created_at": "07.08.2026",
                      "image": "https://…/thumb.jpg"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Quoka"
        ],
        "summary": "Publish a new ad on the signed-in Quoka account. Beyond the shared fields, a category asks for its own (mileage, room count, size); those go in `attributes` under the portal's field names.",
        "operationId": "quoka_v1_listings_create",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "listing": {
                    "id": "5i79di5993027eh1d70e6f5d9g0h5h66",
                    "url": "https://www.quoka.de/anzeigen/…/5i79di…html",
                    "state": "ACTIVE"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "description": "Headline of the ad.",
                    "example": "E-bike Cube Stereo hybrid 120"
                  },
                  "description": {
                    "type": "string",
                    "description": "Body text of the ad.",
                    "example": "Kaum gefahren, Rechnung liegt bei."
                  },
                  "category_id": {
                    "type": "string",
                    "description": "The portal's own category id, taken from its category picker. It has to be a LEAF category: markt.de answers a branch, or an id in the shorter form its public category pages use, with \"Die Kategorie … konnte nicht zugeordnet werden\" and publishes nothing. On Quoka the price field belongs to the category, so an ad with a price needs one.",
                    "example": "2301150000"
                  },
                  "price": {
                    "type": "string",
                    "description": "Asking price in EUR, as a plain number.",
                    "example": "1450"
                  },
                  "price_type": {
                    "type": "string",
                    "description": "How the price is meant, where the portal offers a choice. Not every portal offers every one: neither markt.de nor Quoka has ON_REQUEST, and both answer with the choices they do have rather than publishing an ad with no price.",
                    "enum": [
                      "FIXED",
                      "NEGOTIABLE",
                      "FREE",
                      "ON_REQUEST"
                    ]
                  },
                  "location": {
                    "type": "string",
                    "description": "Postcode, or postcode and city, of the ad. Quoka resolves it through its own place lookup and refuses one it does not know; add the district to pick a specific one (`30159 Mitte`).",
                    "example": "44787 Bochum"
                  },
                  "ad_type": {
                    "type": "string",
                    "description": "An offer, or a wanted ad.",
                    "enum": [
                      "OFFER",
                      "REQUEST"
                    ]
                  },
                  "phone": {
                    "type": "string",
                    "description": "Contact phone number to publish with the ad.",
                    "example": "+4915112345678"
                  },
                  "attributes": {
                    "type": "string",
                    "description": "Category-specific form fields, keyed by the portal's own field name. Which ones a category asks for comes back from the portal when the category is picked.",
                    "example": "{\"mileage\":\"12000\",\"condition\":\"used\"}"
                  },
                  "publish": {
                    "type": "string",
                    "description": "Publish the ad immediately, or park it as a draft where the portal offers both.",
                    "enum": [
                      "true",
                      "false"
                    ]
                  },
                  "captcha_token": {
                    "type": "string",
                    "description": "reCAPTCHA token, where the portal's form demands one.",
                    "example": "03AGdBq26…"
                  }
                },
                "required": [
                  "title",
                  "description"
                ]
              },
              "example": {
                "title": "E-bike Cube Stereo hybrid 120",
                "description": "Kaum gefahren, Rechnung liegt bei."
              }
            }
          }
        }
      }
    },
    "/v1/quoka/register": {
      "post": {
        "tags": [
          "Quoka"
        ],
        "summary": "Create a Quoka account through the API. The portal mails a confirmation link, so the only manual step left is following it.",
        "operationId": "quoka_v1_register",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "email": "name@example.com",
                  "confirmation_required": true
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "description": "E-mail address of the account to create.",
                    "example": "name@example.com"
                  },
                  "password": {
                    "type": "string",
                    "description": "The portal account's password, or the one-time code where the platform has no password.",
                    "example": "•••••••••"
                  },
                  "name": {
                    "type": "string",
                    "description": "Display name / nickname of the new account.",
                    "example": "Fabian"
                  },
                  "recaptcha_token": {
                    "type": "string",
                    "description": "reCAPTCHA token for the portal's registration form.",
                    "example": "03AGdBq26…"
                  },
                  "extra": {
                    "type": "string",
                    "description": "Portal-specific extra form fields (city, zip, account type, marketing opt-in, …).",
                    "example": "{\"city\":\"Bochum\",\"zip\":\"44787\"}"
                  }
                },
                "required": [
                  "email",
                  "password"
                ]
              },
              "example": {
                "email": "name@example.com",
                "password": "•••••••••"
              }
            }
          }
        }
      }
    },
    "/v1/markt/search": {
      "get": {
        "tags": [
          "markt.de"
        ],
        "summary": "Search markt.de classifieds by keyword, location and/or category, with filters (price range, private vs commercial vs wanted, price type, radius, sort) and pagination.",
        "operationId": "markt_v1_search",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": false,
            "description": "Free-text keyword. Optional when a location, category or seller is given. Provide at least one of: query, geo, categoryId, sellerId.",
            "schema": {
              "type": "string",
              "example": "fahrrad"
            }
          },
          {
            "name": "geo",
            "in": "query",
            "required": false,
            "description": "City, postcode or region — the portal resolves it to its own region. Provide at least one of: query, geo, categoryId, sellerId.",
            "schema": {
              "type": "string",
              "example": "Berlin"
            }
          },
          {
            "name": "categoryId",
            "in": "query",
            "required": false,
            "description": "Numeric category id as used by the site's own category picker. Provide at least one of: query, geo, categoryId, sellerId.",
            "schema": {
              "type": "string",
              "example": "2200000000"
            }
          },
          {
            "name": "sellerId",
            "in": "query",
            "required": false,
            "description": "Restrict to one seller's ads (member id or profile URL). Provide at least one of: query, geo, categoryId, sellerId.",
            "schema": {
              "type": "string",
              "example": "8519613"
            }
          },
          {
            "name": "radius",
            "in": "query",
            "required": false,
            "description": "Search radius in km around the location (0, 5, 10, 15, 20, 25, 50, 100, 150, 200).",
            "schema": {
              "type": "string",
              "example": "50"
            }
          },
          {
            "name": "minPrice",
            "in": "query",
            "required": false,
            "description": "Minimum price in EUR.",
            "schema": {
              "type": "string",
              "example": "100"
            }
          },
          {
            "name": "maxPrice",
            "in": "query",
            "required": false,
            "description": "Maximum price in EUR.",
            "schema": {
              "type": "string",
              "example": "200"
            }
          },
          {
            "name": "adMode",
            "in": "query",
            "required": false,
            "description": "Restrict to private offers, commercial offers or wanted ads.",
            "schema": {
              "type": "string",
              "enum": [
                "private",
                "commercial",
                "wanted"
              ]
            }
          },
          {
            "name": "priceType",
            "in": "query",
            "required": false,
            "description": "The site's price type: EXT fixed, BA best offer, VB negotiable, ZV free, TA swap, STD hourly.",
            "schema": {
              "type": "string",
              "enum": [
                "EXT",
                "BA",
                "VB",
                "ZV",
                "TA",
                "STD"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Result ordering (default: the site's own relevance/date order).",
            "schema": {
              "type": "string",
              "enum": [
                "date",
                "price_asc",
                "price_desc"
              ]
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page index; the site serves 20 results per page.",
            "schema": {
              "type": "string",
              "example": "1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "query": "fahrrad",
                  "page": 1,
                  "page_size": 20,
                  "count": 1,
                  "total_results": 10201,
                  "has_next_page": true,
                  "url": "https://www.markt.de/suche.htm?keywords=fahrrad",
                  "filters": {
                    "geo": null,
                    "categoryId": null,
                    "sellerId": null,
                    "radius": null,
                    "minPrice": null,
                    "maxPrice": null,
                    "adMode": null,
                    "priceType": null,
                    "sort": "date"
                  },
                  "listings": [
                    {
                      "id": "60ab2c69",
                      "title": "Yosemite Biltema Damen Fahrrad City Comfort",
                      "description": "Kaum benutzt, einmal pro Jahr im Urlaub. Alles wie neu.",
                      "url": "https://www.markt.de/yosemite-biltema-damen-fahrrad-city-comfort/a/60ab2c69/?geoUrlId=berlin",
                      "price": {
                        "amount": 169,
                        "currency": "EUR",
                        "label": "Festpreis"
                      },
                      "location": {
                        "zip_code": "12623",
                        "city": "Berlin"
                      },
                      "posted_label": "Heute, vor 16 Min.",
                      "image_count": 12,
                      "thumbnail": "https://imagecache.markt.de/sapOss01EqJLFZliUXgWi2CMZ5E=/260x340/images_classifieds/d8/ff/e328-1451-43c6-98a6-b8e06889fe5a/image",
                      "promoted": false
                    }
                  ],
                  "more_results": []
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/markt/ad": {
      "get": {
        "tags": [
          "markt.de"
        ],
        "summary": "Get one markt.de listing in full (price, attributes, images, location, seller) by public id or URL.",
        "operationId": "markt_v1_ad",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "The public listing id (the `/a/{id}/` segment). Provide at least one of: id, url.",
            "schema": {
              "type": "string",
              "example": "60ab2c69"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Full listing URL — the id is taken from it. Provide at least one of: id, url.",
            "schema": {
              "type": "string",
              "example": "https://www.markt.de/yosemite-biltema-damen-fahrrad-city-comfort/a/60ab2c69/"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "60ab2c69",
                    "title": "Yosemite Biltema Damen Fahrrad City Comfort",
                    "description": "Kaum benutzt, einmal pro Jahr im Urlaub. Alles wie neu.\n51 cm / 28 inch Rohrhöhe da wo der Sattel drin steckt",
                    "url": "https://www.markt.de/yosemite-biltema-damen-fahrrad-city-comfort/a/60ab2c69/?geoUrlId=berlin",
                    "price": {
                      "amount": 169,
                      "currency": "EUR",
                      "label": "Festpreis"
                    },
                    "location": {
                      "zip_code": "12623",
                      "city": "Berlin",
                      "street": "Summter Straße"
                    },
                    "posted_label": "Heute, vor 17 Min.",
                    "ad_type": "Privatangebot",
                    "views": 4,
                    "category": {
                      "path": [
                        "Berlin",
                        "Fahrzeuge",
                        "Fahrräder",
                        "Citybikes"
                      ],
                      "url": "https://www.markt.de/berlin/fahrzeuge/fahrraeder/citybikes/"
                    },
                    "attributes": [
                      {
                        "label": "Zustand",
                        "value": "Gebraucht"
                      }
                    ],
                    "images": [
                      "https://imagecache.markt.de/4T1P3VBSUKqYVzwu2cBU23Vkd-o=/fit-in/750x516/images_classifieds/d8/ff/e328-1451-43c6-98a6-b8e06889fe5a/image"
                    ],
                    "availability": "InStock",
                    "seller": {
                      "id": "8519613",
                      "name": "Alexander Arent",
                      "profile_url": "https://www.markt.de/userId,8519613/profile.htm",
                      "avatar": "https://static.markt.de/bundles/edhjdhjj/image/markt/userprofile/default_private.svg",
                      "member_since": "11.01.2020",
                      "online": true,
                      "verifications": {
                        "age": false,
                        "phone": true
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/markt/profile": {
      "get": {
        "tags": [
          "markt.de"
        ],
        "summary": "Get a markt.de seller's public profile — name, avatar, member since, verifications, ad count and their listings.",
        "operationId": "markt_v1_profile",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "The seller's numeric member id, as it appears in /userId,{id}/profile.htm. Provide at least one of: id, url.",
            "schema": {
              "type": "string",
              "example": "8519613"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Full profile URL — the id is taken from it. Provide at least one of: id, url.",
            "schema": {
              "type": "string",
              "example": "https://www.markt.de/userId,8519613/profile.htm"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page of that seller's listings (20 per page).",
            "schema": {
              "type": "string",
              "example": "1"
            }
          },
          {
            "name": "all",
            "in": "query",
            "required": false,
            "description": "Walk every page of the seller's listings instead of one (up to 25 pages).",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "page": 1,
                  "pages_read": 1,
                  "has_next_page": false,
                  "data": {
                    "id": "8519613",
                    "name": "Alexander Arent",
                    "avatar": "https://static.markt.de/bundles/edhjdhjj/image/markt/userprofile/default_private.svg",
                    "url": "https://www.markt.de/userId,8519613/profile.htm",
                    "online": true,
                    "member_since": "11.01.2020",
                    "about": null,
                    "ad_count": 16,
                    "verifications": {
                      "age": false,
                      "phone": true
                    },
                    "listings": [
                      {
                        "id": "60ab2c69",
                        "title": "Yosemite Biltema Damen Fahrrad City Comfort",
                        "description": "Kaum benutzt, einmal pro Jahr im Urlaub. Alles wie neu.",
                        "url": "https://www.markt.de/yosemite-biltema-damen-fahrrad-city-comfort/a/60ab2c69/?geoUrlId=berlin",
                        "price": {
                          "amount": 169,
                          "currency": "EUR",
                          "label": "Festpreis"
                        },
                        "location": {
                          "zip_code": "12623",
                          "city": "Berlin"
                        },
                        "posted_label": "Heute, vor 16 Min.",
                        "image_count": 12,
                        "thumbnail": "https://imagecache.markt.de/sapOss01EqJLFZliUXgWi2CMZ5E=/260x340/images_classifieds/d8/ff/e328-1451-43c6-98a6-b8e06889fe5a/image",
                        "promoted": false
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/markt/login": {
      "post": {
        "tags": [
          "markt.de"
        ],
        "summary": "Open a markt.de session with the account's own credentials. Returns an opaque session id to carry in the x-session-id header on the session routes. The portal's own session is the only thing kept, sealed at rest; the password is not stored and cannot be read back out of the session. markt.de adds a second step when it does not recognise the sign-in: this call then answers 401 and mails a one-time code to the account's address. Repeat the call with that code in `login_token`.",
        "operationId": "markt_v1_login",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "session_id": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4",
                  "user_id": "name@example.com",
                  "expires_at": "2026-08-09T22:02:00.000Z"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "The portal account's e-mail address, or its phone number in +49… form where the platform signs in with one.",
                    "example": "name@example.com"
                  },
                  "password": {
                    "type": "string",
                    "description": "The portal account's password, or the one-time code where the platform has no password.",
                    "example": "•••••••••"
                  },
                  "login_token": {
                    "type": "string",
                    "description": "The token the challenge route handed back, which binds the code to the attempt it was sent for. On a portal that only asks for a code when it does not recognise the sign-in, this carries that mailed code itself.",
                    "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…"
                  }
                },
                "required": [
                  "username",
                  "password"
                ]
              },
              "example": {
                "username": "name@example.com",
                "password": "•••••••••"
              }
            }
          }
        }
      }
    },
    "/v1/markt/logout": {
      "post": {
        "tags": [
          "markt.de"
        ],
        "summary": "Close a markt.de session and drop everything it stored. Free of charge.",
        "operationId": "markt_v1_logout",
        "description": "**Live endpoint.** Free of charge.",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": null
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/markt/messages": {
      "get": {
        "tags": [
          "markt.de"
        ],
        "summary": "Read the signed-in markt.de account's inbox, or one conversation in full when conversation_id is given.",
        "operationId": "markt_v1_messages",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "conversation_id",
            "in": "query",
            "required": false,
            "description": "One conversation of the inbox. Omit to list the inbox.",
            "schema": {
              "type": "string",
              "example": "412778905"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page number.",
            "schema": {
              "type": "string",
              "example": "1"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "description": "How many entries one page holds.",
            "schema": {
              "type": "string",
              "example": "20"
            }
          },
          {
            "name": "before",
            "in": "query",
            "required": false,
            "description": "Page backwards inside a thread: the timestamp of the oldest message held.",
            "schema": {
              "type": "string",
              "example": "1754600000000"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "page": 1,
                  "page_size": 20,
                  "count": 1,
                  "conversations": [
                    {
                      "id": "412778905",
                      "ad_id": "5i79di5993027eh1d70e6f5d9g0h5h66",
                      "ad_title": "E-bike Cube Stereo hibryd 120 pro 625 Allroad",
                      "partner": "Bauer Noth",
                      "unread": true,
                      "last_message": "Ist der Artikel noch verfuegbar?",
                      "last_message_at": "2026-08-08T18:24:00.000Z"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "markt.de"
        ],
        "summary": "Send a markt.de message: a reply into conversation_id, or a first contact on ad_id or ad_url. A first contact needs a reCAPTCHA token in `captcha_token`, minted in a browser on the ad's own page: markt.de verifies it with Google, so it cannot be produced here. Without one the portal answers 200 with the contact form again instead of sending. A reply into an existing conversation_id needs no token.",
        "operationId": "markt_v1_messages_send",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "conversation_id": "412778905",
                  "data": {
                    "delivered": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "message": {
                    "type": "string",
                    "description": "The message text.",
                    "example": "Ist der Artikel noch verfuegbar?"
                  },
                  "conversation_id": {
                    "type": "string",
                    "description": "One conversation of the inbox. Omit to list the inbox.",
                    "example": "412778905"
                  },
                  "ad_id": {
                    "type": "string",
                    "description": "Start a new thread on this listing (instead of replying to a conversation).",
                    "example": "5i79di5993027eh1d70e6f5d9g0h5h66"
                  },
                  "ad_url": {
                    "type": "string",
                    "description": "The listing's full URL, an alternative to ad_id.",
                    "example": "https://www.quoka.de/anzeigen/…/5i79di…html"
                  },
                  "skip_personal_data_check": {
                    "type": "string",
                    "description": "Send even though the portal flagged a phone number or address in the text.",
                    "enum": [
                      "true",
                      "false"
                    ]
                  },
                  "sender_phone": {
                    "type": "string",
                    "description": "Phone number to pass along with a first contact.",
                    "example": "+4915112345678"
                  },
                  "display_phone": {
                    "type": "string",
                    "description": "Show that phone number to the recipient.",
                    "enum": [
                      "true",
                      "false"
                    ]
                  },
                  "ignore_warning": {
                    "type": "string",
                    "description": "Send even though the portal warned about the text.",
                    "enum": [
                      "true",
                      "false"
                    ]
                  },
                  "captcha_token": {
                    "type": "string",
                    "description": "reCAPTCHA token, where the portal's form demands one.",
                    "example": "03AGdBq26…"
                  }
                },
                "required": [
                  "message"
                ]
              },
              "example": {
                "message": "Ist der Artikel noch verfuegbar?"
              }
            }
          }
        }
      }
    },
    "/v1/markt/account": {
      "get": {
        "tags": [
          "markt.de"
        ],
        "summary": "The signed-in markt.de account's own profile, or another member's when id is given.",
        "operationId": "markt_v1_account",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Another member's public id. Omit for the signed-in account's own profile.",
            "schema": {
              "type": "string",
              "example": "e63599e304f57gf2efi03735d45g21h6"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "e63599e304f57gf2efi03735d45g21h6",
                    "name": "Fabian",
                    "url": "https://www.quoka.de/user-profile-e63599e304f57gf2efi03735d45g21h6",
                    "member_since": "13.07.2026",
                    "ad_count": 5,
                    "listings": []
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/markt/listings": {
      "get": {
        "tags": [
          "markt.de"
        ],
        "summary": "The signed-in markt.de account's OWN ads, the ones a public search cannot see included: parked, expired and in-review listings, with their state and view counts.",
        "operationId": "markt_v1_listings",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "description": "Which of the account's own ads to list: the live ones or the parked and expired ones.",
            "schema": {
              "type": "string",
              "enum": [
                "active",
                "inactive"
              ]
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page number.",
            "schema": {
              "type": "string",
              "example": "1"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "description": "How many entries one page holds.",
            "schema": {
              "type": "string",
              "example": "20"
            }
          },
          {
            "name": "all",
            "in": "query",
            "required": false,
            "description": "Walk every page instead of one.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "page": 1,
                  "count": 1,
                  "has_next_page": false,
                  "listings": [
                    {
                      "id": "5i79di5993027eh1d70e6f5d9g0h5h66",
                      "title": "E-bike Cube Stereo hybrid 120",
                      "url": "https://www.quoka.de/anzeigen/…/5i79di…html",
                      "state": "ACTIVE",
                      "price": "1.450 €",
                      "views": 214,
                      "created_at": "07.08.2026",
                      "image": "https://…/thumb.jpg"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "markt.de"
        ],
        "summary": "Publish a new ad on the signed-in markt.de account. Beyond the shared fields, a category asks for its own (mileage, room count, size); those go in `attributes` under the portal's field names.",
        "operationId": "markt_v1_listings_create",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "listing": {
                    "id": "5i79di5993027eh1d70e6f5d9g0h5h66",
                    "url": "https://www.quoka.de/anzeigen/…/5i79di…html",
                    "state": "ACTIVE"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "description": "Headline of the ad.",
                    "example": "E-bike Cube Stereo hybrid 120"
                  },
                  "description": {
                    "type": "string",
                    "description": "Body text of the ad.",
                    "example": "Kaum gefahren, Rechnung liegt bei."
                  },
                  "category_id": {
                    "type": "string",
                    "description": "The portal's own category id, taken from its category picker. It has to be a LEAF category: markt.de answers a branch, or an id in the shorter form its public category pages use, with \"Die Kategorie … konnte nicht zugeordnet werden\" and publishes nothing. On Quoka the price field belongs to the category, so an ad with a price needs one.",
                    "example": "2301150000"
                  },
                  "price": {
                    "type": "string",
                    "description": "Asking price in EUR, as a plain number.",
                    "example": "1450"
                  },
                  "price_type": {
                    "type": "string",
                    "description": "How the price is meant, where the portal offers a choice. Not every portal offers every one: neither markt.de nor Quoka has ON_REQUEST, and both answer with the choices they do have rather than publishing an ad with no price.",
                    "enum": [
                      "FIXED",
                      "NEGOTIABLE",
                      "FREE",
                      "ON_REQUEST"
                    ]
                  },
                  "location": {
                    "type": "string",
                    "description": "Postcode, or postcode and city, of the ad. Quoka resolves it through its own place lookup and refuses one it does not know; add the district to pick a specific one (`30159 Mitte`).",
                    "example": "44787 Bochum"
                  },
                  "ad_type": {
                    "type": "string",
                    "description": "An offer, or a wanted ad.",
                    "enum": [
                      "OFFER",
                      "REQUEST"
                    ]
                  },
                  "phone": {
                    "type": "string",
                    "description": "Contact phone number to publish with the ad.",
                    "example": "+4915112345678"
                  },
                  "attributes": {
                    "type": "string",
                    "description": "Category-specific form fields, keyed by the portal's own field name. Which ones a category asks for comes back from the portal when the category is picked.",
                    "example": "{\"mileage\":\"12000\",\"condition\":\"used\"}"
                  },
                  "publish": {
                    "type": "string",
                    "description": "Publish the ad immediately, or park it as a draft where the portal offers both.",
                    "enum": [
                      "true",
                      "false"
                    ]
                  },
                  "captcha_token": {
                    "type": "string",
                    "description": "reCAPTCHA token, where the portal's form demands one.",
                    "example": "03AGdBq26…"
                  }
                },
                "required": [
                  "title",
                  "description"
                ]
              },
              "example": {
                "title": "E-bike Cube Stereo hybrid 120",
                "description": "Kaum gefahren, Rechnung liegt bei."
              }
            }
          }
        }
      }
    },
    "/v1/markt/register": {
      "post": {
        "tags": [
          "markt.de"
        ],
        "summary": "Create a markt.de account through the API. One value has to come from elsewhere: markt.de guards its sign-up form with a reCAPTCHA and has Google verify the token, so it cannot be produced here — mint it in a browser on the sign-up page and pass it in as `recaptcha_token`. Without it the portal answers 200 with the form again rather than an error. The rest of the sign-up runs on its own, the confirmation link the portal mails included: hand it to /activate.",
        "operationId": "markt_v1_register",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "email": "name@example.com",
                  "confirmation_required": true
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "description": "E-mail address of the account to create.",
                    "example": "name@example.com"
                  },
                  "password": {
                    "type": "string",
                    "description": "The portal account's password, or the one-time code where the platform has no password.",
                    "example": "•••••••••"
                  },
                  "name": {
                    "type": "string",
                    "description": "Display name / nickname of the new account.",
                    "example": "Fabian"
                  },
                  "recaptcha_token": {
                    "type": "string",
                    "description": "reCAPTCHA token for the portal's registration form.",
                    "example": "03AGdBq26…"
                  },
                  "extra": {
                    "type": "string",
                    "description": "Portal-specific extra form fields (city, zip, account type, marketing opt-in, …).",
                    "example": "{\"city\":\"Bochum\",\"zip\":\"44787\"}"
                  }
                },
                "required": [
                  "email",
                  "password"
                ]
              },
              "example": {
                "email": "name@example.com",
                "password": "•••••••••"
              }
            }
          }
        }
      }
    },
    "/v1/markt/activate": {
      "post": {
        "tags": [
          "markt.de"
        ],
        "summary": "Redeem the activation link markt.de mailed after a sign-up, so the new account can log in. Where the portal checks a phone number behind the same handle, a request carrying `phone_number` asks for the text message and one carrying `code` closes the check.",
        "operationId": "markt_v1_activate",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "activation_uuid": "8bd6d2c0-4f1a-4c5e-9a30-7c2b1d5e6f70",
                  "email": "name@example.com"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "uuid": {
                    "type": "string",
                    "description": "The one-time handle out of the mail the portal sent — the last segment of its link.",
                    "example": "8bd6d2c0-4f1a-4c5e-9a30-7c2b1d5e6f70"
                  },
                  "phone_number": {
                    "type": "string",
                    "description": "Phone number in +49… form, where the portal checks one after the activation.",
                    "example": "+49 151 1234 5678"
                  },
                  "code": {
                    "type": "string",
                    "description": "The code from the portal's text message.",
                    "example": "154392"
                  },
                  "extra": {
                    "type": "string",
                    "description": "Portal-specific extra form fields (city, zip, account type, marketing opt-in, …).",
                    "example": "{\"city\":\"Bochum\",\"zip\":\"44787\"}"
                  }
                },
                "required": [
                  "uuid"
                ]
              },
              "example": {
                "uuid": "8bd6d2c0-4f1a-4c5e-9a30-7c2b1d5e6f70"
              }
            }
          }
        }
      }
    },
    "/v1/mobilede/search": {
      "get": {
        "tags": [
          "mobile.de"
        ],
        "summary": "Search mobile.de vehicles with the portal's own filters: make, model, price range, year range, mileage, power, fuel, transmission, body category, condition, doors, seats, colour, emission class, seller type, damage, location radius, sort and pagination.",
        "operationId": "mobilede_v1_search",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": false,
            "description": "Free-text search across the listings.",
            "schema": {
              "type": "string",
              "example": "golf gti"
            }
          },
          {
            "name": "vehicleClass",
            "in": "query",
            "required": false,
            "description": "What kind of vehicle to search (default Car).",
            "schema": {
              "type": "string",
              "enum": [
                "Car",
                "Motorbike",
                "Motorhome",
                "VanUpTo7500",
                "TruckOver7500",
                "SemiTrailerTruck",
                "Bus",
                "AgriculturalVehicle",
                "ConstructionMachine",
                "ForkliftTruck",
                "Trailer",
                "SemiTrailer"
              ]
            }
          },
          {
            "name": "make",
            "in": "query",
            "required": false,
            "description": "Brand by name; resolved against the portal's own make list.",
            "schema": {
              "type": "string",
              "example": "Audi"
            }
          },
          {
            "name": "makeId",
            "in": "query",
            "required": false,
            "description": "Numeric make id, as returned by /v1/mobilede/makes.",
            "schema": {
              "type": "string",
              "example": "1900"
            }
          },
          {
            "name": "model",
            "in": "query",
            "required": false,
            "description": "Model by name; needs a make. Resolved against that make's model list.",
            "schema": {
              "type": "string",
              "example": "A1"
            }
          },
          {
            "name": "modelId",
            "in": "query",
            "required": false,
            "description": "Numeric model id, as returned by /v1/mobilede/makes?makeId=…",
            "schema": {
              "type": "string",
              "example": "25"
            }
          },
          {
            "name": "minPrice",
            "in": "query",
            "required": false,
            "description": "Minimum price in EUR.",
            "schema": {
              "type": "string",
              "example": "5000"
            }
          },
          {
            "name": "maxPrice",
            "in": "query",
            "required": false,
            "description": "Maximum price in EUR.",
            "schema": {
              "type": "string",
              "example": "15000"
            }
          },
          {
            "name": "minYear",
            "in": "query",
            "required": false,
            "description": "Earliest year of first registration.",
            "schema": {
              "type": "string",
              "example": "2015"
            }
          },
          {
            "name": "maxYear",
            "in": "query",
            "required": false,
            "description": "Latest year of first registration.",
            "schema": {
              "type": "string",
              "example": "2020"
            }
          },
          {
            "name": "minMileage",
            "in": "query",
            "required": false,
            "description": "Minimum mileage in km.",
            "schema": {
              "type": "string",
              "example": "10000"
            }
          },
          {
            "name": "maxMileage",
            "in": "query",
            "required": false,
            "description": "Maximum mileage in km.",
            "schema": {
              "type": "string",
              "example": "100000"
            }
          },
          {
            "name": "minPower",
            "in": "query",
            "required": false,
            "description": "Minimum engine power in kW.",
            "schema": {
              "type": "string",
              "example": "75"
            }
          },
          {
            "name": "maxPower",
            "in": "query",
            "required": false,
            "description": "Maximum engine power in kW.",
            "schema": {
              "type": "string",
              "example": "150"
            }
          },
          {
            "name": "fuel",
            "in": "query",
            "required": false,
            "description": "Fuel type.",
            "schema": {
              "type": "string",
              "enum": [
                "PETROL",
                "DIESEL",
                "ELECTRICITY",
                "HYBRID",
                "HYBRID_DIESEL",
                "LPG",
                "CNG",
                "HYDROGENIUM",
                "ETHANOL",
                "OTHER"
              ]
            }
          },
          {
            "name": "transmission",
            "in": "query",
            "required": false,
            "description": "Gearbox type.",
            "schema": {
              "type": "string",
              "enum": [
                "MANUAL_GEAR",
                "AUTOMATIC_GEAR",
                "SEMIAUTOMATIC_GEAR"
              ]
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Body category. SUVs are filed under OffRoad, there is no SUV value.",
            "schema": {
              "type": "string",
              "enum": [
                "Cabrio",
                "Limousine",
                "EstateCar",
                "SmallCar",
                "Van",
                "SportsCar",
                "OffRoad",
                "OtherCar"
              ]
            }
          },
          {
            "name": "condition",
            "in": "query",
            "required": false,
            "description": "New or used vehicle.",
            "schema": {
              "type": "string",
              "enum": [
                "NEW",
                "USED"
              ]
            }
          },
          {
            "name": "doors",
            "in": "query",
            "required": false,
            "description": "Door count band.",
            "schema": {
              "type": "string",
              "enum": [
                "TWO_OR_THREE",
                "FOUR_OR_FIVE",
                "SIX_OR_SEVEN"
              ]
            }
          },
          {
            "name": "seats",
            "in": "query",
            "required": false,
            "description": "Exact number of seats.",
            "schema": {
              "type": "string",
              "example": "5"
            }
          },
          {
            "name": "color",
            "in": "query",
            "required": false,
            "description": "Exterior colour.",
            "schema": {
              "type": "string",
              "enum": [
                "BLACK",
                "WHITE",
                "SILVER",
                "GREY",
                "RED",
                "BLUE",
                "GREEN",
                "YELLOW",
                "BROWN",
                "ORANGE",
                "GOLD",
                "BEIGE",
                "PURPLE"
              ]
            }
          },
          {
            "name": "emissionClass",
            "in": "query",
            "required": false,
            "description": "Minimum emission class: EURO4 also returns everything cleaner.",
            "schema": {
              "type": "string",
              "enum": [
                "EURO1",
                "EURO2",
                "EURO3",
                "EURO4",
                "EURO5",
                "EURO6",
                "EURO6C",
                "EURO6D",
                "EURO6D_TEMP"
              ]
            }
          },
          {
            "name": "sellerType",
            "in": "query",
            "required": false,
            "description": "FSBO = private seller, DEALER = trader.",
            "schema": {
              "type": "string",
              "enum": [
                "FSBO",
                "DEALER"
              ]
            }
          },
          {
            "name": "damaged",
            "in": "query",
            "required": false,
            "description": "true returns only damaged vehicles, false excludes them.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "withImages",
            "in": "query",
            "required": false,
            "description": "Only listings that carry at least one photo.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "description": "ISO country of the seller.",
            "schema": {
              "type": "string",
              "example": "DE"
            }
          },
          {
            "name": "zipCode",
            "in": "query",
            "required": false,
            "description": "Exact postcode of the seller (not a radius — use latitude/longitude for that).",
            "schema": {
              "type": "string",
              "example": "10115"
            }
          },
          {
            "name": "latitude",
            "in": "query",
            "required": false,
            "description": "Centre of a radius search; needs longitude.",
            "schema": {
              "type": "string",
              "example": "52.5200"
            }
          },
          {
            "name": "longitude",
            "in": "query",
            "required": false,
            "description": "Centre of a radius search; needs latitude.",
            "schema": {
              "type": "string",
              "example": "13.4050"
            }
          },
          {
            "name": "radius",
            "in": "query",
            "required": false,
            "description": "Radius in km around latitude/longitude (default 50 when only the point is given).",
            "schema": {
              "type": "string",
              "example": "50"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Result ordering.",
            "schema": {
              "type": "string",
              "enum": [
                "relevance",
                "newest",
                "price_asc",
                "price_desc",
                "mileage_asc",
                "mileage_desc",
                "year_asc",
                "year_desc",
                "power_asc",
                "power_desc"
              ]
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page index.",
            "schema": {
              "type": "string",
              "example": "1"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "description": "Results per page, 1 to 500 (default 20).",
            "schema": {
              "type": "string",
              "example": "20"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "query": "",
                  "vehicle_class": "Car",
                  "page": 1,
                  "page_size": 20,
                  "count": 1,
                  "total_results": 1604109,
                  "has_next_page": true,
                  "filters": {
                    "vc": "Car",
                    "psz": "20",
                    "sb": "rel"
                  },
                  "listings": [
                    {
                      "id": "462229764",
                      "title": "Ford Tr",
                      "url": "https://suchen.mobile.de/auto-inserat/ford-tr-berlin/462229764.html",
                      "price": {
                        "amount": 1,
                        "currency": "EUR",
                        "label": "1 €",
                        "type": "NEGOTIABLE"
                      },
                      "make": "Ford",
                      "make_id": "9000",
                      "model": "Transit",
                      "model_id": "42",
                      "vehicle_class": "Car",
                      "category": "Andere",
                      "first_registration": {
                        "label": "10/2000",
                        "month": 10,
                        "year": 2000
                      },
                      "mileage_km": 165000,
                      "power": {
                        "kw": 114,
                        "hp": 155
                      },
                      "fuel": "Diesel",
                      "transmission": "Schaltgetriebe",
                      "color": "Grau",
                      "doors": "2/3",
                      "seats": 1,
                      "emission_class": "Euro6",
                      "previous_owners": 2,
                      "next_inspection": "07/2027",
                      "condition_new": false,
                      "damaged": false,
                      "ready_to_drive": true,
                      "location": {
                        "zip_code": "14089",
                        "city": "Berlin",
                        "country": "DE"
                      },
                      "image_count": 0,
                      "thumbnail": null,
                      "seller": {
                        "id": "47809678",
                        "name": null,
                        "type": "FSBO",
                        "type_label": "Privatanbieter",
                        "country": "DE",
                        "address": null,
                        "phone": null,
                        "phones": [],
                        "latitude": 52.4741368,
                        "longitude": 13.152334,
                        "rating": null
                      },
                      "created": "2026-08-02T18:07:05.000Z",
                      "modified": "2026-08-05T06:33:26.000Z",
                      "raw_attributes": {
                        "cn": "DE",
                        "z": "14089",
                        "loc": "Berlin",
                        "fr": "10/2000"
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/mobilede/ad": {
      "get": {
        "tags": [
          "mobile.de"
        ],
        "summary": "Get one mobile.de listing in full by id or URL: price, every technical attribute, the equipment list, all photos and the seller's contact block.",
        "operationId": "mobilede_v1_ad",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "The numeric listing id. Provide at least one of: id, url.",
            "schema": {
              "type": "string",
              "example": "462229764"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Full listing URL — the id is taken from it. Both mobile.de URL shapes work. Provide at least one of: id, url.",
            "schema": {
              "type": "string",
              "example": "https://suchen.mobile.de/fahrzeuge/details.html?id=462229764"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "462229764",
                    "title": "Ford Tr",
                    "subtitle": "Tr",
                    "url": "https://suchen.mobile.de/auto-inserat/ford-tr-berlin/462229764.html",
                    "description": "Verk",
                    "price": {
                      "amount": 1,
                      "currency": "EUR",
                      "label": "1 €",
                      "type": "NEGOTIABLE"
                    },
                    "price_rating": {
                      "rating": "NO_RATING",
                      "label": "Ohne Bewertung"
                    },
                    "make": "Ford",
                    "make_id": "9000",
                    "model": "Transit",
                    "model_id": "42",
                    "vehicle_class": "Car",
                    "category": "OtherCar",
                    "first_registration": {
                      "label": "10/2000",
                      "month": 10,
                      "year": 2000
                    },
                    "mileage_km": 165000,
                    "power": {
                      "kw": 114,
                      "hp": 155
                    },
                    "cubic_capacity_ccm": null,
                    "fuel": "Diesel",
                    "transmission": "Schaltgetriebe",
                    "color": "Grau Metallic",
                    "interior": "Stoff, Schwarz",
                    "doors": "2/3",
                    "seats": 1,
                    "emission_class": "Euro6",
                    "emissions_sticker": "4 (Grün)",
                    "previous_owners": 2,
                    "next_inspection": "07/2027",
                    "damage_condition": "Gebrauchtfahrzeug, Unfallfrei",
                    "condition_new": false,
                    "damaged": false,
                    "ready_to_drive": true,
                    "attributes": [
                      {
                        "label": "Kilometerstand",
                        "tag": "mileage",
                        "value": "165.000 km"
                      }
                    ],
                    "features": [
                      "ABS",
                      "Bluetooth"
                    ],
                    "images": [],
                    "image_count": 0,
                    "seller": {
                      "id": "47809678",
                      "name": null,
                      "type": "FSBO",
                      "type_label": "Privatanbieter",
                      "country": "DE",
                      "address": null,
                      "phone": null,
                      "phones": [],
                      "latitude": 52.4741368,
                      "longitude": 13.152334,
                      "rating": null
                    },
                    "created": "2026-08-02T18:07:05.000Z",
                    "modified": "2026-08-05T06:33:26.000Z"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/mobilede/makes": {
      "get": {
        "tags": [
          "mobile.de"
        ],
        "summary": "List the makes of a vehicle class, or the models of one make — the ids the search filters take.",
        "operationId": "mobilede_v1_makes",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "vehicleClass",
            "in": "query",
            "required": false,
            "description": "Which vehicle class to list makes for (default Car).",
            "schema": {
              "type": "string",
              "enum": [
                "Car",
                "Motorbike",
                "Motorhome",
                "VanUpTo7500",
                "TruckOver7500",
                "SemiTrailerTruck",
                "Bus",
                "AgriculturalVehicle",
                "ConstructionMachine",
                "ForkliftTruck",
                "Trailer",
                "SemiTrailer"
              ]
            }
          },
          {
            "name": "makeId",
            "in": "query",
            "required": false,
            "description": "Return this make's MODELS instead of the make list.",
            "schema": {
              "type": "string",
              "example": "1900"
            }
          },
          {
            "name": "make",
            "in": "query",
            "required": false,
            "description": "Same, by brand name.",
            "schema": {
              "type": "string",
              "example": "Audi"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "vehicle_class": "Car",
                  "count": 2,
                  "makes": [
                    {
                      "id": "1900",
                      "name": "Audi"
                    },
                    {
                      "id": "3500",
                      "name": "BMW"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/11880/search": {
      "get": {
        "tags": [
          "11880"
        ],
        "summary": "Search 11880.com business listings for a term in a location (paginated).",
        "operationId": "11880_v1_search",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "query": "Klempner",
                    "location": "koeln",
                    "sort": "standard",
                    "page": 1,
                    "page_size": 50,
                    "total_results": 261,
                    "total_pages": 6,
                    "has_more": true,
                    "results": [
                      {
                        "name": "Yilmaz Sanitär und Heizungstechnik Köln",
                        "detail_url": "https://www.11880.com/branchenbuch/koeln/130732316B108414303/yilmaz-sanitaer-und-heizungstechnik-koeln.html",
                        "image": "https://cdn.11880.com/yilmaz-sanitaer-und-heizungstechnik-koeln_29751852_fw280h210bffffff_koeln.webp",
                        "phone": "(0221) 30192757",
                        "email": "info@yilmaz-sht.de",
                        "address": {
                          "street": "Köhlstr. 7",
                          "zip_code": "50827",
                          "city": "Köln",
                          "district": null,
                          "region": "Nordrhein-Westfalen"
                        },
                        "rating": 5,
                        "review_count": 3,
                        "categories": [
                          "Klempner",
                          "Heizungs-Kundendienst",
                          "Einbau von Hygienetechnik"
                        ]
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/11880/detail": {
      "get": {
        "tags": [
          "11880"
        ],
        "summary": "Fetch a single 11880.com business detail page by its URL.",
        "operationId": "11880_v1_detail",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "name": "Yilmaz Sanitär und Heizungstechnik Köln",
                    "detail_url": "https://www.11880.com/branchenbuch/koeln/130732316B108414303/yilmaz-sanitaer-und-heizungstechnik-koeln.html",
                    "image": "https://cdn.11880.com/yilmaz-sanitaer-und-heizungstechnik-koeln_29751852_fw280h210bffffff_koeln.webp",
                    "logo": "https://cdn.11880.com/yilmaz-sanitaer-und-heizungstechnik-koeln_29751852_mw240h180_koeln.webp",
                    "phone": "(0221) 30192757",
                    "email": "info@yilmaz-sht.de",
                    "website": "https://www.yilmaz-sht.de",
                    "address": {
                      "street": "Köhlstr. 7",
                      "zip_code": "50827",
                      "city": "Köln",
                      "district": null,
                      "region": "Nordrhein-Westfalen"
                    },
                    "geo": {
                      "latitude": 50.972382,
                      "longitude": 6.891977
                    },
                    "rating": 5,
                    "review_count": 3,
                    "price_range": null,
                    "categories": [
                      "Klempner",
                      "Heizungs-Kundendienst"
                    ],
                    "opening_hours": [
                      {
                        "day": "Mo",
                        "opens": "08:00",
                        "closes": "12:30"
                      },
                      {
                        "day": "Mo",
                        "opens": "13:00",
                        "closes": "17:00"
                      },
                      {
                        "day": "Di",
                        "opens": "08:00",
                        "closes": "12:30"
                      },
                      {
                        "day": "Di",
                        "opens": "13:00",
                        "closes": "17:00"
                      }
                    ],
                    "services": [],
                    "badges": {
                      "meisterbetrieb": false,
                      "ausbildungsbetrieb": false,
                      "owner_confirmed": true,
                      "insured": false,
                      "premium": false
                    },
                    "experience_years": null,
                    "review_portals": [
                      {
                        "portal": "11880.com",
                        "score": 5,
                        "count": 3
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/gelbeseiten/search": {
      "get": {
        "tags": [
          "Gelbe Seiten"
        ],
        "summary": "Search Gelbe Seiten businesses by keyword (query) and place (location), with radius / sort / open-now filters and page-based pagination.",
        "operationId": "gelbeseiten_v1_search",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "query": "klempner",
                  "location": "berlin",
                  "page": 1,
                  "page_size": 10,
                  "total_count": 272,
                  "has_more": true,
                  "count": 1,
                  "results": [
                    {
                      "id": "1100000800",
                      "uuid": "1aea7ffa-a033-49f1-a642-45a8132ae29c",
                      "name": "A + M Heizung-Sanitär GmbH",
                      "category": "Klempnereien",
                      "street": "Karl-Liebknecht-Straße 33",
                      "zip": "10178",
                      "city": "Berlin",
                      "district": "Mitte",
                      "phone": "+491622309009",
                      "website": "https://www.heizungsanitaer-berlin.de",
                      "detail_url": "https://www.gelbeseiten.de/gsbiz/1aea7ffa-a033-49f1-a642-45a8132ae29c",
                      "distance_km": 2.7,
                      "latitude": 52.523,
                      "longitude": 13.412
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/gelbeseiten/listing": {
      "get": {
        "tags": [
          "Gelbe Seiten"
        ],
        "summary": "Get one Gelbe Seiten business listing (full detail: address, phone, website, rating, opening hours) by numeric id or URL.",
        "operationId": "gelbeseiten_v1_listing",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: id, url.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: id, url.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "1100000800",
                    "uuid": "1aea7ffa-a033-49f1-a642-45a8132ae29c",
                    "name": "A + M Heizung-Sanitär GmbH",
                    "category": "Klempnereien",
                    "address": {
                      "street": "Karl-Liebknecht-Straße 33",
                      "zip": "10178",
                      "city": "Berlin",
                      "district": "Mitte"
                    },
                    "phone": "+491622309009",
                    "email": null,
                    "website": "https://www.heizungsanitaer-berlin.de",
                    "rating": {
                      "count": 5,
                      "value": 1.8
                    },
                    "opening_hours": null,
                    "open_now": false,
                    "description": null,
                    "latitude": null,
                    "longitude": null,
                    "source_url": "https://www.gelbeseiten.de/gsbiz/1aea7ffa-a033-49f1-a642-45a8132ae29c"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/immobilienscout24/search": {
      "get": {
        "tags": [
          "ImmobilienScout24"
        ],
        "summary": "Search ImmobilienScout24 real-estate listings by location (place name, region path, or lat/lon radius) with filters (type, price, rooms, living space, courtage-free, new-build, full-text) and pagination.",
        "operationId": "immobilienscout24_v1_search",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "location",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: location, geocodes, geocoordinates.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "geocodes",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: location, geocodes, geocoordinates.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "geocoordinates",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: location, geocodes, geocoordinates.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "real_estate_type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "price_min",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "price_max",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rooms_min",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rooms_max",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "living_space_min",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "living_space_max",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "free_of_courtage",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "newbuilding",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fulltext",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page_size",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "query": {
                    "location": "Berlin",
                    "geocodes": "/de/berlin/berlin",
                    "geocoordinates": null,
                    "real_estate_type": "apartmentrent",
                    "search_type": "region"
                  },
                  "page": 1,
                  "page_size": 20,
                  "total_results": 8562,
                  "number_of_pages": 429,
                  "has_next_page": true,
                  "count": 1,
                  "results": [
                    {
                      "id": "169316363",
                      "title": "Wohnplatz für Studis/Azubis - gemütliches Zimmer in 2er-WG zu vermieten",
                      "url": "https://www.immobilienscout24.de/expose/169316363",
                      "real_estate_type": "apartmentrent",
                      "price": 380,
                      "price_label": "380 €",
                      "living_space": 28.95,
                      "living_space_label": "28,95 m²",
                      "rooms": 1,
                      "rooms_label": "1 Zi.",
                      "address": {
                        "line": "Roedernallee 118C, 13437 Berlin, Wittenau (Reinickendorf)",
                        "lat": 52.58927,
                        "lon": 13.33868
                      },
                      "is_new": false,
                      "is_private": false,
                      "listing_type": "XL",
                      "published": "vor einem Tag",
                      "live_video_tour": false,
                      "thumbnail": "https://pictures.immobilienscout24.de/listings/d5c88706-9072-4aa8-9e8b-153c87e41af7-2059855135.jpg/ORIG/resize/800x600>/format/webp/quality/20",
                      "picture": "https://pictures.immobilienscout24.de/listings/d5c88706-9072-4aa8-9e8b-153c87e41af7-2059855135.jpg/ORIG/resize/800x600>/format/webp/quality/80",
                      "images": [
                        "https://pictures.immobilienscout24.de/listings/d5c88706-9072-4aa8-9e8b-153c87e41af7-2059855135.jpg/ORIG/legacy_thumbnail/1500x1000/format/webp/quality/80"
                      ],
                      "realtor": {
                        "logo": null,
                        "color": "#7F2345"
                      },
                      "attributes": [
                        "380 €",
                        "28,95 m²",
                        "1 Zi."
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/immobilienscout24/expose": {
      "get": {
        "tags": [
          "ImmobilienScout24"
        ],
        "summary": "Get a single ImmobilienScout24 listing (full detail: price, criteria, images, agent, texts) by id or URL.",
        "operationId": "immobilienscout24_v1_expose",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: id, url.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Provide at least one of: id, url.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "169316363",
                    "title": "Wohnplatz für Studis/Azubis - gemütliches Zimmer in 2er-WG zu vermieten",
                    "url": "https://www.immobilienscout24.de/expose/169316363",
                    "scout_id": "169316363",
                    "object_number": "9076e53c-c52d-4b05-a2df-a5f8e22f562b",
                    "price": 380,
                    "price_label": "380 €",
                    "warm_rent": 473.09,
                    "warm_rent_label": "473,09 €",
                    "living_space": 28.95,
                    "living_space_label": "28,95 m²",
                    "rooms": 1,
                    "rooms_label": "1",
                    "address": {
                      "line1": "Roedernallee 118C",
                      "line2": "13437 Wittenau, Berlin",
                      "lat": 52.58927,
                      "lon": 13.33868
                    },
                    "top_attributes": [
                      {
                        "label": "Kaltmiete 13,13 €/m²",
                        "text": "380 €"
                      },
                      {
                        "label": "Zimmer",
                        "text": "1"
                      },
                      {
                        "label": "Wohnfläche",
                        "text": "28,95 m²"
                      },
                      {
                        "label": "Warmmiete",
                        "text": "473,09 €"
                      }
                    ],
                    "attribute_groups": [
                      {
                        "title": "Hauptkriterien",
                        "attributes": [
                          {
                            "label": "Wohnungstyp",
                            "text": "Etagenwohnung",
                            "available": null
                          },
                          {
                            "label": "Wohnfläche ca.",
                            "text": "28,95 m²",
                            "available": null
                          },
                          {
                            "label": "Balkon/Terrasse",
                            "text": null,
                            "available": true
                          }
                        ]
                      }
                    ],
                    "descriptions": [
                      {
                        "title": "Objektbeschreibung",
                        "text": "Du bist Azubi unter 21 Jahre oder Studi? Dann bist du hier genau richtig!"
                      },
                      {
                        "title": "Lage",
                        "text": "Der GESOCampus befindet sich in der Roedernallee 118 C, F, H in 13437 Reinickendorf."
                      }
                    ],
                    "images": [
                      {
                        "caption": "Möblierung WG-Zimmer (Muster)",
                        "preview": "https://pictures.immobilienscout24.de/listings/d5c88706-9072-4aa8-9e8b-153c87e41af7-2059855135.jpg/ORIG/resize/800x600/format/webp/quality/80",
                        "full": "https://pictures.immobilienscout24.de/listings/d5c88706-9072-4aa8-9e8b-153c87e41af7-2059855135.jpg/ORIG/resize/1500x1000/format/webp/quality/80"
                      }
                    ],
                    "realtor": {
                      "name": "Gesobau Vermietungsteam Neubau",
                      "company": "GESOBAU AG",
                      "logo": "https://pictures.immobilienscout24.de/usercontent/c9e73109-7e88-4e3c-9268-6966f3659c90.JPG/ORIG/resize/300x300%3E/format/webp/quality/80",
                      "rating": 4.3,
                      "rating_count": 1380
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/immowelt/search": {
      "get": {
        "tags": [
          "immowelt"
        ],
        "summary": "Search immowelt.de real-estate listings by place (name or AVIV place id) with the portal's own filters (distribution, estate type, price, rooms, living space, plot, construction year, features) plus sorting and pagination.",
        "operationId": "immowelt_v1_search",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "location",
            "in": "query",
            "required": false,
            "description": "Free-text place; resolved to the portal's place id. Provide at least one of: location, place_ids.",
            "schema": {
              "type": "string",
              "example": "Köln"
            }
          },
          {
            "name": "place_ids",
            "in": "query",
            "required": false,
            "description": "AVIV place id(s), comma-separated. Skips the lookup. Provide at least one of: location, place_ids.",
            "schema": {
              "type": "string",
              "example": "AD08DE2179"
            }
          },
          {
            "name": "distribution_types",
            "in": "query",
            "required": false,
            "description": "Rent or buy. Comma-separated.",
            "schema": {
              "type": "string",
              "enum": [
                "Buy",
                "Rent",
                "Buy_Auction",
                "Compulsory_Auction"
              ],
              "example": "Rent"
            }
          },
          {
            "name": "estate_types",
            "in": "query",
            "required": false,
            "description": "Property type. Comma-separated.",
            "schema": {
              "type": "string",
              "enum": [
                "Apartment",
                "House",
                "Senior",
                "Parking",
                "Plot",
                "Miscellaneous",
                "Office",
                "Trading",
                "Gastronomy_Hotel",
                "Storage_Production",
                "Agriculture_Forestry",
                "Building"
              ],
              "example": "Apartment"
            }
          },
          {
            "name": "estate_sub_types",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "project_types",
            "in": "query",
            "required": false,
            "description": "Project type. Comma-separated.",
            "schema": {
              "type": "string",
              "enum": [
                "Flatsharing",
                "Investment",
                "New_Build",
                "Projected",
                "Resale",
                "Short_Time_Rental",
                "Stock",
                "Swap_Apartment",
                "Life_Annuity"
              ]
            }
          },
          {
            "name": "features",
            "in": "query",
            "required": false,
            "description": "Required features. Comma-separated.",
            "schema": {
              "type": "string",
              "enum": [
                "Balcony_Terrace",
                "Garden",
                "Parking_Garage",
                "Kitchen_Fully_Equipped",
                "Bathroom_Window",
                "Bathtub",
                "Cellar",
                "Vacant",
                "Pets_Allowed",
                "Reduce_Mobility_Access",
                "Elevator",
                "Commission_Free",
                "Swimming_Pool",
                "Exclusive",
                "Assisted_Living",
                "Houseboat",
                "Furnished"
              ],
              "example": "Balcony_Terrace,Elevator"
            }
          },
          {
            "name": "price_min",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "price_max",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "price_type",
            "in": "query",
            "required": false,
            "description": "Which rent the price filter applies to.",
            "schema": {
              "type": "string",
              "enum": [
                "Default",
                "Coldrent",
                "Warmrent"
              ]
            }
          },
          {
            "name": "rooms_min",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rooms_max",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "bedrooms_min",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "bedrooms_max",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "living_space_min",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "living_space_max",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "plot_space_min",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "plot_space_max",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "construction_year_min",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "construction_year_max",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "radius",
            "in": "query",
            "required": false,
            "description": "Search radius around the place, in kilometres.",
            "schema": {
              "type": "string",
              "example": "10"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Result order.",
            "schema": {
              "type": "string",
              "enum": [
                "Default",
                "DateDesc",
                "PriceAsc",
                "PriceDesc",
                "PricePerSquareMeterAsc",
                "PricePerSquareMeterDesc",
                "NumberOfRoomsAsc",
                "NumberOfRoomsDesc",
                "SpaceAsc",
                "SpaceDesc"
              ],
              "example": "DateDesc"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page_size",
            "in": "query",
            "required": false,
            "description": "Cap on returned results; the portal's own page size is fixed.",
            "schema": {
              "type": "string",
              "example": "20"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "query": {
                    "location": "Berlin",
                    "place_ids": "AD08DE8634",
                    "distribution_types": "Rent",
                    "estate_types": "Apartment",
                    "order": "Default",
                    "search_model": {
                      "locations": [
                        {
                          "type": "place_id",
                          "placeId": "AD08DE8634"
                        }
                      ],
                      "distributionTypes": [
                        "Rent"
                      ],
                      "estateTypes": [
                        "Apartment"
                      ]
                    }
                  },
                  "page": 1,
                  "page_size": 1,
                  "total_results": 4614,
                  "number_of_pages": 4614,
                  "has_next_page": true,
                  "count": 1,
                  "results": [
                    {
                      "id": "26CZ6VY5NA37",
                      "legacy_id": "93be081b-fe4c-4bbf-b3eb-8589df64205c",
                      "title": "Own Your Style - Stylisches 1-Zimmer-Apartment mit Loggia im Herzen Berlins",
                      "url": "https://www.immowelt.de/expose/93be081b-fe4c-4bbf-b3eb-8589df64205c",
                      "status": "Published",
                      "price": 1170,
                      "price_label": "1.170 €",
                      "price_kind": "Kaltmiete",
                      "prices": [
                        {
                          "label": "Kaltmiete",
                          "value": "1.170 €",
                          "amount": 1170
                        },
                        {
                          "label": "Warmmiete",
                          "value": "1.400 €",
                          "amount": 1400
                        }
                      ],
                      "rooms": 1,
                      "rooms_label": "1 Zimmer",
                      "living_space": 46.4,
                      "living_space_label": "46,4 m²",
                      "key_facts": [
                        "1 Zimmer",
                        "46,4 m²",
                        "8. Geschoss"
                      ],
                      "facts": [
                        {
                          "type": "numberOfRooms",
                          "label": "Zimmer",
                          "value": "1 Zimmer"
                        },
                        {
                          "type": "livingSpace",
                          "label": "m²",
                          "value": "46,4 m²"
                        },
                        {
                          "type": "numberOfFloors",
                          "label": "Geschoss",
                          "value": "8. Geschoss"
                        }
                      ],
                      "address": {
                        "street": "Lisa-Fittko-Straße 11",
                        "zip_code": "10557",
                        "city": "Mitte",
                        "district": "Moabit",
                        "country": "DEU",
                        "is_published": true
                      },
                      "energy_class": "B",
                      "description": "Wohnen im Spring: Das Spring steht für urbanes Wohnen mit Charakter.",
                      "provider": {
                        "name": "Müller Merkle Immobilien GmbH",
                        "kind": "PROFESSIONAL",
                        "contact": "Frau Leonie Klein",
                        "logo": "https://mms.immowelt.de/1/0/3/1/10310299-3c09-4a14-9e39-8cf3a24d1c21.jpg",
                        "profile_url": "https://www.immowelt.de/profil/d9"
                      },
                      "is_new": true,
                      "has_brokerage_fee": false,
                      "has_3d_tour": true,
                      "new_build_project_url": "https://www.immowelt.de/projekte/expose/k25f932",
                      "thumbnail": "https://mms.immowelt.de/d/7/9/1/d791e619-fd97-4da3-9fb4-7acd82a8336d.jpg",
                      "images": [
                        "https://mms.immowelt.de/d/7/9/1/d791e619-fd97-4da3-9fb4-7acd82a8336d.jpg"
                      ],
                      "floorplans": [],
                      "created_at": "2026-08-14T11:46:25.443Z",
                      "updated_at": "2026-08-14T12:00:03.962Z"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/immowelt/expose": {
      "get": {
        "tags": [
          "immowelt"
        ],
        "summary": "Get one immowelt.de listing (full detail: prices, facts, features, energy, coordinates, gallery, provider, texts) by id or URL.",
        "operationId": "immowelt_v1_expose",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Listing id, short form or legacy UUID. Provide at least one of: id, url.",
            "schema": {
              "type": "string",
              "example": "26CZ6VY5NA37"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Public listing URL. Provide at least one of: id, url.",
            "schema": {
              "type": "string",
              "example": "https://www.immowelt.de/expose/26CZ6VY5NA37"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "26CZ6VY5NA37",
                    "legacy_id": "93be081b-fe4c-4bbf-b3eb-8589df64205c",
                    "title": "Own Your Style - Stylisches 1-Zimmer-Apartment mit Loggia im Herzen Berlins",
                    "url": "https://www.immowelt.de/expose/26CZ6VY5NA37",
                    "price": 1170,
                    "price_label": "1.170 €",
                    "price_kind": "Kaltmiete",
                    "price_per_sqm": 25.2,
                    "is_sale": false,
                    "prices": [
                      {
                        "label": "Kaltmiete",
                        "value": "1.170 €",
                        "amount": 1170
                      },
                      {
                        "label": "Warmmiete",
                        "value": "1.400 €",
                        "amount": 1400
                      }
                    ],
                    "rooms": 1,
                    "rooms_label": "1 Zimmer",
                    "living_space": 46.4,
                    "living_space_label": "46,4 m²",
                    "key_facts": [
                      "1 Zimmer",
                      "46,4 m²",
                      "8. Geschoss"
                    ],
                    "facts": [
                      {
                        "type": "numberOfRooms",
                        "label": "Zimmer",
                        "value": "1 Zimmer"
                      },
                      {
                        "type": "livingSpace",
                        "label": "m²",
                        "value": "46,4 m²"
                      }
                    ],
                    "address": {
                      "street": "Lisa-Fittko-Straße 11",
                      "zip_code": "10557",
                      "city": "Mitte",
                      "district": "Moabit",
                      "country": "DEU",
                      "is_published": true,
                      "lon": 13.365840911865234,
                      "lat": 52.53130340576172
                    },
                    "features": [
                      {
                        "icon": "kitchen",
                        "value": "Einbauküche",
                        "enrichment": null
                      },
                      {
                        "icon": "elevator",
                        "value": "Personenaufzug",
                        "enrichment": null
                      },
                      {
                        "icon": "parking-lots",
                        "value": "Stellplatz",
                        "enrichment": "ai"
                      }
                    ],
                    "feature_groups": [
                      {
                        "title": "Barrierefreiheit",
                        "features": [
                          {
                            "icon": "elevator",
                            "value": "Personenaufzug",
                            "enrichment": null
                          }
                        ]
                      }
                    ],
                    "energy": [
                      {
                        "type": "yearOfConstruction",
                        "label": "Baujahr",
                        "value": "2022"
                      },
                      {
                        "type": "heatingSystem",
                        "label": "Heizungsart",
                        "value": "Fußbodenheizung"
                      }
                    ],
                    "reference_numbers": [
                      {
                        "label": "Online-ID",
                        "value": "26CZ6VY5NA37"
                      },
                      {
                        "label": "Referenznummer",
                        "value": "T-8.4#EpnLD"
                      }
                    ],
                    "description": "Wohnen im Spring: Das Spring steht für urbanes Wohnen mit Charakter.",
                    "area_description": "Wohnen mitten in Mitte - Urbaner Komfort mit perfekter Anbindung.",
                    "extended_description": null,
                    "images": [
                      {
                        "url": "https://mms.immowelt.de/d/7/9/1/d791e619-fd97-4da3-9fb4-7acd82a8336d.jpg",
                        "description": "Wohnzimmer_Musterwohnung"
                      }
                    ],
                    "floorplans": [],
                    "virtual_tour_count": 0,
                    "provider": {
                      "name": "Müller Merkle Immobilien GmbH",
                      "contact": "Frau Leonie Klein",
                      "is_private": false,
                      "rating": 4.2,
                      "phone_numbers": [],
                      "logo": "https://mms.immowelt.de/1/0/3/1/10310299-3c09-4a14-9e39-8cf3a24d1c21.jpg"
                    },
                    "new_build_project": {
                      "url": "https://www.immowelt.de/projekte/expose/k25f932",
                      "title": "Europacity Ensembles",
                      "description": "EuropaCity Ensembles – Drei Gebäude. Drei Charaktere."
                    },
                    "is_new": true,
                    "has_brokerage_fee": false,
                    "has_3d_tour": true,
                    "created_at": "2026-08-14T11:46:25.443Z",
                    "updated_at": "2026-08-14T12:00:03.962Z"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/bayut/search": {
      "get": {
        "tags": [
          "Bayut"
        ],
        "summary": "Search Bayut property listings (UAE) by location, purpose (sale/rent) and filters (category, price, area, rooms, baths, furnishing, completion status, verified) with sorting and pagination.",
        "operationId": "bayut_v1_search",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "location",
            "in": "query",
            "required": false,
            "description": "Free-text place, resolved against Bayut's own location index.",
            "schema": {
              "type": "string",
              "example": "Dubai Marina"
            }
          },
          {
            "name": "location_slug",
            "in": "query",
            "required": false,
            "description": "Exact Bayut location slug; skips the lookup.",
            "schema": {
              "type": "string",
              "example": "/dubai/dubai-marina"
            }
          },
          {
            "name": "query",
            "in": "query",
            "required": false,
            "description": "Full-text query across the listing title and description.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "purpose",
            "in": "query",
            "required": false,
            "description": "Sale or rental listings.",
            "schema": {
              "type": "string",
              "enum": [
                "for-sale",
                "for-rent"
              ],
              "example": "for-sale"
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Category slug of the property type.",
            "schema": {
              "type": "string",
              "example": "apartments"
            }
          },
          {
            "name": "price_min",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "price_max",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "area_min",
            "in": "query",
            "required": false,
            "description": "Minimum area in SQUARE METRES (Bayut stores metric, displays sqft).",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "area_max",
            "in": "query",
            "required": false,
            "description": "Maximum area in SQUARE METRES.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rooms_min",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rooms_max",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "baths_min",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "baths_max",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rent_frequency",
            "in": "query",
            "required": false,
            "description": "Rental period (rentals only).",
            "schema": {
              "type": "string",
              "enum": [
                "daily",
                "weekly",
                "monthly",
                "yearly"
              ]
            }
          },
          {
            "name": "furnishing",
            "in": "query",
            "required": false,
            "description": "Furnishing state.",
            "schema": {
              "type": "string",
              "enum": [
                "furnished",
                "unfurnished",
                "partly-furnished"
              ]
            }
          },
          {
            "name": "completion_status",
            "in": "query",
            "required": false,
            "description": "Handover state.",
            "schema": {
              "type": "string",
              "enum": [
                "completed",
                "under-construction"
              ]
            }
          },
          {
            "name": "verified",
            "in": "query",
            "required": false,
            "description": "Only listings Bayut has verified.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Sort order.",
            "schema": {
              "type": "string",
              "enum": [
                "newest",
                "price-asc",
                "price-desc",
                "area-asc",
                "area-desc",
                "popular",
                "verified"
              ],
              "example": "newest"
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Listing language of the index.",
            "schema": {
              "type": "string",
              "enum": [
                "en",
                "ar",
                "ru",
                "zh"
              ],
              "example": "en"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page_size",
            "in": "query",
            "required": false,
            "description": "Listings per page, 1-50. Default 25.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "image_width",
            "in": "query",
            "required": false,
            "description": "Width of the generated photo URLs. Default 1066.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "image_height",
            "in": "query",
            "required": false,
            "description": "Height of the generated photo URLs. Default 800.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max_images",
            "in": "query",
            "required": false,
            "description": "Cap on photo URLs per listing. Default 12, 0 for none.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "query": {
                    "location": "Al Helio",
                    "location_slug": "/ajman/al-helio",
                    "purpose": "for-sale",
                    "category": null,
                    "text": null,
                    "sort": "newest",
                    "language": "en",
                    "index": "bayut-production-ads-date-desc-en"
                  },
                  "page": 1,
                  "page_size": 25,
                  "total_results": 662479,
                  "number_of_pages": 26500,
                  "has_next_page": true,
                  "count": 1,
                  "results": [
                    {
                      "id": "16092847",
                      "title": "Luxury VIP Villa for Sale – Al Helio 2, Ajman",
                      "url": "https://www.bayut.com/property/details-16092847.html",
                      "purpose": "for-sale",
                      "price": 2500000,
                      "price_hidden": false,
                      "rent_frequency": null,
                      "area_sqm": 371.61,
                      "area_sqft": 4000,
                      "plot_area_sqm": null,
                      "rooms": 5,
                      "baths": 8,
                      "furnishing_status": "unfurnished",
                      "completion_status": "completed",
                      "is_verified": false,
                      "reference_number": "102154-z98JAe",
                      "state": "active",
                      "location": {
                        "path": [
                          {
                            "name": "UAE",
                            "slug": "/uae",
                            "id": "5001"
                          },
                          {
                            "name": "Ajman",
                            "slug": "/ajman",
                            "id": "5385"
                          },
                          {
                            "name": "Al Helio",
                            "slug": "/ajman/al-helio",
                            "id": "7266"
                          }
                        ],
                        "name": "Al Helio",
                        "slug": "/ajman/al-helio"
                      },
                      "category": {
                        "path": [
                          {
                            "name": "Residential",
                            "slug": "residential",
                            "id": "1"
                          },
                          {
                            "name": "Villas",
                            "slug": "villas",
                            "id": "3"
                          }
                        ],
                        "name": "Villas",
                        "slug": "villas"
                      },
                      "geography": {
                        "lat": 25.390655392167,
                        "lon": 55.595150565966
                      },
                      "agency": {
                        "name": "Millionera Properties",
                        "slug": "millionera-properties-102154",
                        "id": "102154",
                        "logo": "https://bayut-production.s3.eu-central-1.amazonaws.com/image/355993131/dadddef5864d469c91c55be601189748",
                        "product": "premium"
                      },
                      "contact_name": "Wisam Ismail",
                      "photo_count": 2,
                      "cover_photo": "https://images.bayut.com/thumbnails/857931855-1066x800.jpeg",
                      "images": [
                        "https://images.bayut.com/thumbnails/857931855-1066x800.jpeg",
                        "https://images.bayut.com/thumbnails/857931856-1066x800.jpeg"
                      ],
                      "created_at": "2026-08-06T09:17:44.000Z",
                      "updated_at": "2026-08-06T09:17:45.000Z"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/bayut/property": {
      "get": {
        "tags": [
          "Bayut"
        ],
        "summary": "Get a single Bayut listing with its full detail: description, amenities, all photos, agency, contact numbers, permit number and verification state, by listing id or URL.",
        "operationId": "bayut_v1_property",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Bayut listing id. Provide at least one of: id, url.",
            "schema": {
              "type": "string",
              "example": "16092847"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Any Bayut detail URL. Provide at least one of: id, url.",
            "schema": {
              "type": "string",
              "example": "https://www.bayut.com/property/details-16092847.html"
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Language of the rendered listing.",
            "schema": {
              "type": "string",
              "enum": [
                "en",
                "ar",
                "ru",
                "zh"
              ],
              "example": "en"
            }
          },
          {
            "name": "image_width",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "image_height",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "16092847",
                    "title": "Luxury VIP Villa for Sale – Al Helio 2, Ajman",
                    "url": "https://www.bayut.com/property/details-16092847.html",
                    "purpose": "for-sale",
                    "price": 2500000,
                    "price_hidden": false,
                    "rent_frequency": null,
                    "area_sqm": 371.61,
                    "area_sqft": 4000,
                    "plot_area_sqm": null,
                    "rooms": 5,
                    "baths": 8,
                    "furnishing_status": "unfurnished",
                    "completion_status": "completed",
                    "is_verified": false,
                    "reference_number": "102154-z98JAe",
                    "state": "active",
                    "location": {
                      "path": [
                        {
                          "name": "UAE",
                          "slug": "/uae",
                          "id": "5001"
                        },
                        {
                          "name": "Ajman",
                          "slug": "/ajman",
                          "id": "5385"
                        },
                        {
                          "name": "Al Helio",
                          "slug": "/ajman/al-helio",
                          "id": "7266"
                        }
                      ],
                      "name": "Al Helio",
                      "slug": "/ajman/al-helio"
                    },
                    "category": {
                      "path": [
                        {
                          "name": "Residential",
                          "slug": "residential",
                          "id": "1"
                        },
                        {
                          "name": "Villas",
                          "slug": "villas",
                          "id": "3"
                        }
                      ],
                      "name": "Villas",
                      "slug": "villas"
                    },
                    "geography": {
                      "lat": 25.390655392167,
                      "lon": 55.595150565966
                    },
                    "agency": {
                      "name": "Millionera Properties",
                      "slug": "millionera-properties-102154",
                      "id": "102154",
                      "logo": "https://bayut-production.s3.eu-central-1.amazonaws.com/image/355993131/dadddef5864d469c91c55be601189748",
                      "product": "premium"
                    },
                    "contact_name": "Wisam Ismail",
                    "photo_count": 2,
                    "cover_photo": "https://images.bayut.com/thumbnails/857931855-1066x800.jpeg",
                    "images": [
                      "https://images.bayut.com/thumbnails/857931855-1066x800.jpeg",
                      "https://images.bayut.com/thumbnails/857931856-1066x800.jpeg"
                    ],
                    "created_at": "2026-08-06T09:17:44.000Z",
                    "updated_at": "2026-08-06T09:17:45.000Z",
                    "description": "Luxury VIP Villa for Sale – Al Helio 2, Ajman\nPrime location near Sheikh Mohammed Bin Zayed Road with freehold ownership for all nationalities.",
                    "description_html": "Luxury VIP Villa for Sale – Al Helio 2, Ajman<br />Prime location near Sheikh Mohammed Bin Zayed Road with freehold ownership for all nationalities.",
                    "is_studio": false,
                    "permit_number": "2279",
                    "verification_status": "unverified",
                    "amenities": [
                      {
                        "group": "Features",
                        "items": [
                          {
                            "name": "Double Glazed Windows",
                            "slug": "double-glazed-windows",
                            "value": null
                          }
                        ]
                      },
                      {
                        "group": "Building",
                        "items": [
                          {
                            "name": "Balcony or Terrace",
                            "slug": "balcony-or-terrace",
                            "value": null
                          }
                        ]
                      }
                    ],
                    "photos": [
                      {
                        "id": 857931855,
                        "title": "1 WhatsApp_Image_watermarked.jpg",
                        "url": "https://images.bayut.com/thumbnails/857931855-1066x800.jpeg"
                      },
                      {
                        "id": 857931856,
                        "title": "2 WhatsApp_Image_watermarked.jpg",
                        "url": "https://images.bayut.com/thumbnails/857931856-1066x800.jpeg"
                      }
                    ],
                    "panorama_count": 0,
                    "video_count": 0,
                    "contact": {
                      "name": "Wisam Ismail",
                      "mobile": [
                        "+971509557734"
                      ],
                      "phone": [
                        "+97165291948"
                      ],
                      "whatsapp": "971545695868"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/lovoo/login": {
      "post": {
        "tags": [
          "LOVOO"
        ],
        "summary": "Open a LOVOO session with the account's own credentials. Returns an opaque session id to carry in the x-session-id header on the session routes. The portal's own session is the only thing kept, sealed at rest; the password is not stored and cannot be read back out of the session.",
        "operationId": "lovoo_v1_login",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "session_id": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4",
                  "user_id": "name@example.com",
                  "expires_at": "2026-08-09T22:02:00.000Z"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "The portal account's e-mail address, or its phone number in +49… form where the platform signs in with one.",
                    "example": "name@example.com"
                  },
                  "password": {
                    "type": "string",
                    "description": "The portal account's password, or the one-time code where the platform has no password.",
                    "example": "•••••••••"
                  }
                },
                "required": [
                  "username",
                  "password"
                ]
              },
              "example": {
                "username": "name@example.com",
                "password": "•••••••••"
              }
            }
          }
        }
      }
    },
    "/v1/lovoo/logout": {
      "post": {
        "tags": [
          "LOVOO"
        ],
        "summary": "Close a LOVOO session and drop everything it stored. Free of charge.",
        "operationId": "lovoo_v1_logout",
        "description": "**Live endpoint.** Free of charge.",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": null
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/lovoo/messages": {
      "get": {
        "tags": [
          "LOVOO"
        ],
        "summary": "Read the signed-in LOVOO account's inbox, or one conversation in full when conversation_id is given.",
        "operationId": "lovoo_v1_messages",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "conversation_id",
            "in": "query",
            "required": false,
            "description": "One conversation of the inbox. Omit to list the inbox.",
            "schema": {
              "type": "string",
              "example": "412778905"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "count": 1,
                  "next_cursor": null,
                  "conversations": [
                    {
                      "conversation_id": "412778905",
                      "partner": "Lea",
                      "partner_photo": "https://…/1.jpg",
                      "last_message": "Klingt gut, wann passt es dir?",
                      "last_message_at": "2026-08-08T18:24:00.000Z",
                      "unread": true,
                      "unread_count": 1
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "LOVOO"
        ],
        "summary": "Send a LOVOO message: a reply into conversation_id, or a first contact on user_id.",
        "operationId": "lovoo_v1_messages_send",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "conversation_id": "412778905",
                  "data": {
                    "delivered": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "message": {
                    "type": "string",
                    "description": "The message text.",
                    "example": "Ist der Artikel noch verfuegbar?"
                  },
                  "conversation_id": {
                    "type": "string",
                    "description": "One conversation of the inbox. Omit to list the inbox.",
                    "example": "412778905"
                  },
                  "user_id": {
                    "type": "string",
                    "description": "The other member's id on the platform.",
                    "example": "12345678"
                  }
                },
                "required": [
                  "message"
                ]
              },
              "example": {
                "message": "Ist der Artikel noch verfuegbar?"
              }
            }
          }
        }
      }
    },
    "/v1/lovoo/account": {
      "get": {
        "tags": [
          "LOVOO"
        ],
        "summary": "The signed-in LOVOO account's own profile, or another member's when id is given.",
        "operationId": "lovoo_v1_account",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Another member's public id. Omit for the signed-in account's own profile.",
            "schema": {
              "type": "string",
              "example": "e63599e304f57gf2efi03735d45g21h6"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "12345678",
                    "name": "Lea",
                    "age": 29,
                    "gender": "female",
                    "city": "Bochum",
                    "distance_km": 12,
                    "online": true,
                    "last_seen": "2026-08-09T09:12:00.000Z",
                    "about": "Ich koche gern und laufe noch lieber.",
                    "photos": [
                      "https://…/1.jpg",
                      "https://…/2.jpg"
                    ],
                    "attributes": {
                      "height": "168",
                      "smoker": "no",
                      "relationship": "single"
                    },
                    "liked_by_me": false,
                    "likes_me": null,
                    "matched": false
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/lovoo/search": {
      "get": {
        "tags": [
          "LOVOO"
        ],
        "summary": "Search LOVOO for other members, with the app's own filters (gender, age range, radius). Needs a session: this platform has no public listing to read.",
        "operationId": "lovoo_v1_search",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "gender",
            "in": "query",
            "required": false,
            "description": "Which gender to look for. LOVOO carries a fourth value of its own, non_binary.",
            "schema": {
              "type": "string",
              "enum": [
                "male",
                "female",
                "non_binary",
                "any"
              ]
            }
          },
          {
            "name": "min_age",
            "in": "query",
            "required": false,
            "description": "Youngest age to include.",
            "schema": {
              "type": "string",
              "example": "25"
            }
          },
          {
            "name": "max_age",
            "in": "query",
            "required": false,
            "description": "Oldest age to include.",
            "schema": {
              "type": "string",
              "example": "40"
            }
          },
          {
            "name": "distance",
            "in": "query",
            "required": false,
            "description": "Search radius in kilometres around the account's location.",
            "schema": {
              "type": "string",
              "example": "50"
            }
          },
          {
            "name": "latitude",
            "in": "query",
            "required": false,
            "description": "Search around this latitude instead of the account's own location.",
            "schema": {
              "type": "string",
              "example": "51.4818"
            }
          },
          {
            "name": "longitude",
            "in": "query",
            "required": false,
            "description": "Search around this longitude instead of the account's own location.",
            "schema": {
              "type": "string",
              "example": "7.2162"
            }
          },
          {
            "name": "online",
            "in": "query",
            "required": false,
            "description": "Only members who are online right now.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "with_photo",
            "in": "query",
            "required": false,
            "description": "Only members who have at least one photo.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many members one page holds.",
            "schema": {
              "type": "string",
              "example": "20"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Continue after the previous page. Take it from `next_cursor` of the answer.",
            "schema": {
              "type": "string",
              "example": "eyJvZmZzZXQiOjIwfQ"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "count": 1,
                  "next_cursor": null,
                  "members": [
                    {
                      "id": "12345678",
                      "name": "Lea",
                      "age": 29,
                      "gender": "female",
                      "distance_km": 12,
                      "online": true,
                      "city": "Bochum",
                      "headline": "Lieber ein Kaffee zu viel als ein Gespraech zu wenig.",
                      "photos": [
                        "https://…/1.jpg"
                      ],
                      "url": "https://…/12345678"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/lovoo/profile": {
      "get": {
        "tags": [
          "LOVOO"
        ],
        "summary": "One LOVOO member's full profile, the detail page behind a search hit: photos, about text, the platform's own attributes, and where this account already stands with them.",
        "operationId": "lovoo_v1_profile",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "user_id",
            "in": "query",
            "required": true,
            "description": "The other member's id on the platform.",
            "schema": {
              "type": "string",
              "example": "12345678"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "12345678",
                    "name": "Lea",
                    "age": 29,
                    "gender": "female",
                    "city": "Bochum",
                    "distance_km": 12,
                    "online": true,
                    "last_seen": "2026-08-09T09:12:00.000Z",
                    "about": "Ich koche gern und laufe noch lieber.",
                    "photos": [
                      "https://…/1.jpg",
                      "https://…/2.jpg"
                    ],
                    "attributes": {
                      "height": "168",
                      "smoker": "no",
                      "relationship": "single"
                    },
                    "liked_by_me": false,
                    "likes_me": null,
                    "matched": false
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/lovoo/like": {
      "post": {
        "tags": [
          "LOVOO"
        ],
        "summary": "Like, superlike or pass a LOVOO member. The answer says whether the like created a match. Where the platform lets a like carry an opening line, pass it as `message`.",
        "operationId": "lovoo_v1_like",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "user_id": "12345678",
                  "action": "LIKE",
                  "matched": false
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "user_id": {
                    "type": "string",
                    "description": "The other member's id on the platform.",
                    "example": "12345678"
                  },
                  "action": {
                    "type": "string",
                    "description": "What to do with that member. UNLIKE takes a like back where the platform allows it; PASS is the swipe-away.",
                    "enum": [
                      "LIKE",
                      "SUPERLIKE",
                      "PASS",
                      "UNLIKE"
                    ]
                  },
                  "message": {
                    "type": "string",
                    "description": "The message text.",
                    "example": "Ist der Artikel noch verfuegbar?"
                  }
                },
                "required": [
                  "user_id"
                ]
              },
              "example": {
                "user_id": "12345678"
              }
            }
          }
        }
      }
    },
    "/v1/lovoo/matches": {
      "get": {
        "tags": [
          "LOVOO"
        ],
        "summary": "The signed-in LOVOO account's matches: the members who liked back, each with the conversation it opened, so a reply is one call away.",
        "operationId": "lovoo_v1_matches",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many members one page holds.",
            "schema": {
              "type": "string",
              "example": "20"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Continue after the previous page. Take it from `next_cursor` of the answer.",
            "schema": {
              "type": "string",
              "example": "eyJvZmZzZXQiOjIwfQ"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "count": 1,
                  "next_cursor": null,
                  "matches": [
                    {
                      "id": "77123",
                      "user_id": "12345678",
                      "name": "Lea",
                      "photo": "https://…/1.jpg",
                      "matched_at": "2026-08-08T21:03:00.000Z",
                      "conversation_id": "77123",
                      "unread": true
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/lovoo/register": {
      "post": {
        "tags": [
          "LOVOO"
        ],
        "summary": "Create a LOVOO account through the API. The portal mails a confirmation link, so the only manual step left is following it.",
        "operationId": "lovoo_v1_register",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "email": "name@example.com",
                  "confirmation_required": true
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "description": "E-mail address of the account to create.",
                    "example": "name@example.com"
                  },
                  "password": {
                    "type": "string",
                    "description": "The portal account's password, or the one-time code where the platform has no password.",
                    "example": "•••••••••"
                  },
                  "name": {
                    "type": "string",
                    "description": "Display name / nickname of the new account.",
                    "example": "Fabian"
                  },
                  "recaptcha_token": {
                    "type": "string",
                    "description": "reCAPTCHA token for the portal's registration form.",
                    "example": "03AGdBq26…"
                  },
                  "extra": {
                    "type": "string",
                    "description": "Portal-specific extra form fields (city, zip, account type, marketing opt-in, …).",
                    "example": "{\"city\":\"Bochum\",\"zip\":\"44787\"}"
                  }
                },
                "required": [
                  "email",
                  "password"
                ]
              },
              "example": {
                "email": "name@example.com",
                "password": "•••••••••"
              }
            }
          }
        }
      }
    },
    "/v1/jaumo/login": {
      "post": {
        "tags": [
          "Jaumo"
        ],
        "summary": "Open a Jaumo session with the account's own credentials. Returns an opaque session id to carry in the x-session-id header on the session routes. The portal's own session is the only thing kept, sealed at rest; the password is not stored and cannot be read back out of the session.",
        "operationId": "jaumo_v1_login",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "session_id": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4",
                  "user_id": "name@example.com",
                  "expires_at": "2026-08-09T22:02:00.000Z"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "The portal account's e-mail address, or its phone number in +49… form where the platform signs in with one.",
                    "example": "name@example.com"
                  },
                  "password": {
                    "type": "string",
                    "description": "The portal account's password, or the one-time code where the platform has no password.",
                    "example": "•••••••••"
                  }
                },
                "required": [
                  "username",
                  "password"
                ]
              },
              "example": {
                "username": "name@example.com",
                "password": "•••••••••"
              }
            }
          }
        }
      }
    },
    "/v1/jaumo/logout": {
      "post": {
        "tags": [
          "Jaumo"
        ],
        "summary": "Close a Jaumo session and drop everything it stored. Free of charge.",
        "operationId": "jaumo_v1_logout",
        "description": "**Live endpoint.** Free of charge.",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": null
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/jaumo/messages": {
      "get": {
        "tags": [
          "Jaumo"
        ],
        "summary": "Read the signed-in Jaumo account's inbox, or one conversation in full when conversation_id is given.",
        "operationId": "jaumo_v1_messages",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "conversation_url",
            "in": "query",
            "required": false,
            "description": "One conversation, as the inbox hands its URL back in `conversation_url`. An alternative to conversation_id on the platforms whose API is link-driven.",
            "schema": {
              "type": "string",
              "example": "https://api.jaumo.com/v2/me/conversations/412778905"
            }
          },
          {
            "name": "user_id",
            "in": "query",
            "required": false,
            "description": "The other member's id on the platform.",
            "schema": {
              "type": "string",
              "example": "12345678"
            }
          },
          {
            "name": "folder",
            "in": "query",
            "required": false,
            "description": "Which inbox to read: the normal one or the deleted conversations.",
            "schema": {
              "type": "string",
              "enum": [
                "in",
                "trash"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many members one page holds.",
            "schema": {
              "type": "string",
              "example": "20"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Continue after the previous page. Take it from `next_cursor` of the answer.",
            "schema": {
              "type": "string",
              "example": "eyJvZmZzZXQiOjIwfQ"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "count": 1,
                  "next_cursor": null,
                  "conversations": [
                    {
                      "conversation_id": "412778905",
                      "partner": "Lea",
                      "partner_photo": "https://…/1.jpg",
                      "last_message": "Klingt gut, wann passt es dir?",
                      "last_message_at": "2026-08-08T18:24:00.000Z",
                      "unread": true,
                      "unread_count": 1
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Jaumo"
        ],
        "summary": "Send a Jaumo message: a reply into conversation_id, or a first contact on user_id.",
        "operationId": "jaumo_v1_messages_send",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "conversation_id": "412778905",
                  "data": {
                    "delivered": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "message": {
                    "type": "string",
                    "description": "The message text.",
                    "example": "Ist der Artikel noch verfuegbar?"
                  },
                  "user_id": {
                    "type": "string",
                    "description": "The other member's id on the platform.",
                    "example": "12345678"
                  },
                  "conversation_url": {
                    "type": "string",
                    "description": "One conversation, as the inbox hands its URL back in `conversation_url`. An alternative to conversation_id on the platforms whose API is link-driven.",
                    "example": "https://api.jaumo.com/v2/me/conversations/412778905"
                  }
                },
                "required": [
                  "message"
                ]
              },
              "example": {
                "message": "Ist der Artikel noch verfuegbar?"
              }
            }
          }
        }
      }
    },
    "/v1/jaumo/account": {
      "get": {
        "tags": [
          "Jaumo"
        ],
        "summary": "The signed-in Jaumo account's own profile, or another member's when id is given.",
        "operationId": "jaumo_v1_account",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Another member's public id. Omit for the signed-in account's own profile.",
            "schema": {
              "type": "string",
              "example": "e63599e304f57gf2efi03735d45g21h6"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "12345678",
                    "name": "Lea",
                    "age": 29,
                    "gender": "female",
                    "city": "Bochum",
                    "distance_km": 12,
                    "online": true,
                    "last_seen": "2026-08-09T09:12:00.000Z",
                    "about": "Ich koche gern und laufe noch lieber.",
                    "photos": [
                      "https://…/1.jpg",
                      "https://…/2.jpg"
                    ],
                    "attributes": {
                      "height": "168",
                      "smoker": "no",
                      "relationship": "single"
                    },
                    "liked_by_me": false,
                    "likes_me": null,
                    "matched": false
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/jaumo/search": {
      "get": {
        "tags": [
          "Jaumo"
        ],
        "summary": "Search Jaumo for other members, with the app's own filters (gender, age range, radius). Needs a session: this platform has no public listing to read.",
        "operationId": "jaumo_v1_search",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "gender",
            "in": "query",
            "required": false,
            "description": "Which gender to look for.",
            "schema": {
              "type": "string",
              "enum": [
                "male",
                "female",
                "any"
              ]
            }
          },
          {
            "name": "min_age",
            "in": "query",
            "required": false,
            "description": "Youngest age to include.",
            "schema": {
              "type": "string",
              "example": "25"
            }
          },
          {
            "name": "max_age",
            "in": "query",
            "required": false,
            "description": "Oldest age to include.",
            "schema": {
              "type": "string",
              "example": "40"
            }
          },
          {
            "name": "distance",
            "in": "query",
            "required": false,
            "description": "Search radius in kilometres around the account's location.",
            "schema": {
              "type": "string",
              "example": "50"
            }
          },
          {
            "name": "latitude",
            "in": "query",
            "required": false,
            "description": "Search around this latitude instead of the account's own location.",
            "schema": {
              "type": "string",
              "example": "51.4818"
            }
          },
          {
            "name": "longitude",
            "in": "query",
            "required": false,
            "description": "Search around this longitude instead of the account's own location.",
            "schema": {
              "type": "string",
              "example": "7.2162"
            }
          },
          {
            "name": "online",
            "in": "query",
            "required": false,
            "description": "Only members who are online right now.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "with_photo",
            "in": "query",
            "required": false,
            "description": "Only members who have at least one photo.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many members one page holds.",
            "schema": {
              "type": "string",
              "example": "20"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Continue after the previous page. Take it from `next_cursor` of the answer.",
            "schema": {
              "type": "string",
              "example": "eyJvZmZzZXQiOjIwfQ"
            }
          },
          {
            "name": "deck",
            "in": "query",
            "required": false,
            "description": "Search the app's swipe deck instead of the browsable nearby list. The deck is what the like button belongs to; the list is what browsing shows.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "count": 1,
                  "next_cursor": null,
                  "members": [
                    {
                      "id": "12345678",
                      "name": "Lea",
                      "age": 29,
                      "gender": "female",
                      "distance_km": 12,
                      "online": true,
                      "city": "Bochum",
                      "headline": "Lieber ein Kaffee zu viel als ein Gespraech zu wenig.",
                      "photos": [
                        "https://…/1.jpg"
                      ],
                      "url": "https://…/12345678"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/jaumo/profile": {
      "get": {
        "tags": [
          "Jaumo"
        ],
        "summary": "One Jaumo member's full profile, the detail page behind a search hit: photos, about text, the platform's own attributes, and where this account already stands with them.",
        "operationId": "jaumo_v1_profile",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "user_id",
            "in": "query",
            "required": true,
            "description": "The other member's id on the platform.",
            "schema": {
              "type": "string",
              "example": "12345678"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "12345678",
                    "name": "Lea",
                    "age": 29,
                    "gender": "female",
                    "city": "Bochum",
                    "distance_km": 12,
                    "online": true,
                    "last_seen": "2026-08-09T09:12:00.000Z",
                    "about": "Ich koche gern und laufe noch lieber.",
                    "photos": [
                      "https://…/1.jpg",
                      "https://…/2.jpg"
                    ],
                    "attributes": {
                      "height": "168",
                      "smoker": "no",
                      "relationship": "single"
                    },
                    "liked_by_me": false,
                    "likes_me": null,
                    "matched": false
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/jaumo/like": {
      "post": {
        "tags": [
          "Jaumo"
        ],
        "summary": "Like, superlike or pass a Jaumo member. The answer says whether the like created a match. Where the platform lets a like carry an opening line, pass it as `message`.",
        "operationId": "jaumo_v1_like",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "user_id": "12345678",
                  "action": "LIKE",
                  "matched": false
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "user_id": {
                    "type": "string",
                    "description": "The other member's id on the platform.",
                    "example": "12345678"
                  },
                  "action": {
                    "type": "string",
                    "description": "What to do with that member. UNLIKE takes a like back where the platform allows it; PASS is the swipe-away.",
                    "enum": [
                      "LIKE",
                      "SUPERLIKE",
                      "PASS",
                      "UNLIKE"
                    ]
                  },
                  "message": {
                    "type": "string",
                    "description": "The message text.",
                    "example": "Ist der Artikel noch verfuegbar?"
                  }
                },
                "required": [
                  "user_id"
                ]
              },
              "example": {
                "user_id": "12345678"
              }
            }
          }
        }
      }
    },
    "/v1/jaumo/matches": {
      "get": {
        "tags": [
          "Jaumo"
        ],
        "summary": "The signed-in Jaumo account's matches: the members who liked back, each with the conversation it opened, so a reply is one call away.",
        "operationId": "jaumo_v1_matches",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many members one page holds.",
            "schema": {
              "type": "string",
              "example": "20"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Continue after the previous page. Take it from `next_cursor` of the answer.",
            "schema": {
              "type": "string",
              "example": "eyJvZmZzZXQiOjIwfQ"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "count": 1,
                  "next_cursor": null,
                  "matches": [
                    {
                      "id": "77123",
                      "user_id": "12345678",
                      "name": "Lea",
                      "photo": "https://…/1.jpg",
                      "matched_at": "2026-08-08T21:03:00.000Z",
                      "conversation_id": "77123",
                      "unread": true
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/jaumo/photos": {
      "get": {
        "tags": [
          "Jaumo"
        ],
        "summary": "The photos on the signed-in Jaumo account, each with the handle its own removal needs.",
        "operationId": "jaumo_v1_photos",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "count": 1,
                  "max_photos": 24,
                  "photos": [
                    {
                      "id": "113206",
                      "url": "https://i.jaumo.com/gallery_orig/113206,0333cbaf83230e6a21.jpg",
                      "width": 900,
                      "height": 1200,
                      "is_profile_photo": true,
                      "photo_url": "https://api.jaumo.com/v2/me/gallery/113206/"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Jaumo"
        ],
        "summary": "Put a photo on the signed-in Jaumo account. The platform reviews it before it is public, so the answer says whether it was accepted and, when it was not, in the platform's own words why.",
        "operationId": "jaumo_v1_photos_upload",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "image",
            "in": "query",
            "required": false,
            "description": "The image itself, base64 encoded. An alternative to image_url; one of the two is required. Provide at least one of: image, image_url.",
            "schema": {
              "type": "string",
              "example": "/9j/4AAQSkZJRgABAQAAAQ…"
            }
          },
          {
            "name": "image_url",
            "in": "query",
            "required": false,
            "description": "A URL to fetch the image from, as an alternative to sending it inline in `image`. Provide at least one of: image, image_url.",
            "schema": {
              "type": "string",
              "example": "https://example.com/portrait.jpg"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "accepted": false,
                  "reason": "Dieses Foto entspricht nicht unseren Richtlinien.",
                  "reason_title": "Unerlaubtes Foto"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "image": {
                    "type": "string",
                    "description": "The image itself, base64 encoded. An alternative to image_url; one of the two is required.",
                    "example": "/9j/4AAQSkZJRgABAQAAAQ…"
                  },
                  "image_url": {
                    "type": "string",
                    "description": "A URL to fetch the image from, as an alternative to sending it inline in `image`.",
                    "example": "https://example.com/portrait.jpg"
                  },
                  "file_name": {
                    "type": "string",
                    "description": "File name to present to the platform. Its extension has to match the image type.",
                    "example": "portrait.jpg"
                  },
                  "confirm_warning": {
                    "type": "string",
                    "description": "Publish the photo even though the review warned about it. A warning is sometimes a refusal and sometimes a question the platform would let a member answer with yes; send the upload again with this set once the warning in the first answer has been read.",
                    "example": "true"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/jaumo/photos/delete": {
      "post": {
        "tags": [
          "Jaumo"
        ],
        "summary": "Take one photo off the signed-in Jaumo account again.",
        "operationId": "jaumo_v1_photos_delete",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "photo_url",
            "in": "query",
            "required": false,
            "description": "The photo to remove, as the photos route hands its URL back in `photo_url`. An alternative to photo_id on the platforms whose API is link-driven. Provide at least one of: photo_url, photo_id.",
            "schema": {
              "type": "string",
              "example": "https://api.jaumo.com/v2/me/gallery/113206/"
            }
          },
          {
            "name": "photo_id",
            "in": "query",
            "required": false,
            "description": "The photo's own id on the platform. Provide at least one of: photo_url, photo_id.",
            "schema": {
              "type": "string",
              "example": "113206"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "deleted": true,
                  "photo_url": "https://api.jaumo.com/v2/me/gallery/113206/",
                  "count": 0,
                  "photos": []
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "photo_url": {
                    "type": "string",
                    "description": "The photo to remove, as the photos route hands its URL back in `photo_url`. An alternative to photo_id on the platforms whose API is link-driven.",
                    "example": "https://api.jaumo.com/v2/me/gallery/113206/"
                  },
                  "photo_id": {
                    "type": "string",
                    "description": "The photo's own id on the platform.",
                    "example": "113206"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/jaumo/register": {
      "post": {
        "tags": [
          "Jaumo"
        ],
        "summary": "Create a Jaumo account through the API. The portal mails a confirmation link, so the only manual step left is following it.",
        "operationId": "jaumo_v1_register",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "email": "name@example.com",
                  "confirmation_required": true
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "description": "E-mail address of the account to create.",
                    "example": "name@example.com"
                  },
                  "password": {
                    "type": "string",
                    "description": "The portal account's password, or the one-time code where the platform has no password.",
                    "example": "•••••••••"
                  },
                  "name": {
                    "type": "string",
                    "description": "Display name / nickname of the new account.",
                    "example": "Fabian"
                  },
                  "recaptcha_token": {
                    "type": "string",
                    "description": "reCAPTCHA token for the portal's registration form.",
                    "example": "03AGdBq26…"
                  },
                  "extra": {
                    "type": "string",
                    "description": "Portal-specific extra form fields (city, zip, account type, marketing opt-in, …).",
                    "example": "{\"city\":\"Bochum\",\"zip\":\"44787\"}"
                  }
                },
                "required": [
                  "email",
                  "password"
                ]
              },
              "example": {
                "email": "name@example.com",
                "password": "•••••••••"
              }
            }
          }
        }
      }
    },
    "/v1/tinder/login": {
      "post": {
        "tags": [
          "Tinder"
        ],
        "summary": "Open a Tinder session with the account's own credentials. Returns an opaque session id to carry in the x-session-id header on the session routes. The portal's own session is the only thing kept, sealed at rest; the password is not stored and cannot be read back out of the session. Tinder has no password: call POST /v1/tinder/challenge first, then send the phone number (or e-mail) as `username`, the code that arrived as `password`, and the challenge's `login_token` alongside them.",
        "operationId": "tinder_v1_login",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "session_id": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4",
                  "user_id": "name@example.com",
                  "expires_at": "2026-08-09T22:02:00.000Z"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "The portal account's e-mail address, or its phone number in +49… form where the platform signs in with one.",
                    "example": "name@example.com"
                  },
                  "password": {
                    "type": "string",
                    "description": "The portal account's password, or the one-time code where the platform has no password.",
                    "example": "•••••••••"
                  },
                  "login_token": {
                    "type": "string",
                    "description": "The token the challenge route handed back, which binds the code to the attempt it was sent for. On a portal that only asks for a code when it does not recognise the sign-in, this carries that mailed code itself.",
                    "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…"
                  }
                },
                "required": [
                  "username",
                  "password"
                ]
              },
              "example": {
                "username": "name@example.com",
                "password": "•••••••••"
              }
            }
          }
        }
      }
    },
    "/v1/tinder/logout": {
      "post": {
        "tags": [
          "Tinder"
        ],
        "summary": "Close a Tinder session and drop everything it stored. Free of charge.",
        "operationId": "tinder_v1_logout",
        "description": "**Live endpoint.** Free of charge.",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": null
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/tinder/messages": {
      "get": {
        "tags": [
          "Tinder"
        ],
        "summary": "Read the signed-in Tinder account's inbox, or one conversation in full when conversation_id is given.",
        "operationId": "tinder_v1_messages",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "conversation_id",
            "in": "query",
            "required": false,
            "description": "One conversation of the inbox. Omit to list the inbox.",
            "schema": {
              "type": "string",
              "example": "412778905"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many members one page holds.",
            "schema": {
              "type": "string",
              "example": "20"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Continue after the previous page. Take it from `next_cursor` of the answer.",
            "schema": {
              "type": "string",
              "example": "eyJvZmZzZXQiOjIwfQ"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "count": 1,
                  "next_cursor": null,
                  "conversations": [
                    {
                      "conversation_id": "412778905",
                      "partner": "Lea",
                      "partner_photo": "https://…/1.jpg",
                      "last_message": "Klingt gut, wann passt es dir?",
                      "last_message_at": "2026-08-08T18:24:00.000Z",
                      "unread": true,
                      "unread_count": 1
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Tinder"
        ],
        "summary": "Send a Tinder message: a reply into conversation_id, or a first contact on user_id.",
        "operationId": "tinder_v1_messages_send",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "conversation_id": "412778905",
                  "data": {
                    "delivered": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "message": {
                    "type": "string",
                    "description": "The message text.",
                    "example": "Ist der Artikel noch verfuegbar?"
                  },
                  "conversation_id": {
                    "type": "string",
                    "description": "One conversation of the inbox. Omit to list the inbox.",
                    "example": "412778905"
                  },
                  "user_id": {
                    "type": "string",
                    "description": "The other member's id on the platform.",
                    "example": "12345678"
                  }
                },
                "required": [
                  "message"
                ]
              },
              "example": {
                "message": "Ist der Artikel noch verfuegbar?"
              }
            }
          }
        }
      }
    },
    "/v1/tinder/account": {
      "get": {
        "tags": [
          "Tinder"
        ],
        "summary": "The signed-in Tinder account's own profile, or another member's when id is given.",
        "operationId": "tinder_v1_account",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Another member's public id. Omit for the signed-in account's own profile.",
            "schema": {
              "type": "string",
              "example": "e63599e304f57gf2efi03735d45g21h6"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "12345678",
                    "name": "Lea",
                    "age": 29,
                    "gender": "female",
                    "city": "Bochum",
                    "distance_km": 12,
                    "online": true,
                    "last_seen": "2026-08-09T09:12:00.000Z",
                    "about": "Ich koche gern und laufe noch lieber.",
                    "photos": [
                      "https://…/1.jpg",
                      "https://…/2.jpg"
                    ],
                    "attributes": {
                      "height": "168",
                      "smoker": "no",
                      "relationship": "single"
                    },
                    "liked_by_me": false,
                    "likes_me": null,
                    "matched": false
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/tinder/search": {
      "get": {
        "tags": [
          "Tinder"
        ],
        "summary": "Search Tinder for other members, with the app's own filters (gender, age range, radius). Needs a session: this platform has no public listing to read.",
        "operationId": "tinder_v1_search",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "gender",
            "in": "query",
            "required": false,
            "description": "Which gender to look for. Tinder carries a fourth value of its own, beyond_binary.",
            "schema": {
              "type": "string",
              "enum": [
                "male",
                "female",
                "beyond_binary",
                "any"
              ]
            }
          },
          {
            "name": "min_age",
            "in": "query",
            "required": false,
            "description": "Youngest age to include.",
            "schema": {
              "type": "string",
              "example": "25"
            }
          },
          {
            "name": "max_age",
            "in": "query",
            "required": false,
            "description": "Oldest age to include.",
            "schema": {
              "type": "string",
              "example": "40"
            }
          },
          {
            "name": "distance",
            "in": "query",
            "required": false,
            "description": "Search radius in kilometres around the account's location.",
            "schema": {
              "type": "string",
              "example": "50"
            }
          },
          {
            "name": "with_photo",
            "in": "query",
            "required": false,
            "description": "Only members who have at least one photo.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "min_photos",
            "in": "query",
            "required": false,
            "description": "Only members with at least this many photos.",
            "schema": {
              "type": "string",
              "example": "3"
            }
          },
          {
            "name": "has_bio",
            "in": "query",
            "required": false,
            "description": "Only members who wrote an about text.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "photo_verified",
            "in": "query",
            "required": false,
            "description": "Only members whose selfie the platform verified.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "interests",
            "in": "query",
            "required": false,
            "description": "Only members who share at least one of these interests, under the platform's own names, comma separated. Case is ignored.",
            "schema": {
              "type": "string",
              "example": "Kaffee,Wandern"
            }
          },
          {
            "name": "save_filters",
            "in": "query",
            "required": false,
            "description": "Write age range, radius and gender onto the ACCOUNT before searching, the way the app's own settings page does, so the platform itself filters instead of this API filtering the answer. It changes the account's discovery settings and they stay changed after the call.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many members one page holds.",
            "schema": {
              "type": "string",
              "example": "20"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "count": 1,
                  "next_cursor": null,
                  "members": [
                    {
                      "id": "12345678",
                      "name": "Lea",
                      "age": 29,
                      "gender": "female",
                      "distance_km": 12,
                      "online": true,
                      "city": "Bochum",
                      "headline": "Lieber ein Kaffee zu viel als ein Gespraech zu wenig.",
                      "photos": [
                        "https://…/1.jpg"
                      ],
                      "url": "https://…/12345678"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/tinder/profile": {
      "get": {
        "tags": [
          "Tinder"
        ],
        "summary": "One Tinder member's full profile, the detail page behind a search hit: photos, about text, the platform's own attributes, and where this account already stands with them.",
        "operationId": "tinder_v1_profile",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "user_id",
            "in": "query",
            "required": true,
            "description": "The other member's id on the platform.",
            "schema": {
              "type": "string",
              "example": "12345678"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "12345678",
                    "name": "Lea",
                    "age": 29,
                    "gender": "female",
                    "city": "Bochum",
                    "distance_km": 12,
                    "online": true,
                    "last_seen": "2026-08-09T09:12:00.000Z",
                    "about": "Ich koche gern und laufe noch lieber.",
                    "photos": [
                      "https://…/1.jpg",
                      "https://…/2.jpg"
                    ],
                    "attributes": {
                      "height": "168",
                      "smoker": "no",
                      "relationship": "single"
                    },
                    "liked_by_me": false,
                    "likes_me": null,
                    "matched": false
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/tinder/like": {
      "post": {
        "tags": [
          "Tinder"
        ],
        "summary": "Like, superlike or pass a Tinder member. The answer says whether the like created a match. Where the platform lets a like carry an opening line, pass it as `message`.",
        "operationId": "tinder_v1_like",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "user_id": "12345678",
                  "action": "LIKE",
                  "matched": false
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "user_id": {
                    "type": "string",
                    "description": "The other member's id on the platform.",
                    "example": "12345678"
                  },
                  "action": {
                    "type": "string",
                    "description": "What to do with that member. UNLIKE takes a like back where the platform allows it; PASS is the swipe-away.",
                    "enum": [
                      "LIKE",
                      "SUPERLIKE",
                      "PASS",
                      "UNLIKE"
                    ]
                  },
                  "message": {
                    "type": "string",
                    "description": "The message text.",
                    "example": "Ist der Artikel noch verfuegbar?"
                  }
                },
                "required": [
                  "user_id"
                ]
              },
              "example": {
                "user_id": "12345678"
              }
            }
          }
        }
      }
    },
    "/v1/tinder/matches": {
      "get": {
        "tags": [
          "Tinder"
        ],
        "summary": "The signed-in Tinder account's matches: the members who liked back, each with the conversation it opened, so a reply is one call away.",
        "operationId": "tinder_v1_matches",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "with_messages",
            "in": "query",
            "required": false,
            "description": "Only the matches that already carry a conversation, or only the ones that do not.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many members one page holds.",
            "schema": {
              "type": "string",
              "example": "20"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Continue after the previous page. Take it from `next_cursor` of the answer.",
            "schema": {
              "type": "string",
              "example": "eyJvZmZzZXQiOjIwfQ"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "count": 1,
                  "next_cursor": null,
                  "matches": [
                    {
                      "id": "77123",
                      "user_id": "12345678",
                      "name": "Lea",
                      "photo": "https://…/1.jpg",
                      "matched_at": "2026-08-08T21:03:00.000Z",
                      "conversation_id": "77123",
                      "unread": true
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/tinder/challenge": {
      "post": {
        "tags": [
          "Tinder"
        ],
        "summary": "Ask Tinder to send the one-time login code. This platform has no password at all, so this is where a sign-in starts: it answers with a `login_token` that the login route takes back together with the code. Nothing is stored yet. A PHONE number always hits an Arkose bot check first: Tinder answers this route with 400 and hands out `captcha_public_key`, `captcha_reference` and `data_blob`. Solve it in a browser against that key and blob, then call this route again with `captcha_token` and `captcha_reference`. An E-MAIL address is not gated that way and goes straight through — but it only signs in an account that already carries the address.",
        "operationId": "tinder_v1_challenge",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "channel": "sms",
                  "login_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…",
                  "code_length": 6,
                  "sent": true
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "The portal account's e-mail address, or its phone number in +49… form where the platform signs in with one.",
                    "example": "name@example.com"
                  },
                  "login_token": {
                    "type": "string",
                    "description": "The token the challenge route handed back, which binds the code to the attempt it was sent for. On a portal that only asks for a code when it does not recognise the sign-in, this carries that mailed code itself.",
                    "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…"
                  },
                  "captcha_token": {
                    "type": "string",
                    "description": "reCAPTCHA token, where the portal's form demands one.",
                    "example": "03AGdBq26…"
                  },
                  "captcha_reference": {
                    "type": "string",
                    "description": "The reference the portal issued together with that bot check. Tinder verifies the solved token against it, so a token without it is never checked.",
                    "example": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9…"
                  }
                },
                "required": [
                  "username"
                ]
              },
              "example": {
                "username": "name@example.com"
              }
            }
          }
        }
      }
    },
    "/v1/bumble/login": {
      "post": {
        "tags": [
          "Bumble"
        ],
        "summary": "NOT AVAILABLE: Bumble retired the API these routes speak. Its endpoint answers every call, the anonymous handshake included, with 'Session not found (0030-3001-0051)', and the Bumble app does not use that endpoint at all: it speaks a binary protocol over a TLS socket to bma.bumble.com:443. No credentials get through until that transport is built, so these calls answer 502 instead of pretending to sign in. Open a Bumble session with the account's own credentials. Returns an opaque session id to carry in the x-session-id header on the session routes. The portal's own session is the only thing kept, sealed at rest; the password is not stored and cannot be read back out of the session. Bumble has no password: call POST /v1/bumble/challenge first, then send the phone number (or e-mail) as `username`, the code that arrived as `password`, and the challenge's `login_token` alongside them.",
        "operationId": "bumble_v1_login",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "session_id": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4",
                  "user_id": "name@example.com",
                  "expires_at": "2026-08-09T22:02:00.000Z"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "The portal account's e-mail address, or its phone number in +49… form where the platform signs in with one.",
                    "example": "name@example.com"
                  },
                  "password": {
                    "type": "string",
                    "description": "The portal account's password, or the one-time code where the platform has no password.",
                    "example": "•••••••••"
                  },
                  "login_token": {
                    "type": "string",
                    "description": "The token the challenge route handed back, which binds the code to the attempt it was sent for. On a portal that only asks for a code when it does not recognise the sign-in, this carries that mailed code itself.",
                    "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…"
                  }
                },
                "required": [
                  "username",
                  "password"
                ]
              },
              "example": {
                "username": "name@example.com",
                "password": "•••••••••"
              }
            }
          }
        }
      }
    },
    "/v1/bumble/logout": {
      "post": {
        "tags": [
          "Bumble"
        ],
        "summary": "NOT AVAILABLE: Bumble retired the API these routes speak. Its endpoint answers every call, the anonymous handshake included, with 'Session not found (0030-3001-0051)', and the Bumble app does not use that endpoint at all: it speaks a binary protocol over a TLS socket to bma.bumble.com:443. No credentials get through until that transport is built, so these calls answer 502 instead of pretending to sign in. Close a Bumble session and drop everything it stored. Free of charge.",
        "operationId": "bumble_v1_logout",
        "description": "**Live endpoint.** Free of charge.",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": null
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/bumble/messages": {
      "get": {
        "tags": [
          "Bumble"
        ],
        "summary": "NOT AVAILABLE: Bumble retired the API these routes speak. Its endpoint answers every call, the anonymous handshake included, with 'Session not found (0030-3001-0051)', and the Bumble app does not use that endpoint at all: it speaks a binary protocol over a TLS socket to bma.bumble.com:443. No credentials get through until that transport is built, so these calls answer 502 instead of pretending to sign in. Read the signed-in Bumble account's inbox, or one conversation in full when conversation_id is given.",
        "operationId": "bumble_v1_messages",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "conversation_id",
            "in": "query",
            "required": false,
            "description": "One conversation of the inbox. Omit to list the inbox.",
            "schema": {
              "type": "string",
              "example": "412778905"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many members one page holds.",
            "schema": {
              "type": "string",
              "example": "20"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Continue after the previous page. Take it from `next_cursor` of the answer.",
            "schema": {
              "type": "string",
              "example": "eyJvZmZzZXQiOjIwfQ"
            }
          },
          {
            "name": "archived",
            "in": "query",
            "required": false,
            "description": "Read the archived conversations instead of the current inbox.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "count": 1,
                  "next_cursor": null,
                  "conversations": [
                    {
                      "conversation_id": "412778905",
                      "partner": "Lea",
                      "partner_photo": "https://…/1.jpg",
                      "last_message": "Klingt gut, wann passt es dir?",
                      "last_message_at": "2026-08-08T18:24:00.000Z",
                      "unread": true,
                      "unread_count": 1
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Bumble"
        ],
        "summary": "NOT AVAILABLE: Bumble retired the API these routes speak. Its endpoint answers every call, the anonymous handshake included, with 'Session not found (0030-3001-0051)', and the Bumble app does not use that endpoint at all: it speaks a binary protocol over a TLS socket to bma.bumble.com:443. No credentials get through until that transport is built, so these calls answer 502 instead of pretending to sign in. Send a Bumble message: a reply into conversation_id, or a first contact on user_id.",
        "operationId": "bumble_v1_messages_send",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "conversation_id": "412778905",
                  "data": {
                    "delivered": true
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "message": {
                    "type": "string",
                    "description": "The message text.",
                    "example": "Ist der Artikel noch verfuegbar?"
                  },
                  "conversation_id": {
                    "type": "string",
                    "description": "One conversation of the inbox. Omit to list the inbox.",
                    "example": "412778905"
                  },
                  "user_id": {
                    "type": "string",
                    "description": "The other member's id on the platform.",
                    "example": "12345678"
                  }
                },
                "required": [
                  "message"
                ]
              },
              "example": {
                "message": "Ist der Artikel noch verfuegbar?"
              }
            }
          }
        }
      }
    },
    "/v1/bumble/account": {
      "get": {
        "tags": [
          "Bumble"
        ],
        "summary": "NOT AVAILABLE: Bumble retired the API these routes speak. Its endpoint answers every call, the anonymous handshake included, with 'Session not found (0030-3001-0051)', and the Bumble app does not use that endpoint at all: it speaks a binary protocol over a TLS socket to bma.bumble.com:443. No credentials get through until that transport is built, so these calls answer 502 instead of pretending to sign in. The signed-in Bumble account's own profile, or another member's when id is given.",
        "operationId": "bumble_v1_account",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Another member's public id. Omit for the signed-in account's own profile.",
            "schema": {
              "type": "string",
              "example": "e63599e304f57gf2efi03735d45g21h6"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "12345678",
                    "name": "Lea",
                    "age": 29,
                    "gender": "female",
                    "city": "Bochum",
                    "distance_km": 12,
                    "online": true,
                    "last_seen": "2026-08-09T09:12:00.000Z",
                    "about": "Ich koche gern und laufe noch lieber.",
                    "photos": [
                      "https://…/1.jpg",
                      "https://…/2.jpg"
                    ],
                    "attributes": {
                      "height": "168",
                      "smoker": "no",
                      "relationship": "single"
                    },
                    "liked_by_me": false,
                    "likes_me": null,
                    "matched": false
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/bumble/search": {
      "get": {
        "tags": [
          "Bumble"
        ],
        "summary": "NOT AVAILABLE: Bumble retired the API these routes speak. Its endpoint answers every call, the anonymous handshake included, with 'Session not found (0030-3001-0051)', and the Bumble app does not use that endpoint at all: it speaks a binary protocol over a TLS socket to bma.bumble.com:443. No credentials get through until that transport is built, so these calls answer 502 instead of pretending to sign in. Search Bumble for other members, with the app's own filters (gender, age range, radius). Needs a session: this platform has no public listing to read.",
        "operationId": "bumble_v1_search",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "min_age",
            "in": "query",
            "required": false,
            "description": "Youngest age to include.",
            "schema": {
              "type": "string",
              "example": "25"
            }
          },
          {
            "name": "max_age",
            "in": "query",
            "required": false,
            "description": "Oldest age to include.",
            "schema": {
              "type": "string",
              "example": "40"
            }
          },
          {
            "name": "distance",
            "in": "query",
            "required": false,
            "description": "Search radius in kilometres around the account's location.",
            "schema": {
              "type": "string",
              "example": "50"
            }
          },
          {
            "name": "with_photo",
            "in": "query",
            "required": false,
            "description": "Only members who have at least one photo.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many members one page holds.",
            "schema": {
              "type": "string",
              "example": "20"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "count": 1,
                  "next_cursor": null,
                  "members": [
                    {
                      "id": "12345678",
                      "name": "Lea",
                      "age": 29,
                      "gender": "female",
                      "distance_km": 12,
                      "online": true,
                      "city": "Bochum",
                      "headline": "Lieber ein Kaffee zu viel als ein Gespraech zu wenig.",
                      "photos": [
                        "https://…/1.jpg"
                      ],
                      "url": "https://…/12345678"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/bumble/profile": {
      "get": {
        "tags": [
          "Bumble"
        ],
        "summary": "NOT AVAILABLE: Bumble retired the API these routes speak. Its endpoint answers every call, the anonymous handshake included, with 'Session not found (0030-3001-0051)', and the Bumble app does not use that endpoint at all: it speaks a binary protocol over a TLS socket to bma.bumble.com:443. No credentials get through until that transport is built, so these calls answer 502 instead of pretending to sign in. One Bumble member's full profile, the detail page behind a search hit: photos, about text, the platform's own attributes, and where this account already stands with them.",
        "operationId": "bumble_v1_profile",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "user_id",
            "in": "query",
            "required": true,
            "description": "The other member's id on the platform.",
            "schema": {
              "type": "string",
              "example": "12345678"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "12345678",
                    "name": "Lea",
                    "age": 29,
                    "gender": "female",
                    "city": "Bochum",
                    "distance_km": 12,
                    "online": true,
                    "last_seen": "2026-08-09T09:12:00.000Z",
                    "about": "Ich koche gern und laufe noch lieber.",
                    "photos": [
                      "https://…/1.jpg",
                      "https://…/2.jpg"
                    ],
                    "attributes": {
                      "height": "168",
                      "smoker": "no",
                      "relationship": "single"
                    },
                    "liked_by_me": false,
                    "likes_me": null,
                    "matched": false
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/bumble/like": {
      "post": {
        "tags": [
          "Bumble"
        ],
        "summary": "NOT AVAILABLE: Bumble retired the API these routes speak. Its endpoint answers every call, the anonymous handshake included, with 'Session not found (0030-3001-0051)', and the Bumble app does not use that endpoint at all: it speaks a binary protocol over a TLS socket to bma.bumble.com:443. No credentials get through until that transport is built, so these calls answer 502 instead of pretending to sign in. Like, superlike or pass a Bumble member. The answer says whether the like created a match. Where the platform lets a like carry an opening line, pass it as `message`.",
        "operationId": "bumble_v1_like",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "user_id": "12345678",
                  "action": "LIKE",
                  "matched": false
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "user_id": {
                    "type": "string",
                    "description": "The other member's id on the platform.",
                    "example": "12345678"
                  },
                  "action": {
                    "type": "string",
                    "description": "What to do with that member. UNLIKE takes a like back where the platform allows it; PASS is the swipe-away.",
                    "enum": [
                      "LIKE",
                      "SUPERLIKE",
                      "PASS",
                      "UNLIKE"
                    ]
                  },
                  "message": {
                    "type": "string",
                    "description": "The message text.",
                    "example": "Ist der Artikel noch verfuegbar?"
                  }
                },
                "required": [
                  "user_id"
                ]
              },
              "example": {
                "user_id": "12345678"
              }
            }
          }
        }
      }
    },
    "/v1/bumble/matches": {
      "get": {
        "tags": [
          "Bumble"
        ],
        "summary": "NOT AVAILABLE: Bumble retired the API these routes speak. Its endpoint answers every call, the anonymous handshake included, with 'Session not found (0030-3001-0051)', and the Bumble app does not use that endpoint at all: it speaks a binary protocol over a TLS socket to bma.bumble.com:443. No credentials get through until that transport is built, so these calls answer 502 instead of pretending to sign in. The signed-in Bumble account's matches: the members who liked back, each with the conversation it opened, so a reply is one call away.",
        "operationId": "bumble_v1_matches",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "x-session-id",
            "in": "header",
            "required": true,
            "description": "The session id returned by login. Sent as the x-session-id header.",
            "schema": {
              "type": "string",
              "example": "b6f0a1c2d3e4f5a6b7c8d9e0f1a2b3c4"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many members one page holds.",
            "schema": {
              "type": "string",
              "example": "20"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Continue after the previous page. Take it from `next_cursor` of the answer.",
            "schema": {
              "type": "string",
              "example": "eyJvZmZzZXQiOjIwfQ"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "count": 1,
                  "next_cursor": null,
                  "matches": [
                    {
                      "id": "77123",
                      "user_id": "12345678",
                      "name": "Lea",
                      "photo": "https://…/1.jpg",
                      "matched_at": "2026-08-08T21:03:00.000Z",
                      "conversation_id": "77123",
                      "unread": true
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/bumble/challenge": {
      "post": {
        "tags": [
          "Bumble"
        ],
        "summary": "NOT AVAILABLE: Bumble retired the API these routes speak. Its endpoint answers every call, the anonymous handshake included, with 'Session not found (0030-3001-0051)', and the Bumble app does not use that endpoint at all: it speaks a binary protocol over a TLS socket to bma.bumble.com:443. No credentials get through until that transport is built, so these calls answer 502 instead of pretending to sign in. Ask Bumble to send the one-time login code. This platform has no password at all, so this is where a sign-in starts: it answers with a `login_token` that the login route takes back together with the code. Nothing is stored yet.",
        "operationId": "bumble_v1_challenge",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "channel": "sms",
                  "login_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…",
                  "code_length": 6,
                  "sent": true
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "The portal account's e-mail address, or its phone number in +49… form where the platform signs in with one.",
                    "example": "name@example.com"
                  },
                  "login_token": {
                    "type": "string",
                    "description": "The token the challenge route handed back, which binds the code to the attempt it was sent for. On a portal that only asks for a code when it does not recognise the sign-in, this carries that mailed code itself.",
                    "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…"
                  },
                  "captcha_token": {
                    "type": "string",
                    "description": "reCAPTCHA token, where the portal's form demands one.",
                    "example": "03AGdBq26…"
                  },
                  "captcha_reference": {
                    "type": "string",
                    "description": "The reference the portal issued together with that bot check. Tinder verifies the solved token against it, so a token without it is never checked.",
                    "example": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9…"
                  }
                },
                "required": [
                  "username"
                ]
              },
              "example": {
                "username": "name@example.com"
              }
            }
          }
        }
      }
    },
    "/v1/snapchat/profile": {
      "get": {
        "tags": [
          "Snapchat"
        ],
        "summary": "Get a public Snapchat profile by username or profile URL: display name, subscriber (follower) count, bio, website and profile images.",
        "operationId": "snapchat_v1_profile",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "username",
            "in": "query",
            "required": false,
            "description": "Snapchat handle, with or without the leading @. Provide at least one of: username, url.",
            "schema": {
              "type": "string",
              "example": "kyliejenner"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Any snapchat.com profile URL. Provide at least one of: username, url.",
            "schema": {
              "type": "string",
              "example": "https://www.snapchat.com/add/kyliejenner"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "username": "kyliejenner",
                    "display_name": "King Kylie",
                    "follower_count": 29521600,
                    "is_public_profile": true,
                    "verified": true,
                    "bio": null,
                    "website": "kyliecosmetics.com",
                    "category": null,
                    "subcategory": null,
                    "address": null,
                    "profile_picture_url": "https://cf-st.sc-cdn.net/aps/bolt/mock-profile-picture",
                    "hero_image_url": "https://cf-st.sc-cdn.net/aps/bolt/mock-hero-image",
                    "snapcode_url": "https://app.snapchat.com/web/deeplink/snapcode?username=kyliejenner&type=SVG&bitmoji=enable",
                    "has_story": false,
                    "profile_url": "https://www.snapchat.com/add/kyliejenner"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/business": {
      "get": {
        "tags": [
          "Google"
        ],
        "summary": "Get a Google business listing (Google Business Profile) by search query or Google Maps URL: name, star rating, number of ratings, address, phone, website and categories. Aggregate data only, no individual reviews.",
        "operationId": "google_v1_business",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": false,
            "description": "Business name, ideally with its city or street so the match is unambiguous. Provide at least one of: query, url.",
            "schema": {
              "type": "string",
              "example": "Hotel Adlon Kempinski Berlin"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Full google.com/maps place URL. Shortened share links (maps.app.goo.gl) are not accepted. Provide at least one of: query, url.",
            "schema": {
              "type": "string",
              "example": "https://www.google.com/maps/place/Hotel+Adlon+Kempinski+Berlin/@52.5160742,13.3804268,17z"
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Interface language for the category names. Defaults to en.",
            "schema": {
              "type": "string",
              "example": "de"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "place_id": "ChIJHQQciMZRqEcR2X4b8-vf5Bk",
                    "feature_id": "0x47a851c6881c041d:0x19e4dfebf31b7ed9",
                    "name": "Hotel Adlon Kempinski Berlin",
                    "rating": 4.6,
                    "review_count": 2312,
                    "categories": [
                      "Hotel"
                    ],
                    "category": "Hotel",
                    "description": "Grand hotel at the Brandenburg Gate.",
                    "address": {
                      "formatted": "Hotel Adlon Kempinski Berlin, Unter den Linden 77, 10117 Berlin, Germany",
                      "lines": [
                        "Unter den Linden 77",
                        "10117 Berlin",
                        "Germany"
                      ]
                    },
                    "phone": "+493022610",
                    "phone_display": "+49 30 22610",
                    "website": "https://www.kempinski.com/de/hotel-adlon",
                    "website_label": "kempinski.com",
                    "latitude": 52.5160742,
                    "longitude": 13.3804268,
                    "maps_url": "https://www.google.com/maps/preview/place/Hotel+Adlon+Kempinski+Berlin",
                    "reviews_url": "https://search.google.com/local/reviews?placeid=ChIJHQQciMZRqEcR2X4b8-vf5Bk"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/arbeitsagentur/search": {
      "get": {
        "tags": [
          "Arbeitsagentur"
        ],
        "summary": "Search vocational training places (Ausbildungsstellen) on the Arbeitsagentur job board by keyword, place and industry, with page-based pagination.",
        "operationId": "arbeitsagentur_v1_search",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": false,
            "description": "Occupation or keyword, e.g. \"Koch\" or \"Mechatroniker\".",
            "schema": {
              "type": "string",
              "example": "Koch"
            }
          },
          {
            "name": "location",
            "in": "query",
            "required": false,
            "description": "Town or postcode.",
            "schema": {
              "type": "string",
              "example": "Berlin"
            }
          },
          {
            "name": "radius",
            "in": "query",
            "required": false,
            "description": "Radius around `location` in km.",
            "schema": {
              "type": "string",
              "example": "25"
            }
          },
          {
            "name": "industry",
            "in": "query",
            "required": false,
            "description": "Industry code(s) or label; several joined with \",\". Results then carry that industry. Codes: 1 Bau, Architektur; 2 Chemie, Pharma, Biotechnologie; 3 Elektro, Feinmechanik, Optik, Medizintechnik; 4 Bildung, Erziehung, Unterricht; 5 Fahrzeugbau, Fahrzeuginstandhaltung; 6 Banken, Finanzdienstleistungen, Immobilien, Versicherungen; 7 Gesundheit, Soziales; 8 Rohstoffverarbeitung, Glas, Keramik, Kunststoff, Holz; 9 Einzelhandel, Großhandel, Außenhandel; 10 Hotel, Gaststätten, Tourismus, Kunst, Kultur, Freizeit; 11 IT, Computer, Telekommunikation; 12 Landwirtschaft, Forstwirtschaft, Gartenbau; 13 Management, Beratung, Recht, Steuern; 14 Medien, Informationsdienste; 15 Metall, Maschinenbau, Anlagenbau; 16 Konsum- und Gebrauchsgüter; 17 Nahrungs- / Genussmittelherstellung; 18 Öffentlicher Dienst, Organisationen; 19 Papier, Druck, Verpackung; 20 Rohstoffgewinnung, Rohstoffaufbereitung; 21 Logistik, Transport, Verkehr; 22 Abfallwirtschaft, Energieversorgung, Wasserversorgung; 23 Sicherheits-, Reinigungs- oder Reparaturdienstleistungen; 24 Werbung, Öffentlichkeitsarbeit; 25 Wissenschaft, Forschung, Entwicklung; 26 Luftfahrttechnik, Raumfahrttechnik; 27 Arbeitsvermittlung, privat; 28 Arbeitnehmerüberlassung, Zeitarbeit; 29 Sonstige Dienstleistungen.",
            "schema": {
              "type": "string",
              "example": "10"
            }
          },
          {
            "name": "published_since",
            "in": "query",
            "required": false,
            "description": "Only postings published within this many days.",
            "schema": {
              "type": "string",
              "example": "7"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page, at most 100.",
            "schema": {
              "type": "string",
              "example": "1"
            }
          },
          {
            "name": "page_size",
            "in": "query",
            "required": false,
            "description": "Results per page, at most 100 (default 25).",
            "schema": {
              "type": "string",
              "example": "25"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "query": "Personaldienstleistungskaufmann",
                  "location": null,
                  "industry": null,
                  "page": 1,
                  "page_size": 25,
                  "total_count": 1,
                  "has_more": false,
                  "count": 1,
                  "results": [
                    {
                      "id": "12313-8bbd0bd70bd343c-S",
                      "title": "Ausbildung: Personaldienstleistungskaufm. /-f. (IHK) (m/w/d)",
                      "occupation": "Personaldienstleistungskaufmann/-frau",
                      "employer": "Creativ Personaldienstleistungen GmbH",
                      "industry": null,
                      "training_type": "ausbildung",
                      "address": {
                        "street": "Mittelstraße 68",
                        "zip": "58285",
                        "city": "Gevelsberg",
                        "region": "Nordrhein-Westfalen",
                        "country": "Deutschland",
                        "latitude": 51.318414,
                        "longitude": 7.3351935
                      },
                      "start_date": "2026-09-27",
                      "published_at": "2026-09-27",
                      "updated_at": "2026-09-27T08:22:09.236",
                      "detail_url": "https://www.arbeitsagentur.de/jobsuche/jobdetail/12313-8bbd0bd70bd343c-S"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/arbeitsagentur/job": {
      "get": {
        "tags": [
          "Arbeitsagentur"
        ],
        "summary": "Get one Arbeitsagentur training place in full: description, address, occupation, employer and the e-mail addresses published in the job text, by reference number or URL.",
        "operationId": "arbeitsagentur_v1_job",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Reference number as returned by search (`id`). Provide at least one of: id, url.",
            "schema": {
              "type": "string",
              "example": "12313-8bbd0bd70bd343c-S"
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "A job-detail URL on arbeitsagentur.de. Provide at least one of: id, url.",
            "schema": {
              "type": "string",
              "example": "https://www.arbeitsagentur.de/jobsuche/jobdetail/12313-8bbd0bd70bd343c-S"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "12313-8bbd0bd70bd343c-S",
                    "title": "Ausbildung: Personaldienstleistungskaufm. /-f. (IHK) (m/w/d)",
                    "occupation": "Personaldienstleistungskaufmann/-frau",
                    "employer": "Creativ Personaldienstleistungen GmbH",
                    "training_type": "ausbildung",
                    "description": "Ausbildung als Personaldienstleistungskaufmann/-kauffrau (IHK) (m/w/d): … senden Sie uns bitte Ihre vollständigen Bewerbungsunterlagen per E-Mail an: jana.engels@movado-gruppe.de",
                    "emails": [
                      "jana.engels@movado-gruppe.de"
                    ],
                    "address": {
                      "street": "Mittelstraße 68",
                      "zip": "58285",
                      "city": "Gevelsberg",
                      "region": "Nordrhein-Westfalen",
                      "country": "Deutschland",
                      "latitude": 51.318414,
                      "longitude": 7.3351935
                    },
                    "locations": [
                      {
                        "street": "Mittelstraße 68",
                        "zip": "58285",
                        "city": "Gevelsberg",
                        "region": "Nordrhein-Westfalen",
                        "country": "Deutschland",
                        "latitude": 51.318414,
                        "longitude": 7.3351935
                      }
                    ],
                    "start_date": "2026-09-27",
                    "published_at": "2026-09-27",
                    "updated_at": "2026-09-27T08:22:09.236",
                    "full_time": true,
                    "salary_first_year": null,
                    "required_education": "NICHT_RELEVANT",
                    "is_private_agency": true,
                    "is_temp_agency": false,
                    "application_url": null,
                    "partner": {
                      "name": "Creativ Personaldienstleistungen GmbH",
                      "url": "www.movado-gruppe.de"
                    },
                    "detail_url": "https://www.arbeitsagentur.de/jobsuche/jobdetail/12313-8bbd0bd70bd343c-S"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/ausbildungde/search": {
      "get": {
        "tags": [
          "Ausbildung.de"
        ],
        "summary": "Search Ausbildung.de training places by keyword and place, 20 per page.",
        "operationId": "ausbildungde_v1_search",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": false,
            "description": "Occupation or keyword, e.g. \"Pflegefachmann\".",
            "schema": {
              "type": "string",
              "example": "Pflegefachmann"
            }
          },
          {
            "name": "location",
            "in": "query",
            "required": false,
            "description": "Town or postcode. Without it the search covers all of Germany.",
            "schema": {
              "type": "string",
              "example": "Bochum"
            }
          },
          {
            "name": "radius",
            "in": "query",
            "required": false,
            "description": "Radius around `location` in km.",
            "schema": {
              "type": "string",
              "example": "25"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Result order, default `newest`. `relevance` is ranked around a town the site derives from the request and can shift between pages.",
            "schema": {
              "type": "string",
              "enum": [
                "newest",
                "relevance",
                "start_date",
                "distance"
              ],
              "example": "newest"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page of 20 results.",
            "schema": {
              "type": "string",
              "example": "1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "query": "Pflegefachmann",
                  "location": "Bochum",
                  "sort": "newest",
                  "page": 1,
                  "page_size": 20,
                  "total_count": 1,
                  "vacancies_count": 1,
                  "has_more": false,
                  "count": 1,
                  "results": [
                    {
                      "id": "2ce607b0-220a-4e77-8d1b-e8eae8b31e95",
                      "title": "Verkürzte Ausbildung Pflegefachmann/-frau (m/w/d)",
                      "employer": "Knappschaft Kliniken Akademie GmbH",
                      "branch": "Pflegeschule Bochum",
                      "profession": "Pflegefachmann/-frau",
                      "apprenticeship_type": "klassische-duale-berufsausbildung",
                      "duration": "2 Jahre",
                      "start_date": null,
                      "zip": "44892",
                      "city": "Bochum",
                      "locations_count": 1,
                      "direct_application": true,
                      "detail_url": "https://www.ausbildung.de/stellen/verkuerzte-ausbildung-pflegefachmann-frau-m-w-d-bei-knappschaft-kliniken-akademie-gmbh-in-bochum-2ce607b0-220a-4e77-8d1b-e8eae8b31e95/"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/ausbildungde/job": {
      "get": {
        "tags": [
          "Ausbildung.de"
        ],
        "summary": "Get one Ausbildung.de training place in full: description, industry, postal address, application e-mail and contact person, by URL or slug.",
        "operationId": "ausbildungde_v1_job",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "The job URL as returned by search (`detail_url`). Provide at least one of: url, slug.",
            "schema": {
              "type": "string",
              "example": "https://www.ausbildung.de/stellen/verkuerzte-ausbildung-pflegefachmann-frau-m-w-d-bei-knappschaft-kliniken-akademie-gmbh-in-bochum-2ce607b0-220a-4e77-8d1b-e8eae8b31e95/"
            }
          },
          {
            "name": "slug",
            "in": "query",
            "required": false,
            "description": "The last path segment of the job URL. Provide at least one of: url, slug.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "2ce607b0-220a-4e77-8d1b-e8eae8b31e95",
                    "title": "Verkürzte Ausbildung Pflegefachmann/-frau (m/w/d)",
                    "employer": "Knappschaft Kliniken Akademie GmbH",
                    "branch": "Pflegeschule Bochum",
                    "industry": "Gesundheit",
                    "profession": "Pflegefachmann/-frau",
                    "apprenticeship_type": "Klassische duale Berufsausbildung",
                    "duration": "2 Jahre",
                    "required_education": "Keine Angabe",
                    "start_date": null,
                    "valid_until": null,
                    "published_at": "2026-09-20T08:00:00.000Z",
                    "description": "Die verkürzte Ausbildung zur Pflegefachfrau / zum Pflegefachmann …",
                    "emails": [
                      "ps-bo.akademie@knappschaft-kliniken.de"
                    ],
                    "address": {
                      "street": "In der Schornau 23-25",
                      "zip": "44892",
                      "city": "Bochum",
                      "region": "Nordrhein-Westfalen",
                      "country": "DE",
                      "latitude": 51.46411,
                      "longitude": 7.32768
                    },
                    "application": {
                      "email": "ps-bo.akademie@knappschaft-kliniken.de",
                      "url": "https://jobs.knappschaft-kliniken.de/job_detail.aspx?iID=629&fa=-1&ff=4",
                      "postal_address": null,
                      "reference_number": null
                    },
                    "contacts": [
                      {
                        "name": "Herr Cem Colak",
                        "position": "Schulleitung",
                        "email": "ps-bo.akademie@knappschaft-kliniken.de",
                        "phone": "+49 2342994101"
                      }
                    ],
                    "website": "https://www.knappschaft-kliniken.de",
                    "multiple_locations": true,
                    "detail_url": "https://www.ausbildung.de/stellen/verkuerzte-ausbildung-pflegefachmann-frau-m-w-d-bei-knappschaft-kliniken-akademie-gmbh-in-bochum-2ce607b0-220a-4e77-8d1b-e8eae8b31e95/"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/meinestadt/search": {
      "get": {
        "tags": [
          "meinestadt.de"
        ],
        "summary": "Search meinestadt.de training places (Lehrstellen) by keyword and place, 20 per page.",
        "operationId": "meinestadt_v1_search",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": false,
            "description": "Occupation or keyword, e.g. \"Koch\".",
            "schema": {
              "type": "string",
              "example": "Koch"
            }
          },
          {
            "name": "location",
            "in": "query",
            "required": false,
            "description": "Town as the site names it, e.g. \"Köln\" or \"Frankfurt am Main\". Without it the search covers all of Germany. An unknown town answers 400.",
            "schema": {
              "type": "string",
              "example": "Leipzig"
            }
          },
          {
            "name": "radius",
            "in": "query",
            "required": false,
            "description": "Radius around `location` in km; the site's default is 30.",
            "schema": {
              "type": "string",
              "example": "25"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page of 20 results; the site serves at most 50 pages per query.",
            "schema": {
              "type": "string",
              "example": "1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "query": "Koch",
                  "location": "Mannheim",
                  "page": 1,
                  "page_size": 20,
                  "total_count": 8,
                  "reachable_count": 8,
                  "has_more": false,
                  "count": 1,
                  "results": [
                    {
                      "id": "260283568",
                      "title": "Duales Studium Elektro- und Informationstechnik - Nachrichtentechnik (w/m/d), Oberkochen, 2027",
                      "employer": "HRM Institute GmbH & Co. KG",
                      "city": "Mannheim",
                      "industries": [],
                      "work_time": "Vollzeit",
                      "published_at": "2026-09-27",
                      "ad_type": "standard",
                      "own_listing": true,
                      "detail_url": "https://www.meinestadt.de/mannheim/lehrstellen/standard?id=260283568"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/meinestadt/job": {
      "get": {
        "tags": [
          "meinestadt.de"
        ],
        "summary": "Get one meinestadt.de training place in full: description, industry, postal address, phone, contact person and e-mail, by URL or id.",
        "operationId": "meinestadt_v1_job",
        "description": "**Live endpoint.** Credit cost: **1** (1 request = 1 credit).",
        "security": [
          {
            "apiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "The job URL as returned by search (`detail_url` of a hit with `own_listing: true`). Provide at least one of: url, id.",
            "schema": {
              "type": "string",
              "example": "https://www.meinestadt.de/mannheim/lehrstellen/standard?id=260283568"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "The job id (`id` from search). Provide at least one of: url, id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ad_type",
            "in": "query",
            "required": false,
            "description": "With `id`: the hit's `ad_type`. Without it both are tried.",
            "schema": {
              "type": "string",
              "enum": [
                "premium",
                "standard"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Platform-native JSON payload (ScrapeCreators-compatible).",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "id": "260283568",
                    "title": "Duales Studium Elektro- und Informationstechnik - Nachrichtentechnik (w/m/d), Oberkochen, 2027",
                    "employer": "HRM Institute GmbH & Co. KG",
                    "industry": null,
                    "ad_type": "standard",
                    "published_at": null,
                    "valid_until": null,
                    "required_education": null,
                    "start_date": null,
                    "company_size": null,
                    "benefits": [],
                    "description": "Du interessierst Dich für Technik, nachhaltige Gebäude und innovative Energielösungen? …",
                    "address": {
                      "street": "Rheinkaistr. 2",
                      "zip": "68159",
                      "city": "Mannheim",
                      "region": null,
                      "country": null,
                      "latitude": null,
                      "longitude": null
                    },
                    "text_address": null,
                    "emails": [],
                    "field_emails": [],
                    "text_emails": [],
                    "contact": {
                      "name": null,
                      "phone": "+49 621 401660",
                      "website": null
                    },
                    "reference_number": null,
                    "detail_url": "https://www.meinestadt.de/deutschland/lehrstellen/standard?id=260283568"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Missing required parameter(s): handle"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Invalid API key."
                  }
                }
              }
            }
          },
          "402": {
            "description": "Not enough credits.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Insufficient credits."
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Rate limit exceeded."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream scrape failed.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "message": "Upstream scrape failed."
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}