arazzo: 1.0.1 info: title: Highlight Session Feedback Capture summary: Open a session, attach searchable session properties, then record end-user feedback against that session. description: >- Highlight exposes no comments API; the closest real capability on the public ingestion endpoint is session feedback, which lets an end user leave a note that is pinned to the replay. This workflow captures that flow over the single GraphQL ingestion endpoint: it runs initializeSession to mint a session_secure_id, runs addSessionProperties to tag the session with searchable key/value properties, then runs addSessionFeedback to record the user's verbatim feedback against the same session. The feedback and property mutations both require the secure id from initialize, so the steps are genuinely chained. Every step spells out its GraphQL request inline so the flow can be read and executed without opening the underlying OpenAPI description. version: 1.0.0 sourceDescriptions: - name: sessionIngestionApi url: ../openapi/highlight-session-ingestion-api-openapi.yml type: openapi workflows: - workflowId: session-feedback-capture summary: Initialize a session, tag it with properties, and record end-user feedback. description: >- Runs initializeSession to obtain a session_secure_id, then addSessionProperties to attach searchable properties, then addSessionFeedback to pin verbatim user feedback to the session replay. inputs: type: object required: - organizationVerboseId - feedbackText properties: organizationVerboseId: type: string description: The Highlight project verbose id that owns the session. clientVersion: type: string description: The highlight.run client SDK version. default: "9.0.0" firstloadVersion: type: string description: The firstload script version. default: "9.0.0" environment: type: string description: The deployment environment the session was recorded in. default: production clientId: type: string description: A stable client identifier for the browser. default: "" propertiesObject: type: object description: Key/value session properties to attach for search and filtering. default: {} feedbackText: type: string description: The verbatim feedback the end user left on the session. userName: type: string description: The name of the user leaving feedback. default: "" userEmail: type: string description: The email of the user leaving feedback. default: "" steps: - stepId: initializeSession description: >- Run the initializeSession GraphQL mutation to open a new session for the project and return its session_secure_id. operationId: executePublicGraphMutation requestBody: contentType: application/json payload: operationName: initializeSession query: >- mutation initializeSession($organization_verbose_id: String!, $enable_strict_privacy: Boolean!, $client_version: String!, $firstload_version: String!, $client_config: String!, $environment: String!, $client_id: String!) { initializeSession(organization_verbose_id: $organization_verbose_id, enable_strict_privacy: $enable_strict_privacy, client_version: $client_version, firstload_version: $firstload_version, client_config: $client_config, environment: $environment, client_id: $client_id) { secure_id project_id } } variables: organization_verbose_id: $inputs.organizationVerboseId enable_strict_privacy: false client_version: $inputs.clientVersion firstload_version: $inputs.firstloadVersion client_config: "{}" environment: $inputs.environment client_id: $inputs.clientId successCriteria: - condition: $statusCode == 200 - context: $response.body condition: $.data.initializeSession.secure_id != null type: jsonpath outputs: sessionSecureId: $response.body#/data/initializeSession/secure_id - stepId: addProperties description: >- Run the addSessionProperties GraphQL mutation to attach searchable key/value properties to the session. operationId: executePublicGraphMutation requestBody: contentType: application/json payload: operationName: addSessionProperties query: >- mutation addSessionProperties($session_secure_id: String!, $properties_object: Any) { addSessionProperties(session_secure_id: $session_secure_id, properties_object: $properties_object) } variables: session_secure_id: $steps.initializeSession.outputs.sessionSecureId properties_object: $inputs.propertiesObject successCriteria: - condition: $statusCode == 200 outputs: propertiesResult: $response.body#/data/addSessionProperties - stepId: addFeedback description: >- Run the addSessionFeedback GraphQL mutation to record the end user's verbatim feedback against the session. operationId: executePublicGraphMutation requestBody: contentType: application/json payload: operationName: addSessionFeedback query: >- mutation addSessionFeedback($session_secure_id: String!, $user_name: String, $user_email: String, $verbatim: String!, $timestamp: Timestamp!) { addSessionFeedback(session_secure_id: $session_secure_id, user_name: $user_name, user_email: $user_email, verbatim: $verbatim, timestamp: $timestamp) } variables: session_secure_id: $steps.initializeSession.outputs.sessionSecureId user_name: $inputs.userName user_email: $inputs.userEmail verbatim: $inputs.feedbackText timestamp: "1970-01-01T00:00:00Z" successCriteria: - condition: $statusCode == 200 outputs: feedbackResult: $response.body#/data/addSessionFeedback outputs: sessionSecureId: $steps.initializeSession.outputs.sessionSecureId feedbackResult: $steps.addFeedback.outputs.feedbackResult