business_management permission.POST /<BUSINESS_ID>/max_price_agreements
curl -X POST 'https://graph.facebook.com/<API_VERSION>/<BUSINESS_ID>/max_price_agreements' \ -H 'Authorization: Bearer <ACCESS_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "signer_name": "<SIGNER_NAME>", "signer_email": "<SIGNER_EMAIL>" }'
| Placeholder | Description | Example value |
|---|---|---|
<ACCESS_TOKEN>String | Required. | EAAA... |
<API_VERSION>String | Optional. Graph API version. | v25.0 |
<BUSINESS_ID>String | Required. ID of your Business Manager. | 529216684107530 |
<SIGNER_NAME>String | Required. Name of the person signing the agreement. | Jane Doe |
<SIGNER_EMAIL>String | Required. Email address where the agreement link is sent. | jane.doe@example.com |
{ "status": "pending", "signer_name": "Jane Doe", "signer_email": "jane.doe@bsp.example", "message": "Agreement email sent to jane.doe@bsp.example" }
signer_email to redirect the link.signer_name and signer_email you provide are collected solely to execute the Max Price Beta Agreement. signer_name appears on the agreement as the designated signer; signer_email is used only to deliver the acceptance link. Neither field is retained for marketing, associated with the signer’s other Meta identities, nor shared with third parties. Once the agreement is accepted, no further use is made of this information.curl -X GET 'https://graph.facebook.com/<API_VERSION>/<BUSINESS_ID>/max_price_agreements' \ -H 'Authorization: Bearer <ACCESS_TOKEN>'
{"status": "accepted", "signer_name": "Jane Doe", "signer_email": "jane.doe@bsp.example"}
{"status": "pending", "signer_name": "Jane Doe", "signer_email": "jane.doe@bsp.example"}
{"status": "none"}
status values: none, pending, accepted.curl -X POST 'https://graph.facebook.com/<API_VERSION>/<SOLUTION_PARTNER_BUSINESS_ID>/max_price_end_businesses' \ -H 'Authorization: Bearer <ACCESS_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{"end_business_ids": [<END_BUSINESS_IDS>]}'
| Placeholder | Description | Example value |
|---|---|---|
<ACCESS_TOKEN>String | Required. | EAAA... |
<API_VERSION>String | Optional. Graph API version. | v25.0 |
<SOLUTION_PARTNER_BUSINESS_ID>String | Required. ID of your Solution Partner Business Manager. | 529216684107530 |
<END_BUSINESS_IDS>Array | Required. List of end-business IDs to allowlist. Maximum 5 entries. | ["111111111", "222222222"] |
{ "results": [ {"end_business_id": "111111111", "status": "enrolled"}, {"end_business_id": "222222222", "status": "rejected", "reason": "No shared WABA"} ] }
curl -X GET 'https://graph.facebook.com/<API_VERSION>/<SOLUTION_PARTNER_BUSINESS_ID>/max_price_end_businesses' \ -H 'Authorization: Bearer <ACCESS_TOKEN>'
{ "data": [ {"end_business_id": "111111111", "enrolled_time": 1714500000} ] }
data array if no allowlist exists yet.curl -X DELETE 'https://graph.facebook.com/<API_VERSION>/<SOLUTION_PARTNER_BUSINESS_ID>/max_price_end_businesses' \ -H 'Authorization: Bearer <ACCESS_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{"end_business_ids": [<END_BUSINESS_IDS>]}'
{ "results": [ {"end_business_id": "111111111", "status": "removed"} ] }
status is removed (was present, now deleted) or not_found (was not in the allowlist). Both are non-errors.| Condition | Behavior |
|---|---|
Missing or invalid parameters | HTTP 400 with parameter validation error |
Solution Partner does not have an accepted agreement | HTTP 403 “Agreement required” |
POST agreement called within 5 minutes of last email send | HTTP 429 with retry_after |
End-business not eligible (no shared WABA, not onboarded to MM API) | HTTP 200 with per-ID {"status": "rejected", "reason": "..."} |
Allowlist already at cap of 5 | HTTP 200 with per-ID {"status": "rejected", "reason": "The allowlist has reached the maximum of 5 end-businesses."} |