Cancel Policy

Cancel an active policy and issue a refund of the premium.

A policy can be cancelled until 48 hours before its cover starts (the default; error.details.context.lead_hours gives the window that applied), measured from the cover start time in the timezone of the insured location. Inside that window the request is refused with 422 and error.details.original_error_code = CANCELLATION_WINDOW_CLOSED; error.details.context.cutoff_at gives the cut-off as ISO-8601 with the location's UTC offset. Some sales channels do not allow cancellation at all (CANCELLATION_NOT_PERMITTED). Once cover has started, cancellation is refused with COVERAGE_ACTIVE.

Annual and annual cat policies can be cancelled at any time, before or during the term, and the cancellation takes effect immediately. The request takes no effective date. If the cover has not started the full premium is refunded. Once it has started the refund is the premium for the unexpired days of the term, less the cancellation fee agreed for your account (GST inclusive), and never below zero. If a claim on the policy has already been approved or paid there is no refund, but the policy is still cancelled. Any claim not yet approved or paid is closed by the cancellation, and no claim can be approved afterwards.

This operation is idempotent with a 7-day TTL — use X-Request-Id for safe retries.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…

Cancellation & Refund Flow

flowchart TB
    A["POST /policies/{id}/cancel"] --> B{"Policy Status?"}
    B -->|"Active"| C{"Timing?"}
    B -->|"Already cancelled"| D["409 ALREADY_CANCELLED"]
    B -->|"Completed"| E["422 POLICY_COMPLETED"]
    B -->|"Has paid claims"| F["422 HAS_PAID_CLAIMS"]
    C -->|"Before coverage starts"| G["Full refund"]
    C -->|"During coverage"| H["Pro-rata refund<br/>for unused days"]
    C -->|"After coverage"| I["No refund"]
    G --> J["Policy cancelled<br/>+ refund details"]
    H --> J
    I --> J

    style A fill:#e3f2fd
    style J fill:#e8f5e9
    style D fill:#fff3e0
    style E fill:#fce4ec
    style F fill:#fce4ec

What This Endpoint Does

  1. Validates Cancellation: Checks policy can be cancelled
  2. Calculates Refund: Determines refund amount based on timing
  3. Processes Cancellation: Updates policy status to cancelled
  4. Returns Refund Details: Provides breakdown of refund amount

When to Use This Endpoint

  • Customer cancels their booking/trip
  • Customer requests policy cancellation
  • Booking was refunded and insurance no longer needed

Request Parameters

ParameterRequiredDescription
reasonYesWhy policy is being cancelled (e.g., "Trip cancelled")

Understanding the Response

policy object contains:

FieldDescription
idUUID of the cancelled policy
policy_numberHuman-readable reference
statusAlways "cancelled"
cancelled_atTimestamp of cancellation

cancellation object:

FieldDescription
cancelled_atWhen cancellation was processed
reasonCancellation reason provided
typeCancellation type (e.g., "customer_requested")
refund_amountTotal amount to be refunded
refund_tax_breakdownTax components of refund
refund_tax_totalTotal tax portion of refund

Refund Calculation

Refunds are calculated based on:

  • Before coverage starts: Full premium refund (minus admin fee if applicable)
  • During coverage period: Pro-rata refund for unused days
  • After coverage ends: No refund (policy completed)

Error Handling

ErrorCodeDescription
POLICY_NOT_FOUND404Policy doesn't exist
ALREADY_CANCELLED409Policy was already cancelled
POLICY_COMPLETED422Coverage period has ended
HAS_PAID_CLAIMS422Policy has paid claims - cannot cancel
COVERAGE_ACTIVE422Cannot cancel while coverage is active (partner-specific)
ANNUAL_POLICY_NOT_CANCELLABLE422Annual policies cannot be cancelled via API

Idempotency

Include X-Request-Id header for safe retries:

  • System caches responses for 7 days (168 hours)
  • Safe to retry on network failures
  • Returns original cancellation response if already processed
  • Check X-Idempotent-Replayed: true header to detect cached responses
  • Only 2xx and 4xx responses are cached — 5xx errors are always retryable

Important Considerations

  • Claims impact: Policies with paid claims cannot be cancelled
  • Timing matters: Refund amount depends on when cancellation occurs
  • Irreversible: Cancellation cannot be undone - customer would need new quote
  • Pending claims: Any pending claims are cancelled with the policy

Best Practices

  1. Confirm with customer: Cancellation is irreversible
  2. Use idempotency: Always include X-Request-Id for production
  3. Show refund amount: Let customer know expected refund before confirming
  4. Store cancellation details: Keep record of cancellation reason and refund
Path Params
uuid
required

UUID of the policy

Body Params
string
required

Reason for cancellation

Headers
string

Idempotency key for safe retries. Send the same key and the same body when retrying. If a request with this key already completed within the TTL window (7 days for financial operations), the original response is returned with X-Idempotent-Replayed: true and nothing is re-executed. While the first request is still processing, a retry gets 409 CONFLICT_ERROR (details.reason = request_in_progress, Retry-After: 1). Reusing a key with a different body gets 422 VALIDATION_ERROR (details.reason = idempotency_key_reused). 5xx responses are not stored, so a retry after one executes again.

Responses

Language
Credentials
Bearer
API Key
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json