diff --git a/specs/advanced-personalization/common/responses/FeatureNotEnabled.yml b/specs/advanced-personalization/common/responses/FeatureNotEnabled.yml new file mode 100644 index 00000000000..04fcd8dab3e --- /dev/null +++ b/specs/advanced-personalization/common/responses/FeatureNotEnabled.yml @@ -0,0 +1,5 @@ +description: Feature not enabled. +content: + application/json: + schema: + $ref: '../schemas/ErrorResponses.yml#/featureNotEnabled' diff --git a/specs/advanced-personalization/common/schemas/Configuration.yml b/specs/advanced-personalization/common/schemas/Configuration.yml index 563a004d66a..b330eef4670 100644 --- a/specs/advanced-personalization/common/schemas/Configuration.yml +++ b/specs/advanced-personalization/common/schemas/Configuration.yml @@ -74,3 +74,16 @@ status: $ref: '../enums.yml#/errorCodes' lastUpdatedAt: type: string + +features: + type: object + properties: + realtime: + $ref: '#/realtime' + +realtime: + type: object + properties: + enabled: + type: boolean + description: Whether the realtime personalization feature is enabled. diff --git a/specs/advanced-personalization/common/schemas/ConfigurationObject.yml b/specs/advanced-personalization/common/schemas/ConfigurationObject.yml index 12a04206160..84cf9aa0533 100644 --- a/specs/advanced-personalization/common/schemas/ConfigurationObject.yml +++ b/specs/advanced-personalization/common/schemas/ConfigurationObject.yml @@ -38,4 +38,6 @@ configurationObject: $ref: './Configuration.yml#/profileType' status: $ref: './Configuration.yml#/status' - required: [indices, personalzationReRanking, profileType, status] + features: + $ref: './Configuration.yml#/features' + required: [indices, personalzationReRanking, profileType, status, features] diff --git a/specs/advanced-personalization/common/schemas/ErrorCodes.yml b/specs/advanced-personalization/common/schemas/ErrorCodes.yml index 379faf1db2d..bb2530db380 100644 --- a/specs/advanced-personalization/common/schemas/ErrorCodes.yml +++ b/specs/advanced-personalization/common/schemas/ErrorCodes.yml @@ -8,6 +8,11 @@ unauthorized: description: HTTP status code for an authorization error. enum: [401] +paymentRequired: + type: integer + description: HTTP status code for a payment required error. + enum: [402] + notFound: type: integer description: HTTP status code for a not found error. diff --git a/specs/advanced-personalization/common/schemas/ErrorMessages.yml b/specs/advanced-personalization/common/schemas/ErrorMessages.yml index 960b883bdee..63876df49be 100644 --- a/specs/advanced-personalization/common/schemas/ErrorMessages.yml +++ b/specs/advanced-personalization/common/schemas/ErrorMessages.yml @@ -13,6 +13,13 @@ unauthorized: description: Details about the response, such as error messages. enum: [Unauthorized] +featureNotEnabled: + type: string + description: Details about the response, such as error messages. + enum: + - "Predictive profiles are not allowed for this app. Please contact support to upgrade your plan: https://support.algolia.com/" + - "Realtime Personalization is not allowed for this app. Please contact support to upgrade your plan: https://support.algolia.com/" + genericNotFound: type: string description: Details about the response, such as error messages. diff --git a/specs/advanced-personalization/common/schemas/ErrorResponses.yml b/specs/advanced-personalization/common/schemas/ErrorResponses.yml index 01891ad741d..52622715797 100644 --- a/specs/advanced-personalization/common/schemas/ErrorResponses.yml +++ b/specs/advanced-personalization/common/schemas/ErrorResponses.yml @@ -53,3 +53,11 @@ internalServerError: $ref: './ErrorCodes.yml#/internalServerError' message: $ref: './ErrorMessages.yml#/internalServerError' + +featureNotEnabled: + type: object + properties: + status: + $ref: './ErrorCodes.yml#/paymentRequired' + message: + $ref: './ErrorMessages.yml#/featureNotEnabled' diff --git a/specs/advanced-personalization/paths/config.yml b/specs/advanced-personalization/paths/config.yml index a1805757689..6cb0f749918 100644 --- a/specs/advanced-personalization/paths/config.yml +++ b/specs/advanced-personalization/paths/config.yml @@ -67,7 +67,9 @@ put: $ref: '../common/schemas/Configuration.yml#/personalizationReRanking' profileType: $ref: '../common/schemas/Configuration.yml#/profileType' - required: [indices, personalizationReRanking, profileType] + features: + $ref: '../common/schemas/Configuration.yml#/features' + required: [indices, personalizationReRanking, profileType, features] responses: '200': description: OK @@ -94,5 +96,7 @@ put: $ref: '../common/responses/BadRequest.yml' '401': $ref: '../common/responses/Unauthorized.yml' + '402': + $ref: '../common/responses/FeatureNotEnabled.yml' '500': $ref: '../common/responses/InternalServerError.yml'