Facebook CAPI 400 Bad Request in Make.com: The Fix (2026)
A Facebook CAPI 400 Bad Request means Meta rejected the request before it could be accepted as a valid Conversions API event. In a Make.com setup, start with the request structure, authentication, required event fields, timestamp, and customer-data formatting instead of changing random fields one at a time.
The most useful debugging sequence is: inspect the complete Meta error response → validate the JSON → verify the Pixel and access token → validate event fields → verify user-data hashing and IDs → send a Test Event.
Meta introduced a Meta-enabled one-click Conversions API setup for web events in April 2026. It is intended to make basic web CAPI deployment easier for eligible advertisers.
That does not make Make.com obsolete. A custom Make scenario is still useful when you need to take events from a payment processor, CRM, webhook, database or multiple systems, apply business rules, enrich data, or route the same event into several destinations.
Meta’s Conversions API is strict enough that debugging by trial and error is usually slower than reading the actual response body and checking the request against Meta’s event schema.
A HTTP 400 is a client-side request problem: the request reached Meta, but something about the parameters, structure or values did not satisfy the endpoint’s validation rules.
That is different from an authentication failure, a permissions problem, a rate limit, or a successful request whose event simply has poor matching quality. The status code tells you where to start; the Meta error object tells you what to investigate next.
1. What a Facebook CAPI 400 Bad Request Actually Means
The first mistake is treating every Meta API failure as a payload-formatting problem. A Make.com scenario can fail because the request body is invalid, but it can also fail because the token is invalid, the connection no longer has the required permissions, the Pixel is inaccessible, or a required parameter is missing.
That is why the first debugging action should always be to inspect the complete response,
including the message, type, code,
error_subcode and trace/request identifiers when they are returned.
{
"error": {
"message": "Invalid parameter",
"type": "OAuthException",
"code": 100,
"error_subcode": 0,
"is_transient": false,
"error_user_title": "Invalid parameter",
"error_user_msg": "Check the parameters in the request"
}
}A 400 tells you that the request was rejected. The useful information is the specific Meta message and error code. For example, invalid parameters point you toward the payload; an access-token error points you toward authorization.
2. Native Make.com Module vs HTTP Module
There are two legitimate ways to build a Meta Conversions API scenario in Make.com. The correct debugging approach depends on which one you are using.
Native Facebook Conversions API
Make’s current app exposes a Send Events action that sends web events to a Facebook Pixel.
Make processes the event
Data is mapped into the Make module, with fields such as event data, source URL, Test Event Code and limited-data-use settings.
Meta receives the event
Meta validates the request, accepts or rejects it, and then processes the event for measurement, attribution and delivery systems.
When the native Make module is the right choice
- You want the shortest no-code path.
- Your event structure fits Make’s Facebook Conversions API fields.
- You do not need unusual API parameters or custom request transformations.
- You want Make to manage the Meta connection rather than manually constructing the endpoint.
When the HTTP module is useful
- You need a custom request body.
- You are combining data from several systems.
- You need custom business logic before the event is sent.
- You want direct control over the Graph API request and response.
- You are debugging the exact JSON Meta receives.
Do not blindly copy an HTTP-module tutorial into Make’s native Facebook Conversions API module. The native connector and a raw Graph API request expose different layers of the implementation.
3. The Correct Meta Conversions API Payload
For a direct Graph API request, Meta’s standard structure is a top-level
data array containing one or more server-event objects.
For a website Purchase event, the event normally includes the event name, actual event
timestamp, user data, custom data, website action source and event source URL.
A stable event_id should also be used when you are coordinating the browser
Pixel and server event.
{
"data": [
{
"event_name": "Purchase",
"event_time": {{UNIX_EVENT_TIME}},
"event_id": "{{STABLE_EVENT_ID}}",
"user_data": {
"em": [
"{{SHA256_NORMALIZED_EMAIL}}"
],
"ph": [
"{{SHA256_NORMALIZED_PHONE}}"
],
"client_ip_address": "{{CLIENT_IP}}",
"client_user_agent": "{{CLIENT_USER_AGENT}}",
"fbp": "{{FBP_IF_AVAILABLE}}",
"fbc": "{{FBC_IF_AVAILABLE}}"
},
"custom_data": {
"currency": "USD",
"value": 142.52,
"content_ids": [
"PRODUCT-123"
],
"content_type": "product"
},
"action_source": "website",
"event_source_url": "{{EVENT_SOURCE_URL}}"
}
]
}The double-brace placeholders above are intentionally generic. Replace them with your actual Make.com mappings. Do not paste the example placeholders into production.
The important point is the shape of the request: the event is inside
data, customer identifiers live under user_data, purchase
information lives under custom_data, and the website context is explicitly
identified.
Graph API endpoint
If you are using Make’s HTTP module, use the current Graph API version documented by Meta at deployment time rather than hardcoding an old version into an evergreen article.
POST
https://graph.facebook.com/v{API_VERSION}/{PIXEL_ID}/eventsKeep the access token out of your public website code. Store it in the protected Make connection or other secure secret mechanism available to your infrastructure.
4. The Fields That Matter Most
| Field | Purpose | Typical website setup |
|---|---|---|
| data | Top-level collection of server events. | Required structure |
| event_name | Identifies the business action. | Purchase, Lead, CompleteRegistration, etc. |
| event_time | When the actual event occurred. | Unix timestamp in seconds |
| event_id | Stable event identifier used for browser/server deduplication. | Use the same logical ID on both paths |
| action_source | Tells Meta where the conversion originated. | website |
| event_source_url | Page where a website event occurred. | Full HTTPS URL when available |
| user_data | Customer and browser identifiers used for matching. | Use the identifiers you actually have |
| custom_data | Purchase value, currency, contents and other event context. | Required purchase fields where applicable |
Meta’s official sample specifically shows website events using
action_source: website, an event source URL and browser context such as
the user agent. Include the contextual fields you legitimately have rather than
inventing them.
Purchase events need purchase data
For a Purchase event, include the relevant monetary information such as
value and currency. If you also know the product IDs,
content type or contents, send those as appropriate to your implementation.
5. SHA-256 Hashing and Normalization
This is one of the most common places where a technically valid event becomes a poor matching event.
For direct HTTP implementations, customer identifiers that Meta expects hashed should be normalized first and then SHA-256 hashed. Browser context such as IP address and user agent is not treated like email or phone and should not be replaced with a hash.
| Data | Typical treatment | Important rule |
|---|---|---|
| Normalize → SHA-256 | Lowercase and trim whitespace before hashing. | |
| Phone | Normalize → SHA-256 | Include the country calling code and normalize the digits consistently. |
| First / last name | Normalize → SHA-256 | Follow Meta’s current normalization rules. |
| External ID | Normalize → SHA-256 | Use a stable advertiser-side identifier where appropriate. |
| Client IP | Raw | Do not replace the IP with a SHA-256 digest. |
| User agent | Raw | Send the browser user agent when legitimately available. |
| fbp / fbc | Raw identifiers | Do not SHA-256 hash these browser/click identifiers. |
Email example
Raw email Jane.Doe@example.com Normalize jane.doe@example.com Hash SHA-256(normalized email) Send 64-character hexadecimal SHA-256 value
Hashing Jane.Doe@example.com and hashing
jane.doe@example.com produce different hashes.
Normalization must happen before the SHA-256 operation.
Phone normalization
Phone numbers should be converted into a consistent international representation, normally including the country calling code, before hashing.
Raw +1 (415) 555-2671 Normalized 14155552671 Then SHA-256(normalized phone)
Do not copy Google Ads normalization rules word-for-word into Meta CAPI. They are separate platforms with separate specifications.
6. event_id: The Part That Stops Pixel + CAPI Double Counting
A correct 400 fix can still leave you with broken measurement if the same conversion is sent from both the browser Pixel and server-side CAPI without a consistent deduplication strategy.
Use a stable event_id for the same customer action. The browser event and
server event should use the same logical event identifier and matching event name so Meta
can recognize them as the same conversion.
Browser Pixel
Purchase event fires in the browser with an event ID such as
ORDER-10027.
Make.com
The payment webhook sends the same business event using the same stable event ID.
Meta CAPI
Meta can use the shared identifier and event information to deduplicate the two reporting paths.
A payload can return HTTP 200 and still produce incorrect reporting because the same conversion was counted twice. Treat request validation and deduplication as separate QA checks.
7. Access Tokens, Permissions and Reauthorization
Not every failed Make scenario is a payload problem. If your request used to work and suddenly stopped, check the connection before rebuilding the JSON.
Start with payload structure, required fields, data types, malformed JSON and incorrect parameter values.
Check the Meta connection, token validity and whether the Make connection needs to be reauthorized.
Confirm that the connected Meta identity can access the relevant business and data source.
Verify the Pixel ID and the Business Manager account associated with the Make connection.
Make’s current troubleshooting documentation specifically lists missing permissions and expired access-token/session problems as cases where you should restore permissions and reauthorize the connection.
8. Test the Event Before Touching Production
The fastest route out of a CAPI debugging loop is to stop using real conversions as test cases.
Step 1 — Use Meta’s Test Events area
Open your data source in Meta Events Manager and use the server-side Test Events workflow.
Meta provides a test_event_code that can be attached to the request for
testing.
Step 2 — Send one event
Send one simple event first. Do not start with a complicated Purchase payload containing dozens of custom parameters.
Step 3 — Confirm the request is accepted
A successful CAPI request is commonly returned with a response containing an
events_received count, a messages array and an
fbtrace_id.
{
"events_received": 1,
"messages": [],
"fbtrace_id": "ABC123..."
}Step 4 — Remove the test code for production
Once the test has been confirmed, remove the test-only parameter before switching the scenario to normal production traffic.
Make’s current Facebook Conversions API documentation recommends sending events promptly and notes that Facebook may take up to about 20 minutes to process the data. A successful Make execution therefore does not necessarily mean the event will appear in every Meta reporting view instantly.
9. Do You Actually Need Make.com for Facebook CAPI?
This is an important 2026 question. Meta now offers a simplified one-click web Conversions API setup for eligible advertisers.
Meta’s simpler setup may be enough
Use the Meta-enabled setup when you have a straightforward web implementation, want minimal technical maintenance and do not need custom routing or business logic.
Make.com remains useful for custom pipelines
Use Make when a Stripe payment, CRM update, form submission, database event or multiple systems need to be transformed and routed before reaching Meta.
Make is particularly useful when you need:
- CRM → Meta conversion pipelines
- Stripe / payment → Meta Purchase events
- Webhook → enrichment → CAPI routing
- Meta + Google Ads + TikTok or other destinations from one event
- Custom filtering, branching and transformation logic
- Logging and retry workflows around failed events
Meta’s one-click setup reduces the technical barrier for basic web CAPI deployment. It does not replace every custom server-side workflow an operator may need.
10. Facebook CAPI 400 Error Troubleshooting Matrix
| What changed? | First thing to inspect | Likely area |
|---|---|---|
| It never worked | Request body and endpoint. | JSON / parameters |
| It broke after editing the payload | Compare the last working request with the new request. | Payload structure |
| It broke after a credential change | Meta connection and access token. | Authentication |
| It works in Test Events but live reporting looks wrong | event_id, browser/server deduplication and event mapping. | Measurement architecture |
| The event is accepted but matching is weak | Normalized customer data, browser identifiers and event context. | Event quality |
| Make says success but Meta doesn’t show it immediately | Processing delay and the relevant Events Manager view. | Processing / reporting |
| Browser and server conversions are both counted | Shared event_id and consistent event_name. | Deduplication |
Five-minute debugging sequence
- Read the entire Meta response. Copy the error message and code before changing anything.
- Confirm the endpoint. Verify Graph API version, Pixel ID and request method.
- Strip the request down. Test one simple valid event before adding optional fields.
- Add matching data. Add hashed email, phone, fbp/fbc, custom data and event source URL as appropriate.
- Add deduplication last. Confirm the browser and server paths share the correct event ID.
11. Production Checklist
Use this as the final QA pass before moving a Make.com CAPI scenario from testing into production.
Facebook CAPI 400 Bad Request FAQ
Usually an invalid or incomplete request: malformed JSON, incorrect parameter values, missing required context, an invalid identifier, or another validation failure returned by Meta. Start with the complete error response instead of assuming every 400 has the same cause.
Customer identifiers such as email and phone are normalized and SHA-256 hashed when sent through a direct CAPI implementation. Other fields, including client IP, user agent and browser click/cookie identifiers, are handled differently and should not simply be replaced with hashes.
No. Make currently provides a native Facebook Conversions API app with a Send Events action. The HTTP module is most useful when you need direct control over the Graph API request, custom transformations or routing logic.
A successful response commonly includes an events_received count, a messages array and an fbtrace_id. A successful HTTP response means Meta accepted the request; it does not by itself prove that your attribution architecture is correct.
Check the Meta connection, permissions and access token before rebuilding the payload. Make’s current troubleshooting documentation specifically recommends reauthorizing the connection for permission and access-token/session problems.
event_id provides the stable identifier needed to coordinate browser and server reporting for the same customer action. Using a consistent event ID and event name helps Meta recognize corresponding Pixel and CAPI events for deduplication.
Send them when they are legitimately available from your browser or attribution pipeline. They are useful event-matching identifiers and should be passed in their expected raw format rather than SHA-256 hashing them.
Make’s current Facebook Conversions API documentation says the data may take up to about 20 minutes to be processed. Treat the API response and downstream Ads Manager reporting as separate stages of the pipeline.
Not necessarily for a basic web setup. Meta introduced a one-click web Conversions API option in 2026. Make becomes more valuable when you need custom webhook inputs, CRM or payment integrations, transformation logic, branching, logging or multiple destinations.
Yes. HTTP acceptance is not the same as high-quality attribution. Your implementation can still have weak identity matching, missing browser identifiers, poor event context, duplicate browser/server events or incorrect business data after the request itself validates successfully.
Official Meta & Make.com References
This troubleshooting page deliberately links readers to the primary documentation instead of relying only on third-party tutorials.
- Meta — Conversions API parameters
- Meta samples — online Conversions API request/response examples
- Meta — Conversions API Tag for Google Tag Manager
- Make — Facebook Conversions API
- Make — Facebook Conversions API troubleshooting
- Meta — 2026 Conversions API simplification announcement
- Meta — Conversions API documentation
Related CreatorOpsMatrix Guides
Building a larger server-side attribution workflow?
The CAPI request is only one layer. A production attribution system also needs reliable webhook capture, stable event IDs, deduplication, normalization, retries, logging and routing to the other platforms in your stack.
Explore the No-Code Automation Blueprint →Affiliate Disclosure: CreatorOpsMatrix may earn a commission from some software links on this page. Affiliate relationships do not determine the technical requirements documented here.
Technical note: Meta’s Graph API versions, Conversions API requirements and Make.com modules can change. This page was re-verified October 1, 2026. Always compare the production implementation against Meta’s current parameter reference and Make.com’s current connector documentation before deploying.