Convert Experiences Reports API
Specification for different reports data that can be retrieved for experiences
Specification for different reports data that can be retrieved for experiences
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/convert-experiences-reports-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Convert Accounts Experiences Reports API
description: 'Move your app forward with the Convert API. The Convert API allows
you to manage your Convert Experiences projects using code. The REST API is
an interface for managing and extending functionality of Convert. For
example, instead of creating and maintaining projects using the Convert
Experiences web dashboard you can create an experiment programmatically.
Additionally, if you prefer to run custom analysis on experiment results you
can leverage the API to pull data from Convert Experiences into your own
workflow. If you do not have a Convert account already, sign up for a free
developer account at https://www.convert.com/api/.
*[Convert API V1](/doc/v1) is still available and documentation can be found [here](/doc/v1) but using it is highly discouraged
as it will be phased out in the future*
'
version: 2.0.0
servers:
- url: https://api.convert.com/api/v2
description: Live API server
- url: https://apidev.convert.com/api/v2
description: DEV API server
- url: http://apidev.convert.com:5000/api/v2
description: DEV mocked API server
tags:
- name: Experiences Reports
description: Specification for different reports data that can be retrieved for experiences
paths:
/accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/report_settings:
get:
operationId: getExperienceReportSettings
summary: Get report settings for an experience
description: 'Retrieves the specific reporting settings for an experience. This includes configurations like confidence level,
statistical methodology (Frequentist/Bayesian), MAB strategy, primary metric, and outlier detection rules.
These settings govern how experiment results are calculated and displayed.
The Knowledge Base article "Experiment Report" (Stats Settings section) covers these.
'
tags:
- Experiences Reports
parameters:
- name: account_id
in: path
required: true
description: ID of the account that owns the retrieved/saved data
schema:
type: integer
- name: project_id
description: ID of the project to which save/retrieved data is connected
in: path
required: true
schema:
type: integer
- name: experience_id
in: path
required: true
description: ID of the experience
schema:
type: integer
- name: report_token
in: header
required: false
description: Token to access the experience report in read-only mode.
schema:
type: string
responses:
'200':
$ref: '#/components/responses/ExperienceReportSettingsResponse'
default:
$ref: '#/components/responses/ErrorResponse'
/accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/aggregated_report:
post:
operationId: getExperienceAggregatedReport
summary: Get aggregated performance report for an experience
description: 'Retrieves the main performance report for a specific experience.
This report shows aggregated data for each variation, including visitor counts, conversions, conversion rates, improvement percentages,
and statistical confidence (or chance to win for Bayesian). Data is provided for all goals attached to the experience.
Supports filtering by date range and segments.
The Knowledge Base article "Experiment Report" details the metrics shown.
'
tags:
- Experiences Reports
parameters:
- name: account_id
in: path
required: true
description: ID of the account that owns the retrieved/saved data
schema:
type: integer
- name: project_id
description: ID of the project to which save/retrieved data is connected
in: path
required: true
schema:
type: integer
- name: experience_id
in: path
required: true
description: ID of the experience
schema:
type: integer
- name: report_token
in: header
required: false
description: Token to access the experience report in read-only mode.
schema:
type: string
requestBody:
$ref: '#/components/requestBodies/GetExperienceAggregatedReportRequest'
responses:
'200':
$ref: '#/components/responses/ExperienceAggregatedReportResponse'
default:
$ref: '#/components/responses/ErrorResponse'
/accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/daily_report:
post:
operationId: getExperienceDailyReport
summary: Get daily performance report for an experience
description: 'Retrieves a day-by-day breakdown of performance metrics (visitors, conversions, conversion rate, etc.) for a specific experience and goal.
This allows trend analysis and observation of how an experiment performs over time.
Supports filtering by date range and segments, and can show cumulative or non-cumulative data.
The Knowledge Base article "Experiment Report" (Graphs section) visualizes this type of data.
'
tags:
- Experiences Reports
parameters:
- name: account_id
in: path
required: true
description: ID of the account that owns the retrieved/saved data
schema:
type: integer
- name: project_id
description: ID of the project to which save/retrieved data is connected
in: path
required: true
schema:
type: integer
- name: experience_id
in: path
required: true
description: ID of the experience
schema:
type: integer
- name: report_token
in: header
required: false
description: Token to access the experience report in read-only mode.
schema:
type: string
requestBody:
$ref: '#/components/requestBodies/GetExperienceDailyReportRequest'
responses:
'200':
$ref: '#/components/responses/ExperienceDailyReportResponse'
default:
$ref: '#/components/responses/ErrorResponse'
/accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/daily_traffic_allocation:
post:
operationId: getExperienceDailyTrafficAllocation
summary: Get daily traffic allocation report for an MAB experience
description: 'Retrieves the day-by-day traffic allocation percentages for each variation in an experience that uses Multi-Armed Bandit (MAB) or auto-allocation.
This shows how Convert dynamically shifted traffic towards better-performing variations over time.
The Knowledge Base article "Multi-Armed Bandit (MAB) & Auto-Allocation in Convert" explains this feature.
'
tags:
- Experiences Reports
parameters:
- name: account_id
in: path
required: true
description: ID of the account that owns the retrieved/saved data
schema:
type: integer
- name: project_id
description: ID of the project to which save/retrieved data is connected
in: path
required: true
schema:
type: integer
- name: experience_id
in: path
required: true
description: ID of the experience
schema:
type: integer
- name: report_token
in: header
required: false
description: Token to access the experience report in read-only mode.
schema:
type: string
requestBody:
$ref: '#/components/requestBodies/GetExperienceDailyTrafficAllocationRequest'
responses:
'200':
$ref: '#/components/responses/ExperienceDailyTrafficAllocationResponse'
default:
$ref: '#/components/responses/ErrorResponse'
/accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/reset_report:
post:
operationId: resetExperienceReport
summary: Reset report data for an experience
description: 'Clears all accumulated visitor and conversion data for an experience''s report, effectively resetting its statistics to zero.
The start date of the experiment is also reset. This is useful if you want to restart data collection after making significant changes or for QA purposes.
The Knowledge Base article "Reset Experiment Data" warns: "If you want to prevent [carry-over effects], it is suggested that you clone your experiment instead of resetting the report".
'
tags:
- Experiences Reports
parameters:
- name: account_id
in: path
required: true
description: ID of the account that owns the retrieved/saved data
schema:
type: integer
- name: project_id
description: ID of the project to which save/retrieved data is connected
in: path
required: true
schema:
type: integer
- name: experience_id
in: path
required: true
description: ID of the experience
schema:
type: integer
responses:
'200':
$ref: '#/components/responses/SuccessResponse'
default:
$ref: '#/components/responses/ErrorResponse'
/accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/export_report:
post:
operationId: exportExperienceReport
summary: Export an experience report (CSV/PDF)
description: 'Generates an export of an experience''s performance report in either CSV (aggregated or daily) or PDF format.
Returns a downloadable link for the generated file. Useful for offline analysis or sharing with stakeholders.
The Knowledge Base article "Experiment Report" (Export & Download section) describes this.
'
tags:
- Experiences Reports
parameters:
- name: account_id
in: path
required: true
description: ID of the account that owns the retrieved/saved data
schema:
type: integer
- name: project_id
description: ID of the project to which save/retrieved data is connected
in: path
required: true
schema:
type: integer
- name: experience_id
in: path
required: true
description: ID of the experience
schema:
type: integer
requestBody:
$ref: '#/components/requestBodies/ExportExperienceReportRequest'
responses:
'200':
$ref: '#/components/responses/ExportExperienceReportResponse'
default:
$ref: '#/components/responses/ErrorResponse'
/accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/export_raw_data:
post:
operationId: exportExperienceRawData
summary: Export raw tracking data for an experience
description: 'Initiates a job to export the raw, event-level tracking data for a specific experience.
This data includes individual visitor bucketing events, conversions, and transactions.
The export is typically delivered as a link via email due to potential size.
Useful for in-depth custom analysis or importing into external data warehouses.
The Knowledge Base article "Experiment Report" (Export & Download section) mentions this.
'
tags:
- Experiences Reports
parameters:
- name: account_id
in: path
required: true
description: ID of the account that owns the retrieved/saved data
schema:
type: integer
- name: project_id
description: ID of the project to which save/retrieved data is connected
in: path
required: true
schema:
type: integer
- name: experience_id
in: path
required: true
description: ID of the experience
schema:
type: integer
requestBody:
$ref: '#/components/requestBodies/ExportExperienceRawDataRequest'
responses:
'200':
$ref: '#/components/responses/ExportExperienceRawDataResponse'
default:
$ref: '#/components/responses/ErrorResponse'
/accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/remove_report_data:
post:
operationId: removeExperienceReportData
summary: Remove specific data from an experience report
description: 'Allows for targeted deletion of report data for an experience based on date range and event type (view_experience, conversion, transaction).
For conversion and transaction events, specific goals can be targeted.
If `simulate` is true, returns a count of records that would be deleted without actual deletion. Otherwise, performs permanent deletion.
The Knowledge Base article "Remove Report Data Feature" details this.
'
tags:
- Experiences Reports
parameters:
- name: account_id
in: path
required: true
description: ID of the account that owns the retrieved/saved data
schema:
type: integer
- name: project_id
description: ID of the project to which save/retrieved data is connected
in: path
required: true
schema:
type: integer
- name: experience_id
in: path
required: true
description: ID of the experience
schema:
type: integer
requestBody:
$ref: '#/components/requestBodies/RemoveExperienceReportRequest'
responses:
'200':
$ref: '#/components/responses/RemoveExperienceReportResponse'
default:
$ref: '#/components/responses/ErrorResponse'
components:
schemas:
SE_ProcTypes:
type: string
description: 'The statistical methodology used for analyzing experiment results and determining winners.
- `frequentist`: Traditional hypothesis testing approach using p-values and confidence intervals (e.g., T-tests). KB: "Statistical Methods Used".
- `bayesian`: Bayesian statistical approach providing probabilities of one variation being better than another (e.g., Chance to Win). KB: "Statistical Models in Convert.com''s A/B Testing Platform".
'
enum:
- frequentist
- bayesian
RemoveExperienceReportResponseDataItem:
type: object
properties:
event:
$ref: '#/components/schemas/ExperienceReportRawDataEvents'
count:
type: integer
description: The number of records of this event type that were (or would be) deleted based on the request criteria.
ExperienceDailyReportExtraDataItem:
type: object
properties:
type:
$ref: '#/components/schemas/ReportExtraStatsTypes'
stats:
type: array
description: An array of data points, each representing one day's aggregated value for this `type`.
items:
$ref: '#/components/schemas/StatsDataPoint'
ExperienceAggregatedGoalBayesian:
allOf:
- $ref: '#/components/schemas/ExperienceAggregatedGoalReportBase'
- type: object
properties:
variations:
type: array
items:
type: object
properties:
metrics:
type: array
items:
$ref: '#/components/schemas/ExperienceAggregatedMetricReportBayesian'
ExperienceVariationBaseExtended:
allOf:
- type: object
properties:
id:
description: Variation unique ID
type: integer
readOnly: true
- $ref: '#/components/schemas/ExperienceVariationBase'
- type: object
properties:
status:
$ref: '#/components/schemas/ExperienceVariationStatuses'
ExperienceAggregatedReportBase:
type: object
properties:
stats_methodology:
$ref: '#/components/schemas/SE_ProcTypes'
variations_data:
$ref: '#/components/schemas/ExperienceReportVariationsData'
ExperienceDailyTrafficAllocationReport:
type: object
description: Provides a day-by-day breakdown of traffic allocation percentages for each variation in an experience, typically used for MAB experiments.
properties:
variations_data:
$ref: '#/components/schemas/ExperienceReportVariationsData'
reportData:
type: object
description: Contains the daily traffic allocation data.
properties:
variations:
type: array
description: A list, where each item contains the daily traffic allocation data for one variation.
items:
type: object
description: Daily traffic allocation for a single variation.
properties:
id:
description: The unique numerical identifier of the variation.
type: number
stats:
type: array
description: An array of data points, each representing the traffic allocation percentage for this variation on a specific day.
items:
$ref: '#/components/schemas/StatsDataPoint'
ExperienceAggregatedGoalReportFrequentist:
allOf:
- $ref: '#/components/schemas/ExperienceAggregatedGoalReportBase'
- type: object
properties:
variations:
type: array
items:
type: object
properties:
metrics:
type: array
items:
$ref: '#/components/schemas/ExperienceAggregatedMetricReportFrequentist'
ReportingSegmentsCustomSegment:
description: 'The numerical ID of a custom Convert Audience (of type ''segmentation'') that the visitor is a member of.
Allows report segmentation based on predefined custom segments (e.g., "High-Value Customers", "Engaged Users").
Knowledge Base: "Create Custom Segments".
'
type: integer
GetExperienceAggregatedReportRequestData:
allOf:
- type: object
description: Parameters needed to drill down the report.
properties:
goals:
type: array
description: 'A list of goal Id''s for which to return the reporting data.
If no ID is provided, the list of goals attached to the experience is being used;
'
items:
type: integer
nullable: true
metrics:
description: The list of metrics to return. If not provided, all available metrics will be returned.
type: array
items:
$ref: '#/components/schemas/MetricTypes'
nullable: true
- $ref: '#/components/schemas/BaseReportRequestData'
ExperienceReportExportResponseData:
type: object
properties:
data:
description: Contains the URL from which the generated report file can be downloaded and its expiration time.
type: object
properties:
download_url:
description: A temporary, secure URL to download the generated report file (e.g., CSV, PDF).
type: string
expire_at:
description: Unix timestamp (UTC) indicating when the `download_url` will expire and the file will no longer be accessible.
type: number
ExperienceAggregatedMetricReportFrequentist:
oneOf:
- $ref: '#/components/schemas/ExperienceAggregatedMetricFrequentist'
- $ref: '#/components/schemas/ExperienceAggregatedMetricNoStatistics'
discriminator:
propertyName: metric_type
mapping:
conversion_rate: '#/components/schemas/ExperienceAggregatedMetricFrequentist'
avg_revenue_visitor: '#/components/schemas/ExperienceAggregatedMetricFrequentist'
avg_products_ordered_visitor: '#/components/schemas/ExperienceAggregatedMetricFrequentist'
average_order_value: '#/components/schemas/ExperienceAggregatedMetricNoStatistics'
average_products_per_order: '#/components/schemas/ExperienceAggregatedMetricNoStatistics'
DailyReportMetrics:
type: string
description: The specific performance metric to be displayed in a daily report.
enum:
- conversion_rate
- avg_revenue_per_visitor
- avg_products_ordered_per_visitor
- average_order_value
- average_products_per_order
ExportExperienceRawDataEvents:
description: 'Specifies the type of raw tracking events to be included in an export or targeted for removal.
- `view_experience`: Events logged when a visitor is first bucketed into an experience variation.
- `conversion`: Events logged when a visitor triggers a standard conversion goal.
- `transaction`: Events logged when a visitor triggers a revenue goal (includes transaction details).
'
type: string
enum:
- view_experience
- conversion
- transaction
ExperienceAggregatedMetricReportBayesian:
oneOf:
- $ref: '#/components/schemas/ExperienceAggregatedMetricBayesian'
- $ref: '#/components/schemas/ExperienceAggregatedMetricNoStatistics'
discriminator:
propertyName: metric_type
mapping:
conversion_rate: '#/components/schemas/ExperienceAggregatedMetricBayesian'
avg_revenue_visitor: '#/components/schemas/ExperienceAggregatedMetricBayesian'
avg_products_ordered_visitor: '#/components/schemas/ExperienceAggregatedMetricBayesian'
average_order_value: '#/components/schemas/ExperienceAggregatedMetricNoStatistics'
average_products_per_order: '#/components/schemas/ExperienceAggregatedMetricNoStatistics'
ExperienceVariationStatuses:
type: string
enum:
- stopped
- running
ExperienceAggregatedMetricBayesian:
allOf:
- type: object
properties:
metric_type:
$ref: '#/components/schemas/MetricTypes'
chance_to_win:
description: Chance to win as a number 0-100
type: number
expected:
description: Expected
type: number
nullable: true
risk:
description: Risk
type: array
items:
type: number
nullable: true
estimated_progress:
description: 'Estimated Test Progress in terms of relative remaining samples vs the total sample size needed to complete the test (at the current MDE).
'
type: number
nullable: true
done:
description: Set to true when the posterior both exceeds the decision threshold in its 'chance to win' and remains below the risk threshold in its relative risk assessment, indicating a strong and acceptably safe performance.
type: boolean
srm:
description: Sample Ratio Mismatch at the pairwise level (variant and control).
type: boolean
nullable: true
srm_pvalue:
description: P value for the Sample Ratio Mismatch test at the pairwise level.
type: number
nullable: true
required:
- metric_type
- $ref: '#/components/schemas/BaseMetric'
RemoveExperienceReportEventTypeViewExperience:
description: 'Specifies deletion of ''view_experience'' events.
'
type: object
properties:
type:
type: string
description: Must be 'view_experience'.
enum:
- view_experience
required:
- type
ReportingSegmentsFilters:
type: object
description: 'A collection of filters used to segment experience report data based on various visitor attributes and traffic sources.
Applying these filters allows for deeper analysis of how different user groups interact with experience variations.
Knowledge Base: "Using Basic and Advanced Post segmentation".
'
properties:
devices:
type: array
items:
$ref: '#/components/schemas/ReportingSegmentsDeviceCategories'
nullable: true
browsers:
description: Filter report data for visitors using one or more specified web browsers.
type: array
items:
$ref: '#/components/schemas/ReportingSegmentsBrowser'
nullable: true
countries:
description: Filter report data for visitors from one or more specified countries (using 2-letter ISO codes).
type: array
items:
$ref: '#/components/schemas/ReportingSegmentsCountry'
nullable: true
visitor_types:
description: Filter report data for 'new' or 'returning' visitors.
type: array
items:
$ref: '#/components/schemas/ReportingSegmentsVisitorType'
nullable: true
campaigns:
description: Filter report data for visitors attributed to one or more specified marketing campaign names (from `utm_campaign`).
type: array
items:
$ref: '#/components/schemas/ReportingSegmentsCampaign'
nullable: true
custom_segments:
description: Filter report data for visitors belonging to one or more specified custom Convert Audience segments (by segment ID).
type: array
items:
$ref: '#/components/schemas/ReportingSegmentsCustomSegment'
nullable: true
sources:
description: Filter report data for visitors from one or more specified traffic sources (e.g., 'direct', 'search', 'referral').
type: array
items:
$ref: '#/components/schemas/ReportingSegmentsSource'
nullable: true
DailyReportTypes:
type: string
description: Determines how daily data is aggregated in time-series reports.
enum:
- cumulative
- non_cumulative
BaseMetricNoStatistics:
type: object
properties:
metric_total:
type: integer
description: 'The total sum contributing to this metric for this variation and goal.
- For `conversion_rate`: Total number of conversions.
- For `avg_revenue_visitor`: Total revenue recorded.
- For `avg_products_ordered_visitor`: Total number of products ordered.
- For `average_order_value`: Total revenue recorded.
- For `average_products_per_order`: Total number of products ordered.
'
metric_value:
type: number
description: The observed value of this metric (e.g., 0.05 for a 5% conversion rate, 2.50 for $2.50 RPV).
metric_change:
type: number
description: 'The percentage difference in this metric''s value for the current variation compared to the baseline variation.
Positive indicates improvement, negative indicates decline. (e.g., 0.20 for a 20% improvement).
Knowledge Base: "Understanding Report Metrics in Convert" - "Improvement".
'
ReportingSegmentsSource:
type: string
description: 'The traffic source that brought the visitor to the site (e.g., ''google'', ''facebook.com'', ''direct'', ''newsletter'').
Derived from `utm_source` URL parameters or the HTTP referrer. Enables report segmentation by traffic source.
Knowledge Base: "How Do You Fill Medium, Keyword and Source Name?".
'
enum:
- campaign
- search
- referral
- direct
- ai_tool
ReportingSegmentsBrowser:
type: string
description: 'The web browser used by the visitor. Used for segmenting reports to understand how experiences perform across different browsers.
Knowledge Base: "Using Basic and Advanced Post segmentation".
'
enum:
- internet_explorer
- chrome
- firefox
- safari
- edge
- other
ExperienceAggregatedReportFrequentist:
allOf:
- $ref: '#/components/schemas/ExperienceAggregatedReportBase'
- type: object
properties:
stats_methodology:
type: string
enum:
- frequentist
reportData:
type: array
description: List of data for each of the analyzed goals
items:
$ref: '#/components/schemas/ExperienceAggregatedGoalReportFrequentist'
ExperienceDailyTrafficAllocationResponseData:
type: object
properties:
data:
$ref: '#/components/schemas/ExperienceDailyTrafficAllocationReport'
SE_ProcSettingsBayesian:
allOf:
- $ref: '#/components/schemas/SE_ProcSettingsBase'
- type: object
description: Stats Engine Settings needed for the Bayesian processing
properties:
stats_type:
enum:
- bayesian
decision_threshold:
description: Threshold after which a decision can be made
type: number
minimum: 50
maximum: 99
multipleOf: 1
risk_threshold:
description: The maximum acceptable level of potential loss if the chosen variant turns out to be worse than the control. It represents the threshold below which the relative risk of preferring a variant over the control must fall to consider the variant as a strong and relatively safe choice.
type: number
minimum: 1
maximum: 100
multipleOf: 1
mab_settings:
allOf:
- $ref: '#/components/schemas/SE_MabSettings'
nullable: true
ErrorData:
type: object
properties:
code:
type: integer
format: int32
message:
oneOf:
- type: string
- type: array
items:
type: string
fields:
oneOf:
- type: string
- type: array
items:
type: string
RemoveExperienceReportRequestData:
allOf:
- $ref: '#/components/schemas/BaseReportRequestData'
- type: object
description: Parameters needed to drill down the report.
properties:
events:
type: array
description: List of the events that would be targeted by the delete operation. If not provided, all the events would be targeted.
items:
oneOf:
- $ref: '#/components/schemas/RemoveExperienceReportEventTypeViewExperience'
- $ref: '#/components/schemas/RemoveExperienceReportEventTypeConversion'
- $ref: '#/components/schemas/RemoveExperienceReportEventTypeTransaction'
minItems: 1
simulate:
type: boolean
default: true
description: When simulate - true is passed, it will only return back an object with the numbers of how many records will be deleted, instead of deleting any records
required:
- start_time
- end_time
MetricTypes:
type: string
description: 'The primary types of performance metrics calculated by the reporting engine for each goal.
- `conversion_rate`: The percentage of visitors who completed the goal (Conversions / Visitors).
- `avg_revenue_visitor`: Average Revenue Per Visitor (RPV = Total Revenue / Total Visitors). Applicable for revenue goals.
- `avg_products_ordered_visitor`: Average Products Per Visitor (APPV = Total Products Ordered / Total Visitors). Applicable for revenue goals tracking product counts.
- `average_order_value`: Average Order Value (AOV = Total Revenue / Total Conversions). Applicable for revenue goals tracking order value.
- `average_products_per_order`: Average Products Per Order (APPO = Total Products Ordered Per Visitor / Total Conversions). Applicable for revenue goals tracking product counts.
Knowledge Base: "Understanding Report Metrics in Convert".
'
enum:
- conversion_rate
- avg_revenue_visitor
- avg_products_ordered_visitor
- average_order_value
- average_products_per_order
UTC_Offset:
type: integer
# --- truncated at 32 KB (71 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/convert/refs/heads/main/openapi/convert-experiences-reports-api-openapi.yml