---
title: "Cancel a List operation"
method: POST
path: "/v2/lists/{listId}/operations/{operationId}/cancel"
tags: ["Lists"]
---

# Cancel a List operation

`POST /v2/lists/{listId}/operations/{operationId}/cancel`

## Request

- Base URL: `https://api.reversecontact.com`
- URL: `https://api.reversecontact.com/v2/lists/{listId}/operations/{operationId}/cancel`
- Auth: HTTP bearer

Stops an import of this workspace, whichever key started it. Lines already in flight finish and are charged as usual; lines not started are never charged and read not_reached in the per-line results. Cancelling is final: replaying the import with the same operationId returns the cancelled operation, and a new run needs a new operationId. Cancelling a cancelled operation answers it again. The import webhookUrl receives the cancelled state. Credits: 0.

## Path parameters

- `listId` string, uuid, required: List id
- `operationId` string, required: Operation id (operationId of the acknowledgement)

## Response `200`

The cancelled operation

- object
  - `success` true, required
  - `data` object, required
    - `operationId` string, required: Operation id
    - `listId` string, uuid, required: List id
    - `kind` string: Operation kind
    - `status` 'queued' | 'running' | 'paused' | 'completed' | 'partial' | 'stopped_budget' | 'failed' | 'cancelled' | 'refused' | 'unknown', required
    - `clientAction` 'poll' | 'resume' | 'done' | 'reconcile', required: poll: read again after pollAfterSeconds. resume: read stopReason and nextStep, then resume. done: finished, the data can be read. reconcile: the outcome is ambiguous, never replay it.
    - `progress` object
      - `processed` integer: Lines processed
      - `total` integer: Lines in the operation
      - `succeeded` integer: Lines that resolved a member
      - `failed` integer: Lines that failed or were not found
      - `skipped` integer: Lines skipped
      - `remaining` integer: Lines left
      - `unknownCount` integer: Lines with an ambiguous outcome
    - `creditsConsumed` number: Credits charged so far
    - `creditsPending` number: Credits reserved by steps in flight
    - `creditsEstimated` number: Credits reserved when the operation was created: an import reserves nothing (0) and spends up to maxCredits
    - `maxCredits` number, nullable: Credit ceiling of the operation
    - `estimatedSeconds` integer, nullable: Advisory time left while it runs
    - `estimateBlockedUntil` string, date-time, nullable: When the daily extraction limit holds it: the next 00:00 UTC
    - `pollAfterSeconds` integer, required: Seconds to wait before reading again (0 once polling stops)
    - `pollUrl` string, nullable, required: Path that reads this operation
    - `stopReason` string, nullable: Why it stopped: balance, max_credits, paused_by_user, a limit, cancelled
    - `nextStep` unknown
    - `errorMessage` string, nullable: Failure message
    - `startedAt` string, date-time, nullable: Start date
    - `completedAt` string, date-time, nullable: End date, once the data can be read
    - `rows` object, nullable: With rows=true on an intake operation: one page of per-line results
      - `items` object[]
        - `index` integer, nullable, required: Position of the line in the request (0-based)
        - `rowNumber` integer, required: Line number in the operation (1-based)
        - `outcome` 'pending' | 'added' | 'already_present' | 'resolved' | 'not_found' | 'refused' | 'failed' | 'not_reached' | 'unknown', required
        - `externalId` string, nullable, required: Your identifier, as sent
        - `memberId` string, uuid, nullable, required: Member the line names
        - `errorCode` string, nullable: Why a line was refused or failed, or a requested family missed
        - `reason` string, nullable: Short reason
        - `signal` object: The identifiers sent
      - `nextCursor` string, nullable: Cursor of the next page of lines, null on the last one
  - `error` unknown, required
  - `quotas` V2Quotas, required
    - `creditsConsumed` number, required: Credits used for this request after pricing resolution
    - `workspace` object, required
      - `id` string, required: Workspace identifier
      - `credits` V2Credits, required
        - `total` number, required: Total credits in your plan
        - `used` number, required: Credits consumed so far
        - `left` number, required: Remaining credits
      - `hasUnlimitedCredits` boolean, required: Whether workspace credits are unlimited
      - `allowDailyOvercost` boolean, required: Whether the workspace may exceed its daily cap (Enterprise only)
      - `dailyLimit` V2LimitInfo
        - `limit` integer, required: Maximum allowed in the window
        - `used` integer, required: Amount used in the window
        - `left` integer, required: Remaining in the window
        - `nextReset` string, required: When the window resets (ISO 8601)
      - `minuteRateLimit` V2LimitInfo, required
        - `limit` integer, required: Maximum allowed in the window
        - `used` integer, required: Amount used in the window
        - `left` integer, required: Remaining in the window
        - `nextReset` string, required: When the window resets (ISO 8601)
    - `key` object, nullable, required
      - `id` string, required: API key identifier
      - `dailyLimit` V2LimitInfo
        - `limit` integer, required: Maximum allowed in the window
        - `used` integer, required: Amount used in the window
        - `left` integer, required: Remaining in the window
        - `nextReset` string, required: When the window resets (ISO 8601)
      - `minuteRateLimit` V2LimitInfo, required
        - `limit` integer, required: Maximum allowed in the window
        - `used` integer, required: Amount used in the window
        - `left` integer, required: Remaining in the window
        - `nextReset` string, required: When the window resets (ISO 8601)
      - `creditLimits` object, required: Credit limits set on this API key. Each is null when the key has no such limit.
        - `daily` V2KeyCreditLimit, required
          - `limit` number, required: Credits this key may spend in the period
          - `used` number, required: Credits this key spent in the period, this request included
          - `left` number, required: Credits this key may still spend in the period
          - `nextReset` string, nullable, required: When the period resets (ISO 8601): 00:00 UTC for the daily limit, the 1st of next month at 00:00 UTC for the monthly limit, null for the total limit
        - `monthly` V2KeyCreditLimit, required
          - `limit` number, required: Credits this key may spend in the period
          - `used` number, required: Credits this key spent in the period, this request included
          - `left` number, required: Credits this key may still spend in the period
          - `nextReset` string, nullable, required: When the period resets (ISO 8601): 00:00 UTC for the daily limit, the 1st of next month at 00:00 UTC for the monthly limit, null for the total limit
        - `total` V2KeyCreditLimit, required
          - `limit` number, required: Credits this key may spend in the period
          - `used` number, required: Credits this key spent in the period, this request included
          - `left` number, required: Credits this key may still spend in the period
          - `nextReset` string, nullable, required: When the period resets (ISO 8601): 00:00 UTC for the daily limit, the 1st of next month at 00:00 UTC for the monthly limit, null for the total limit
  - `metadata` V2Metadata, required
    - `requestId` string, required: Unique identifier for this request
    - `executionTimeMs` integer, required: Total execution time in milliseconds
    - `updatedAt` string: Last upstream update timestamp (ISO 8601). Present only when available.

## Other responses

- `400`: Invalid JSON body or endpoint-specific business validation
- `401`: Missing or invalid API key or OAuth access token
- `402`: No credits left. Purchase more to continue.
- `403`: Forbidden: the API key lacks permission for this endpoint, or reached its total credit limit (KEY_CREDIT_LIMIT_REACHED, no reset: raise or reset the limit)
- `404`: LIST_OPERATION_NOT_FOUND
- `409`: LIST_OPERATION_NOT_CANCELLABLE: the operation already ended
- `422`: Schema or validation error, unresolved internal id, or disposable email domain
- `429`: Rate limit exceeded, or the API key reached its daily or monthly credit limit (KEY_CREDIT_LIMIT_REACHED). Wait error.details.retryAfter seconds, then retry. The response carries no quotas object.
- `451`: Data subject blocked. The profile has been removed per GDPR/CCPA data subject request.

---

[API](https://skmtc.dev/scrapin/apis/reverse-contact-api.md) - [All operations](https://skmtc.dev/scrapin/apis/reverse-contact-api/llms.txt) - [OpenAPI document](https://skmtc.dev/scrapin/apis/reverse-contact-api/revisions/7d02242af2a9?raw)
