Vendasta Net Promoter Score Service API
The NetPromoterScoreService API from Vendasta — 4 operation(s) for netpromoterscoreservice.
The NetPromoterScoreService API from Vendasta — 4 operation(s) for netpromoterscoreservice.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/vendasta-netpromoterscoreservice-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
title: Reputation Net Promoter Score Service API
version: 4.34.0
servers:
- description: Production
url: https://prod.apigateway.co/grpc
tags:
- name: NetPromoterScoreService
paths:
/v1/reputation/nps/create:
post:
operationId: NetPromoterScoreService_LeaveNetPromoterScore
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/v1LeaveNetPromoterScoreRequest'
description: Request message for submitting or updating a Net Promoter Score.
required: true
responses:
'200':
content:
application/json:
schema:
type: object
description: A successful response.
default:
content:
application/json:
schema:
$ref: '#/components/schemas/rpcStatus'
description: An unexpected error response.
summary: Leave Net Promoter Score
tags:
- NetPromoterScoreService
/v1/reputation/nps/get-details:
post:
operationId: NetPromoterScoreService_GetNetPromoterScoreDetails
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/v1GetNetPromoterScoreDetailsRequest'
description: Request message for retrieving NPS redirect configuration details.
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/v1GetNetPromoterScoreDetailsResponse'
description: A successful response.
default:
content:
application/json:
schema:
$ref: '#/components/schemas/rpcStatus'
description: An unexpected error response.
summary: Get NPS redirect details
tags:
- NetPromoterScoreService
/v1/reputation/nps/import:
post:
operationId: NetPromoterScoreService_ImportNPS
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/v1ImportNPSRequest'
description: Request message for importing an NPS record, primarily for importing historical data from external systems.
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/v1ImportNPSResponse'
description: A successful response.
default:
content:
application/json:
schema:
$ref: '#/components/schemas/rpcStatus'
description: An unexpected error response.
summary: Import NPS
tags:
- NetPromoterScoreService
/v1/reputation/nps/list:
post:
description: List NetPromoterScore feedback records for a business account with optional filtering and pagination.
operationId: NetPromoterScoreService_ListNetPromoterScores
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/v1ListNetPromoterScoresRequest'
description: Request message for listing Net Promoter Score records with optional filtering and pagination.
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/v1ListNetPromoterScoresResponse'
description: A successful response.
default:
content:
application/json:
schema:
$ref: '#/components/schemas/rpcStatus'
description: An unexpected error response.
security:
- OAuth2:
- business-app
- reputation
- reputation.nps:read
summary: List NPS scores
tags:
- NetPromoterScoreService
components:
schemas:
rpcStatus:
properties:
code:
format: int32
type: integer
details:
items:
$ref: '#/components/schemas/protobufAny'
type: array
message:
type: string
type: object
v1NetPromoterScoreAttribute:
description: A key-value pair providing additional metadata for an NPS record.
properties:
key:
description: Output only. The attribute key (e.g., "source_system_id", "service_type", "external_review_id").
readOnly: true
type: string
value:
description: Output only. The attribute value corresponding to the key.
readOnly: true
type: string
title: Net Promoter Score Attribute
type: object
v1GetNetPromoterScoreDetailsRequest:
description: Request message for retrieving NPS redirect configuration details.
properties:
netPromoterScoreId:
description: Required. The NPS record ID to get details for.
type: string
required:
- netPromoterScoreId
title: Get Net Promoter Score Details Request
type: object
v1NPSProviderDetails:
description: Information about a provider (employee) associated with an NPS record.
properties:
id:
readOnly: true
title: 'Output only. IAM user ID of the provider (starts with "U-") created or linked when the NPS was received.
Used to fetch provider details such as first name, last name, and external ID from IAM.
example: "U-e3bbb42b-c464-4326-9c09-aa8cfc45e0b3"'
type: string
name:
description: 'Output only. Full name of the provider (example: "John Doe").'
readOnly: true
type: string
title: NPS Provider Details
type: object
vendastatypesFieldMask:
description: "paths: \"f.a\"\n paths: \"f.b.d\"\n\nHere `f` represents a field in some root message, `a` and `b`\nfields in the message found in `f`, and `d` a field found in the\nmessage in `f.b`.\n\nField masks are used to specify a subset of fields that should be\nreturned by a get operation or modified by an update operation.\nField masks also have a custom JSON encoding (see below).\n\n# Field Masks in Projections\n\nWhen used in the context of a projection, a response message or\nsub-message is filtered by the API to only contain those fields as\nspecified in the mask. For example, if the mask in the previous\nexample is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\nThe result will not contain specific values for fields x,y and z\n(their value will be set to the default, and omitted in proto text\noutput):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\nA repeated field is not allowed except at the last position of a\npaths string.\n\nIf a FieldMask object is not present in a get operation, the\noperation applies to all fields (as if a FieldMask of all fields\nhad been specified).\n\nNote that a field mask does not necessarily apply to the\ntop-level response message. In case of a REST get operation, the\nfield mask applies directly to the response, but in case of a REST\nlist operation, the mask instead applies to each individual message\nin the returned resource list. In case of a REST custom method,\nother definitions may be used. Where the mask applies will be\nclearly documented together with its declaration in the API. In\nany case, the effect on the returned resource/resources is required\nbehavior for APIs.\n\n# Field Masks in Update Operations\n\nA field mask in update operations specifies which fields of the\ntargeted resource are going to be updated. The API is required\nto only change the values of the fields as specified in the mask\nand leave the others untouched. If a resource is passed in to\ndescribe the updated values, the API ignores the values of all\nfields not covered by the mask.\n\nIf a repeated field is specified for an update operation, the existing\nrepeated values in the target resource will be overwritten by the new values.\nNote that a repeated field is only allowed in the last position of a `paths`\nstring.\n\nIf a sub-message is specified in the last position of the field mask for an\nupdate operation, then the existing sub-message in the target resource is\noverwritten. Given the target message:\n\n f {\n b {\n d : 1\n x : 2\n }\n c : 1\n }\n\nAnd an update message:\n\n f {\n b {\n d : 10\n }\n }\n\nthen if the field mask is:\n\n paths: \"f.b\"\n\nthen the result will be:\n\n f {\n b {\n d : 10\n }\n c : 1\n }\n\nHowever, if the update mask was:\n\n paths: \"f.b.d\"\n\nthen the result would be:\n\n f {\n b {\n d : 10\n x : 2\n }\n c : 1\n }\n\nIn order to reset a field's value to the default, the field must\nbe in the mask and set to the default value in the provided resource.\nHence, in order to reset all fields of a resource, provide a default\ninstance of the resource and set all fields in the mask, or do\nnot provide a mask as described below.\n\nIf a field mask is not present on update, the operation applies to\nall fields (as if a field mask of all fields has been specified).\nNote that in the presence of schema evolution, this may mean that\nfields the client does not know and has therefore not filled into\nthe request will be reset to their default. If this is unwanted\nbehavior, a specific service may require a client to always specify\na field mask, producing an error if not.\n\nAs with get operations, the location of the resource which\ndescribes the updated values in the request message depends on the\noperation kind. In any case, the effect of the field mask is\nrequired to be honored by the API.\n\n## Considerations for HTTP REST\n\nThe HTTP kind of an update operation which uses a field mask must\nbe set to PATCH instead of PUT in order to satisfy HTTP semantics\n(PUT must only be used for full updates).\n\n# JSON Encoding of Field Masks\n\nIn JSON, a field mask is encoded as a single string where paths are\nseparated by a comma. Fields name in each path are converted\nto/from lower-camel naming conventions.\n\nAs an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\nIn proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\nIn JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n# Field Masks and Oneof Fields\n\nField masks treat fields in oneofs just as regular fields. Consider the\nfollowing message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\nThe field mask can be:\n\n mask {\n paths: \"name\"\n }\n\nOr:\n\n mask {\n paths: \"sub_message\"\n }\n\nNote that oneof type names (\"test_oneof\" in this case) cannot be used in\npaths."
properties:
paths:
description: The set of field mask paths.
items:
type: string
type: array
title: '`FieldMask` represents a set of symbolic field paths, for example:'
type: object
v1GetNetPromoterScoreDetailsResponse:
description: Response message containing NPS redirect configuration details.
properties:
npsRedirectReviewSource:
description: Output only. Whether to redirect to the review source when score >= nps_redirect_threshold.
readOnly: true
type: boolean
npsRedirectThreshold:
description: Output only. Effective redirect threshold (6-10). Server resolves unset/invalid stored values to the default before returning.
format: int64
readOnly: true
type: string
reviewSourceId:
description: Output only. The review source ID to redirect to.
readOnly: true
type: string
title: Get Net Promoter Score Details Response
type: object
v1ScoreCategory:
default: UNSET
enum:
- UNSET
- DETRACTORS
- PASSIVES
- PROMOTERS
type: string
v1ListNetPromoterScoresRequestFilters:
description: Optional filtering criteria for narrowing NPS results.
properties:
channel:
$ref: '#/components/schemas/v1CommunicationChannel'
contactNames:
items:
type: string
title: 'Optional. Filter NPS records by contact names using fuzzy text search.
A contact is the CRM customer who received the service and submitted the NPS feedback.
This performs a case-insensitive search against the contact.name field.
Multiple names can be provided to filter for records matching any of the specified contact names.
example: ["Jane Smith", "Michael Johnson", "Sarah Davis"]'
type: array
fromDate:
description: Optional. Include NPS scores submitted on or after this timestamp (RFC3339 UTC, inclusive).
format: date-time
type: string
hasProviderAssociation:
description: 'Optional. Filter NPS records based on whether they have associated providers.
A provider is the employee or service provider who delivered the service to the contact.
When true, returns only NPS records that have provider associations (populated provider_ids or providers fields).
When false, returns only NPS records that do NOT have provider associations.
When omitted/null, returns all NPS records regardless of provider association status.'
type: boolean
providerIds:
items:
type: string
title: 'This field filters NPS records by provider (employee) internal IAM user ID (starts with "U-") and not by provider name.
Note: This identifies the employee/provider who provided the service, not the customer (contact) who submitted the NPS.
Accepts IDs only; names are not supported.
example: ["U-e3bbb42b-c464-4326-9c09-aa8cfc45e0b3", "U-fa09664d-698d-4349-926f-147fb55e2a72"]'
type: array
providerNames:
items:
type: string
title: 'Optional. Filter NPS records by provider names using fuzzy text search.
A provider is the employee or service provider who delivered the service to the customer.
This performs a case-insensitive search against the names in the providers field.
Multiple names can be provided to filter for records matching any of the specified provider names.
example: ["John Doe", "Sarah Johnson", "Mike Smith"]'
type: array
scoreCategory:
description: 'Optional. Filter by NPS score categories: DETRACTORS (0-6), PASSIVES (7-8), PROMOTERS (9-10).'
items:
$ref: '#/components/schemas/v1ScoreCategory'
type: array
toDate:
description: Optional. Include NPS scores submitted on or before this timestamp (RFC3339 UTC, inclusive).
format: date-time
type: string
type: object
v1ContactDetails:
description: Information about the customer (contact) who submitted the NPS score.
properties:
email:
description: Output only. Customer’s email address, if available.
readOnly: true
type: string
name:
description: Output only. Customer’s full name.
readOnly: true
type: string
phone:
description: Output only. Customer’s phone number, if available.
readOnly: true
type: string
title: Contact Details
type: object
v1LeaveNetPromoterScoreRequest:
description: Request message for submitting or updating a Net Promoter Score.
properties:
comment:
description: Optional. Comment seen in some UI, so we know what score it was associated with.
type: string
fieldMask:
$ref: '#/components/schemas/vendastatypesFieldMask'
netPromoterScoreId:
description: Required. NPS ID of the entity that will be updated.
type: string
score:
description: Required. The NPS score that was picked on scale of 1 to 10.
format: int64
type: string
required:
- netPromoterScoreId
- score
title: Leave Net Promoter Score Request
type: object
v1CommunicationChannel:
default: COMMUNICATION_CHANNEL_UNSPECIFIED
enum:
- COMMUNICATION_CHANNEL_UNSPECIFIED
- COMMUNICATION_CHANNEL_EMAIL
- COMMUNICATION_CHANNEL_SMS
type: string
v1ListNetPromoterScoresResponse:
description: Response message containing NPS records matching the search criteria with pagination metadata.
properties:
cursor:
description: 'Output only. Cursor for the next page. This value should be used in the next request''s cursor field.
Empty string means no more pages. The cursor is an opaque token. It must be used exactly as returned and should not be modified or generated.'
readOnly: true
type: string
hasMore:
description: Output only. Whether there are more results available.
readOnly: true
type: boolean
netPromoterScore:
description: Output only. NPS score records matching the search criteria for the current page. Empty list if no matches.
items:
$ref: '#/components/schemas/v1NetPromoterScore'
readOnly: true
type: array
totalResults:
description: Output only. Total count of NPS scores matching criteria across all pages.
format: int64
readOnly: true
type: string
title: List Net Promoter Scores Response
type: object
v1ListNetPromoterScoresRequest:
description: Request message for listing Net Promoter Score records with optional filtering and pagination.
properties:
accountGroupId:
description: Required. Business account ID (starts with "AG-") to list NPS scores for.
type: string
cursor:
description: 'Optional. Pagination cursor from the previous response. Should be omitted when fetching the first page of results.
For subsequent pages, the cursor value from the previous response should be used.
Cursors are opaque tokens and must be used exactly as returned. Cursor values should not be generated or modified.'
type: string
filters:
$ref: '#/components/schemas/v1ListNetPromoterScoresRequestFilters'
hideParent:
default: 'false'
description: When set to true, parent NPS records (primary feedback marked is_parent=true and referenced by other NPS records via ParentNPSID) are excluded from the response. When set to false, the parent NPS records are included in the response.
type: boolean
includeTriggeringActivityDetails:
default: 'false'
description: When set to true, triggering_activity_details will be populated with CRM activity information for each NPS record. When set to false, triggering_activity_details will be empty.
type: boolean
pageSize:
description: 'Optional. Number of items to return per page.
This value must be less than or equal to 500.'
format: int64
type: string
required:
- accountGroupId
title: List Net Promoter Scores Request
type: object
protobufAny:
additionalProperties: {}
properties:
'@type':
type: string
type: object
v1ImportNPSResponse:
description: Response message containing the ID of the created NPS record.
properties:
netPromoterScoreId:
description: Output only. The NPS record ID (starts with "NPS-").
readOnly: true
type: string
title: Import NPS Response
type: object
v1ImportNPSRequest:
description: Request message for importing an NPS record, primarily for importing historical data from external systems.
properties:
accountGroupId:
description: Required. Business account ID (starts with "AG-").
type: string
attributes:
description: 'Optional. Additional attributes associated with the NPS score (key-value pairs).
This will be used to store meta data that provides additional context of the NPS feedback.'
type: object
comment:
description: Optional. Customer comment provided along with the score.
type: string
communicationChannel:
$ref: '#/components/schemas/v1CommunicationChannel'
crmContactId:
description: Required. CRM Contact ID of the customer.
type: string
externalReviewRequestId:
description: Required. Unique external identifier for the review request. Used for deduplication.
type: string
npsExternalId:
description: Optional. External NPS identifier for tracking.
type: string
providerIds:
description: Optional. Provider IDs (IAM user IDs starting with "U-") associated with this NPS.
items:
type: string
type: array
requestSentTime:
description: Required. Time when the request was sent.
format: date-time
type: string
score:
description: Optional. NPS score (0-10). Set if customer has already left a score.
format: int64
type: string
scoreLeft:
description: Optional. Time when the score was left by the customer.
format: date-time
type: string
status:
title: "Optional. Status of the review request.\nStatus mapping:\n \"sending\" -> Sending\n \"sent\" -> Sent\n \"delivered\" -> Delivered\n \"opened\" -> Opened\n \"clicked\" -> Clicked\n \"failed\" -> Failed\nUnmapped statuses (mapped to Invalid):\n blocked, null, processing_attachments, undelivered, received, skipped\nDefault behavior when status is empty/not provided:\n - If score or comment is present -> Opened\n - If no score and no comment -> Invalid"
type: string
templateType:
$ref: '#/components/schemas/v1TemplateType'
triggeringActivityIds:
description: Optional. Triggering activity IDs that initiated this review request.
items:
type: string
type: array
required:
- accountGroupId
- crmContactId
- requestSentTime
- externalReviewRequestId
title: Import NPS Request
type: object
v1TriggeringActivityDetail:
description: Information about the CRM activity that triggered the NPS request.
properties:
standardActivitySourceName:
description: Output only. Source name of the transaction/job e.g. (Neighborly, serviceTitan etc).
readOnly: true
type: string
systemActivityCreated:
description: Output only. System creation timestamp of the activity.
format: date-time
readOnly: true
type: string
systemActivityEffective:
description: Output only. Timestamp of the job/transaction.
format: date-time
readOnly: true
type: string
systemActivityExternalId:
description: Output only. Job ID of the source system of the transaction.
readOnly: true
type: string
systemActivityId:
description: Output only. Transaction ID from the source system.
readOnly: true
type: string
title: Triggering Activity Detail
type: object
v1TemplateType:
default: TEMPLATE_TYPE_UNSPECIFIED
enum:
- TEMPLATE_TYPE_UNSPECIFIED
- TEMPLATE_TYPE_REVIEW_REQUEST
- TEMPLATE_TYPE_NPS_REQUEST
- TEMPLATE_TYPE_REVIEW_AND_NPS_REQUEST
type: string
v1NetPromoterScore:
description: A customer's Net Promoter Score (NPS) submission, indicating how likely they are to recommend the business.
properties:
accountGroupId:
description: Output only. Business account ID (starts with "AG-") associated with this NPS score.
readOnly: true
type: string
attributes:
description: Output only. Additional attributes associated with the NPS score (key-value pairs).
items:
$ref: '#/components/schemas/v1NetPromoterScoreAttribute'
readOnly: true
type: array
classifiedAs:
$ref: '#/components/schemas/v1ScoreCategory'
comment:
description: Output only. Optional customer comment provided along with the score.
readOnly: true
type: string
contact:
$ref: '#/components/schemas/v1ContactDetails'
contactExternalId:
description: Output only. Contact external id of the user who submitted the NPS score.
readOnly: true
type: string
contactId:
readOnly: true
title: 'Output only. CRM Contact ID of the customer who submitted the NPS score.
This identifies the customer who provided the feedback, not the employee/provider who provided the service.
example: "ContactID-cb3671fd-9cb6-4f8c-86b6-f604e6150aeb"'
type: string
created:
description: Output only. Timestamp when the record was created (RFC3339 UTC).
format: date-time
readOnly: true
type: string
deleted:
description: Output only. Timestamp when the record was deleted, if applicable (RFC3339 UTC).
format: date-time
readOnly: true
type: string
netPromoterScoreId:
description: Output only. Unique identifier for the Net Promoter Score record starts with 'NPS-'.
readOnly: true
type: string
npsExternalId:
description: 'Output only. External NPS identifier for imported NPS records.
This field stores the external identifier provided during NPS data migration through the ImportNPS API.
It is used for deduplication and reconciliation against the source system.'
readOnly: true
type: string
providerIds:
items:
type: string
readOnly: true
title: 'Output only. List of IAM user IDs for providers (employees) associated with this NPS record.
These IDs are created or linked when the NPS is received and are used to fetch
example: ["U-e3bbb42b-c464-4326-9c09-aa8cfc45e0b3", "U-fa09664d-698d-4349-926f-147fb55e2a72"]'
type: array
providers:
items:
$ref: '#/components/schemas/v1NPSProviderDetails'
readOnly: true
title: 'Output only. List of providers (employees) associated with this NPS record.
example: [{id:"U-e3bbb42b-c464-4326-9c09-aa8cfc45e0b3", name: "John Doe"}, {id:"U-fa09664d-698d-4349-926f-147fb55e2a72", name:"Julie"}]'
type: array
reviewRequestRecordId:
description: Output only. ID of the review request for which the customer submitted this NPS feedback.
readOnly: true
type: string
score:
description: Output only. The NPS score value on a scale of 0-10.
format: int64
readOnly: true
type: string
scoreLeftTime:
description: Output only. Timestamp when the NPS score was submitted by the customer (RFC3339 UTC).
format: date-time
readOnly: true
type: string
triggeringActivityDetails:
description: 'Output only. Details of the CRM activities that triggered this NPS request.
This field is populated only when:
1) include_triggering_activity_details is set to true in the request, and
2) the NPS request was triggered from a third-party integration that stored triggering_activity_ids in the NPS record.'
items:
$ref: '#/components/schemas/v1TriggeringActivityDetail'
readOnly: true
type: array
updated:
description: Output only. Timestamp when the record was last updated (RFC3339 UTC).
format: date-time
readOnly: true
type: string
title: Net Promoter Score
type: object
securitySchemes:
OAuth2:
flows:
authorizationCode:
authorizationUrl: https://sso-api-prod.apigateway.co/oauth2/auth
scopes:
business-app: Allows the application to manage all features of Business App
reputation: Allows the application to manage reputation reports for your clients' businesses
reputation.nps:read: Allows the application view-only access to NPS data for the business locations you have access to
reputation.review:read: Allows the application view-only access to retrieve reviews for the business locations you have access to
tokenUrl: https://sso-api-prod.apigateway.co/oauth2/token
type: oauth2