{"record":{"id":"55010866716ed14b","repo":"gitroomhq/postiz-app","slug":"linkedin-label-processing-failed-status-proces","errorCode":null,"errorMessage":"LinkedIn ${label} processing failed${status.processingFailureReason ? `: ${status.processingFailureReason}` : ''}","messagePattern":"LinkedIn (.+?) processing failed(.+?)` : ''\\}","errorType":"exception","errorClass":"BadBody","httpStatus":null,"severity":"error","filePath":"libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts","lineNumber":955,"sourceCode":"        // Transient status-check error: the media may finish processing just\n        // fine, keep polling.\n        return {\n          status: 'pending',\n          pendingData: {\n            ...pendingData,\n            statusStalls: (pendingData.statusStalls || 0) + 1,\n          },\n        };\n      }\n\n      if (status.status === 'PROCESSING_FAILED') {\n        const label =\n          media.endpoint === 'videos'\n            ? 'video'\n            : media.endpoint === 'documents'\n            ? 'document'\n            : 'image';\n        throw new BadBody(\n          this.identifier,\n          JSON.stringify(status),\n          '{}',\n          `LinkedIn ${label} processing failed${\n            status.processingFailureReason\n              ? `: ${status.processingFailureReason}`\n              : ''\n          }`\n        );\n      }\n\n      if (status.status !== 'AVAILABLE') {\n        stillProcessing.push(media);\n      }\n    }\n\n    if (stillProcessing.length) {\n      // every media answered with a real status: the endpoint works, reset","sourceCodeStart":937,"sourceCodeEnd":973,"githubUrl":"https://github.com/gitroomhq/postiz-app/blob/0f1647f7491a217d43eb5ae7a480484bdf0aff3e/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts#L937-L973","documentation":"Thrown by LinkedinProvider.checkPostStatus when LinkedIn reports a processingStatus of FAILED for an uploaded media asset (image/video/document). The message includes the media kind and LinkedIn's processingFailureReason if provided. The post is never published because LinkedIn could not finish processing the media.","triggerScenarios":"POSTing to LinkedIn's media upload endpoints (images/videos/documents) succeeds, but polling the asset status returns status='FAILED' (e.g. videos endpoint processing failed). Raised from check() during the post workflow.","commonSituations":"Unsupported video codec/container, media exceeding LinkedIn's duration/size limits, corrupt file, or LinkedIn transcode service hiccup. Intermittent LinkedIn-side transcoding failures also occur.","solutions":["Check processingFailureReason in the message and fix the media accordingly (re-encode video as H.264/MP4, reduce size/duration)","Re-upload a fresh copy of the media; transient transcode failures often succeed on retry","Verify the media matches LinkedIn's documented specs for the endpoint used","If persistent across files, check LinkedIn API status / re-authenticate the integration"],"exampleFix":"// before\nconst file = await uploadVideo('clip.avi');\n// after\nconst file = await uploadVideo('clip.mp4'); // H.264/AAC in MP4 container","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  await provider.check(post);\n} catch (e) {\n  if (e instanceof BadBody && /LinkedIn (video|document|image) processing failed/.test(e.message)) {\n    // re-encode/replace media and retry once\n  }\n  throw e;\n}","preventionTips":["Validate video codec/size against LinkedIn specs before scheduling","Keep a re-encode fallback (ffmpeg H.264 MP4) in the media pipeline"],"tags":["linkedin","media-processing","video-transcode"],"backgroundTag":"media-processing-failed","analyzedSha":"0f1647f7491a217d43eb5ae7a480484bdf0aff3e","analyzedAt":"2026-08-27T12:09:55.020Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}