WhatsApp error 100: Invalid parameter — cause and fix
WhatsApp Cloud API error 100 (Invalid parameter): an unknown, misspelled or too-long parameter. How to read details and fix the request.
WhatsApp error 100 means your Cloud API request contains a parameter Meta does not recognise, a
misspelled one, or a value over a length limit. It is usually a content error: sending the same
request again will always fail. The cause is generally spelled out in the details field; with
subcode 33, the ID you are targeting is what is wrong.
What does error 100 mean?
Meta files it under the Cloud API's "other errors":
"The request included one or more unsupported or misspelled parameters." — Meta, Cloud API error codes
Meta's suggested fix lists four checks: read the endpoint reference for the supported parameters
and their spelling; for WhatsApp Flows with an endpoint, provide a valid 2048-bit RSA public key in
PEM format; make sure the phone_number_id you register matches the one stored previously; and
stay under each type's length restrictions.
In the Graph response, message is often (#100) Invalid parameter, a generic title. The useful
information is elsewhere: Meta describes details as the field that can say "which parameter is
invalid or what values are acceptable" (same page).
When does error 100 happen?
| Situation | What Meta returns | Source |
|---|---|---|
| Unknown or misspelled parameter | (#100) Invalid parameter, with the offending parameter in details | Meta |
| Value over a length limit | Same code | Meta |
| Flows public key that is not a 2048-bit RSA key in PEM | Same code | Meta |
| Non-template message sent to the Marketing Messages API | details: "Message must be a template message." | Meta |
| Wrong phone number or account ID, or a token without access to that asset | error_subcode: 33 and "Unsupported post request. Object with ID '…' does not exist, cannot be loaded due to missing permissions, or does not support this operation", with no details | Developer reports: Activepieces, Fast2SMS |
| Sending from a number to itself | (#100) Invalid parameter, with no detail at all | Genuka observation |
| Deleting a template without rights on the WhatsApp account | (#100) Need permission on either WhatsApp Business Account or owner/shared business | Genuka observation |
The last two rows come from our own calls. For a send to oneself, Meta actually documents a
dedicated code, 131021 ("Sender and recipient phone number is the same"), but what we received
was a bare 100.
Where do you see it in Genuka WA?
Genuka WA validates much of the request before Meta, and then answers without Meta seeing anything:
| Genuka check | Response |
|---|---|
Message with no content field, media with no assetId, id or link | 400 missing_content, 400 invalid_media |
| Template with malformed components | 400 invalid_template (can be turned off with "validate": false) |
to equal to the sending number | 400 recipient_is_sender |
When the refusal comes from Meta, Genuka relays code 100 without reclassifying it: the class is
unknown, not retryable.
{
"error": "send_unknown",
"message": "…the details text, when Meta provides one…",
"meta": {
"errorClass": "unknown",
"retryable": false,
"code": 100,
"details": "…",
"traceId": "AbC…"
}
}On POST /api/v1/templates, the same refusal comes back as 422 meta_rejected with the same
meta object. The raw field of POST /api/v1/messages is never validated by Genuka: errors
come straight back from Meta (Send messages).
In a MARKETING campaign, a 100 from the Marketing Messages API makes Genuka resend the message
through the regular /messages endpoint; if that refuses it too, the recipient turns failed.
What about subcode 33?
It is not a content error. With meta.code: 100 and meta.subcode: 33, and a message starting
with "Unsupported post request" (or "get" for a read), Graph is saying the target object does not
exist, or the token has no access to it. The reported causes are a wrong phone number or WhatsApp
account ID, a token that lost access to that asset, or partner access that was removed
(Fast2SMS). With Genuka WA, read GET /api/v1/connections: a number whose status is no
longer connected belongs on the error 200 page; a number deleted on Meta's
side, on the error 33 page.
How do I fix error 100?
Read meta.details. It is the only part of the response that names the problem. Log it with
meta.traceId and the x-request-id header.
Compare the request with the reference. For sends, the API reference and Send messages list every accepted field and its limits: 4,096 characters for a text, 1,024 for an image caption, 20 for a button title, at most 3 reply buttons.
Remove what you added "just in case". A Cloud API field copied into raw but unknown to the
endpoint is enough to trigger a 100.
If details is empty, shrink the request. Send the same message stripped down (a plain text
to the same number), then add elements back one at a time. If a minimal message fails too, check
that to is not the sending number and contact Genuka support with x-request-id and
meta.traceId.
const response = await fetch("https://wa.genuka.com/api/v1/messages", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.GENUKA_WA_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ connectionId: "con_1", to: "+237690000001", text: "Your parcel is on its way." }),
});
const json = await response.json();
if (!response.ok) {
// Everything needed to diagnose, without sending the request again.
console.error({
status: response.status,
error: json.error,
metaCode: json.meta?.code,
details: json.meta?.details ?? json.message,
traceId: json.meta?.traceId,
requestId: response.headers.get("x-request-id"),
});
}How do I prevent error 100?
- Keep Genuka's validation on. On
POST /api/v1/templates, only pass"validate": falsefor a component Meta accepts and our validator refuses. - Prefer typed fields over
raw. Typed fields are checked for shape before sending (required fields, media with noidor link); length and count limits are still enforced by Meta, andrawis not checked at all. - Test each new message type on a test number before wiring it into a bulk send: a
100is the same for every recipient.
Related error codes
131008: a required parameter is missing.131009: the parameter exists, but its value is invalid.131021: sender and recipient are the same number.- 132000: the number of variables sent does not match the template.
- 33: number deleted (code 33), not to be confused with subcode 33 of code 100, which flags an object that cannot be found or accessed (deleted number or lost access).
- 200: access to the WhatsApp account was removed, or a permission is missing.
FAQ
Why is details sometimes empty?
Meta does not always fill it. Sending from a number to itself, for instance, comes back as
(#100) Invalid parameter with nothing more, which is why Genuka WA checks for it first.
Should I retry a request refused with 100?
No. The content is at fault, or the target ID with subcode 33: the same request will produce the same error. Fix it first.
What is the difference between error 100 and error 131009?
Meta describes 100 as an unsupported or misspelled parameter, and 131009 as a known parameter
whose value is invalid. Both are fixed by reading details.
Genuka WA accepted my request, so why does Meta refuse it?
Genuka checks the shape of the request; Meta also checks what only it knows, such as
endpoint-specific parameters or the state of the account. The traceId relayed in meta is what
Meta support asks for.
Sources
WhatsApp error 33: phone number deleted — cause and fix
WhatsApp Cloud API error 33: the target WhatsApp Business number was deleted, or the ID is no longer the right one. How to diagnose and reconnect.
WhatsApp error 131026: Message undeliverable — fix
WhatsApp error 131026 (Message Undeliverable): number not on WhatsApp, terms not accepted or app too old. How to diagnose it and what to do next.