Customers
Inclusive lower calendar date (YYYY-MM-DD) for the column chosen by date_key, defaulting to created_at when date_key is omitted.
Customer datetime column paired with date_from and date_to (defaults to created_at when omitted).
Inclusive upper calendar date (YYYY-MM-DD) for the column chosen by date_key; must be on or after date_from when both bounds are provided.
Email address for the person or customer.
Customer list facet aligned with console filters (excluding archived unless requested).
Maximum number of records to return.
Search query used to filter results.
Sort direction: asc or desc.
Customer field to sort by.
URL-friendly identifier for the customer tag.
Success
Object containing response data for this resource.
Indicates whether the request completed successfully.
Short code or application-level status code for this resource.
GET /project/customers HTTP/1.1
Host: api.moregoodreviews.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
Success
{
"success": true,
"code": 200,
"data": [
{
"id": 101,
"uuid": "c53958ca-dfa3-4804-b711-0b7e61e7d8de",
"location_id": 12,
"project_id": 42,
"color": "#4F46E5",
"name": "Alex Johnson",
"first_name": "Alex",
"last_name": "Johnson",
"email": "alex.johnson@example.com",
"phone": "+15551234567",
"phone_formatted": "(555) 123-4567",
"phone_e164": "+15551234567",
"company": "Acme Dental",
"gravatar": "https://www.gravatar.com/avatar/7c6a180b36896a0a8c02787eeafb0e4c",
"lang": "en",
"notes": "Prefers email follow-up after appointments.",
"charges_count": 3,
"charges_sum": 45000,
"charges_avg": 15000,
"review_link": "https://app.example.com/r/acme-dental/alex-johnson",
"unsubscribe_link": "https://api.example.com/list-unsubscribe/c53958ca-dfa3-4804-b711-0b7e61e7d8de",
"platform_url": "https://app.example.com/projects/42/customers/101",
"validation": {
"result": "deliverable",
"risk": "low"
},
"is_validated": true,
"address1": "456 Oak Ave",
"address2": "Apt 2B",
"city": "Chicago",
"state": "IL",
"postal_code": "60601",
"signed_up_at": 1714410000,
"first_charged_at": 1714413600,
"last_charged_at": 1714500000,
"first_asked_at": 1714507200,
"last_asked_at": 1714507200,
"first_messaged_at": 1714509000,
"last_messaged_at": 1714509000,
"first_reviewed_at": 1714593600,
"last_reviewed_at": 1714593600,
"unsubscribed_at": null,
"archived_at": null,
"created_at": 1714410000,
"updated_at": 1714593600,
"photo": {
"id": 881204,
"link": "https://cdn.example.com/images/customers/alex-thumb.webp",
"uuid": "6deefc42-2c81-4f9b-9c10-3ad88f1e22aa"
}
}
],
"pagination": {
"current_page": 1,
"from": 1,
"last_page": 1,
"path": "https://api.example.com/project/customers",
"per_page": 50,
"to": 1,
"total": 1
}
}Object containing response data for this resource.
Customer first name.
Customer last name.
Email address for the person or customer.
Phone number for the person or customer.
Public image URL downloaded and stored as the customer photo before the record is created. Returns 400 if the URL cannot be fetched or is not a valid image.
Company or organization name associated with the customer.
Slug of an existing project location. Returns 404 if the slug is not found.
Optional instant for request bodies: Unix timestamp as integer (seconds), or a date/time string of at most 50 characters that PHP Carbon can parse. For strings, ISO-8601 / RFC 3339 (for example 2026-04-28T15:30:00Z) is the recommended format in examples and client integrations. Invalid values fail validation. When the field is omitted or null, the API uses the current server time where that behavior is documented on the operation.
Unix timestamp in seconds since the Unix epoch.
Date/time string parseable by Carbon; prefer ISO-8601 / RFC 3339; maximum 50 characters.
Internal notes about the customer.
Primary street address line.
Secondary street address line, such as suite or apartment.
City for the address.
State, province, or region for the address.
Postal or ZIP code for the address.
Tag slugs to attach to the customer.
Success
Object containing response data for this resource.
Indicates whether the request completed successfully.
Short code or application-level status code for this resource.
POST /project/customers HTTP/1.1
Host: api.moregoodreviews.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 423
{
"first_name": "Alex",
"last_name": "Johnson",
"email": "alex.johnson@example.com",
"phone": "+15551234567",
"photo_url": "https://cdn.example.com/photos/alex-johnson.jpg",
"company": "Acme Dental",
"location_slug": "downtown",
"signed_up_at": "2026-04-26T12:00:00Z",
"notes": "Prefers email follow-up after appointments.",
"address1": "456 Oak Ave",
"address2": "Apt 2B",
"city": "Chicago",
"state": "IL",
"postal_code": "60601",
"tag_slugs": [
"vip"
]
}Success
{
"success": true,
"code": 200,
"data": {
"id": 101,
"uuid": "c53958ca-dfa3-4804-b711-0b7e61e7d8de",
"location_id": 12,
"project_id": 42,
"color": "#4F46E5",
"name": "Alex Johnson",
"first_name": "Alex",
"last_name": "Johnson",
"email": "alex.johnson@example.com",
"phone": "+15551234567",
"phone_formatted": "(555) 123-4567",
"phone_e164": "+15551234567",
"company": "Acme Dental",
"gravatar": "https://www.gravatar.com/avatar/7c6a180b36896a0a8c02787eeafb0e4c",
"lang": "en",
"notes": "Prefers email follow-up after appointments.",
"charges_count": 3,
"charges_sum": 45000,
"charges_avg": 15000,
"review_link": "https://app.example.com/r/acme-dental/alex-johnson",
"unsubscribe_link": "https://api.example.com/list-unsubscribe/c53958ca-dfa3-4804-b711-0b7e61e7d8de",
"platform_url": "https://app.example.com/projects/42/customers/101",
"validation": {
"result": "deliverable",
"risk": "low"
},
"is_validated": true,
"address1": "456 Oak Ave",
"address2": "Apt 2B",
"city": "Chicago",
"state": "IL",
"postal_code": "60601",
"signed_up_at": 1714410000,
"first_charged_at": 1714413600,
"last_charged_at": 1714500000,
"first_asked_at": 1714507200,
"last_asked_at": 1714507200,
"first_messaged_at": 1714509000,
"last_messaged_at": 1714509000,
"first_reviewed_at": 1714593600,
"last_reviewed_at": 1714593600,
"unsubscribed_at": null,
"archived_at": null,
"created_at": 1714410000,
"updated_at": 1714593600,
"photo": {
"id": 881204,
"link": "https://cdn.example.com/images/customers/alex-thumb.webp",
"uuid": "6deefc42-2c81-4f9b-9c10-3ad88f1e22aa"
},
"location": {
"id": 12,
"project_id": 42,
"uuid": "51987517-6a48-4e4d-87d5-934147e46234",
"name": "Downtown",
"display_name": "Acme Dental Downtown",
"slug": "downtown",
"store_code": "CHI-DTN",
"title": "Downtown Office",
"address": "123 Main St, Chicago, IL 60601",
"address1": "123 Main St",
"address2": "Suite 400",
"city": "Chicago",
"state": "IL",
"postal_code": "60601"
},
"tags": [
{
"id": 9,
"uuid": "719c34f3-30fd-4d9e-82dd-172ce6d554af",
"name": "VIP",
"slug": "vip",
"color": "#F59E0B"
}
]
}
}Unique numeric identifier for the customer.
Success
Object containing response data for this resource.
Indicates whether the request completed successfully.
Application-level status code returned by this API.
Customer record with optional nested entities.
GET /project/customers/{id} HTTP/1.1
Host: api.moregoodreviews.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
Success
{
"success": true,
"code": 200,
"data": {
"id": 101,
"uuid": "c53958ca-dfa3-4804-b711-0b7e61e7d8de",
"location_id": 12,
"project_id": 42,
"color": "#4F46E5",
"name": "Alex Johnson",
"first_name": "Alex",
"last_name": "Johnson",
"email": "alex.johnson@example.com",
"phone": "+15551234567",
"phone_formatted": "(555) 123-4567",
"phone_e164": "+15551234567",
"company": "Acme Dental",
"gravatar": "https://www.gravatar.com/avatar/7c6a180b36896a0a8c02787eeafb0e4c",
"lang": "en",
"notes": "Prefers email follow-up after appointments.",
"charges_count": 3,
"charges_sum": 45000,
"charges_avg": 15000,
"review_link": "https://app.example.com/r/acme-dental/alex-johnson",
"unsubscribe_link": "https://api.example.com/list-unsubscribe/c53958ca-dfa3-4804-b711-0b7e61e7d8de",
"platform_url": "https://app.example.com/projects/42/customers/101",
"validation": {
"result": "deliverable",
"risk": "low"
},
"is_validated": true,
"address1": "456 Oak Ave",
"address2": "Apt 2B",
"city": "Chicago",
"state": "IL",
"postal_code": "60601",
"signed_up_at": 1714410000,
"first_charged_at": 1714413600,
"last_charged_at": 1714500000,
"first_asked_at": 1714507200,
"last_asked_at": 1714507200,
"first_messaged_at": 1714509000,
"last_messaged_at": 1714509000,
"first_reviewed_at": 1714593600,
"last_reviewed_at": 1714593600,
"unsubscribed_at": null,
"archived_at": null,
"created_at": 1714410000,
"updated_at": 1714593600,
"photo": {
"id": 881204,
"link": "https://cdn.example.com/images/customers/alex-thumb.webp",
"uuid": "6deefc42-2c81-4f9b-9c10-3ad88f1e22aa"
},
"location": {
"id": 12,
"project_id": 42,
"uuid": "51987517-6a48-4e4d-87d5-934147e46234",
"name": "Downtown",
"display_name": "Acme Dental Downtown",
"slug": "downtown",
"store_code": "CHI-DTN",
"title": "Downtown Office",
"address": "123 Main St, Chicago, IL 60601",
"address1": "123 Main St",
"address2": "Suite 400",
"city": "Chicago",
"state": "IL",
"postal_code": "60601"
},
"tags": [
{
"id": 9,
"uuid": "719c34f3-30fd-4d9e-82dd-172ce6d554af",
"name": "VIP",
"slug": "vip",
"color": "#F59E0B"
}
]
}
}Unique numeric identifier for the customer.
Success
Object containing response data for this resource.
Indicates whether the request completed successfully.
Application-level status code returned by this API.
DELETE /project/customers/{id} HTTP/1.1
Host: api.moregoodreviews.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
Success
{
"success": true,
"code": 200
}Unique numeric identifier for the customer.
Success
Object containing response data for this resource.
Indicates whether the request completed successfully.
Application-level status code returned by this API.
PUT /project/customers/{id}/archive HTTP/1.1
Host: api.moregoodreviews.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
Success
{
"success": true,
"code": 200
}Unique numeric identifier for the customer.
Success
Object containing response data for this resource.
Indicates whether the request completed successfully.
Application-level status code returned by this API.
PUT /project/customers/{id}/unarchive HTTP/1.1
Host: api.moregoodreviews.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
Success
{
"success": true,
"code": 200
}Unique numeric identifier for the customer.
Request body with a public image URL for the customer photo, or null to clear it.
Public image URL downloaded and stored as the customer photo. Pass null to remove the photo. Returns 400 if a URL cannot be fetched or is not a valid image.
Success
Object containing response data for this resource.
Indicates whether the request completed successfully.
Application-level status code returned by this API.
PUT /project/customers/{id}/photo HTTP/1.1
Host: api.moregoodreviews.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 57
{
"url": "https://cdn.example.com/photos/alex-johnson.jpg"
}Success
{
"success": true,
"code": 200,
"data": {
"id": 881204,
"uuid": "6deefc42-2c81-4f9b-9c10-3ad88f1e22aa",
"link": "https://cdn.example.com/images/customers/alex-thumb.webp"
}
}Unique numeric identifier for the customer.
Request body containing customer notes.
Internal notes about the customer.
Success
Object containing response data for this resource.
Indicates whether the request completed successfully.
Application-level status code returned by this API.
PUT /project/customers/{id}/notes HTTP/1.1
Host: api.moregoodreviews.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 55
{
"notes": "Prefers email follow-up after appointments."
}Success
{
"success": true,
"code": 200
}Unique numeric identifier for the customer.
Success
Object containing response data for this resource.
Indicates whether the request completed successfully.
Application-level status code returned by this API.
PUT /project/customers/{id}/unsubscribe HTTP/1.1
Host: api.moregoodreviews.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
Success
{
"success": true,
"code": 200
}Unique numeric identifier for the customer.
Success
Object containing response data for this resource.
Indicates whether the request completed successfully.
Application-level status code returned by this API.
PUT /project/customers/{id}/resubscribe HTTP/1.1
Host: api.moregoodreviews.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
Success
{
"success": true,
"code": 200
}Unique numeric identifier for the customer.
Success
Object containing response data for this resource.
Indicates whether the request completed successfully.
Application-level status code returned by this API.
PUT /project/customers/{id}/cancel-unsent-messages HTTP/1.1
Host: api.moregoodreviews.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
Success
{
"success": true,
"code": 200
}Unique numeric identifier for the customer.
Maximum number of records to return per page.
Success
Object containing response data for this resource.
Indicates whether the request completed successfully.
Short code or application-level status code for this resource.
GET /project/customers/{id}/charges HTTP/1.1
Host: api.moregoodreviews.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
Success
{
"success": true,
"code": 200,
"data": [
{
"amount": 15000,
"charged_at": "2026-04-28T15:30:00+00:00",
"currency": "USD",
"customer_id": 101,
"id": 501,
"project_id": 42
}
],
"pagination": {
"current_page": 1,
"from": 1,
"last_page": 1,
"path": "https://api.example.com/project/customers/101/charges",
"per_page": 50,
"to": 1,
"total": 1
}
}Unique numeric identifier for this resource.
Maximum number of records to return.
Success
Object containing response data for this resource.
Indicates whether the request completed successfully.
Short code or application-level status code for this resource.
GET /project/customers/{id}/messages HTTP/1.1
Host: api.moregoodreviews.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
Success
{
"success": true,
"code": 200,
"data": [
{
"id": 55,
"uuid": "74340248-84bb-4ed4-9b85-2f8a6efc9964",
"ask_id": 32,
"channel": "email",
"failed_reason": null,
"scheduled_at": 1714507200,
"processed_at": 1714507260,
"sent_at": 1714507320,
"delivered_at": 1714507380,
"opened_at": 1714510800,
"clicked_at": null,
"failed_at": null,
"complained_at": null,
"canceled_at": null,
"halted_at": null,
"created_at": 1714507200,
"updated_at": 1714510800,
"customer": {
"id": 101,
"uuid": "c53958ca-dfa3-4804-b711-0b7e61e7d8de",
"name": "Alex Johnson",
"color": "#4F46E5",
"gravatar": "https://www.gravatar.com/avatar/7c6a180b36896a0a8c02787eeafb0e4c",
"platform_url": "https://app.example.com/projects/42/customers/101",
"unsubscribed_at": null
},
"template": {
"id": 4,
"uuid": "7f0c19b1-e9cb-48ef-a021-2f6ed0041c39",
"name": "Review Request",
"slug": "review-request",
"channel": "email"
}
}
],
"pagination": {
"current_page": 1,
"from": 1,
"last_page": 1,
"path": "https://api.example.com/project/customers/101/messages",
"per_page": 50,
"to": 1,
"total": 1
}
}Unique numeric identifier for this resource.
Maximum number of records to return.
Success
Object containing response data for this resource.
Indicates whether the request completed successfully.
Short code or application-level status code for this resource.
GET /project/customers/{id}/reviews HTTP/1.1
Host: api.moregoodreviews.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
Success
{
"success": true,
"code": 200,
"data": [
{
"id": 77,
"uuid": "c2928ac9-8c0a-4e8a-b3b0-6dbd12d4d1ce",
"score": 5,
"review": "The staff was friendly and the appointment started right on time.",
"review_html": "<p>The staff was friendly and the appointment started right on time.</p>",
"reply": "Thank you for sharing your experience, Alex!",
"is_hidden": false,
"is_duplicate": false,
"has_highlights": true,
"can_reply": true,
"has_reply": true,
"external_url": "https://www.google.com/maps/reviews/acme-dental-77",
"platform_url": "https://app.example.com/projects/42/reviews/77",
"replied_at": 1714680000,
"created_at": 1714593600,
"customer": {
"id": 101,
"uuid": "c53958ca-dfa3-4804-b711-0b7e61e7d8de",
"name": "Alex Johnson",
"color": "#4F46E5",
"platform_url": "https://app.example.com/projects/42/customers/101"
},
"location": {
"id": 12,
"project_id": 42,
"uuid": "51987517-6a48-4e4d-87d5-934147e46234",
"name": "Downtown",
"display_name": "Acme Dental Downtown",
"slug": "downtown",
"store_code": "CHI-DTN",
"title": "Downtown Office",
"address": "123 Main St, Chicago, IL 60601",
"address1": "123 Main St",
"address2": "Suite 400",
"city": "Chicago",
"state": "IL",
"postal_code": "60601"
},
"rating": {
"id": 5,
"score": 5,
"label": "Excellent"
},
"reviewer": {
"id": 14,
"name": "Alex Johnson",
"photo_url": "https://lh3.googleusercontent.com/a-/alex"
},
"source": {
"id": 5,
"uuid": "59fd6c84-2955-4ef7-a665-48a87b79f35b",
"name": "Google",
"slug": "google",
"sprite": "fab fa-google",
"color": "#DB4437",
"icon": null
},
"fields": [
{
"name": "service",
"value": "Cleaning"
}
],
"tags": [
{
"id": 9,
"uuid": "719c34f3-30fd-4d9e-82dd-172ce6d554af",
"name": "VIP",
"slug": "vip"
}
]
}
],
"pagination": {
"current_page": 1,
"from": 1,
"last_page": 1,
"path": "https://api.example.com/project/customers/101/reviews",
"per_page": 50,
"to": 1,
"total": 1
}
}Unique numeric identifier for the customer.
Request body listing tag slugs to apply; omitting unrelated tags removes them from the customer.
Tag slugs to assign; send an empty array to clear all tags from this customer.
Success
Object containing response data for this resource.
Indicates whether the request completed successfully.
Application-level status code returned by this API.
PUT /project/customers/{id}/tags HTTP/1.1
Host: api.moregoodreviews.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 34
{
"tag_slugs": [
"vip",
"newsletter"
]
}Success
{
"success": true,
"code": 200,
"data": {
"id": 101,
"uuid": "c53958ca-dfa3-4804-b711-0b7e61e7d8de",
"project_id": 42,
"name": "Alex Johnson",
"first_name": "Alex",
"last_name": "Johnson",
"email": "alex.johnson@example.com",
"phone": "+15551234567",
"company": "Acme Dental",
"platform_url": "https://app.example.com/projects/42/customers/101",
"tags": [
{
"id": 701,
"uuid": "f2b31d31-a793-4f65-8f19-75fb21cb01c3",
"name": "VIP",
"slug": "vip",
"sprite": "fas fa-star",
"color": "#F59E0B",
"context": "customer",
"ai_instructions": null,
"has_ai_tagging": false
},
{
"id": 702,
"uuid": "2533b8a8-3920-4c79-8d5e-c38fb760c8e2",
"name": "Newsletter",
"slug": "newsletter",
"sprite": "fas fa-envelope",
"color": "#2563EB",
"context": "customer",
"ai_instructions": null,
"has_ai_tagging": false
}
]
}
}Last updated