Matrix Support Doc

Fix the Facebook CAPI 400 Bad Request Make.com Error

This guide shows how to instantly fix the Facebook CAPI 400 Bad Request Make.com integration error, including resolving invalid parameter issues, payload formatting mistakes, and server-side tracking failures.

If you’re getting a Facebook CAPI 400 Bad Request Make.com error while sending events to the Conversions API, your JSON payload is invalid. This usually happens due to incorrect formatting, missing required fields, or improper hashing of user data.

This Guide Is For:

  • Media buyers scaling server-side events
  • Agency owners troubleshooting broken tracking
  • Operators building Make.com data pipelines

Meta’s Conversions API strictly validates every single request, which is why even a tiny formatting mistake triggers an immediate failure when building a server-side tracking system.

Here is the exact fix.

Why You Get a Facebook CAPI 400 Bad Request Make.com Error

If you check your HTTP module output, you are likely seeing this exact error response from the Meta Graph API endpoint:

{
  "error": {
    "message": "Invalid parameter",
    "type": "OAuthException",
    "code": 100,
    "error_subcode": 2804019,
    "is_transient": false,
    "error_user_title": "Missing required parameter",
    "error_user_msg": "A required parameter is missing from your request."
  }
}

This happens because Facebook’s server could not parse your data. The most common triggers are:

  • Invalid JSON structure: Missing the mandatory data array wrapper.
  • Unhashed PII: Sending raw emails instead of SHA-256 formatted hashes.
  • Wrong event_time format: Sending standard dates instead of a UNIX timestamp.
💳
Stripe Webhook
Raw Payment Data
⚙️
Make.com Engine
Format & Hash JSON
🎯
Meta CAPI
200 OK Response

Before (Fails):

  • Missing data array
  • Plain text email sent to Meta
  • Date mapped as “MM/DD/YYYY”

After (200 OK):

  • Valid JSON payload wrapper
  • SHA-256 hashed user data
  • Accurate UNIX timestamp

The Quick Fix (Valid JSON Payload)

Copy and paste this exact structure into your Make.com HTTP module’s “Request content” field. You must wrap your event inside the data array.

{
  "data": [
    {
      "event_name": "Purchase",
      "event_time": {{timestamp}},
      "action_source": "website",
      "user_data": {
        "em": ["{{sha256(email)}}"],
        "ph": ["{{sha256(phone)}}"],
        "client_ip_address": "{{ip_address}}",
        "client_user_agent": "{{user_agent}}"
      },
      "custom_data": {
        "currency": "USD",
        "value": {{purchase_value}}
      }
    }
  ]
}

Step-by-Step Fix (Make.com Context)

Step 1: Check Your HTTP Module

Ensure your Make.com “Make an API Key Auth request” or standard HTTP module is set up exactly like this:

  • URL: https://graph.facebook.com/v19.0/{{YOUR_PIXEL_ID}}/events
  • Method: POST
  • Headers: Add a header with Key: Content-Type and Value: application/json

Step 2: Fix Payload Mapping

Inside the JSON structure, you cannot pass a raw email address. You must use Make.com’s native hashing functions. Map your Stripe or CRM email pill inside this exact formula: lower(sha256(email)). The same rule applies to the phone number field.

Step 3: Validate Your Data

The event_time must be a UNIX timestamp (seconds since the epoch). If your trigger app sends a standard date format, use Make.com’s formatDate(now; X) function to convert it to a UNIX string.

Common Mistakes Checklist

Before running your scenario again, verify you haven’t made these typical operator errors:

  • Sending a plain text email instead of a hashed string.
  • Forgetting to wrap the em and ph values in brackets. They must be arrays: "em": ["hash"].
  • Omitting the action_source parameter (Meta requires this to attribute the event location).
  • Using a comma after the last item in a JSON object.

How to Test the Payload

Do not test blindly. Open your Meta Events Manager, click on your Pixel, and open the Test Events tab. Copy your unique test_event_code.

Add this code to your JSON payload right beneath the action_source line like this: "test_event_code": "TEST81014",. Run the Make.com module. You can also verify your JSON structure using the official Meta Payload Helper.

If the payload is correct, you will get a 200 OK status code, completely resolving the Facebook CAPI 400 Bad Request Make.com integration issue.

Frequently Asked Questions

What causes a Facebook CAPI 400 Bad Request Make.com error?

A Facebook CAPI 400 Bad Request Make.com error is almost always caused by an improperly formatted JSON payload. This includes missing the required ‘data’ array wrapper, sending unhashed PII (like plain text emails), or providing an invalid UNIX timestamp.

Does Facebook require hashed data for CAPI?

Yes. All Personally Identifiable Information (PII) such as email (’em’) and phone number (‘ph’) must be normalized and hashed using SHA-256 before being sent to the Meta API, otherwise the request will be rejected.

Can Make.com handle Facebook CAPI events reliably?

Yes. Make.com is highly reliable for server-side tracking. By using the standard HTTP ‘Make a Request’ module and formatting the JSON correctly, Make.com can replace expensive dedicated tracking software entirely.

What is a valid Facebook CAPI response?

A valid Facebook CAPI response returns an HTTP 200 OK status code, along with a JSON payload containing the ‘events_received’ metric, confirming Meta has successfully ingested your server-side data.

Don’t Build This From Scratch

Most operators quit at this exact step—this is where DIY tracking systems usually fail.

This error is just one piece of the system. The full pipeline includes webhook capture, event matching, and attribution logic.

Get the Complete Make.com Attribution Blueprint →

Scroll to Top