{"record":{"id":"a347525586426657","repo":"FujiwaraChoki/MoneyPrinterV2","slug":"post-bridge-returned-an-invalid-social-accounts-pa","errorCode":null,"errorMessage":"Post Bridge returned an invalid social accounts payload.","messagePattern":"Post Bridge returned an invalid social accounts payload\\.","errorType":"error_code","errorClass":"PostBridgeClientError","httpStatus":null,"severity":"error","filePath":"src/classes/PostBridge.py","lineNumber":77,"sourceCode":"        if platforms:\n            for platform in platforms:\n                params.append((\"platform\", platform))\n\n        url = f\"{self.API_BASE}/social-accounts\"\n        accounts = []\n        is_first_request = True\n\n        while url:\n            response_json = self._request_json(\n                \"GET\",\n                url,\n                params=params if is_first_request else None,\n            )\n            is_first_request = False\n\n            page_accounts = response_json.get(\"data\", response_json)\n            if not isinstance(page_accounts, list):\n                raise PostBridgeClientError(\n                    \"Post Bridge returned an invalid social accounts payload.\"\n                )\n\n            accounts.extend(page_accounts)\n\n            meta = response_json.get(\"meta\", {})\n            url = meta.get(\"next\") if isinstance(meta, dict) else None\n\n        return accounts\n\n    def upload_media(self, file_path: str) -> str:\n        \"\"\"\n        Upload a local media file to Post Bridge and return its media ID.\n\n        Args:\n            file_path (str): Absolute path to a local media file.\n\n        Returns:","sourceCodeStart":59,"sourceCodeEnd":95,"githubUrl":"https://github.com/FujiwaraChoki/MoneyPrinterV2/blob/5192af8eca97759f941834b947e3ceb209da0649/src/classes/PostBridge.py#L59-L95","documentation":"Raised by PostBridgeClient.list_social_accounts when the response's 'data' field (or the response body itself, as fallback) is not a JSON list. The paginator expects an array of account objects per page, so any other shape aborts the loop.","triggerScenarios":"The API returns a dict per page (e.g. {'accounts': [...]}) so response_json.get('data', response_json) yields a dict; an error payload like {'error': ...} with 200 status; an empty-string or null 'data' field.","commonSituations":"Post Bridge API version change altering the payload envelope, a proxy/gateway returning an HTML or object error page, or rate-limit responses that don't set a non-200 status.","solutions":["Log the raw response_json to see the actual shape returned","Update the extraction to match the current API envelope (e.g. response_json.get('accounts', []))","Check for an error/message key in the payload before treating it as data","Verify the endpoint and API version in the Post Bridge account settings"],"exampleFix":"// before\npage_accounts = response_json.get(\"data\", response_json)\nif not isinstance(page_accounts, list):\n    raise PostBridgeClientError(\"Post Bridge returned an invalid social accounts payload.\")\n\n// after\npage_accounts = (\n    response_json.get(\"data\")\n    if isinstance(response_json.get(\"data\"), list)\n    else response_json.get(\"accounts\", [])\n)\nif not isinstance(page_accounts, list):\n    raise PostBridgeClientError(\n        f\"Unexpected social accounts payload: {response_json!r}\"\n    )","handlingStrategy":"type-guard","validationCode":"response_json = client._request_json(\"GET\", url, params=params)\nif not isinstance(response_json.get(\"data\", response_json), list):\n    logging.warning(\"Unexpected Post Bridge payload shape: %r\", response_json)\n    # fall back to a known-good envelope or abort gracefully","typeGuard":"def is_social_accounts_payload(payload: object) -> bool:\n    if not isinstance(payload, dict):\n        return False\n    data = payload.get(\"data\", payload)\n    return isinstance(data, list) and all(isinstance(a, dict) for a in data)","tryCatchPattern":"try:\n    accounts = client.list_social_accounts()\nexcept PostBridgeClientError as exc:\n    if \"invalid social accounts payload\" in str(exc):\n        logging.error(\"Post Bridge API envelope changed; got: %s\", exc)\n        return []\n    raise","preventionTips":["Log raw response bodies (truncated) whenever envelope-shape errors occur","Pin the Post Bridge API version if the client supports versioned endpoints","Add integration tests that assert the payload shape on every release"],"tags":["python","api-client","json","schema","pagination"],"backgroundTag":"schema-validation-failed","analyzedSha":"5192af8eca97759f941834b947e3ceb209da0649","analyzedAt":"2026-08-28T10:31:46.474Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}