Skip to main content

Confirm Cancel

Phase 2: finalize the cancellation. Pass the same orderIdentifier from the request phase. Optionally include a survey payload for analytics.

URL

POST /api/c2a/subscription/cancel/confirm

Request Parameters

Body: ConfirmCancelRequest.

NameTypeDescription
orderIdentifierstringRequired. Same id as in cancel/request.
cancelationMethodstring (EnSubscriptionCancelMethod)Required. Mirror the method from the request phase.
currentStepintegerFunnel step.
surveystringFree-form payload (e.g. JSON) capturing reason code + comment.
sourcestring (EnInteractionSource)Forced to C2A server-side.

Request Example

{
"orderIdentifier": "or_01J3X...",
"cancelationMethod": "Normal",
"currentStep": 1,
"survey": "{\"reasonCode\":\"PRICE\",\"comment\":\"Too expensive\"}"
}

Response Parameters

ConfirmCancelResponse envelope. Actual state transition happens through the resolved subscription provider:

  • In-house — Azotte writes the cancellation directly, with endDate honoring cancelationMethod.
  • App Store / Play Store — Azotte updates its mirror only — store-side cancellation must be initiated by the user on their device. Mirror reflects the store webhook when it arrives.
  • PayPal / Third-party — Azotte calls the provider's cancel API and waits for the provider's confirmation event.
NameTypeDescription
statusobject (AzotteStatus)Operation status envelope.

Sample Response

{ "status": { "messageCode": "SUCCESS" } }

Sample Codes

curl --location 'https://acme.sandbox.azotte.com/api/v1/c2a/subscription/cancel/confirm' \
--header 'Content-Type: application/json' \
--header 'x-tn: e2a1c7b2-4f3a-4b8e-9c2d-1a2b3c4d5e6f' \
--header 'x-api-key: sk_dev_acme_sample_123456789' \
--data '{
"orderIdentifier": "or_01J3X...",
"cancelationMethod": "Normal",
"currentStep": 1,
"survey": "{\"reasonCode\":\"PRICE\",\"comment\":\"Too expensive\"}"
}'