Messenger Platform · error code

Messenger error 100: Upload attachment failure

ConfigurationHTTP 400Media & attachments

Last verified against Meta for Developers - Messenger Platform error codes

What Messenger returns
Upload attachment failure. A common way to trigger this error is that the provided media type does not match type of file provided int the URL.

What error 100 means

Code 100 with subcode 2018047 is the attachment-processing failure, and Meta's error-codes table names the most common trigger in the message itself: "the provided media type does not match type of file provided in the URL." Send API attachments declare a type, image, audio, video or file, and the platform verifies the declaration against what it actually downloads. Declare image and serve an MP4, or declare video and serve a URL whose response is HTML, and the upload is rejected.

Mismatches sneak in through infrastructure more often than through code. URLs without file extensions that your code classifies by guesswork; CDNs that respond with a generic application/octet-stream; image proxies that transcode JPEG requests to WebP; signed URLs that expire between classification and Meta's fetch, turning the response into an XML error document. The declared type is also how the message renders, an audio file sent as file loses its player, so the type must be right, not merely accepted.

Unsupported or exotic formats fail here too: formats outside Messenger's renderable set are best sent as file, and images with unusual encodings (CMYK JPEGs, animated WebP) are safer transcoded to the mainstream (JPEG, PNG, GIF, MP4) before sending. Its neighbors bound the rest of the media story: 2018008 when the fetch fails outright, 2018109 when the file is too big, 2018294 when video fetching times out.

What it looks like

{
  "error": {
    "message": "(#100) Upload attachment failure.",
    "type": "OAuthException",
    "code": 100,
    "error_subcode": 2018047,
    "fbtrace_id": "BLBz/WZt8dN"
  }
}

Why it happens

  • attachment.type not matching the actual file behind the URL (image declared, video served, etc.).
  • Asset hosts returning wrong or generic Content-Type headers.
  • Image proxies or CDNs transcoding formats on the fly (JPEG requested, WebP served).
  • Expired signed URLs serving XML/HTML error bodies at fetch time.
  • Unsupported codecs or container formats declared as renderable media types.

How to fix Messenger error 100

  1. 1curl the URL and inspect Content-Type and the leading bytes; make the declared type match reality.
  2. 2Fix the asset host to serve correct Content-Type headers for each format.
  3. 3Disable on-the-fly format negotiation for URLs handed to Meta, pin the format.
  4. 4Use long-lived URLs (or the Attachment Upload API) so expiry cannot race the fetch.
  5. 5Transcode exotic formats to JPEG/PNG/GIF/MP4/MP3 before sending; use type file for everything else.

How to stop it recurring

Derive attachment.type from the file's verified MIME type, not its extension or the caller's claim, one shared classifier used by every send path. Standardize bot media on the mainstream formats at upload time, and prefer reusable attachment_ids for anything sent more than once. The supported types and size caps are tabulated in the Messenger limits reference, and media troubleshooting has a section in the Messenger guide.

Official reference: Meta for Developers - Messenger Platform error codes. See all Messenger error codes or the Messenger limits and quotas.

Related codes

Error 100 - quick answers

What does Messenger error 100 mean?

Code 100 with subcode 2018047 is the attachment-processing failure, and Meta's error-codes table names the most common trigger in the message itself: "the provided media type does not match type of file provided in the URL." Send API attachments declare a type , image , audio , video or file , and the platform verifies the declaration against what it actually downloads.

How do I fix Messenger error 100?

1. curl the URL and inspect Content-Type and the leading bytes; make the declared type match reality. 2. Fix the asset host to serve correct Content-Type headers for each format. 3. Disable on-the-fly format negotiation for URLs handed to Meta, pin the format. 4. Use long-lived URLs (or the Attachment Upload API) so expiry cannot race the fetch. 5. Transcode exotic formats to JPEG/PNG/GIF/MP4/MP3 before sending; use type file for everything else.

Stop debugging Messenger by hand

Connect the channel through Conferbot: tokens, webhooks and retries are handled, failures show as readable status.