Messaging

WhatsApp, SMS and in-app notifications, their templates and delivery records.

26 endpoints

POST /v3/app/message #
bearer driver_app beneficiary_app messaging.send device credential

Request body

FieldTypeConstraints
student_idstring (uuid)required
template_idstring (uuid)required
channelstringrequiredsms whatsapp push email
variablesarray | nulloptionalmax items 20
trip_idstring | nulloptional

Response

Returns { "data": … }; this endpoint's payload is not yet pinned to a named shape.

GET /v3/notification #
bearer driver_app beneficiary_app parent_app admin_web device credential

Response

Returns { "data": [NotificationRow] } with meta.next_cursor for the next page.

FieldTypeConstraints
idstring (uuid)required
kindstringrequired
titlestringrequired
bodystring | nullrequired
payloadobjectrequired
read_atstring | nullrequired
created_atstring (date-time)required
POST /v3/notification/read #
bearer driver_app beneficiary_app parent_app admin_web device credential

Request body

FieldTypeConstraints
idsstring (uuid)[]optionalmin items 1 · max items 200
allbooleanoptional

Response

Returns { "data": … }; this endpoint's payload is not yet pinned to a named shape.

GET /v3/portal/alert #
bearer admin_web device credential

Query parameters

NameTypeConstraints
trip_idstring | nulloptional
fromstring | nulloptional
tostring | nulloptional
cursorstring | nulloptionalmax length 200
per_pageinteger | nulloptionalmin 1 · max 500

Response

Returns { "data": [WebAlert] } with meta.next_cursor for the next page.

FieldTypeConstraints
idstring (uuid)required
kindstringrequired
severitystring | nullrequired
messagestring | nullrequired
detailsstring | nulloptional
trip_idstring | nullrequired
routestring | nullrequired
raised_byanyrequired
occurred_atstring (date-time)required
GET /v3/portal/message #
bearer admin_web messaging.view device credential

Query parameters

NameTypeConstraints
fromstring | nulloptional
tostring | nulloptional
qstring | nulloptionalmax length 40
channelstring | nulloptionalsms whatsapp push email
statestring | nulloptionalqueued sent delivered failed expired
cursorstring | nulloptionalmax length 200
per_pageinteger | nulloptionalmin 1 · max 500

Response

Returns { "data": [WebMessage] } with meta.next_cursor for the next page.

FieldTypeConstraints
idstring (uuid)required
channelstringrequired
to_msisdnstring | nullrequired
student_idstring | nullrequired
trip_idstring | nullrequired
bodystring | nullrequired
statestringrequired
errorstring | nullrequired
school_idstring | nullrequired
school_namestring | nullrequired
created_atstring (date-time)required
POST /v3/portal/message #
bearer admin_web messaging.send device credential

Request body

FieldTypeConstraints
kindstring | nulloptionalmessage app_invite
template_idstring | nulloptional
channelstringrequiredsms whatsapp push email
variablesarray | nulloptionalmax items 20
student_idsstring (uuid)[]optionalmax items 500
route_idstring | nulloptional
gradestring | nulloptionalmax length 32
tag_idstring | nulloptional
guardian_idsstring (uuid)[]optionalmax items 500
user_idsstring (uuid)[]optionalmax items 500

Response

Returns { "data": MessageSendResult }.

FieldTypeConstraints
studentsintegerrequired
queuedintegerrequired
GET /v3/portal/notification-settings #
bearer admin_web device credential

Response

Returns { "data": PlatformNotificationSettings }.

FieldTypeConstraints
sms_enabledbooleanrequired
whatsapp_enabledbooleanrequired
suffix_enabledbooleanrequired
suffix_textstring | nullrequired
suffix_scopestringrequired
suffix_school_idsstring (uuid)[]required
templatesobjectrequired
row_versionintegerrequired
PATCH /v3/portal/notification-settings #
bearer admin_web device credential

Request body

FieldTypeConstraints
update_maskstring[]requiredmin items 1
expected_row_versionintegerrequiredmin 1
sms_enabledboolean | nulloptional
whatsapp_enabledboolean | nulloptional
suffix_enabledboolean | nulloptional
suffix_textstring | nulloptionalmax length 160
suffix_scopestring | nulloptionalall selected
suffix_school_idsstring (uuid)[]optional
templatesarray[]optional

Response

Returns { "data": PlatformNotificationSettings }.

FieldTypeConstraints
sms_enabledbooleanrequired
whatsapp_enabledbooleanrequired
suffix_enabledbooleanrequired
suffix_textstring | nullrequired
suffix_scopestringrequired
suffix_school_idsstring (uuid)[]required
templatesobjectrequired
row_versionintegerrequired
GET /v3/portal/setting/whatsapp-menu #
bearer admin_web device credential

Response

Returns { "data": … }; this endpoint's payload is not yet pinned to a named shape.

PUT /v3/portal/setting/whatsapp-menu #
bearer admin_web settings.manage device credential

Request body

FieldTypeConstraints
hidden_actionsstring[]optionalmax items 50

Response

Returns { "data": … }; this endpoint's payload is not yet pinned to a named shape.

GET /v3/portal/survey #
bearer admin_web device credential

Response

Returns { "data": [WebSurvey] } with meta.next_cursor for the next page.

FieldTypeConstraints
idstring (uuid)required
namestringrequired
statusstringrequired
template_namestringrequired
template_languagestringrequired
closing_messagestring | nullrequired
sentintegerrequired
completedintegerrequired
created_atstring (date-time)required
updated_atstring (date-time)required
POST /v3/portal/survey #
bearer admin_web device credential

Request body

FieldTypeConstraints
namestringrequiredmax length 120
template_namestringrequiredmax length 120
template_languagestring | nulloptionalmax length 10
closing_messagestring | nulloptionalmax length 1024
questionsobject[]requiredmin items 1 · max items 20

Response

Returns { "data": WebSurveyDetail }.

FieldTypeConstraints
idstring (uuid)required
namestringrequired
statusstringrequired
template_namestringrequired
template_languagestringrequired
closing_messagestring | nullrequired
sentintegerrequired
completedintegerrequired
created_atstring (date-time)required
updated_atstring (date-time)required
questionsWebSurveyQuestion[]optional
GET /v3/portal/survey/template #
bearer admin_web device credential

Response

Returns { "data": [WabaTemplate] } with meta.next_cursor for the next page.

FieldTypeConstraints
namestringrequired
languagestringrequired
statusstringrequired
categorystringrequired
bodystring | nullrequired
buttonsstring[]required
POST /v3/portal/survey/template #
bearer admin_web device credential

Request body

FieldTypeConstraints
namestringrequiredmax length 120
languagestring | nulloptionalmax length 10
bodystringrequiredmax length 1024
buttonsstring[]optionalmax items 3
example_paramsstring[]optionalmax items 5

Response

Returns { "data": WabaTemplate }.

FieldTypeConstraints
namestringrequired
languagestringrequired
statusstringrequired
categorystringrequired
bodystring | nullrequired
buttonsstring[]required
PATCH /v3/portal/survey/{id} #
bearer admin_web device credential

Edits are draft-only for the wording that Meta approved: an active survey's template is already live with parents, and a mid-flight change would make two parents' answers mean different things.

Path parameters

NameTypeNotes
idstring

Request body

FieldTypeConstraints
namestringoptionalmax length 120
statusstringoptionaldraft active archived
closing_messagestring | nulloptionalmax length 1024

Response

Returns { "data": WebSurveyDetail }.

FieldTypeConstraints
idstring (uuid)required
namestringrequired
statusstringrequired
template_namestringrequired
template_languagestringrequired
closing_messagestring | nullrequired
sentintegerrequired
completedintegerrequired
created_atstring (date-time)required
updated_atstring (date-time)required
questionsWebSurveyQuestion[]optional
GET /v3/portal/survey/{id}/response #
bearer admin_web device credential

The review screen (PS-5): one row per parent, with their answers.

Path parameters

NameTypeNotes
idstring

Response

Returns { "data": [WebSurveyResponseRow] } with meta.next_cursor for the next page.

FieldTypeConstraints
idstring (uuid)required
phonestringrequired
statestringrequired
started_atstring | nullrequired
completed_atstring | nullrequired
answersobject[]required
POST /v3/portal/survey/{id}/send #
bearer admin_web device credential

The trigger Faith asked for: name the school, pick the audience, send now.

Path parameters

NameTypeNotes
idstring

Request body

FieldTypeConstraints
school_idstring (uuid)required
audiencestringrequiredall accounts
account_idsstring (uuid)[]optionalmin items 1 · max items 2000

Response

Returns { "data": WebSurveyRun }.

FieldTypeConstraints
idstring (uuid)required
survey_idstring (uuid)required
school_idstring | nullrequired
audiencestringrequired
recipientsintegerrequired
created_atstring (date-time)required
GET /v3/portal/survey/{id}/summary #
bearer admin_web device credential

Per-question tallies — what the pilot report reads (PS-5).

Path parameters

NameTypeNotes
idstring

Response

Returns { "data": WebSurveySummary }.

FieldTypeConstraints
sentintegerrequired
completedintegerrequired
questionsobject[]required
GET /v3/portal/template #
bearer admin_web device credential

Response

Returns { "data": [WebTemplate] } with meta.next_cursor for the next page.

FieldTypeConstraints
idstring (uuid)required
namestringrequired
channelstringrequired
localestring | nullrequired
subjectstring | nullrequired
bodystringrequired
provider_templatestring | nullrequired
is_activebooleanrequired
is_platformbooleanrequired
POST /v3/portal/template #
bearer admin_web messaging.template_manage device credential

Request body

FieldTypeConstraints
namestringrequiredmax length 120
channelstringrequiredsms whatsapp push email
localestring | nulloptionalmax length 10
subjectstring | nulloptionalmax length 200
bodystringrequiredmax length 2000
provider_templatestring | nulloptionalmax length 120
is_activeboolean | nulloptional

Response

Returns { "data": WebTemplate }.

FieldTypeConstraints
idstring (uuid)required
namestringrequired
channelstringrequired
localestring | nullrequired
subjectstring | nullrequired
bodystringrequired
provider_templatestring | nullrequired
is_activebooleanrequired
is_platformbooleanrequired
DELETE /v3/portal/template/{id} #
bearer admin_web messaging.template_manage device credential

Path parameters

NameTypeNotes
idstring

Response

Returns { "data": … }; this endpoint's payload is not yet pinned to a named shape.

PATCH /v3/portal/template/{id} #
bearer admin_web messaging.template_manage device credential

Path parameters

NameTypeNotes
idstring

Request body

FieldTypeConstraints
update_maskstring[]requiredmin items 1 · max items 7
namestring | nulloptionalmax length 120
channelstring | nulloptionalsms whatsapp push email
localestring | nulloptionalmax length 10
subjectstring | nulloptionalmax length 200
bodystring | nulloptionalmax length 2000
provider_templatestring | nulloptionalmax length 120
is_activeboolean | nulloptional

Response

Returns { "data": WebTemplate }.

FieldTypeConstraints
idstring (uuid)required
namestringrequired
channelstringrequired
localestring | nullrequired
subjectstring | nullrequired
bodystringrequired
provider_templatestring | nullrequired
is_activebooleanrequired
is_platformbooleanrequired
POST /v3/webhook/sms/{provider} #
public 300,1

Path parameters

NameTypeNotes
providerstring

Response

Returns { "data": … }; this endpoint's payload is not yet pinned to a named shape.

GET /v3/webhook/whatsapp #
public 120,1

Meta webhook subscription handshake: echo hub.challenge when the caller presents the configured verify token. PHP maps the dotted query keys (hub.mode) to underscores.

Response

Returns { "data": … }; this endpoint's payload is not yet pinned to a named shape.

POST /v3/webhook/whatsapp #
public 120,1

Response

Returns { "data": … }; this endpoint's payload is not yet pinned to a named shape.

POST /v3/webhook/whatsapp/flow #
public 300,1

Response

Returns { "data": … }; this endpoint's payload is not yet pinned to a named shape.