n8n Workflow Fails with 404 Error When Using Adobe PDF API - Timing Issue

I’m building an n8n workflow to convert PDF files to HTML using Adobe PDF Services API but keep getting a 404 error during the conversion step.

My Workflow Steps

  1. Create Asset - POST request to get assetID and upload URL
  2. Upload PDF - PUT request to upload the file
  3. Start Job - POST request to begin conversion (this fails with 404)
  4. Check Status - GET request to monitor progress
  5. Get Result - Download converted HTML

The Issue

Step 3 always returns 404 Not Found. I think this happens because Adobe’s servers haven’t finished processing the uploaded file yet, even though the upload shows as successful.

What I’ve Tried

  • Sequential nodes: Doesn’t work because upload node loses the assetID data
  • Merge approach: Causes n8n internal errors
  • Wait delays: Even 30 second waits don’t help
  • Retry settings: Still fails after multiple attempts
  • New API keys: Didn’t solve anything

My Questions

How do I structure this workflow properly in n8n? I need the upload to fully complete before starting conversion, but I also need to keep both the binary file data AND the JSON response data throughout the process.

Has anyone successfully implemented this type of async API pattern in n8n? Any working examples would be really helpful.

404 errors are usually about wrong request format, not timing. Double-check you’re sending the assetID in the JSON structure Adobe wants - they often nest it under keys like input or asset. Also make sure you’re hitting the right endpoint URL since Adobe has different ones for different operations. I always capture the full upload response and dig through what Adobe actually sends back - it helps debug these issues. Sometimes you need to combine the assetID with other parameters from the upload response that aren’t mentioned in their docs.

Had the same problem with Adobe PDF API last year. It’s not a timing issue - you’re handling the data flow wrong between nodes. After your upload step, use a Set node to pull out the assetID and store it as its own variable. Then reference it in other nodes with {{$node["Set"].json["assetID"]}}. Keep your binary data flowing through a separate branch and merge it back when you need it. That 404 means your assetID isn’t getting passed right to the job creation endpoint - Adobe’s servers aren’t slow. Double-check your request body in step 3 and make sure you’re sending the assetID in whatever format Adobe wants.

adobe’s upload confirmation doesn’t mean the file’s actually ready for processing. poll the asset status before you start converting - most async apis have a separate endpoint to check if the upload actually finished. try adding a loop that checks asset readiness every few seconds.