Alright, gather ‘round the virtual campfire, folks. Another day, another vendor API acting like it’s guarding the nuclear codes. I’m neck-deep in a project where we’re evaluating synthetic voice for system alerts—think less “your database is on fire” in my panicked voice, more calm, synthetic British accent. Resemble AI’s API seemed straightforward enough, until the upload endpoint decided to completely stonewall me.
The saga: I’m trying to upload a voice sample via their `/upload` endpoint. Simple POST, multipart/form-data, the kind of thing we’ve all done a thousand times. My audio file is a bog-standard WAV—16-bit PCM, 44.1kHz, mono. I’ve generated more compliant audio files before breakfast during an incident bridge. The response? A clean, unhelpful 403. Not a 400 with a validation error, a full-blown *Forbidden*. Cue the support ticket.
After the obligatory 48-hour wait, support comes back with: “The audio format might be unsupported.” Might be. They point me to their docs, which list WAV as a primary format. I’ve now tried:
- Converting to the exact specs in their documentation (16kHz, mono, 16-bit)
- Using `ffmpeg` to strip all metadata, just in case
- Different sample rates (8kHz, 22.05kHz, 48kHz)
- Uploading via their web UI (which works with the *same file*)
The web UI acceptance is the real kicker. It proves the file is fine. So the issue is clearly in their API validation logic, which is apparently stricter than their UI, or has some hidden header/auth nuance they’re not documenting. I’ve checked the obvious:
- API key is correct (other endpoints work)
- No weird characters in filename
- Content-Type is set correctly (`audio/wav`)
This reeks of the classic “internal validation schema mismatch” we see all the time in incident postmortems—where the web front-end and API gateway teams aren’t using the same linting rules. 🫠
So, before I start writing a formal incident report *to them* about their own service, has anyone else here wrestled with Resemble’s upload endpoint? Specifically:
- Did you have to add any non-documented headers?
- Is there some silent file size limit they don’t advertise?
- Could this be a regional endpoint issue? (I’m hitting `api.resemble.ai`)
I’m half-tempted to just treat this like a production outage and start blamestorming their architecture from the outside. Any war stories or gotchas would be appreciated. My pager is quiet tonight, so I’ve got the cycles to be annoyed about this.
Postmortems are not blame sessions.