openapi: 3.2.0 info: title: Customer Voice REST Templates API version: '1.0' description: APIs for gathering authentic reviews via email or text using Customer Voice. servers: - url: https://prod.apigateway.co/products/reviews description: Production - url: https://demo.apigateway.co/products/reviews description: Demo - url: '{local}/products/reviews' description: Local - url: http://localhost:11001/products/reviews description: Localhost security: - OAuth2Demo: - reviews - OAuth2Prod: - reviews tags: - name: Templates paths: /reviewRequestTemplates: post: summary: Create Template operationId: post-templates responses: '201': description: Created content: application/vnd.api+json: schema: type: object properties: data: $ref: '#/components/schemas/reviewRequestTemplates' description: "[Status](https://developers.vendasta.com/platform/ZG9jOjEwMTU2NTYy-versioning): `Trusted Tester`\n\nUsed to create a new template within Customer Voice. Dynamic content can be inserted via substitution variables. \n\nThe follow variables are supported within an email template:\n\n- `{{.customerName}}`: The first and last name of the customer.\n- `{{.customerFirstName}}`: The first name of the customer.\n- `{{.businessName}}`: The business location name.\n- `{{.buttonUrl}}`: The review request button URL.\n\nCan be used for dynamic content visibility within an email template:\n\n- `{{.displaySource1}}`: Whether or not to display source 1.\n- `{{.displaySource2}}`: Whether or not to display source 2.\n- `{{.displaySource3}}`: Whether or not to display source 3.\n\nUsed to render images within an email template:\n\n- ``\n- ``\n- ``\n\nUsed to render links within an email template: \n\n- `{{.sourceName1}}`\n- `{{.sourceName2}}`\n- `{{.sourceName3}}`\n\nThe following members must be populated during creation:\n- `relationships.businessLocation.data.id`" x-lifecycle: status: trustedTester security: - OAuth2Demo: - reviews - OAuth2Prod: - reviews parameters: - schema: type: string pattern: ^Bearer\s\S+ in: header name: Authorization description: A Bearer access token to identify the user the app is acting on behalf of. See the Authorization guide for details. required: true - schema: type: string default: application/vnd.api+json example: application/vnd.api+json in: header name: Content-Type description: Indicates the format of the request body being sent. In most cases you will want `application/vnd.api+json` required: true requestBody: content: application/vnd.api+json: schema: type: object properties: data: $ref: '#/components/schemas/reviewRequestTemplates' examples: Example Email Request: value: data: type: reviewRequestTemplates attributes: name: My Preferred Sites Review Request content: 'Hi {{.customerName}},

Thank you for your business! We''d love to know more about your latest experience with us.

{{.buttonUrl}}

Thank you,
John Doe' metadata: subject: Thank you for choosing us! replyEmail: jondoe@mail.com languageLocaleCode: en-US type: email relationships: businessLocation: data: id: AG-12345 Example SMS Request: value: data: type: reviewRequestTemplates attributes: name: My Preferred Sites Review Request content: We'd love to hear about your recent experience with us. Leave us a review here. metadata: customUrl: https://www.yourcustomerexperience.com/reviews/ greeting: Hi {first_name} reviewType: custom type: sms relationships: businessLocation: data: id: AG-12345 tags: - Templates get: summary: List Templates operationId: get-templates responses: '200': description: OK content: application/vnd.api+json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/reviewRequestTemplates' links: type: object properties: self: type: string format: uri first: type: string description: Provides a link back to the first page of results format: uri next: type: string description: The URI at which the next batch of templates can be gotten from format: uri description: '[Status](https://developers.vendasta.com/platform/ZG9jOjEwMTU2NTYy-versioning): `Trusted Tester` Produces a list of templates' parameters: - schema: type: string in: header name: Authorization description: A Bearer access token to identify the user the app is acting on behalf of. See the Authorization guide for details. required: true - schema: type: string in: query name: filter[businessLocation.id] description: Return templates for the specified business location required: true - schema: type: string in: query description: The cursor stores all your filters and current location in the list to allow paging over the results in smaller batches. The value will be provided in the response links. [Pagination Docs](https://developers.vendasta.com/platform/ZG9jOjEwMTkzMDg0-overview#paging). name: page[cursor] - schema: type: string in: query description: The maximum number of tasks you would like returned in a single batch. Use the links.next member in the response to get the remainder. [Pagination Docs](https://developers.vendasta.com/platform/ZG9jOjEwMTkzMDg0-overview#paging). name: page[limit] security: - OAuth2Demo: - reviews - OAuth2Prod: - reviews tags: - Templates x-lifecycle: status: trustedTester x-internal: false options: summary: List valid HTTP verbs for /reviewRequestTemplates operationId: options-templates responses: '204': description: No Content description: 'Used solely for [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) the OPTIONS request returns the list of possible HTTP methods and other headers that browsers use to protect user''s security. You should not call this operation directly. ' tags: - Templates /reviewRequestTemplates/{id}: parameters: - schema: type: string name: id in: path required: true security: - OAuth2Demo: - reviews - OAuth2Prod: - reviews get: summary: Get Template tags: - Templates responses: '200': description: OK content: application/vnd.api+json: schema: type: object properties: data: $ref: '#/components/schemas/reviewRequestTemplates' links: type: object properties: self: type: string operationId: get-templates-id x-lifecycle: status: trustedTester description: '[Status](https://developers.vendasta.com/platform/ZG9jOjEwMTU2NTYy-versioning): `Trusted Tester` Fetch the current values for the specified template.' parameters: - schema: type: string example: Bearer pattern: ^Bearer\s\S+ in: header name: Authorization description: A Bearer access token to identify the user the app is acting on behalf of. See the Authorization guide for details. required: true delete: summary: Delete Template tags: - Templates responses: '204': description: No Content operationId: delete-templates-id x-lifecycle: status: trustedTester description: '[Status](https://developers.vendasta.com/platform/ZG9jOjEwMTU2NTYy-versioning): `Trusted Tester` Delete the specified template.' parameters: - schema: type: string example: Bearer pattern: ^Bearer\s\S+ in: header name: Authorization description: A Bearer access token to identify the user the app is acting on behalf of. See the Authorization guide for details. required: true security: - OAuth2Demo: - reviews - OAuth2Prod: - reviews patch: summary: Update Template operationId: patch-templates-id tags: - Templates description: '[Status](https://developers.vendasta.com/platform/ZG9jOjEwMTU2NTYy-versioning): `Trusted Tester` Update the existing template. Only the root ID and type fields are required. All others are optional and will keep their original value if omitted.' x-lifecycle: status: trustedTester parameters: - schema: type: string example: Bearer pattern: ^Bearer\s\S+ in: header name: Authorization description: A Bearer access token to identify the user the app is acting on behalf of. See the Authorization guide for details. required: true - schema: type: string default: application/vnd.api+json enum: - application/vnd.api+json in: header name: Content-Type required: true description: Indicates the format of the request body being sent. In most cases you will want `application/vnd.api+json` security: - OAuth2Demo: - reviews - OAuth2Prod: - reviews responses: '200': description: Ok content: application/vnd.api+json: schema: type: object properties: data: $ref: '#/components/schemas/reviewRequestTemplates' links: type: object properties: self: type: string format: uri description: The address of the updated template headers: {} requestBody: content: application/vnd.api+json: schema: type: object properties: data: $ref: '#/components/schemas/reviewRequestTemplates' options: summary: List valid HTTP verbs for /reviewRequestTemplates/{id} operationId: options-templates-id description: 'Used solely for [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) the OPTIONS request returns the list of possible HTTP methods and other headers that browsers use to protect user''s security. You should not call this operation directly. ' responses: '204': description: No Content tags: - Templates components: schemas: reviewRequestTemplates: title: Templates description: '[Status](https://developers.vendasta.com/platform/ZG9jOjEwMTU2NTYy-versioning): `Trusted Tester` Templates that can be used for emails and other messaging services.' type: object x-examples: Example Template: type: reviewRequestTemplates id: AG-12345/type/email/template-id/TEM-12345 attributes: name: My Preferred Sites Review Request content: 'Hi {{.customerName}},

Thank you for your business! We''d love to know more about your latest experience with us.

{{.buttonUrl}}

Thank you,
John Doe' emailMetadata: attributes: subject: Thank you for choosing us! replyEmail: jondoe@mail.com languageLocaleCode: en-US type: email relationships: businessLocation: data: id: AG-12345 x-lifecycle: status: trustedTester x-tags: - Templates properties: id: type: string example: AG-12345/type/email/template-id/TEM-12345 readOnly: true type: type: string default: reviewRequestTemplates enum: - reviewRequestTemplates readOnly: true attributes: type: object properties: name: type: string description: A user friendly description for the template. example: My Preferred Sites Review Request emailMetadata: type: object description: Additional information about the template. properties: subject: type: string description: The subject line of the email. example: Thank you for choosing us! replyTo: type: string description: The email address to which the customer should reply. example: jondoe@mail.com format: email smsMetadata: type: object description: Additional information about the template. properties: url: type: string description: The url that will customer will be sent to. example: https://www.yoursite.com/reviews/customer-123 format: uri greeting: type: string description: The sms message prefix. `{first_name}` is an optional template variable that can be used within the greeting. example: Hi {first_name} prefix: type: string description: Generally a shortened version of the company name. templateType: type: string enum: - myListing - preferredReviewSites - custom description: '- `myListing`: The link within the sms message will direct the customer to the my listing page. - `preferredReviewSites`: The link within the sms message will direct the customer to the preferred review sites. - `custom`: The link within the sms message will direct the customer to the custom url configured within the metadata.' content: type: string description: The content of the template. example: 'Hi {{.customerName}},

Thank you for your business! We''d love to know more about your latest experience with us.

{{.buttonUrl}}

Thank you,
John Doe' languageLocaleCode: type: string pattern: ^[a-z]{2}-[A-Z]{2}$ example: en-US description: 'The local language that the template was written in. Note: We currently have a limited set of allowed languages but expect to support many more in the future. When the requested language is not supported US English will be used. It should be a single BCP47/RFC5646 language tag. This is an [ISO 639-1 Alpha-2](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) language code in lowercase and an [ISO 3166-1 Alpha-2](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes) country code in uppercase, separated by a dash. Examples: - `en-US` English (US) - `fr-FR` French (France)' templateType: type: string enum: - email - sms description: The type of the template. example: email relationships: type: object properties: businessLocation: type: object properties: data: type: object properties: id: type: string minLength: 1 description: The ID of the business location the template belongs to. type: type: string default: businessLocation enum: - businessLocation readOnly: true required: - id securitySchemes: JWT: type: http scheme: bearer bearerFormat: JWT OAuth2Demo: type: oauth2 flows: authorizationCode: authorizationUrl: https://sso-api-demo.apigateway.co/oauth2/auth tokenUrl: https://sso-api-demo.apigateway.co/oauth2/token scopes: reviews: Read-write access to review request APIs OAuth2Prod: type: oauth2 flows: authorizationCode: authorizationUrl: https://sso-api-prod.apigateway.co/oauth2/auth tokenUrl: https://sso-api-prod.apigateway.co/oauth2/token scopes: reviews: Read-write access to review request APIs