diff --git a/specs/abtesting-v3/common/parameters.yml b/specs/abtesting-v3/common/parameters.yml new file mode 100644 index 0000000000..77d924b6f6 --- /dev/null +++ b/specs/abtesting-v3/common/parameters.yml @@ -0,0 +1,158 @@ +# path +ID: + in: path + name: id + description: Unique A/B test identifier. + required: true + schema: + $ref: "#/abTestID" + +# misc +index: + type: string + description: Index name of the A/B test variant (case-sensitive). + example: "delcourt_production" + +abTestID: + type: integer + description: Unique A/B test identifier. + example: 224 + +abTestScheduleID: + type: integer + description: Unique scheduled A/B test identifier. + example: 224 + +endAt: + type: string + description: End date and time of the A/B test, in RFC 3339 format. + example: 2023-06-17T00:00:00Z + +createdAt: + type: string + description: Date and time when the A/B test was created, in RFC 3339 format. + example: 2023-06-15T15:06:04.249906Z + +updatedAt: + type: string + description: Date and time when the A/B test was last updated, in RFC 3339 format. + example: 2023-06-15T15:06:44.400601Z + +scheduledAt: + type: string + description: Date and time when the A/B test is scheduled to start, in RFC 3339 format. + example: 2023-06-15T15:06:44.400601Z + +name: + type: string + description: A/B test name. + example: Custom ranking sales rank test + +description: + type: string + description: Description for this variant. + example: Current production index + +trafficPercentage: + type: integer + description: Percentage of search requests each variant receives. + minimum: 1 + maximum: 99 + example: 60 + +currencies: + type: object + description: A/B test currencies. + example: + USD: + currency: USD + revenue: 120.0 + mean: 53.7 + standardDeviation: 12.3 + EUR: + currency: EUR + revenue: 100.0 + mean: 43.7 + standardDeviation: 10.3 + additionalProperties: + $ref: "#/currency" + x-additionalPropertiesName: currency code + +currency: + type: object + properties: + currency: + type: string + description: Currency code. + example: "USD" + revenue: + type: number + format: double + description: Revenue for this currency. + example: 120.0 + mean: + type: number + format: double + description: Mean for this currency. + example: 53.7 + standardDeviation: + type: number + format: double + description: Standard deviation for this currency. + example: 12.3 + +filterEffects: + type: object + description: A/B test filter effects resulting from configuration settings. + properties: + outliers: + title: outliersFilter + type: object + description: Outliers removed from the A/B test as a result of configuration settings. + example: + usersCount: 1 + trackedSearchesCount: 237 + properties: + usersCount: + type: integer + description: Number of users removed from the A/B test. + example: 1 + trackedSearchesCount: + type: integer + description: Number of tracked searches removed from the A/B test. + example: 237 + emptySearch: + title: emptySearchFilter + type: object + description: Empty searches removed from the A/B test as a result of configuration settings. + example: + usersCount: 1 + trackedSearchesCount: 237 + properties: + usersCount: + type: integer + description: Number of users removed from the A/B test. + example: 1 + trackedSearchesCount: + type: integer + description: Number of tracked searches removed from the A/B test. + example: 237 + +metric: + type: object + description: Defines a metric to be retrieved during an A/B test. + properties: + name: + type: string + description: Name of the metric. + dimension: + type: string + description: Dimension of the metric, for example, in case of a revenue metric it could be USD, EUR... + required: + - name + example: + - name: revenue + dimension: USD + - name: conversionRate + - name: clickThroughRate + - name: trackedSearchCount diff --git a/specs/abtesting-v3/common/schemas/ABTest.yml b/specs/abtesting-v3/common/schemas/ABTest.yml new file mode 100644 index 0000000000..4818799f98 --- /dev/null +++ b/specs/abtesting-v3/common/schemas/ABTest.yml @@ -0,0 +1,116 @@ +ABTests: + oneOf: + - type: array + description: A/B tests. + items: + $ref: "#/ABTest" + - type: "null" + description: No A/B tests are configured for this application. + +ABTest: + type: object + additionalProperties: false + properties: + abTestID: + $ref: "../parameters.yml#/abTestID" + updatedAt: + $ref: "../parameters.yml#/updatedAt" + createdAt: + $ref: "../parameters.yml#/createdAt" + endAt: + $ref: "../parameters.yml#/endAt" + name: + $ref: "../parameters.yml#/name" + status: + $ref: "#/Status" + variants: + $ref: "Variant.yml#/variants" + configuration: + $ref: "#/ABTestConfiguration" + migratedAbTestID: + $ref: "#/MigratedABTestId" + required: + - status + - name + - createdAt + - endAt + - updatedAt + - abTestID + - variants + +Status: + type: string + description: | + A/B test status. + + - `active`. The A/B test is live and search traffic is split between the two variants. + - `stopped`. You stopped the A/B test. The A/B test data is still available for analysis. + - `expired`. The A/B test was automatically stopped after reaching its end date. + - `failed`. Creating the A/B test failed. + example: active + enum: + - active + - stopped + - expired + - failed + +ABTestConfiguration: + title: configuration + type: object + description: A/B test configuration. + properties: + outliers: + $ref: "#/Outliers" + emptySearch: + $ref: "#/EmptySearch" + minimumDetectableEffect: + $ref: "#/MinimumDetectableEffect" + +Outliers: + type: object + description: Configuration for handling outliers. + properties: + exclude: + type: boolean + description: Whether to exclude outliers when calculating A/B test results. + default: true + +EmptySearch: + type: object + description: Configuration for handling empty searches. + properties: + exclude: + type: boolean + description: Whether to exclude empty searches when calculating A/B test results. + +MinimumDetectableEffect: + type: object + description: Configuration for the smallest difference between test variants you want to detect. + properties: + size: + type: number + format: double + minimum: 0 + maximum: 1 + description: | + Smallest difference in an observable metric between variants. + For example, to detect a 10% difference between variants, set this value to 0.1. + metric: + $ref: "#/EffectMetric" + required: + - size + - metric + +EffectMetric: + type: string + description: Metric for which you want to detect the smallest relative difference. + enum: + - addToCartRate + - clickThroughRate + - conversionRate + - purchaseRate + +MigratedABTestId: + type: integer + description: Unique migrated A/B test identifier. + example: 224 diff --git a/specs/abtesting-v3/common/schemas/ABTestResponse.yml b/specs/abtesting-v3/common/schemas/ABTestResponse.yml new file mode 100644 index 0000000000..ed3f5e6d90 --- /dev/null +++ b/specs/abtesting-v3/common/schemas/ABTestResponse.yml @@ -0,0 +1,14 @@ +ABTestResponse: + type: object + additionalProperties: false + properties: + index: + $ref: '../parameters.yml#/index' + abTestID: + $ref: '../parameters.yml#/abTestID' + taskID: + $ref: '../../../common/responses/common.yml#/taskID' + required: + - abTestID + - index + - taskID diff --git a/specs/abtesting-v3/common/schemas/AddABTestsVariant.yml b/specs/abtesting-v3/common/schemas/AddABTestsVariant.yml new file mode 100644 index 0000000000..fc14f38024 --- /dev/null +++ b/specs/abtesting-v3/common/schemas/AddABTestsVariant.yml @@ -0,0 +1,38 @@ +AddABTestsVariant: + oneOf: + - $ref: '#/abTestsVariant' + - $ref: '#/abTestsVariantSearchParams' + +abTestsVariantSearchParams: + allOf: + - $ref: '#/abTestsVariant' + - $ref: '#/customSearchParams' + +abTestsVariant: + type: object + additionalProperties: false + properties: + index: + $ref: '../parameters.yml#/index' + trafficPercentage: + $ref: '../parameters.yml#/trafficPercentage' + description: + $ref: '../parameters.yml#/description' + required: + - index + - trafficPercentage + +customSearchParams: + type: object + description: | + Search parameters to add to the test variant. + Only use this parameter if the two variants use the same index. + example: {'typoTolerance': false, 'synonyms': false} + additionalProperties: false + properties: + customSearchParameters: + type: object + required: + - customSearchParameters + x-discriminator-fields: + - customSearchParameters diff --git a/specs/abtesting-v3/common/schemas/EstimateABTestResponse.yml b/specs/abtesting-v3/common/schemas/EstimateABTestResponse.yml new file mode 100644 index 0000000000..6d491f24cc --- /dev/null +++ b/specs/abtesting-v3/common/schemas/EstimateABTestResponse.yml @@ -0,0 +1,18 @@ +EstimateABTestResponse: + type: object + properties: + durationDays: + type: integer + format: int64 + description: Estimated number of days needed to reach the sample sizes required for detecting the configured effect. This value is based on historical traffic. + example: 21 + sampleSizes: + type: array + description: | + Sample size estimates for each variant. The first element is the control variant. + Each element is the estimated number of searches required to achieve the desired statistical significance. + items: + type: integer + format: int64 + description: Number of tracked searches needed to be able to detect the configured effect for the control variant. + example: 23415 diff --git a/specs/abtesting-v3/common/schemas/ScheduleABTestResponse.yml b/specs/abtesting-v3/common/schemas/ScheduleABTestResponse.yml new file mode 100644 index 0000000000..a1278e7b77 --- /dev/null +++ b/specs/abtesting-v3/common/schemas/ScheduleABTestResponse.yml @@ -0,0 +1,8 @@ +ScheduleABTestResponse: + type: object + additionalProperties: false + properties: + abTestScheduleID: + $ref: '../parameters.yml#/abTestScheduleID' + required: + - abTestScheduleID diff --git a/specs/abtesting-v3/common/schemas/Timeseries.yml b/specs/abtesting-v3/common/schemas/Timeseries.yml new file mode 100644 index 0000000000..2f2f3c00ca --- /dev/null +++ b/specs/abtesting-v3/common/schemas/Timeseries.yml @@ -0,0 +1,43 @@ +Timeseries: + type: object + additionalProperties: false + properties: + abTestID: + $ref: "../parameters.yml#/abTestID" + variants: + $ref: "#/timeseriesVariants" + required: + - abTestID + - variants + +timeseriesVariants: + type: array + description: | + A/B test timeseries variants. + + The first variant is your _control_ index, typically your production index. + All of the additional variants are indexes with changed settings that you want to test against the control. + items: + $ref: "#/timeseriesVariant" + +timeseriesVariant: + type: object + properties: + dates: + $ref: "#/metricDates" + +metricDates: + type: array + items: + $ref: "#/metricDate" + +metricDate: + type: object + properties: + date: + type: string + description: Date where the metric was updated, in RFC 3339 format. + format: date + example: 2025-06-15 + metrics: + $ref: "Variant.yml#/metrics" diff --git a/specs/abtesting-v3/common/schemas/Variant.yml b/specs/abtesting-v3/common/schemas/Variant.yml new file mode 100644 index 0000000000..d7c69e7ebe --- /dev/null +++ b/specs/abtesting-v3/common/schemas/Variant.yml @@ -0,0 +1,139 @@ +variants: + type: array + description: | + A/B test variants. + + The first variant is your _control_ index, typically your production index. + All of the additional variants are indexes with changed settings that you want to test against the control. + items: + $ref: '#/variant' + +variant: + type: object + additionalProperties: false + properties: + description: + $ref: '../parameters.yml#/description' + estimatedSampleSize: + type: integer + description: | + Estimated number of searches required to achieve the desired statistical significance. + + The A/B test configuration must include a `minimumDetectableEffect` setting for this number to be included in the response. + example: 0 + index: + $ref: '../parameters.yml#/index' + trafficPercentage: + $ref: '../parameters.yml#/trafficPercentage' + metrics: + $ref: '#/metrics' + metadata: + $ref: '#/variantMetadata' + + required: + - index + - description + - trafficPercentage + - metrics + +metrics: + type: array + description: All ABTest metrics that were defined during test creation. + items: + $ref: '#/metric' + +metric: + type: object + properties: + name: + type: string + updatedAt: + type: string + description: Date and time when the metric was last updated, in RFC 3339 format. + value: + type: number + format: double + valueCIHigh: + type: number + format: double + description: | + The upper bound of the 95% confidence interval for the metric value. The confidence interval is calculated using + either the relative ratio or relative difference between the metric values for the control and the variant. + Relative ratio is used for metrics that are ratios (e.g., click-through rate, conversion rate), + while relative difference is used for continuous metrics (e.g., revenue). + valueCILow: + type: number + format: double + description: | + The lower bound of the 95% confidence interval for the metric value. The confidence interval is calculated using + either the relative ratio or relative difference between the metric values for the control and the variant. + Relative ratio is used for metrics that are ratios (e.g., click-through rate, conversion rate), + while relative difference is used for continuous metrics (e.g., revenue). + pValue: + type: number + format: double + description: PValue for the first variant (control) will always be 0. For the other variants, pValue is calculated for the current variant based on the control. + dimension: + type: string + description: Dimension defined during test creation. + metadata: + $ref: '#/metricMetadata' + criticalValue: + type: number + format: double + description: | + The value that was computed during error correction. It is used to determine significance of the metric pValue. + The critical value is calculated using Bonferroni or Benjamini-Hochberg corrections, based on the given + configuration during the A/B test creation. + significant: + type: boolean + description: | + Whether the pValue is significant or not based on the critical value and the error correction algorithm used. + required: + - name + - updatedAt + - value + - pValue + example: + - name: addToCartCount + updatedAt: 2025-06-15T15:06:44.400601Z + value: 5 + pValue: 0.01 + - name: clickThroughRate + updatedAt: 2025-05-15T17:52:15.644906Z + value: 0.20869847452125934 + pValue: 0.004 + - name: revenue + dimension: USD + updatedAt: 2025-05-15T17:52:15.644906Z + value: 1200.50 + pValue: 0.04 + metadata: {'winsorizedValue': 80.2} + - name: revenue + dimension: EUR + updatedAt: 2025-05-15T17:52:15.644906Z + value: 999.66 + pValue: 0.04 + metadata: {'winsorizedValue': 888.8} + +variantMetadata: + type: object + description: Variant specific metadata. + properties: + filterEffects: + $ref: '../parameters.yml#/filterEffects' + +metricMetadata: + type: object + description: Metric specific metadata. + properties: + winsorizedValue: + type: number + format: double + description: | + Only present in case the metric is 'revenue'. + It is the amount exceeding the 95th percentile of global revenue transactions involved in the AB Test. This amount is not considered when calculating statistical significance. + It is tied to a per revenue-currency pair contrary to other + global filter effects (such as outliers and empty search count). + example: + winsorizedValue: 888.80 diff --git a/specs/abtesting-v3/paths/abtest.yml b/specs/abtesting-v3/paths/abtest.yml new file mode 100644 index 0000000000..1e2bf89611 --- /dev/null +++ b/specs/abtesting-v3/paths/abtest.yml @@ -0,0 +1,65 @@ +get: + tags: + - abtest + operationId: getABTest + x-acl: + - analytics + summary: Retrieve A/B test details + description: Retrieves the details for an A/B test by its ID. + parameters: + - $ref: '../common/parameters.yml#/ID' + responses: + '200': + description: OK + headers: + x-ratelimit-limit: + $ref: '../../common/responses/rateLimit.yml#/x-ratelimit-limit' + x-ratelimit-remaining: + $ref: '../../common/responses/rateLimit.yml#/x-ratelimit-remaining' + x-ratelimit-reset: + $ref: '../../common/responses/rateLimit.yml#/x-ratelimit-reset' + content: + application/json: + schema: + $ref: '../common/schemas/ABTest.yml#/ABTest' + '400': + $ref: '../../common/responses/BadRequest.yml' + '402': + $ref: '../../common/responses/FeatureNotEnabled.yml' + '403': + $ref: '../../common/responses/MethodNotAllowed.yml' + '404': + $ref: '../../common/responses/IndexNotFound.yml' + +delete: + tags: + - abtest + operationId: deleteABTest + x-acl: + - editSettings + summary: Delete an A/B test + description: Deletes an A/B test by its ID. + parameters: + - $ref: '../common/parameters.yml#/ID' + responses: + '200': + description: OK + headers: + x-ratelimit-limit: + $ref: '../../common/responses/rateLimit.yml#/x-ratelimit-limit' + x-ratelimit-remaining: + $ref: '../../common/responses/rateLimit.yml#/x-ratelimit-remaining' + x-ratelimit-reset: + $ref: '../../common/responses/rateLimit.yml#/x-ratelimit-reset' + content: + application/json: + schema: + $ref: '../common/schemas/ABTestResponse.yml#/ABTestResponse' + '400': + $ref: '../../common/responses/BadRequest.yml' + '402': + $ref: '../../common/responses/FeatureNotEnabled.yml' + '403': + $ref: '../../common/responses/MethodNotAllowed.yml' + '404': + $ref: '../../common/responses/IndexNotFound.yml' diff --git a/specs/abtesting-v3/paths/abtests.yml b/specs/abtesting-v3/paths/abtests.yml new file mode 100644 index 0000000000..dcf14bd1df --- /dev/null +++ b/specs/abtesting-v3/paths/abtests.yml @@ -0,0 +1,137 @@ +post: + tags: + - abtest + operationId: addABTests + x-acl: + - editSettings + summary: Create an A/B test + description: Creates a new A/B test. + requestBody: + required: true + content: + application/json: + schema: + title: addABTestsRequest + type: object + additionalProperties: false + properties: + name: + $ref: "../common/parameters.yml#/name" + variants: + type: array + description: A/B test variants. + minItems: 2 + items: + $ref: "../common/schemas/AddABTestsVariant.yml#/AddABTestsVariant" + metrics: + type: array + description: A/B test metrics involved in the test. Only these metrics will be considered when calculating results. + items: + $ref: "../common/parameters.yml#/metric" + configuration: + $ref: "../common/schemas/ABTest.yml#/ABTestConfiguration" + endAt: + $ref: "../common/parameters.yml#/endAt" + required: + - name + - variants + - metrics + - endAt + responses: + "200": + description: OK + headers: + x-ratelimit-limit: + $ref: "../../common/responses/rateLimit.yml#/x-ratelimit-limit" + x-ratelimit-remaining: + $ref: "../../common/responses/rateLimit.yml#/x-ratelimit-remaining" + x-ratelimit-reset: + $ref: "../../common/responses/rateLimit.yml#/x-ratelimit-reset" + content: + application/json: + schema: + $ref: "../common/schemas/ABTestResponse.yml#/ABTestResponse" + "400": + $ref: "../../common/responses/BadRequest.yml" + "402": + $ref: "../../common/responses/FeatureNotEnabled.yml" + "403": + $ref: "../../common/responses/MethodNotAllowed.yml" + "404": + $ref: "../../common/responses/IndexNotFound.yml" + +get: + tags: + - abtest + operationId: listABTests + x-acl: + - analytics + summary: List all A/B tests + description: Lists all A/B tests you configured for this application. + parameters: + - name: offset + in: query + description: Position of the first item to return. + required: false + schema: + type: integer + default: 0 + minimum: 0 + - name: limit + in: query + description: Number of items to return. + required: false + schema: + type: integer + default: 10 + - name: indexPrefix + in: query + description: Index name prefix. Only A/B tests for indices starting with this string are included in the response. + example: "dev_" + schema: + type: string + - name: indexSuffix + in: query + description: Index name suffix. Only A/B tests for indices ending with this string are included in the response. + example: "_development" + schema: + type: string + responses: + "200": + description: OK + headers: + x-ratelimit-limit: + $ref: "../../common/responses/rateLimit.yml#/x-ratelimit-limit" + x-ratelimit-remaining: + $ref: "../../common/responses/rateLimit.yml#/x-ratelimit-remaining" + x-ratelimit-reset: + $ref: "../../common/responses/rateLimit.yml#/x-ratelimit-reset" + content: + application/json: + schema: + title: listABTestsResponse + type: object + additionalProperties: false + properties: + abtests: + $ref: "../common/schemas/ABTest.yml#/ABTests" + count: + type: integer + description: Number of A/B tests. + example: 10 + total: + type: integer + description: Number of retrievable A/B tests. + example: 12 + required: + - abtests + - count + - total + "400": + $ref: "../../common/responses/BadRequest.yml" + "402": + $ref: "../../common/responses/FeatureNotEnabled.yml" + "403": + $ref: "../../common/responses/MethodNotAllowed.yml" + "404": + $ref: "../../common/responses/IndexNotFound.yml" diff --git a/specs/abtesting-v3/paths/estimate.yml b/specs/abtesting-v3/paths/estimate.yml new file mode 100644 index 0000000000..1869ee5a56 --- /dev/null +++ b/specs/abtesting-v3/paths/estimate.yml @@ -0,0 +1,61 @@ +post: + tags: + - abtest + operationId: estimateABTest + x-acl: + - analytics + summary: Estimate the sample size and duration of an A/B test + description: Given the traffic percentage and the expected effect size, this endpoint estimates the sample size and duration of an A/B test based on historical traffic. + requestBody: + required: true + content: + application/json: + schema: + title: estimateABTestRequest + type: object + additionalProperties: false + properties: + configuration: + title: estimateConfiguration + type: object + description: A/B test configuration for estimating the sample size and duration using minimum detectable effect. + properties: + outliers: + $ref: '../common/schemas/ABTest.yml#/Outliers' + emptySearch: + $ref: '../common/schemas/ABTest.yml#/EmptySearch' + minimumDetectableEffect: + $ref: '../common/schemas/ABTest.yml#/MinimumDetectableEffect' + required: + - minimumDetectableEffect + variants: + type: array + description: A/B test variants. + minItems: 2 + items: + $ref: '../common/schemas/AddABTestsVariant.yml#/AddABTestsVariant' + required: + - configuration + - variants + responses: + '200': + description: OK + headers: + x-ratelimit-limit: + $ref: '../../common/responses/rateLimit.yml#/x-ratelimit-limit' + x-ratelimit-remaining: + $ref: '../../common/responses/rateLimit.yml#/x-ratelimit-remaining' + x-ratelimit-reset: + $ref: '../../common/responses/rateLimit.yml#/x-ratelimit-reset' + content: + application/json: + schema: + $ref: '../common/schemas/EstimateABTestResponse.yml#/EstimateABTestResponse' + '400': + $ref: '../../common/responses/BadRequest.yml' + '402': + $ref: '../../common/responses/FeatureNotEnabled.yml' + '403': + $ref: '../../common/responses/MethodNotAllowed.yml' + '404': + $ref: '../../common/responses/IndexNotFound.yml' diff --git a/specs/abtesting-v3/paths/scheduleABTest.yml b/specs/abtesting-v3/paths/scheduleABTest.yml new file mode 100644 index 0000000000..dbceed987b --- /dev/null +++ b/specs/abtesting-v3/paths/scheduleABTest.yml @@ -0,0 +1,57 @@ +post: + tags: + - abtest + operationId: scheduleABTest + x-acl: + - editSettings + summary: Schedule an A/B test + description: | + Schedule an A/B test to be started at a later time. + requestBody: + required: true + content: + application/json: + schema: + title: scheduleABTestsRequest + type: object + additionalProperties: false + properties: + name: + $ref: '../common/parameters.yml#/name' + variants: + type: array + description: A/B test variants. + minItems: 2 + items: + $ref: '../common/schemas/AddABTestsVariant.yml#/AddABTestsVariant' + scheduledAt: + $ref: '../common/parameters.yml#/scheduledAt' + endAt: + $ref: '../common/parameters.yml#/endAt' + required: + - name + - variants + - scheduledAt + - endAt + responses: + '200': + description: OK + headers: + x-ratelimit-limit: + $ref: '../../common/responses/rateLimit.yml#/x-ratelimit-limit' + x-ratelimit-remaining: + $ref: '../../common/responses/rateLimit.yml#/x-ratelimit-remaining' + x-ratelimit-reset: + $ref: '../../common/responses/rateLimit.yml#/x-ratelimit-reset' + content: + application/json: + schema: + $ref: '../common/schemas/ScheduleABTestResponse.yml#/ScheduleABTestResponse' + '400': + $ref: '../../common/responses/BadRequest.yml' + '402': + $ref: '../../common/responses/FeatureNotEnabled.yml' + '403': + $ref: '../../common/responses/MethodNotAllowed.yml' + '404': + $ref: '../../common/responses/IndexNotFound.yml' diff --git a/specs/abtesting-v3/paths/stopABTest.yml b/specs/abtesting-v3/paths/stopABTest.yml new file mode 100644 index 0000000000..1542f05339 --- /dev/null +++ b/specs/abtesting-v3/paths/stopABTest.yml @@ -0,0 +1,35 @@ +post: + tags: + - abtest + operationId: stopABTest + x-acl: + - editSettings + summary: Stop an A/B test + description: | + Stops an A/B test by its ID. + + You can't restart stopped A/B tests. + parameters: + - $ref: '../common/parameters.yml#/ID' + responses: + '200': + description: OK + headers: + x-ratelimit-limit: + $ref: '../../common/responses/rateLimit.yml#/x-ratelimit-limit' + x-ratelimit-remaining: + $ref: '../../common/responses/rateLimit.yml#/x-ratelimit-remaining' + x-ratelimit-reset: + $ref: '../../common/responses/rateLimit.yml#/x-ratelimit-reset' + content: + application/json: + schema: + $ref: '../common/schemas/ABTestResponse.yml#/ABTestResponse' + '400': + $ref: '../../common/responses/BadRequest.yml' + '402': + $ref: '../../common/responses/FeatureNotEnabled.yml' + '403': + $ref: '../../common/responses/MethodNotAllowed.yml' + '404': + $ref: '../../common/responses/IndexNotFound.yml' diff --git a/specs/abtesting-v3/paths/timeseries.yml b/specs/abtesting-v3/paths/timeseries.yml new file mode 100644 index 0000000000..03408dce60 --- /dev/null +++ b/specs/abtesting-v3/paths/timeseries.yml @@ -0,0 +1,60 @@ +get: + tags: + - abtest + operationId: getTimeseries + x-acl: + - analytics + summary: Retrieve timeseries of an A/B test + description: Retrieves timeseries for an A/B test by its ID. + parameters: + - $ref: '../common/parameters.yml#/ID' + - $ref: '../../common/parameters.yml#/StartDate' + - $ref: '../../common/parameters.yml#/EndDate' + - in: query + name: metric + description: List of metrics to retrieve. If not specified, all metrics are returned. + schema: + type: array + items: + type: string + enum: + - search_count + - tracked_search_count + - user_count + - tracked_user_count + - no_result_count + - add_to_cart_count + - purchase_count + - clicked_search_count + - converted_search_count + - click_through_rate + - conversion_rate + - add_to_cart_rate + - purchase_rate + - average_click_position + - revenue + example: ["search_count", "click_through_rate", "conversion_rate"] + responses: + '200': + description: OK + headers: + x-ratelimit-limit: + $ref: '../../common/responses/rateLimit.yml#/x-ratelimit-limit' + x-ratelimit-remaining: + $ref: '../../common/responses/rateLimit.yml#/x-ratelimit-remaining' + x-ratelimit-reset: + $ref: '../../common/responses/rateLimit.yml#/x-ratelimit-reset' + content: + application/json: + schema: + $ref: '../common/schemas/Timeseries.yml#/Timeseries' + '400': + $ref: '../../common/responses/BadRequest.yml' + '402': + $ref: '../../common/responses/FeatureNotEnabled.yml' + '403': + $ref: '../../common/responses/MethodNotAllowed.yml' + '404': + $ref: '../../common/responses/IndexNotFound.yml' + '422': + $ref: '../../common/responses/UnprocessableEntity.yml' diff --git a/specs/abtesting-v3/spec.yml b/specs/abtesting-v3/spec.yml new file mode 100644 index 0000000000..5d39a52e19 --- /dev/null +++ b/specs/abtesting-v3/spec.yml @@ -0,0 +1,111 @@ +openapi: 3.0.2 +externalDocs: + url: https://www.algolia.com/doc/guides/ab-testing/what-is-ab-testing/ + description: | + Related guide: A/B testing. +info: + title: A/B Testing API + description: | + The Algolia A/B Testing API lets you manage your Algolia A/B tests to optimize your search experience. + + ## Base URLs + + The base URLs for requests to the A/B testing API are: + + - `https://analytics.us.algolia.com` + - `https://analytics.de.algolia.com` + - `https://analytics.algolia.com` (routes requests to the closest of the above servers, based on your geographical location) + + Use the URL that matches your [analytics region](https://dashboard.algolia.com/account/infrastructure/analytics). + + **All requests must use HTTPS.** + + ## Availability and authentication + + Access to the A/B testing API is available as part of the [Premium or Elevate plans](https://www.algolia.com/pricing). + + To authenticate your API requests, add these headers: + + - `x-algolia-application-id`. Your Algolia application ID. + - `x-algolia-api-key`. An API key with the necessary permissions to make the request. + The required access control list (ACL) to make a request is listed in each endpoint's reference. + + You can find your application ID and API key in the [Algolia dashboard](https://dashboard.algolia.com/account). + + ## Rate limits + + You can make up to **100 requests per minute per app** to the A/B testing API. + The response includes headers with information about the limits. + + ## Parameters + + Query parameters must be [URL-encoded](https://developer.mozilla.org/en-US/docs/Glossary/Percent-encoding). + Non-ASCII characters must be UTF-8 encoded. + Plus characters (`+`) are interpreted as spaces. + + ## Response status and errors + + The A/B testing API returns JSON responses. + Since JSON doesn't guarantee any specific ordering, don't rely on the order of attributes in the API response. + + Successful responses return a `2xx` status. Client errors return a `4xx` status. Server errors are indicated by a `5xx` status. + Error responses have a `message` property with more information. + + ## Version + + The current version of the A/B Testing API is version 3, as indicated by the `/3/` in each endpoint's URL. + version: 3.0.0 +components: + securitySchemes: + appId: + $ref: "../common/securitySchemes.yml#/appId" + apiKey: + $ref: "../common/securitySchemes.yml#/apiKey" +servers: + - url: https://analytics.{region}.algolia.com + variables: + region: + enum: + - us + - de + default: us + - url: https://analytics.algolia.com +security: + - appId: [] + apiKey: [] +tags: + - name: abtest + x-displayName: A/B testing + description: | + Manage A/B tests. + + A/B tests are configurations one or more indices, usually your production index and an index with different settings that you want to test. +x-tagGroups: + - name: General + tags: + - abtest +paths: + # ###################### + # ### Custom request ### + # ###################### + /{path}: + $ref: "../common/paths/customRequest.yml" + + /3/abtests: + $ref: "paths/abtests.yml" + /3/abtests/{id}: + $ref: "paths/abtest.yml" + /3/abtests/{id}/stop: + $ref: "paths/stopABTest.yml" + /3/abtests/schedule: + $ref: "paths/scheduleABTest.yml" + /3/abtests/estimate: + $ref: "paths/estimate.yml" + /3/abtests/{id}/timeseries: + $ref: "paths/timeseries.yml" + + # ############### + # ### Helpers ### + # ############### + /setClientApiKey: + $ref: "../common/helpers/setClientApiKey.yml#/method"