Meta Ads Make.com Troubleshooting 2026

Facebook CAPI 400 Bad Request in Make.com: The Fix (2026)

Published April 2026 Last verified October 1, 2026 By The Architect — CreatorOpsMatrix 8 min read
Quick Answer

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.

Important 2026 update

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"
  }
}
Do not stop at “400”

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.

1

Native Facebook Conversions API

Make’s current app exposes a Send Events action that sends web events to a Facebook Pixel.

2

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.

3

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.
Important distinction

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}}"
    }
  ]
}
Replace the placeholders

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.

Endpoint pattern
POST
https://graph.facebook.com/v{API_VERSION}/{PIXEL_ID}/events

Keep 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

FieldPurposeTypical website setup
dataTop-level collection of server events.Required structure
event_nameIdentifies the business action.Purchase, Lead, CompleteRegistration, etc.
event_timeWhen the actual event occurred.Unix timestamp in seconds
event_idStable event identifier used for browser/server deduplication.Use the same logical ID on both paths
action_sourceTells Meta where the conversion originated.website
event_source_urlPage where a website event occurred.Full HTTPS URL when available
user_dataCustomer and browser identifiers used for matching.Use the identifiers you actually have
custom_dataPurchase value, currency, contents and other event context.Required purchase fields where applicable
Website events

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.

DataTypical treatmentImportant rule
EmailNormalize → SHA-256Lowercase and trim whitespace before hashing.
PhoneNormalize → SHA-256Include the country calling code and normalize the digits consistently.
First / last nameNormalize → SHA-256Follow Meta’s current normalization rules.
External IDNormalize → SHA-256Use a stable advertiser-side identifier where appropriate.
Client IPRawDo not replace the IP with a SHA-256 digest.
User agentRawSend the browser user agent when legitimately available.
fbp / fbcRaw identifiersDo not SHA-256 hash these browser/click identifiers.

Email example

Normalization logic
Raw email
Jane.Doe@example.com

Normalize
jane.doe@example.com

Hash
SHA-256(normalized email)

Send
64-character hexadecimal SHA-256 value
Do not hash the wrong thing

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.

Example
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.

A

Browser Pixel

Purchase event fires in the browser with an event ID such as ORDER-10027.

B

Make.com

The payment webhook sends the same business event using the same stable event ID.

C

Meta CAPI

Meta can use the shared identifier and event information to deduplicate the two reporting paths.

A 400 and a duplicate conversion are different problems

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.

✓ Confirm the Meta connection is still authorized.
✓ Confirm the account still has access to the relevant Business Manager and Pixel.
✓ Check whether the access token was revoked, regenerated or invalidated.
✓ Check Make’s connection status and reauthorize when required.
✓ Confirm the Pixel ID belongs to the business connection you’re using.
✓ Read Meta’s actual error code rather than assuming every failure is HTTP 400.
Invalid parameter

Start with payload structure, required fields, data types, malformed JSON and incorrect parameter values.

Invalid access token

Check the Meta connection, token validity and whether the Make connection needs to be reauthorized.

Permission problem

Confirm that the connected Meta identity can access the relevant business and data source.

Pixel / source mismatch

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.

Typical success response
{
  "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.com timing

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
Do not confuse “simpler” with “more flexible”

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 inspectLikely area
It never workedRequest body and endpoint.JSON / parameters
It broke after editing the payloadCompare the last working request with the new request.Payload structure
It broke after a credential changeMeta connection and access token.Authentication
It works in Test Events but live reporting looks wrongevent_id, browser/server deduplication and event mapping.Measurement architecture
The event is accepted but matching is weakNormalized customer data, browser identifiers and event context.Event quality
Make says success but Meta doesn’t show it immediatelyProcessing delay and the relevant Events Manager view.Processing / reporting
Browser and server conversions are both countedShared event_id and consistent event_name.Deduplication

Five-minute debugging sequence

  1. Read the entire Meta response. Copy the error message and code before changing anything.
  2. Confirm the endpoint. Verify Graph API version, Pixel ID and request method.
  3. Strip the request down. Test one simple valid event before adding optional fields.
  4. Add matching data. Add hashed email, phone, fbp/fbc, custom data and event source URL as appropriate.
  5. 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.

✓ Current Meta Graph API version confirmed.
✓ Correct Pixel or data-source ID confirmed.
✓ Meta connection is authorized.
✓ event_name uses the intended Meta event name.
✓ event_time represents the actual event time.
✓ event_id is stable across browser and server paths.
✓ Customer identifiers are normalized before hashing.
✓ IP, user-agent, fbp and fbc are not incorrectly hashed.
✓ Purchase events contain the relevant value and currency.
✓ Website events include the relevant website source context.
✓ Test Event Code is removed before production.
✓ Meta response and Make execution logs are retained for debugging.

Facebook CAPI 400 Bad Request FAQ

What causes a Facebook CAPI 400 Bad Request?

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.

Does Meta require SHA-256 hashing for Facebook CAPI?

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.

Do I need to use the Make.com HTTP module?

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.

What does a successful Facebook CAPI response look like?

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.

Why did my Make.com Facebook connection suddenly stop working?

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.

What is event_id used for in Facebook CAPI?

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.

Should I send fbp and fbc?

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.

How long does Meta take to process CAPI events?

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.

Do I still need Make.com now that Meta has one-click CAPI?

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.

Can a CAPI request return 200 but still be badly implemented?

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

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.

Scroll to Top