Introduction
This document will help you understand how Snap Send Solve webhook integration works and how to configure it to receive report payloads whenever a new report is created in Snap Send Solve.
Overview
Snap Send Solve is a platform that enables users to report issues such as potholes, graffiti and damaged infrastructure directly to local authorities and service providers. Our webhook integration allows your organisation to receive these reports into your systems instantly, facilitating faster response times and more efficient resolution of issues. With our webhook integration, Snap Send Solve pushes a report payload to your specified webhook URL as soon as a report is created, or when a Snapper takes any of the following actions:
Closes a report as solved
Closes a report as unsolved
Cancels a report
Nudges a report
Rates a report
Deflects (abandons) their report and matches an existing one
Authentication
To ensure secure communication between Snap Send Solve and your webhook endpoint, we support two types of authentication: OAuth 2 and API Key. This section explains how to configure both methods.
OAuth 2
Obtain an OAuth 2 Token: Snap Send Solve will follow the OAuth 2 flow to obtain an access token from your identity provider.
Include the Token in Requests: This token will be included in the
Authorizationheader of each HTTP request in the format:Bearer OAUTH2_TOKEN. Your endpoint must validate this token to ensure the request is legitimate.
API Key
Provision API Key: The API key provisioned should be exclusively utilized for Snap Send Solve integration only.
Include the API Key in Requests: This API key will be included in the
X-API-KEYheader of each HTTP request in the format:YOUR_API_KEY. Your endpoint must validate this token to ensure the request is legitimate.
Handling Snap Send Solve Request Payload
When a new report is created in Snap Send Solve, the platform sends a HTTP POST request to the configured webhook URL. The payload of this request is in JSON format and contains information about the report.
Request Payload Examples:
Your webhook should be configured to handle the following payloads and process the information accordingly.
Report created
{
"id": 4282573,
"images": [
"https://snapsendsolve-reports.s3.ap-southeast-2.amazonaws.com/images/04282573/public/1_csr7csl16zoa.jpg"
],
"address": "15 Palmer Parade, Cremorne VIC 3121, Australia",
"notes": "test report",
"latitude": "-37.8314644",
"longitude": "144.9929973",
"incidentType": "Snap Send Solve - Test",
"date": "2024-02-13T21:48:20.826Z",
"additionalFields": [
{
"name": "Question 1",
"value": "answer 1"
}
],
"reportUrl": "https://snapsendsolve.page.link/ahxrsas8",
"reporter": {
"firstName": "Chris",
"lastName": "Cook",
"email": "test@email.com",
"isPrivateEmail": true,
"phone": "+61400123456",
"address": "570 Church St",
"suburb": "Cremorne",
"postcode": "3121"
},
"location": {
"address": {
"streetNumber": "15",
"street": "Palmer Parade",
"suburb": "Cremorne",
"city": "City of Yarra",
"state": "Victoria",
"postcode": "3121",
"country": "Australia"
}
},
"videoUrls": ["https://example.com/video1.mp4"],
"deflectionCount": 2,
"isFlaggedForSolver": true,
"priority": "High"
}
Report closed solved
{
"authorityId": 123,
"action": "SNAPPER_SOLVED",
"actionData": {
"snapperStatus": "Solved"
},
"actionTimestamp": "2025-11-10T07:00:00Z",
"description": "Snapper marked report as Solved",
"id": 4282573,
"images": [
"https://snapsendsolve-reports.s3.ap-southeast-2.amazonaws.com/images/04282573/public/1_csr7csl16zoa.jpg"
],
"address": "15 Palmer Parade, Cremorne VIC 3121, Australia",
"notes": "test report",
"latitude": "-37.8314644",
"longitude": "144.9929973",
"incidentType": "Snap Send Solve - Test",
"date": "2024-02-13T21:48:20.826Z",
"additionalFields": [
{
"name": "Question 1",
"value": "answer 1"
}
],
"reportUrl": "https://snapsendsolve.page.link/ahxrsas8",
"reporter": {
"firstName": "Chris",
"lastName": "Cook",
"email": "test@email.com",
"isPrivateEmail": true,
"phone": "+61400123456",
"address": "570 Church St",
"suburb": "Cremorne",
"postcode": "3121"
},
"location": {
"address": {
"streetNumber": "15",
"street": "Palmer Parade",
"suburb": "Cremorne",
"city": "City of Yarra",
"state": "Victoria",
"postcode": "3121",
"country": "Australia"
}
},
"videoUrls": ["https://example.com/video1.mp4"],
"deflectionCount": 2,
"isFlaggedForSolver": true,
"priority": "High"
}
Report closed unsolved
{
"authorityId": 123,
"action": "SNAPPER_UNSOLVED",
"actionData": {
"snapperStatus": "Unsolved"
},
"actionTimestamp": "2025-11-10T08:15:00Z",
"description": "Snapper marked report as Unsolved",
"id": 4282573,
"images": [
"https://snapsendsolve-reports.s3.ap-southeast-2.amazonaws.com/images/04282573/public/1_csr7csl16zoa.jpg"
],
"address": "15 Palmer Parade, Cremorne VIC 3121, Australia",
"notes": "test report",
"latitude": "-37.8314644",
"longitude": "144.9929973",
"incidentType": "Snap Send Solve - Test",
"date": "2024-02-13T21:48:20.826Z",
"additionalFields": [
{
"name": "Question 1",
"value": "answer 1"
}
],
"reportUrl": "https://snapsendsolve.page.link/ahxrsas8",
"reporter": {
"firstName": "Chris",
"lastName": "Cook",
"email": "test@email.com",
"isPrivateEmail": true,
"phone": "+61400123456",
"address": "570 Church St",
"suburb": "Cremorne",
"postcode": "3121"
},
"location": {
"address": {
"streetNumber": "15",
"street": "Palmer Parade",
"suburb": "Cremorne",
"city": "City of Yarra",
"state": "Victoria",
"postcode": "3121",
"country": "Australia"
}
},
"videoUrls": ["https://example.com/video1.mp4"],
"deflectionCount": 2,
"isFlaggedForSolver": true,
"priority": "High"
}
Report cancelled
{
"authorityId": 123,
"action": "SNAPPER_CANCELLED",
"actionData": {
"snapperStatus": "Cancelled",
"cancellationReason": "Duplicate report - already resolved under report #12340"
},
"actionTimestamp": "2025-11-10T09:30:00Z",
"description": "Snapper cancelled report",
"id": 4282573,
"images": [
"https://snapsendsolve-reports.s3.ap-southeast-2.amazonaws.com/images/04282573/public/1_csr7csl16zoa.jpg"
],
"address": "15 Palmer Parade, Cremorne VIC 3121, Australia",
"notes": "test report",
"latitude": "-37.8314644",
"longitude": "144.9929973",
"incidentType": "Snap Send Solve - Test",
"date": "2024-02-13T21:48:20.826Z",
"additionalFields": [
{
"name": "Question 1",
"value": "answer 1"
}
],
"reportUrl": "https://snapsendsolve.page.link/ahxrsas8",
"reporter": {
"firstName": "Chris",
"lastName": "Cook",
"email": "test@email.com",
"isPrivateEmail": true,
"phone": "+61400123456",
"address": "570 Church St",
"suburb": "Cremorne",
"postcode": "3121"
},
"location": {
"address": {
"streetNumber": "15",
"street": "Palmer Parade",
"suburb": "Cremorne",
"city": "City of Yarra",
"state": "Victoria",
"postcode": "3121",
"country": "Australia"
}
},
"videoUrls": ["https://example.com/video1.mp4"],
"deflectionCount": 2,
"isFlaggedForSolver": true,
"priority": "High"
}
Report nudged
{
"authorityId": 123,
"action": "SNAPPER_NUDGED",
"actionData": {
"snapperStatus": "Nudged",
"hasBeenNudged": true
},
"actionTimestamp": "2025-11-10T10:45:00Z",
"description": "Snapper nudged report",
"id": 4282573,
"images": [
"https://snapsendsolve-reports.s3.ap-southeast-2.amazonaws.com/images/04282573/public/1_csr7csl16zoa.jpg"
],
"address": "15 Palmer Parade, Cremorne VIC 3121, Australia",
"notes": "test report",
"latitude": "-37.8314644",
"longitude": "144.9929973",
"incidentType": "Snap Send Solve - Test",
"date": "2024-02-13T21:48:20.826Z",
"additionalFields": [
{
"name": "Question 1",
"value": "answer 1"
}
],
"reportUrl": "https://snapsendsolve.page.link/ahxrsas8",
"reporter": {
"firstName": "Chris",
"lastName": "Cook",
"email": "test@email.com",
"isPrivateEmail": true,
"phone": "+61400123456",
"address": "570 Church St",
"suburb": "Cremorne",
"postcode": "3121"
},
"location": {
"address": {
"streetNumber": "15",
"street": "Palmer Parade",
"suburb": "Cremorne",
"city": "City of Yarra",
"state": "Victoria",
"postcode": "3121",
"country": "Australia"
}
},
"videoUrls": ["https://example.com/video1.mp4"],
"deflectionCount": 2,
"isFlaggedForSolver": true,
"priority": "High"
}Report rated
{
"authorityId": 123,
"action": "SNAPPER_RATED",
"actionData": {
"reportId": 4282573,
"isRated": true,
"starRating": 5,
"communicationRating": 5,
"qualityRating": 5,
"speedRating": 4,
"feedback": "Very happy with the quick response and resolution. Thank you!",
"ratingDetails": {
"overallSatisfaction": "excellent"
},
"ratingImages": []
},
"actionTimestamp": "2025-11-10T11:30:00Z",
"description": "Snapper rated report",
"id": 4282573,
"images": [
"https://snapsendsolve-reports.s3.ap-southeast-2.amazonaws.com/images/04282573/public/1_csr7csl16zoa.jpg"
],
"address": "15 Palmer Parade, Cremorne VIC 3121, Australia",
"notes": "test report",
"latitude": "-37.8314644",
"longitude": "144.9929973",
"incidentType": "Snap Send Solve - Test",
"date": "2024-02-13T21:48:20.826Z",
"additionalFields": [
{
"name": "Question 1",
"value": "answer 1"
}
],
"reportUrl": "https://snapsendsolve.page.link/ahxrsas8",
"reporter": {
"firstName": "Chris",
"lastName": "Cook",
"email": "test@email.com",
"isPrivateEmail": true,
"phone": "+61400123456",
"address": "570 Church St",
"suburb": "Cremorne",
"postcode": "3121"
},
"location": {
"address": {
"streetNumber": "15",
"street": "Palmer Parade",
"suburb": "Cremorne",
"city": "City of Yarra",
"state": "Victoria",
"postcode": "3121",
"country": "Australia"
}
},
"videoUrls": ["https://example.com/video1.mp4"],
"deflectionCount": 2,
"isFlaggedForSolver": true,
"priority": "High"
}
Report deflected
{
"authorityId": 123,
"action": "SNAPPER_DEFLECTED",
"actionData": {
"reportId": 4282573,
"deflections": 3
},
"actionTimestamp": "2025-11-10T12:00:00Z",
"description": "Deflection created by another Snapper abandoning and matching report to one of your reports",
"id": 4282573,
"images": [
"https://snapsendsolve-reports.s3.ap-southeast-2.amazonaws.com/images/04282573/public/1_csr7csl16zoa.jpg"
],
"address": "15 Palmer Parade, Cremorne VIC 3121, Australia",
"notes": "test report",
"latitude": "-37.8314644",
"longitude": "144.9929973",
"incidentType": "Snap Send Solve - Test",
"date": "2024-02-13T21:48:20.826Z",
"additionalFields": [
{
"name": "Question 1",
"value": "answer 1"
}
],
"reportUrl": "https://snapsendsolve.page.link/ahxrsas8",
"reporter": {
"firstName": "Chris",
"lastName": "Cook",
"email": "test@email.com",
"isPrivateEmail": true,
"phone": "+61400123456",
"address": "570 Church St",
"suburb": "Cremorne",
"postcode": "3121"
},
"location": {
"address": {
"streetNumber": "15",
"street": "Palmer Parade",
"suburb": "Cremorne",
"city": "City of Yarra",
"state": "Victoria",
"postcode": "3121",
"country": "Australia"
}
},
"videoUrls": ["https://example.com/video1.mp4"],
"deflectionCount": 2,
"isFlaggedForSolver": true,
"priority": "High"
}
Field descriptions
authorityId: Unique identifier for your organisation
positive integer
action: Snapper action that triggered this webhook.
string up to 100 characters
one of:
SNAPPER_SOLVED,SNAPPER_UNSOLVED,SNAPPER_CANCELLED,SNAPPER_NUDGED,SNAPPER_RATED,SNAPPER_DEFLECTED
actionData: Additional data related to the Snapper action
object
can be an empty object
fields depend on the value of
actionas belowFor
SNAPPER_SOLVEDandSNAPPER_UNSOLVED:snapperStatus: Status of the report from the Snapper’s perspective at the time of this action.
string up to 100 characters
For
SNAPPER_CANCELLEDsnapperStatus: Status of the report from the Snapper’s perspective at the time of cancellation.
string up to 100 characters
cancellationReason: Reason provided by the Snapper for cancelling the report.
string up to 1000 characters
can be null
For
SNAPPER_NUDGEDsnapperStatus: Status of the report from the Snapper’s perspective at the time of the nudge.
string up to 100 characters
hasBeenNudged: Whether this report has been nudged.
boolean
For
SNAPPER_RATEDreportId: Unique identifier for the report that was rated.
positive integer
isRated: Whether a rating exists for this report.
boolean
starRating: Overall star rating given by the Snapper (e.g. 1–5).
number
communicationRating: Rating for communication with the authority (e.g. 1–5).
number
qualityRating: Rating for the quality of the resolution/outcome (e.g. 1–5).
number
speedRating: Rating for how quickly the issue was handled (e.g. 1–5).
number
feedback: Free-text feedback left by the Snapper.
string up to 1000 characters
ratingDetails: Structured rating details (if any).
object
ratingImages: Images attached as part of the rating or after-resolution feedback.
array of strings
each string is typically a URL
For
SNAPPER_DEFLECTEDreportId: Unique identifier for the report that was deflected/matched.
positive integer
deflections: Number of times this report has been deflected (matched from another Snapper’s report).
non-negative integer
actionTimestamp: Timestamp of when the Snapper action occurred.
string, in ISO 8601 datetime format
description: Human-readable summary of the Snapper action.
string up to 1000 characters
id: Unique identifier for the report
positive integer
images: URLs of images attached to the report (if any).
array of strings
comments:
can be empty array
the length of each url is up to 2048 characters
address: Address where the issue was reported.
string up to 500 characters
notes: Additional notes provided by the reporter.
string up to 10000 characters
latitude and longitude: Coordinates of the reported location.
string up to 50 characters
incidentType: Type of incident reported.
string up to 100 characters
date: Timestamp of when the report was created.
string, in ISO 8601 datetime format
additionalFields: Additional fields associated with the report (if any).
array of object
name: string up to 100 characters
value: string up to 500 characters
reportUrl: URL to view the report details.
string up to 2048 characters
reporter: Information about the reporter.
firstName: string up to 100 characters
lastName: string up to 100 characters
email: string up to 255 characters
isPrivateEmail
boolean
incident whether this reporter is using apple private relay email
phone: string up to 50 characters
address: string up to 100 characters
suburb: string up to 50 characters
postcode: string up to 50 characters
location: Detailed address information.
streetNumber: string up to 100 characters
street: string up to 100 characters
suburb: string up to 100 characters
city: string up to 100 characters
state: string up to 100 characters
postcode: string up to 100 characters
country: string up to 100 characters
deflectionCount: Total number of times this report has been matched
integer
isFlaggedForSolver: Report AI flagged for solver
boolean
priority: The priority of the report
enum: None/High/Medium/Low
Configuring the Webhook
To configure the Snap Send Solve webhook, please contact your account manager. They will assist you in setting up the webhook integration once you have supplied the following information.
Report creation:
HTTP endpoint that receives POST requests
API Rate limiting details (if applicable)
Based on your preferred authentication methods, please provide the following information:
OAuth 2 Configuration:
Your identity provider's OAuth 2 endpoint (authorisation endpoint)
OAuth 2 client credentials (client ID and client secret) for your application
Any additional OAuth 2 configuration settings required by your identity provider
API Key Configuration:
API key for Snap Send Solve integration system
Error Handling, Retries and Rate Limiting
Snap Send Solve has implemented following mechanism to ensure the reliability and resilience of the integration.
Error Handling:
Handle HTTP status codes returned by the webhook endpoint appropriately. Common status codes include:
2xx : The request was successful.
4xx / 5xx : Client errors or Server errors
Snap Send Solve will retry this request after 15 minutes.
After two consecutive fails, the request will be put to a dead letter queue which will be manually handled by Snap Send Solve’s technical team.
Rate Limiting:
Snap Send Solve imposes rate limits on webhook requests to prevent abuse and ensure fair usage.
It is important to implement rate limiting on your end as well to prevent your system from overwhelming the webhook endpoint with requests.
The default limit is 5 requests per second.
Need more help? Get support from our team by emailing us at contact@snapsendsolve.com or sending us a message.
