openapi: 3.0.3 info: title: MoEngage GDPR / CCPA API description: | API to create or update user rights for **GDPR** (General Data Protection Regulation) or **CCPA** (California Consumer Privacy Act) compliance, including the right to erase personal data. version: '1.0' servers: # Updated server configuration based on best practice for API playground enablement. - url: 'https://api-{dc}.moengage.com/v1' description: MoEngage API Server variables: dc: default: '01' description: 'The ‘dc’ in the API Endpoint URL refers to the MoEngage Data Center (DC). MoEngage hosts each customer in a different DC. You can find your DC number and replace the value of ‘dc’ in the URL by referring to the DC and API endpoint mapping [here](/api/introduction#data-centers). Your MoEngage Data Center (DC) can be 01, 02, 03, 04, 05, 06, or 101.' tags: - name: GDPR description: Manage user data requests for GDPR and CCPA compliance. security: - basicAuth: [] paths: /opengdpr_requests/{appId}: post: tags: - GDPR summary: Submit a GDPR / CCPA Data Request description: | GDPR or CCPA API ensures all the rights of users are created or updated for GDPR or CCPA compliance. You can erase the personal data of specific users as defined under GDPR using the Erase API. For more details on compliance with MoEngage, refer to [GDPR-Implementation](/user-guide/data/privacy/gdpr) and [CCPA-Implementation](/user-guide/data/privacy/ccpa). operationId: submitGdprRequest x-mint: # Request Limitations (moved from previous response, still relevant here) content: | **Warning:** Multiple users **cannot** be deleted using this API in a single payload. If an email ID associated with multiple users is passed for an erasure request, **all** associated users will be deleted. #### Rate Limit The maximum limit per request is **100 KB**. The maximum payload size is **128 KB**. parameters: - name: appId in: path required: true schema: type: string description: | This is your MoEngage account's Workspace ID that must be included in the request. You can find your Workspace ID in the following navigation on the dashboard: Revamped UI: **Settings** > **Account** > **APIs** > **Workspace ID** example: 'YOUR_WORKSPACE_ID_XXXX' requestBody: description: | The GDPR/CCPA request payload, containing the type of request and the user identities. required: true content: application/json: schema: $ref: '#/components/schemas/GdprRequest' examples: GDPR Erasure Request: summary: GDPR Erasure Request value: request_type: "erasure" submitted_time: "2018-10-05T15:00:00Z" identities: - identity_type: "email" identity_value: "johndoe@example.com" api_version: "1.0" responses: '200': description: Success. This response is returned when the request is processed successfully. content: application/json: schema: $ref: '#/components/schemas/GdprSuccessResponse' example: status: success message: Your request has been accepted and will be processed soon. request_id: 'a7551968-d5d6-44b2-9831-815ac9017798' '400': description: Bad Request. This response is returned when the required parameters are missing from the request, attributes are not found, or incorrect values are passed. content: application/json: schema: $ref: '#/components/schemas/GdprError400Response' examples: MissingRequestType: summary: Missing request_type value: status: fail error: attribute: request_type message: request_type is not found in the payload type: MissingAttributeError request_id: zuMJjxAS MissingIdentities: summary: Missing identities value: status: fail error: attribute: identities message: identities is not found in the payload type: MissingAttributeError request_id: OzqWFuri '401': description: Unauthorized. This response is returned when the request does not have valid authentication credentials. content: application/json: schema: $ref: '#/components/schemas/GdprError401Response' '403': description: Account Blocked. This response is returned when your MoEngage account is suspended or blocked. content: application/json: schema: $ref: '#/components/schemas/GdprError403Response' examples: BlockedClient: summary: Account Blocked value: status: fail error: message: Your account is suspended. Please contact MoEngage team. type: BlockedClient request_id: ofHUEaEQ AccountSuspended: summary: Account Suspended value: status: fail error: message: Your account is suspended. Please contact MoEngage team. type: Account Suspended request_id: gqJvCNYu AccountTemporarilySuspended: summary: Account Temporarily Suspended value: status: fail error: message: Your account is temporarily suspended. Please contact MoEngage team. type: Account Temporarily Suspended request_id: ssSJjoyD '413': description: Payload Size Exceeded. This response is returned when the payload size exceeds 128 KB. content: application/json: schema: $ref: '#/components/schemas/GdprError413Response' '415': description: Unsupported Media Type. This response is returned when the content type is not supported. content: application/json: schema: $ref: '#/components/schemas/GdprError415Response' '429': description: Rate Limit Breach. This response is returned when the number of requests has exceeded the rate limit. content: application/json: schema: $ref: '#/components/schemas/GdprError429Response' '500': description: Internal Server Error. This response is returned when the system runs into an unexpected error. content: application/json: schema: $ref: '#/components/schemas/GdprError500Response' components: securitySchemes: basicAuth: type: http scheme: basic description: | Authentication is done via Basic Auth. This requires a base64-encoded string of your credentials in the format 'username:password'. - **Username**: Use your MoEngage Workspace ID (also known as the App ID). You can find it in the MoEngage dashboard at **Settings** > **Account** > **APIs** > **Workspace ID (earlier app id)**. - **Password**: Use your API Key, which you can find within the **Data** tile. For more information on authentication and getting your credentials, refer [here](https://www.moengage.com/docs/api/introduction#getting-your-credentials). schemas: GdprRequest: type: object required: - request_type - submitted_time - identities - api_version description: The main object representing a GDPR or CCPA compliance request. properties: request_type: type: string description: This is used to request for GDPR details or request to erase the GDPR details example: erasure submitted_time: type: string format: date-time description: This identifies the time when the request was sent. example: '2018-10-05T15:00:00Z' identities: type: array description: This provides the details of the user, such as email address, phone number, and so on. items: $ref: '#/components/schemas/UserIdentity' api_version: type: string description: This identifies the API version used to send the GDPR request. example: '1.0' UserIdentity: type: object description: An object representing a user's identity detail. properties: identity_type: type: string description: 'This field denotes the key based on which the user has to be deleted.' enum: - ID - user_secondary_id - email - mobile - google_advertising_id - advertising_identifier example: email identity_value: type: string description: This field denotes the value of the identity_type. example: johndoe@example.com GdprSuccessResponse: type: object description: Standard successful response object for a submitted GDPR request. properties: status: type: string example: success message: type: string description: A human-readable message confirming the request was accepted. example: Your request has been accepted and will be processed soon. request_id: type: string format: uuid description: A unique ID generated for the submitted request. example: 'a7551968-d5d6-44b2-9831-815ac9017798' GdprError400Response: type: object description: This response is returned when the required parameters are missing from the request, attributes are not found, or incorrect values are passed. properties: status: type: string example: fail error: type: object description: Contains the error details. properties: attribute: type: string example: request type message: type: string description: A human-readable message confirming the request was not accepted. example: request_type is not found in the payload. type: type: string example: MissingAttributeError request_id: type: string example: zuMJjxAS GdprError401Response: type: object description: This response is returned when the request does not have valid authentication credentials. properties: status: type: string example: fail error: type: object description: Contains the error details. properties: message: type: string description: A human-readable message confirming the request was not accepted. example: No identity information found. type: type: string example: Authentication required request_id: type: string example: IzbhlLyG GdprError403Response: type: object description: This response is returned when your MoEngage account is suspended or blocked. properties: status: type: string example: fail error: type: object description: Contains the error details. properties: message: type: string description: A human-readable message confirming the request was not accepted. example: Your account is suspended. Please contact MoEngage team. type: type: string example: BlockedClient request_id: type: string example: ofHUEaEQ GdprError413Response: type: object description: This response is returned when the payload size exceeds 128 KB. properties: status: type: string example: fail error: type: object description: Contains the error details. properties: message: type: string description: A human-readable message confirming the request was not accepted. example: Payload can not exceed 128KB. type: type: string example: Payload too large request_id: type: string example: VFzDwhwt GdprError415Response: type: object description: This response is returned when the content type is not supported. properties: status: type: string example: fail error: type: object description: Contains the error details. properties: message: type: string description: A human-readable message confirming the request was not accepted. example: Content type is not supported type: type: string example: Unsupported media type request_id: type: string example: SgBQfKJh GdprError429Response: type: object description: This response is returned when the number of requests has exceeded the rate limit. properties: status: type: string example: fail error: type: object description: Contains the error details. properties: message: type: string description: A human-readable message confirming the request was not accepted. example: Rate limits for customers exceeded. Please Try After Some Time type: type: string example: Rate Limits Exceeded request_id: type: string example: onqucLYL GdprError500Response: type: object description: This response is returned when the system runs into an unexpected error. properties: status: type: string example: fail error: type: object description: Contains the error details. properties: message: type: string description: A human-readable message confirming the request was not accepted. example: An unexpected error was encountered while processing this request. Please contact MoEngage Team type: type: string example: Server Error request_id: type: string example: KovrwJiF # --- Start of Content Added to the End of the Document (as Accordion) --- x-mint-global-content: | # FAQs Multiple users cannot be deleted using this API in a single payload. The maximum payload size is **128 KB**. If this limit is exceeded, a 413 error response will be sent. If multiple users have the same email ID and that email ID is passed in the payload for an erasure request, **all** the users associated with the email ID will be deleted. # --- End of Content Added to the End of the Document ---