openapi: 3.2.0 info: title: Reporting Interactions API description: "Reporting APIs are a collection of RESTful APIs that provide a convenient and secure way for integrating reporting data from Observe.AI into external system of your choice. These APIs are asynchronous and render data in a JSON format. Observe.AI uses OAuth 2.0 protocol for authentication of APIs. Please refer to Authentication section to obtain credentials to access Reporting APIs. Below are the 3 APIs that we support -\n
    \n
  1. Interactions API- To fetch Moments, Transcripts and Interactions(Voice calls, Webchat, Email) metadata
  2. \n
  3. Evaluations API - To fetch Evaluation forms and submitted Evaluations along with question-wise scores and aggregate scores.
  4. \n
  5. Coachings API - To fetch Coaching sessions with mapped Evaluations and related Notes.
  6. \n
  7. Ack Dispute API - To fetch Ack/Dispute state changes for Evaluations.
  8. \n
  9. Summarization AI API - To fetch GenAI-based Summaries along with Moments, Transcripts and metadata for all Interactions(Voice calls, Webchat).
  10. \n
\n" x-logo: url: https://cdn.observe.ai/observeaiLogo.png servers: - url: https://{base_url} description: Generated server url, where `{base_url}` corresponds to the specific cluster's base URL. tags: - name: Interactions x-displayName: Interactions API description: "Interactions API is an omnichannel API can be used to obtain all the data related to the interactions like Moments, Transcripts and metadata related to Interactions(including Voice calls and Web chat).\n\nPlease note -\n
    \n
  1. Allow 24 hrs to pass before pulling Interactions. ie., For Interactions completed on 14-Jan by 12:00AM PST, they would be available via APIs by 15-Jan by 12:00AM PST.
  2. \n
  3. You can pull Interactions for 30 days at a time i.e., the duration between the end_date and the start_date should not exceed 30 days.
  4. \n
  5. There is no limit as to how far back in the past you want to go for pulling Interactions. You can go back to the first ever evaluation on the platform unless data retention limits have been set.
  6. \n
  7. Interactions API gives a paginated response so the customer need to specify the page number and the desired amount of interactions in a page. By default, page_size is set to 100
  8. \n
  9. There is flexibility to either include or exclude Transcript in the API response by setting a query parameter includeTranscript. By default it is set to false.
  10. \n
  11. The S3 URL obtained in the API response (with the interactions) is valid for 24 hours.
  12. \n
  13. Clients using ‘Calls report API’ are requested to switch to ‘Interactions API’ which provides several benefits listed here. ‘Calls report API’ will be deprecated after 31-Dec-2022. Please reach out to your CSM for more details.
  14. \n
  15. If you have been using Basic Auth for the APIs, we request you to switch to OAuth2.0 based Auth for the APIs by 31-Dec-2022. Detailed instructions to create API Credentials and make the switch to OAuth are documented here. Please reach out to your CSM for more details.
  16. \n
  17. If you need to pull Interactions by ID, there is a separate synchronous API - Get Interactions By Ids.
  18. \n
\n" paths: /v1/data/reports/interactions: post: tags: - Interactions operationId: Create Interaction Request parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/InteractionsSize' - $ref: '#/components/parameters/IncludeTranscript' requestBody: content: application/json: schema: $ref: '#/components/schemas/RawJobRequest' responses: '200': description: Ok content: /*: schema: $ref: '#/components/schemas/PostJobResponse' examples: '0': value: '{"request_id":"3058bc09-f9fc-4586-bc7c-498b95a63ec2",
"start_date":"2022-03-03T00:00:12.000+00:00","end_date":"2022-04-04T00:16:00.000+00:00","status":"INPROGRESS"}' '400': description: Bad Request content: '*/*': schema: $ref: '#/components/schemas/ErrorMessage' examples: '0': value: '{"error_code":"bad_request","error_description":"similar job already exists with request id 3058bc09-b974-4468-ae1f-f7b9b28067f1"}' '401': description: Unauthorized content: '*/*': schema: $ref: '#/components/schemas/ErrorMessage' examples: '0': value: '{"error_code": "auth_token_error", "error_description": "invalid auth token"}' '403': description: Access Denied content: '*/*': schema: $ref: '#/components/schemas/ErrorMessage' examples: '0': value: '{"error_code":"access_denied","error_description":"unauthorized_user"}' '404': description: Request Not Found content: '*/*': schema: $ref: '#/components/schemas/ErrorMessage' examples: '0': value: '{"timestamp":"2022-05-12T06:27:39.587+00:00","status":404,"error":"Not Found","message":"No message available","path":"/v1/data/reports/interaction"}' '405': description: Method Not Allowed content: '*/*': schema: $ref: '#/components/schemas/ErrorMessage' examples: '0': value: '{"timestamp": "2022-05-17T04:21:37.669+00:00", "status": 405, "error": "Method Not Allowed", "message": "Request method ''GET'' not supported", "path": "/v1/data/reports/interactions"}' '429': description: Rate Limit Exceeded content: '*/*': schema: $ref: '#/components/schemas/RateLimitMessage' examples: '0': value: '{"message": "API rate limit exceeded"}' '500': description: Internal Server Error content: '*/*': schema: $ref: '#/components/schemas/ErrorMessage' /v1/data/reports/interactions/{request_id}: get: tags: - Interactions operationId: Get Interactions parameters: - name: request_id in: path required: true schema: type: string responses: '200': description: "Report field Description:\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Param NameTypeDescription
pageintegerThe current page number of the response from the total response present between the given date range
sizeintegerNumber of interactions present in the current page
total_pagesintegerTotal number of pages present for the given date range.
total_sizeintegerTotal number of interactions present for the given date range.
interactionsListThis is the list of interactions (call, chat, external) included in the report. Each interaction in this list is associated with an interaction ID. Inside of each interactions following fields can be found.
idStringThis id represents the id of that particular interaction
account_idStringThis id represents the id of that particular account.
agent_idStringThis id represents the id of the agent who has participated in that particular interaction.
partner_agent_idStringThis id represents the id of the agent who has participated in that particular interaction in the client system.
agent_nameStringThe name of the agent who has participated in that particular interaction.
agent_emailStringThe email of the agent who has participated in that particular interaction.
agent_statusStringThis is a String field which depicts if the agent is active or not. (ACTIVE or IN_ACTIVE).
interaction_urlStringThis field represents the url for the particular interaction.
durationintegerThis is an integer field which represents how much time (seconds) did the interaction happen.
source_partner_meeting_idStringIncase of split interactions, source_partner_meeting_id is the unique identifier for the interaction before split. source_partner_meeting_id is same as unique identifier in the client system.
sequenceIntegerIncase of split interactions, the value of sequence signifies the position of this interaction post split. (Zero based index)
languageStringThis is a field which represents in which language did the communication happen during the interaction.
channelStringThis field represents the type of interaction. (CALL, CHAT, EXTERNAL etc).
provider_idStringThe id which originates from the source recording platform.
transcriptsListThe list of transcripts of an interaction divided by speaker. The fields under the transcripts are:
transcripts.phraseStringA snippet from the transcript corresponding to one of the two speakers.
transcripts.speakerStringThis is the speaker of the phrase - Agent or customer.
transcripts.start_timeintegerThe phrase start time in milliseconds.
transcripts.end_timeintegerThe phrase end time in milliseconds.
transcripts.orderintegerThe position of each phrase in a transcript.
moment_categoriesListThe list of moment categories contains all the moment categories found in the interactions. The fields under the moment categories are:
moment_categories.moment_category_idStringThis id represents that particular moment_category.
moment_categories.moment_category_nameStringThe name of the particular moment_category.
moment_categories.momentsListThe list of moments present under a particular moment category. The fields under the moment are:
moments.moment_idStringThe id which represents that particular moment.
moments.moment_nameStringThe moment name as configured in the Observe.AI userinterface in the 'Moments' tab.
moments.snippetsListThe list of phrases from a transcript in which momentswere found. Inside This snippets there are four more fields:
moments.moment_themeStringThe moment theme - Positive/Negative/Neutral as configured in the Observe.AI userinterface in the ‘Moments’ tab.
snippets.evidenceStringThe actual phrase or keyword that matches amoment's criteria.
snippets.start_timeintegerThe phrase start time in milliseconds.
snippets.end_timeintegerThe phrase end time in milliseconds.
snippets.orderintegerThe position of each phrase in a transcript.
moments.foundbooleanIt determines whether the moment is found in the call or not.
created_atDateThe time at which the interaction was created in the DB.
updated_atDateThe time at which the interaction was last updated.
interaction_start_timeDateThe start timestamp of the interaction in ISO time format.
interaction_meta_data(Key, Value) pairThis contains all the interaction metadata which is used to create filters and present in interaction info.
\n" content: '*/*': schema: $ref: '#/components/schemas/GetJobResponse' examples: '0': value: '{"start_date":"2022-03-03T00:00:12.000+00:00","end_date":"2022-04-04T00:14:00.000+00:00","status":"COMPLETED","url":"https://e2e-data-out.s3.amazonaws.com/reports/interactions/3058bc09-6d4d-4f22-9f69-6992f3520e56.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20220510T045319Z&X-Amz-SignedHeaders=host&X-Amz-Expires=86400&X-Amz-Credential=YOUR_AWS_ACCESS_KEY_ID%2FYYYYMMDD%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=YOUR_AWS_SIGNATURE_PLACEHOLDER"}' '400': description: Bad Request content: '*/*': schema: $ref: '#/components/schemas/ErrorMessage' '401': description: Unauthorized content: '*/*': schema: $ref: '#/components/schemas/ErrorMessage' examples: '0': value: '{"error_code": "auth_token_error", "error_description": "invalid auth token"}' '403': description: Access Denied content: '*/*': schema: $ref: '#/components/schemas/ErrorMessage' examples: '0': value: '{"error_code":"access_denied","error_description":"unauthorized_user"}' '404': description: Not Found content: '*/*': schema: $ref: '#/components/schemas/ErrorMessage' examples: '0': value: '{"error_code":"resource_not_found","error_description":"jobId 3058bc09-da96-490c-824f-f42646160f0a of type INTERACTION not found or does not belong to the account"}' '1': value: '{"timestamp": "2022-05-17T04:23:16.247+00:00", "status": 404, "error": "Not Found", "message": "No message available", "path": "/v1/data/reports/interaction/489690ba-1a58-44f3-9674-b5be9768d313"}' '405': description: Method Not Allowed content: '*/*': schema: $ref: '#/components/schemas/ErrorMessage' examples: '0': value: '{"timestamp": "2022-05-17T04:21:37.669+00:00", "status": 405, "error": "Method Not Allowed", "message": "Request method ''POST'' not supported", "path": "/v1/data/reports/interactioms/3058bc09-da96-490c-824f-f42646160f0a"}' '429': description: Rate Limit Exceeded content: '*/*': schema: $ref: '#/components/schemas/RateLimitMessage' examples: '0': value: '{"message": "API rate limit exceeded"}' '500': description: Internal Server Error content: '*/*': schema: $ref: '#/components/schemas/ErrorMessage' /v1/data/reports/interactions/ids: post: tags: - Interactions operationId: Get Interactions By Ids parameters: - $ref: '#/components/parameters/IncludeTranscript' requestBody: content: application/json: schema: $ref: '#/components/schemas/InteractionsRequest' responses: '200': description: "List of Interactions, each with following fields:\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Field NameTypeDescription
idStringThis id represents the id of that particular interaction
account_idStringThis id represents the id of that particular account.
agent_idStringThis id represents the id of the agent who has participated in that particular interaction.
partner_agent_idStringThis id represents the id of the agent who has participated in that particular interaction in the client system.
agent_nameStringThe name of the agent who has participated in that particular interaction.
agent_emailStringThe email of the agent who has participated in that particular interaction.
agent_statusStringThis is a String field which depicts if the agent is active or not. (ACTIVE or IN_ACTIVE).
interaction_urlStringThis field represents the url for the particular interaction.
durationintegerThis is an integer field which represents how much time (seconds) did the interaction happen.
source_partner_meeting_idStringIncase of split interactions, source_partner_meeting_id is the unique identifier for the interaction before split. source_partner_meeting_id is same as unique identifier in the client system.
sequenceIntegerIncase of split interactions, the value of sequence signifies the position of this interaction post split. (Zero based index)
languageStringThis is a field which represents in which language did the communication happen during the interaction.
channelStringThis field represents the type of interaction. (CALL, CHAT, EXTERNAL etc).
provider_idStringThe id which originates from the source recording platform.
transcriptsListThe list of transcripts of an interaction divided by speaker. The fields under the transcripts are:
transcripts.phraseStringA snippet from the transcript corresponding to one of the two speakers.
transcripts.speakerStringThis is the speaker of the phrase - Agent or customer.
transcripts.start_timeintegerThe phrase start time in milliseconds.
transcripts.end_timeintegerThe phrase end time in milliseconds.
transcripts.orderintegerThe position of each phrase in a transcript.
moment_categoriesListThe list of moment categories contains all the moment categories found in the interactions. The fields under the moment categories are:
moment_categories.moment_category_idStringThis id represents that particular moment_category.
moment_categories.moment_category_nameStringThe name of the particular moment_category.
moment_categories.momentsListThe list of moments present under a particular moment category. The fields under the moment are:
moments.moment_idStringThe id which represents that particular moment.
moments.moment_nameStringThe moment name as configured in the Observe.AI userinterface in the 'Moments' tab.
moments.snippetsListThe list of phrases from a transcript in which momentswere found. Inside This snippets there are four more fields:
moments.moment_themeStringThe moment theme - Positive/Negative/Neutral as configured in the Observe.AI userinterface in the ‘Moments’ tab.
snippets.evidenceStringThe actual phrase or keyword that matches amoment's criteria.
snippets.start_timeintegerThe phrase start time in milliseconds.
snippets.end_timeintegerThe phrase end time in milliseconds.
snippets.orderintegerThe position of each phrase in a transcript.
moments.foundbooleanIt determines whether the moment is found in the call or not.
created_atDateThe time at which the interaction was created in the DB.
updated_atDateThe time at which the interaction was last updated.
interaction_start_timeDateThe start timestamp of the interaction in ISO time format.
interaction_meta_data(Key, Value) pairThis contains all the interaction metadata which is used to create filters and present in interaction info.
\n" '400': description: Bad Request content: '*/*': schema: $ref: '#/components/schemas/ErrorMessage' examples: '0': value: '{"error_code":"bad_request","error_description":"Maximum observe interaction ids that can be specified is 100"}' '1': value: '{"error_code":"bad_request","error_description":"Specify atleast one observe interaction id"}' '2': value: '{"error_code":"bad_request","error_description":"Maximum partner interaction ids that can be specified is 100"}' '3': value: '{"error_code":"bad_request","error_description":"Specify atleast one partner interaction id"}' '4': value: '{"error_code":"bad_request","error_description":"Either observe interaction ids or partner interaction ids can be present in a request, but not both"}' '5': value: '{"error_code":"bad_request","error_description":"Either observe interaction ids or partner interaction ids should be present in the request"}' '401': description: Unauthorized content: '*/*': schema: $ref: '#/components/schemas/ErrorMessage' examples: '0': value: '{"error_code": "auth_token_error", "error_description": "invalid auth token"}' '403': description: Access Denied content: '*/*': schema: $ref: '#/components/schemas/ErrorMessage' examples: '0': value: '{"error_code":"access_denied","error_description":"unauthorized_user"}' '1': value: '{"error_code":"access_denied","error_description":"No authentication header found"}' '2': value: '{"error_code":"access_denied","error_description":"ticket/userId is missing in authorization"}' '404': description: Request Not Found content: '*/*': schema: $ref: '#/components/schemas/ErrorMessage' examples: '0': value: '{"timestamp":"2022-07-19T07:47:19.178+00:00","status":404,"error":"Not Found","message":"No message available","path":"/v1/data/reports/interactions/ids"}' '405': description: Method Not Allowed content: '*/*': schema: $ref: '#/components/schemas/ErrorMessage' examples: '0': value: '{"timestamp": "2022-05-17T04:21:37.669+00:00", "status": 405, "error": "Method Not Allowed", "message": "Request method ''POST'' not supported", "path": "/v1/data/reports/interactions/ids"}' '429': description: Rate Limit Exceeded content: '*/*': schema: $ref: '#/components/schemas/RateLimitMessage' examples: '0': value: '{"message": "API rate limit exceeded"}' '500': description: Internal Server Error content: '*/*': schema: $ref: '#/components/schemas/ErrorMessage' components: parameters: InteractionsSize: in: query name: size schema: type: integer minimum: 10 maximum: 100 example: 100 default: 100 description: Number of interactions required in a page. Note that for requests without transcripts maximum size can be 1000. Page: in: query name: page schema: type: integer minimum: 1 example: 1 default: 1 description: The page number of the paginated response. IncludeTranscript: in: query name: includeTranscript schema: type: boolean example: true default: false description: Whether to include the transcript or not. schemas: InteractionsRequest: properties: observe_interaction_ids: type: List example: - af1d1b95-de6d-42db-83bd-3a585e65fcc9 - 4909093-918a-41ab-9fe3-0d1880fa2fd3 description: Mandatory if partner_interaction_ids is not present. Both cannot be present together. Max Limit of 100 ids. partner_interaction_ids: type: List example: - 7f9744f08a45cb0010d3a7c8 - 9f583739466b73001e4a125c description: Mandatory if observe_interaction_ids is not present. Both cannot be present together. Max Limit of 100 ids. RawJobRequest: required: - end_date - start_date type: object properties: start_date: type: string example: '2022-03-03T00:00:12.000+00:00' description: The date should be given in the ISO format. end_date: type: string example: '2022-04-04T00:14:00.000+00:00' description: The date should be given in the ISO format. format: type: string example: JSON enum: - JSON PostJobResponse: type: object properties: request_id: type: string start_date: type: string format: date-time end_date: type: string format: date-time status: type: string enum: - QUEUED - INPROGRESS - COMPLETED - EXPIRED - FAILED RateLimitMessage: type: object properties: message: type: string description: API rate limit exceeded GetJobResponse: type: object properties: start_date: type: string format: date-time end_date: type: string format: date-time status: type: string enum: - QUEUED - INPROGRESS - COMPLETED - EXPIRED - FAILED url: type: string ErrorMessage: type: object properties: error_code: type: string error_description: type: string securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT DsrDeleteRequest: type: object required: - entity_type - rules properties: entity_type: type: string description: Entity type to delete enum: - AUDIO_TRANSCRIPT - AUDIO - TRANSCRIPT - SCREEN_RECORDING rules: type: array items: $ref: '#/components/schemas/DsrRule' DsrRule: type: object required: - type - name properties: type: type: string enum: - OAI_METADATA - CUSTOMER_METADATA name: type: string description: For OAI_METADATA use DURATION, ENTITYTYPE, or STATUS values: type: array items: type: string DsrDeleteResponse: type: object properties: job_id: type: string status: type: string enum: - QUEUED - CREATED - PROGRESS - COMPLETED - STOPPED - FAILED message: type: string requested_at: type: string format: date-time expected_completion_by: type: string format: date-time DsrStatusResponse: type: object properties: request_id: type: string status: type: string enum: - QUEUED - CREATED - PROGRESS - COMPLETED - STOPPED - FAILED status_message: type: string x-tagGroups: - name: Reporting APIs tags: - ReportingService-Overview - Authentication - Interactions - Summary - Evaluations - Coachings - Ack Dispute Flow - CallsReportVsInteractions - ReleaseNotes - name: DSR APIs tags: - DSR-Overview - DSR - DSR Release Notes - name: Bulk Export tags: - Bulk-Export-Overview - Bulk-Export-Data-Definitions