Webhooks
In addition to pre-build connectors with most popular association platforms, PropFuel offers webhooks that allow you to sync contacts from an external system with your PropFuel as well as write data back to any system or integration platform of your choice.
The webhoook connector can be installed by navigating to Settings -> Advanced -> Connectors in your PropFuel admin and selecting "Webhook" from the list of available connectors.
Contact Sync
Contact sync is done by making a JSON POST call to a URL that will be provided to you in your connector settings. Detailed instructions and keys are located in the PropFuel admin.
You can send one or more contacts in your webhook payload, up to 1000 in one request. The JSON object you send can contain any combination of keys, you will specify what keys to use to store data in PropFuel custom fields by configuring a field mapping on your webhook connector.
Authentication
In order to use the webhook, you should authenticate your request by including the bearer token value:
Authorization: Bearer YUHlahEf4ooLDLfCXNqiTZVFCxgNzKht
Headers
Make sure you have the following content type header set on every request:
Content-Type: application/json
Request
You will make an HTTP POST
request to the following URI:
https://webhook.com/webhook/connector/XXX/contacts
Payload
You may send a single contact as your payload:
{
"id": "9499a5a2-8bac-33b5-b8f2-ebbd8daa0cce",
"name": "dolor quo eaque",
"email": "clara.hauck@example.com"
}
You may also send an array of contacts as your payload:
Note: Limit of 1000 contacts per HTTP request.
[
{
"id": "f4f66530-fbf1-32e2-b628-208415ad6ca5",
"name": "incidunt ea quae",
"email": "selmer.legros@example.net"
},
{
"id": "58101544-d736-3a46-9872-ff231d5597cc",
"name": "consequuntur neque vel",
"email": "nicolas.theodora@example.com"
}
]
Fire Webhook Action
As part of your campaign configuration, you can setup workflows that calls a specified webhook endpoint when someone answers a question. This is useful for tying PropFuel together with other workflow tools such as Zapier, or for creating your own webhook endpoint that captures and processes the PropFuel webhook calls.
Options
URL: The full url of the endpoint you would like to call
HTTP Method: GET or POST
Headers: An array of optional headers you would like to send with your request. This is useful for implementing authentication on your calls using an API key
Payload
The payload of the webhook call will contain an object representing the question that was answered by the contact.
Key fields include
rating - This will be filled if the question contains a ratable response (1-5, 1-10 or NPS)
selection - This will be filled if the question contains a multiple choice selection (single select)
response - This will be filled if there is a free text response
answered_at - Timestamp when the question was answered
There are also a few useful related objects contained in the response
contact - Details for the contact who answered the question
question - Details on the question that was asked
campaign - Details on the PropFuel campaign the question was asked in
Sample Payload
{
"id": 3,
"org_id": 10,
"question_type": "survey",
"response_type": "yesno",
"answered": true,
"answered_anon": false,
"answered_at": "2023-11-30T20:55:12+00:00",
"rating": null,
"selection": "Yes",
"response": "Please call me",
"moderated": false,
"calc_sentiment": "Neutral",
"created_at": "2023-11-30T20:55:03+00:00",
"updated_at": "2023-11-30T20:55:14+00:00",
"contact": {
"id": 23399,
"org_id": 10,
"name": "Cameron Aubuchon",
"email": "cameron@propfuel.com",
"image_url": "https://s3.amazonaws.com/images.app.propfuel.com/user/1/KsM1tlraoRYHo0Lh66FHHF8WfQohKALJjLCcSeuf.jpeg",
"unsubscribed_email": false,
"bounced_email": false,
"created_at": "2023-11-22T22:30:43+00:00",
"updated_at": "2023-11-22T22:30:43+00:00",
"fields": [
{
"id": 978756,
"org_id": 10,
"org_field_id": 25,
"org_field": {
"id": 25,
"name": "Title",
"type": "text",
"entity": "text",
"default": "text",
"created_at": "2018-12-20T20:34:56+00:00",
"updated_at": "2021-06-30T21:36:06+00:00"
},
"value": "test",
"contact_id": 23399,
"checkin_id": null,
"created_at": "2023-11-30T21:07:06+00:00",
"updated_at": "2023-11-30T21:07:06+00:00"
}
],
"contact_integrations": [
{
"id": 121328,
"contact_id": 23399,
"integration_id": 943,
"integration": {
"id": 943,
"org_id": 10,
"ready": 1,
"system": "webhook",
"name": "Webhook",
"created_at": "2023-10-17T16:44:19+00:00",
"updated_at": "2023-11-09T22:08:47+00:00"
}
},
"external_id": "564884",
"last_seen": "2023-11-30T21:09:08+00:00",
"created_at": "2023-11-30T21:09:08+00:00",
"updated_at": "2023-11-30T21:09:08+00:00"
}
]
},
"question": {
"id": 38578,
"org_id": 10,
"active": true,
"type": "Member",
"category": "Lapsed Members",
"display": "Are you aware that your membership has lapsed?",
"response_type": "yesno",
"follow_up": "What can we do to get you to renew with our association?",
"options": null,
"settings": null,
"calc_answered": 1,
"created_at": "2023-02-02T18:11:06+00:00",
"updated_at": "2023-11-30T21:05:39+00:00"
},
"campaign": {
"id": 17641,
"org_id": 10,
"name": "Webhook Test",
"channel": "email",
"interaction": "outbound",
"schedule": "schedule",
"type": "schedule",
"status": "draft",
"status_display": "Draft",
"expires_at": null,
"pinned": 0,
"employee_only": false,
"recognition_prompt": 0,
"org_phone_number": null,
"default_delay_time": null,
"default_delay_unit": null,
"uuid": null,
"preferences": {
"reminder_send": "yes",
"reminder_delay": "2|days"
},
"notes": "",
"blueprint_id": null,
"calc_last_activity": null,
"calc_next_send": null,
"created_at": "2023-11-30T20:54:18+00:00",
"updated_at": "2023-11-30T21:13:38+00:00"
}
}