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