DevelopersAPI reference

Reviews API

REST endpoints for reviews in SKUFlow: 11 operations with parameters, request and response fields, permissions and curl examples.

Base URL: https://app.skuflow.ai/api. Every call needs Authorization: Bearer skf_… (Authentication); {organizationId} ($ORGANIZATION_ID in the examples) is your business's id.

OperationEndpointRisk
Reviews overviewGET /organizations/{organizationId}/reviewsread
List reviewsGET /organizations/{organizationId}/reviews/itemsread
A reviewGET /organizations/{organizationId}/reviews/items/{reviewId}read
Sync reviews nowPOST /organizations/{organizationId}/reviews/syncwrite
Follow a location's reviewsPATCH /organizations/{organizationId}/reviews/locations/{reviewLocationId}write
Draft a replyPOST /organizations/{organizationId}/reviews/items/{reviewId}/draft-replywrite
Reply to a reviewPOST /organizations/{organizationId}/reviews/items/{reviewId}/replysensitive
Remove a replyDELETE /organizations/{organizationId}/reviews/items/{reviewId}/replysensitive
Start connecting GooglePOST /organizations/{organizationId}/reviews/google/connectsensitive
Disconnect GooglePOST /organizations/{organizationId}/reviews/google/disconnectsensitive
Customer feedbackGET /organizations/{organizationId}/feedbackread

Reviews overview

GET /organizations/{organizationId}/reviews

Whether Google is connected, the Business Profile locations (and which are followed), and the rating summary: count, average, 1–5 star distribution, unanswered and last 30 days. Read-only.

Permissionreviews.read (Owner, Admin, Staff, Member)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP toolreviews_overview (toolset marketing)

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/reviews" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
googleobject
google.modeenumunconfigured: this server has no Google OAuth client. One of live, fake, unconfigured.
google.connectedboolean
google.statusstring
google.accountstring or nullThe Google account the Business Profile is managed with.
google.connectedAtstring (date-time) or null
google.lastSyncAtstring (date-time) or null
google.lastErrorstring or null
locationsarray of object
locations[].idstring
locations[].titlestring
locations[].addressstring
locations[].reviewUrlstring or nullWhere customers write a review of this location.
locations[].selectedbooleanReviews are followed for selected locations.
locations[].lastSyncedAtstring (date-time) or null
locations[].lastErrorstring or null
summaryobject
summary.countinteger
summary.averagenumber or null
summary.distributionarray of integerCounts of 1, 2, 3, 4 and 5-star reviews.
summary.unansweredinteger
summary.last30Daysinteger

List reviews

GET /organizations/{organizationId}/reviews/items

Google reviews of the followed locations, newest first, filtered by rating, unanswered (no reply yet) or location; paged by limit/offset with a total. Each carries the matched customer when a reviewer's name matched one. Read-only.

Permissionreviews.read (Owner, Admin, Staff, Member)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP toolreviews_list (toolset marketing)

Parameters

NameInTypeRequiredDescription
ratingqueryintegerNo1–5.
unansweredquerybooleanNo
reviewLocationIdquerystringNo
limitqueryintegerNo1–100.
offsetqueryintegerNo0–100000.

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/reviews/items" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
itemsarray of object
items[].idstring
items[].reviewerNamestring
items[].reviewerPhotoUrlstring or null
items[].ratinginteger1–5 stars (0 when Google gave none).
items[].commentstring
items[].postedAtstring (date-time)
items[].editedAtstring (date-time)
items[].replystring or nullThe business's public reply, when there is one.
items[].repliedAtstring (date-time) or null
items[].customerIdstring or null
items[].customerobject or null
items[].customer.idstring
items[].customer.namestring
items[].locationobject
items[].location.idstring
items[].location.titlestring
totalinteger

A review

GET /organizations/{organizationId}/reviews/items/{reviewId}

One Google review with the business's reply and the matched customer. Read-only.

Permissionreviews.read (Owner, Admin, Staff, Member)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP toolreviews_get (toolset marketing)

Parameters

NameInTypeRequiredDescription
reviewIdpathstringYes

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/reviews/items/{reviewId}" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
idstring
reviewerNamestring
reviewerPhotoUrlstring or null
ratinginteger1–5 stars (0 when Google gave none).
commentstring
postedAtstring (date-time)
editedAtstring (date-time)
replystring or nullThe business's public reply, when there is one.
repliedAtstring (date-time) or null
customerIdstring or null
customerobject or null
customer.idstring
customer.namestring
locationobject
location.idstring
location.titlestring

Sync reviews now

POST /organizations/{organizationId}/reviews/sync

Pulls the followed locations' reviews from Google now (it also happens every six hours). 409 when Google isn't connected. Rate-limited.

Permissionreviews.manage (Owner, Admin, Staff)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolreviews_sync (toolset marketing)
PlanGoogle reviews: the Grow plan and up.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/reviews/sync" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
locationsinteger
addedinteger
updatedinteger

Follow a location's reviews

PATCH /organizations/{organizationId}/reviews/locations/{reviewLocationId}

selected: true follows the Business Profile location's reviews (synced, listed, counted); false stops. Answers the overview.

Permissionreviews.manage (Owner, Admin, Staff)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolreviews_setLocation (toolset marketing)
PlanGoogle reviews: the Grow plan and up.

Parameters

NameInTypeRequiredDescription
reviewLocationIdpathstringYes

Request body

FieldTypeRequiredDescription
selectedbooleanYes

Example

curl -X PATCH "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/reviews/locations/{reviewLocationId}" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"selected":true}'

Response

200: the answer's fields
FieldTypeDescription
googleobject
google.modeenumunconfigured: this server has no Google OAuth client. One of live, fake, unconfigured.
google.connectedboolean
google.statusstring
google.accountstring or nullThe Google account the Business Profile is managed with.
google.connectedAtstring (date-time) or null
google.lastSyncAtstring (date-time) or null
google.lastErrorstring or null
locationsarray of object
locations[].idstring
locations[].titlestring
locations[].addressstring
locations[].reviewUrlstring or nullWhere customers write a review of this location.
locations[].selectedbooleanReviews are followed for selected locations.
locations[].lastSyncedAtstring (date-time) or null
locations[].lastErrorstring or null
summaryobject
summary.countinteger
summary.averagenumber or null
summary.distributionarray of integerCounts of 1, 2, 3, 4 and 5-star reviews.
summary.unansweredinteger
summary.last30Daysinteger

Draft a reply

POST /organizations/{organizationId}/reviews/items/{reviewId}/draft-reply

A reply to edit before posting, written by Claude from the review, or a polite template without an AI key. Nothing is posted. Rate-limited.

Permissionreviews.manage (Owner, Admin, Staff)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolreviews_draftReply (toolset marketing)
PlanGoogle reviews: the Grow plan and up.

Parameters

NameInTypeRequiredDescription
reviewIdpathstringYes

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/reviews/items/{reviewId}/draft-reply" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
draftstring
sourceenumOne of AI, TEMPLATE.

Reply to a review

POST /organizations/{organizationId}/reviews/items/{reviewId}/reply

Public: posts (or replaces) the business's reply on Google, where anyone can read it. Emits review.replied. 409 when Google isn't connected or refuses.

Permissionreviews.manage (Owner, Admin, Staff)
Risksensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP toolreviews_reply (toolset marketing)
PlanGoogle reviews: the Grow plan and up.
ApprovalOver MCP, this tool asks for your OK first (in the AI app when it supports it, otherwise in SKUFlow). See Approvals.

Parameters

NameInTypeRequiredDescription
reviewIdpathstringYes

Request body

FieldTypeRequiredDescription
commentstringYesUp to 4000 characters.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/reviews/items/{reviewId}/reply" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"comment":"string"}'

Response

200: the answer's fields
FieldTypeDescription
idstring
reviewerNamestring
reviewerPhotoUrlstring or null
ratinginteger1–5 stars (0 when Google gave none).
commentstring
postedAtstring (date-time)
editedAtstring (date-time)
replystring or nullThe business's public reply, when there is one.
repliedAtstring (date-time) or null
customerIdstring or null
customerobject or null
customer.idstring
customer.namestring
locationobject
location.idstring
location.titlestring

Remove a reply

DELETE /organizations/{organizationId}/reviews/items/{reviewId}/reply

Removes the business's public reply from Google. 409 when there is none.

Permissionreviews.manage (Owner, Admin, Staff)
Risksensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP toolreviews_deleteReply (toolset marketing)
PlanGoogle reviews: the Grow plan and up.
ApprovalOver MCP, this tool always waits for your approval in SKUFlow. See Approvals.

Parameters

NameInTypeRequiredDescription
reviewIdpathstringYes

Example

curl -X DELETE "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/reviews/items/{reviewId}/reply" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
idstring
reviewerNamestring
reviewerPhotoUrlstring or null
ratinginteger1–5 stars (0 when Google gave none).
commentstring
postedAtstring (date-time)
editedAtstring (date-time)
replystring or nullThe business's public reply, when there is one.
repliedAtstring (date-time) or null
customerIdstring or null
customerobject or null
customer.idstring
customer.namestring
locationobject
location.idstring
location.titlestring

Start connecting Google

POST /organizations/{organizationId}/reviews/google/connect

Grants access: returns Google's consent URL for the Business Profile (business.manage). Google then redirects to /integrations/google/callback with code and state; finish with POST /reviews/google/callback. 400 when this server has no Google OAuth client.

Permissionintegrations.manage (Owner, Admin)
Risksensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP toolreviews_googleConnect (toolset marketing)
PlanGoogle reviews: the Grow plan and up.
ApprovalWaits for your approval in SKUFlow when called with an API key or a connected app: the first call answers 428 APPROVAL_REQUIRED; once you approve it, repeat the call with the X-SKUFlow-Approval header. See Approvals.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/reviews/google/connect" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
authorizeUrlstring
modeenumOne of live, fake, unconfigured.

Disconnect Google

POST /organizations/{organizationId}/reviews/google/disconnect

Revokes access: revokes and forgets the Google tokens. Synced reviews and locations stay; reconnect to sync again.

Permissionintegrations.manage (Owner, Admin)
Risksensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP toolreviews_googleDisconnect (toolset marketing)
ApprovalOver MCP, this tool always waits for your approval in SKUFlow. See Approvals.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/reviews/google/disconnect" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
googleobject
google.modeenumunconfigured: this server has no Google OAuth client. One of live, fake, unconfigured.
google.connectedboolean
google.statusstring
google.accountstring or nullThe Google account the Business Profile is managed with.
google.connectedAtstring (date-time) or null
google.lastSyncAtstring (date-time) or null
google.lastErrorstring or null
locationsarray of object
locations[].idstring
locations[].titlestring
locations[].addressstring
locations[].reviewUrlstring or nullWhere customers write a review of this location.
locations[].selectedbooleanReviews are followed for selected locations.
locations[].lastSyncedAtstring (date-time) or null
locations[].lastErrorstring or null
summaryobject
summary.countinteger
summary.averagenumber or null
summary.distributionarray of integerCounts of 1, 2, 3, 4 and 5-star reviews.
summary.unansweredinteger
summary.last30Daysinteger

Customer feedback

GET /organizations/{organizationId}/feedback

What customers said when they paid, newest first, with the customer and invoice; filter by stars. summary: how many were asked and answered, the average, the stars and how many went on to Google. Read-only.

Permissionreviews.read (Owner, Admin, Staff, Member)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP toolfeedback_list (toolset customers)

Parameters

NameInTypeRequiredDescription
ratingqueryintegerNo1–5.
limitqueryintegerNo1–200.

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/feedback" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
itemsarray of object
items[].idstring
items[].ratinginteger1–5 stars.
items[].commentstring or null
items[].submittedAtstring (date-time) or null
items[].sourcestring or nullWhere the customer answered (pay page, receipt …).
items[].postedToGoogleboolean
items[].customerobject
items[].customer.idstring
items[].customer.namestring
items[].invoiceobject
items[].invoice.idstring
items[].invoice.identifierstringINV-n
summaryobject
summary.countintegerAnswers.
summary.averagenumber or nullAverage stars; null without answers.
summary.starsarray of integerHow many gave 1, 2, 3, 4 and 5 stars.
summary.postedToGoogleinteger
summary.askedintegerFeedback links made (asked).

On this page