Skip to content
v1.1.0
OpenAPI 3.0.3

Asynchronous Email Model Deletion API

Delete emails by submitting their IDs, literal email-ID prefixes, or their union. Requests require a plugin token with the API role and apply only to emails belonging to that plugin.

A 202 response confirms that a deletion job was stored, not that deletion finished. If needed, poll the job and inspect its item results before considering the request complete. Deleted data cannot be restored.

Server:https://plugins.stripo.email

Stripo Plugin API server

Client Libraries

Methods

​

Create an email deletion job

​

Accepts emailIds, emailIdPatterns, or both. At least one array must be nonempty. A field may be omitted or empty when the other is nonempty; explicit null, non-array values, invalid elements, and unknown fields return 400 before a job is created. The request body is limited to 1 MiB. emailIds are literal IDs, including any *. At most 1000 distinct explicit IDs are accepted. Duplicate IDs and overlapping selections are processed once.

Each pattern must contain exactly one *, at the end, after at least three literal Unicode code points. Matching preserves case and treats %, _, and ! in the prefix as literal characters.

Headers

  • Retry key scoped to the plugin and DELETE operation. The same key and normalized selector arrays return the existing job. Order and duplicate selectors do not change the selection identity; both emailIds and emailIdPatterns participate. Reusing the key with a different selector set returns 409. Keep the returned job ID for subsequent reads; idempotency is limited by the lifetime of the stored job.

Body·

required
application/json

Provide a nonempty emailIds array, a nonempty emailIdPatterns array, or both. Either field may be omitted or empty when the other is nonempty. Neither field nor its elements may be null.

Responses

  • Job persisted. Deletion may still be pending or running.

    • the date-time notation as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z

    • Time after which the job and its items may no longer be available.

    • the date-time notation as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z

    • Properties: 9
    • the date-time notation as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z

    • values
      QUEUEDSCANNINGRUNNINGPAUSE_REQUESTEDPAUSEDSTOP_REQUESTEDSTOPPEDCOMPLETEDCOMPLETED_WITH_ERRORSFAILED
    Headers
    Headers: 2
    application/json
  • Invalid body, empty combined selection, null or malformed selector arrays, invalid email IDs or patterns, excess distinct explicit IDs, unknown request fields, cursor, status filter, or page size.

    text/plain
  • Missing or invalid plugin authentication.

    text/plain
  • The plugin token does not have the API role.

    text/plain
  • HTTP method is not supported for this path.

    text/plain
  • Idempotency key reused for another selection or invalid control transition.

    application/json
  • Rate limit exceeded. Retry after the indicated delay.

    Headers
    Headers: 2
    text/plain
  • Unexpected server error; include the X-Trace-Id in support requests.

    text/plain
  • The service is temporarily unavailable. Try again later.

    application/json
Request Example for post/coediting/v1/emails/delete-jobs
curl https://plugins.stripo.email/coediting/v1/emails/delete-jobs \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'ES-PLUGIN-AUTH: YOUR_SECRET_TOKEN' \
  --data '{
  "emailIds": [
    "email-123"
  ]
}'
{
  "jobId": "gcj_0123456789abcdef0123456789abcdef",
  "status": "QUEUED",
  "createdAt": "2026-09-29T08:00:00Z",
  "startedAt": null,
  "finishedAt": null,
  "expiresAt": "2026-09-30T08:00:00Z",
  "progress": {
    "total": null,
    "discovered": 0,
    "processed": 0,
    "running": 0,
    "succeeded": 0,
    "skipped": 0,
    "failed": 0,
    "remaining": null,
    "percentage": null
  }
}

Get deletion job status and progress

​

Returns the current state. The total, remaining, and percentage progress fields are null until discovery finishes. discovered counts unique candidates across both selector arrays.

Path Parameters

  • Job ID returned by the create endpoint.

Responses

  • Current job status and progress.

    • the date-time notation as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z

    • Time after which the job and its items may no longer be available.

    • the date-time notation as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z

    • Properties: 9
    • the date-time notation as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z

    • values
      QUEUEDSCANNINGRUNNINGPAUSE_REQUESTEDPAUSEDSTOP_REQUESTEDSTOPPEDCOMPLETEDCOMPLETED_WITH_ERRORSFAILED
    application/json
  • Missing or invalid plugin authentication.

    text/plain
  • The plugin token does not have the API role.

    text/plain
  • Job not found, expired, owned by another plugin, or for another operation.

    text/plain
  • HTTP method is not supported for this path.

    text/plain
  • Rate limit exceeded. Retry after the indicated delay.

    Headers
    Headers: 2
    text/plain
  • Unexpected server error; include the X-Trace-Id in support requests.

    text/plain
  • The service is temporarily unavailable. Try again later.

    application/json
Request Example for get/coediting/v1/emails/delete-jobs/{jobId}
curl 'https://plugins.stripo.email/coediting/v1/emails/delete-jobs/{jobId}' \
  --header 'ES-PLUGIN-AUTH: YOUR_SECRET_TOKEN'
{
  "jobId": "string",
  "status": "QUEUED",
  "createdAt": "2026-10-22T09:34:23.529Z",
  "startedAt": null,
  "finishedAt": null,
  "expiresAt": "2026-10-22T09:34:23.529Z",
  "progress": {
    "total": null,
    "discovered": 1,
    "processed": 1,
    "running": 1,
    "succeeded": 1,
    "skipped": 1,
    "failed": 1,
    "remaining": null,
    "percentage": null
  }
}

List per-email results

​

Returns one page of results for the authenticated plugin's job. Follow nextCursor until it is absent. The cursor is opaque. Results may change while the job is running; inspect them again after a terminal job status if a final accounting is required.

Path Parameters

  • Job ID returned by the create endpoint.

Query Parameters

  • Opaque nextCursor returned by the previous page.

  • Items per page; defaults to 50.

  • Optional case-insensitive item-status filter.

    values
    PENDINGRUNNINGSUCCEEDEDSKIPPEDFAILEDNOT_PROCESSED

Responses

  • Page of per-email results.

    • Properties: 4
    • Omitted when there is no next page.

    application/json
  • Invalid body, empty combined selection, null or malformed selector arrays, invalid email IDs or patterns, excess distinct explicit IDs, unknown request fields, cursor, status filter, or page size.

    text/plain
  • Missing or invalid plugin authentication.

    text/plain
  • The plugin token does not have the API role.

    text/plain
  • Job not found, expired, owned by another plugin, or for another operation.

    text/plain
  • HTTP method is not supported for this path.

    text/plain
  • Rate limit exceeded. Retry after the indicated delay.

    Headers
    Headers: 2
    text/plain
  • Unexpected server error; include the X-Trace-Id in support requests.

    text/plain
  • The service is temporarily unavailable. Try again later.

    application/json
Request Example for get/coediting/v1/emails/delete-jobs/{jobId}/items
curl 'https://plugins.stripo.email/coediting/v1/emails/delete-jobs/{jobId}/items?pageSize=50&status=PENDING' \
  --header 'ES-PLUGIN-AUTH: YOUR_SECRET_TOKEN'
{
  "items": [
    {
      "emailId": "email-123",
      "status": "SUCCEEDED",
      "attempt": 1,
      "error": null
    },
    {
      "emailId": "email-456",
      "status": "FAILED",
      "attempt": 1,
      "error": {
        "code": "ROW_TOO_LARGE",
        "message": "The email could not be processed"
      }
    }
  ],
  "nextCursor": "2"
}

Models

​

Provide a nonempty emailIds array, a nonempty emailIdPatterns array, or both. Either field may be omitted or empty when the other is nonempty. Neither field nor its elements may be null.

​
​
​
​
  • the date-time notation as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z

  • Time after which the job and its items may no longer be available.

  • the date-time notation as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z

  • Properties: 9
  • the date-time notation as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z

  • values
    QUEUEDSCANNINGRUNNINGPAUSE_REQUESTEDPAUSEDSTOP_REQUESTEDSTOPPEDCOMPLETEDCOMPLETED_WITH_ERRORSFAILED
​
  • Unique candidates recorded so far across IDs and patterns.

  • Signed 64-bit integers (long type).

  • Sum of succeeded, skipped, and failed items.

  • Signed 64-bit integers (long type).

  • Signed 64-bit integers (long type).

  • Signed 64-bit integers (long type).

  • Signed 64-bit integers (long type).

  • Final unique candidate count; null until discovery finishes.

​
  • Properties: 4
  • Omitted when there is no next page.

​
  • Integer numbers.

  • Properties: 2
  • values
    PENDINGRUNNINGSUCCEEDEDSKIPPEDFAILEDNOT_PROCESSED
​
  • Machine-readable reason; possible codes can evolve.

  • Human-readable explanation.

​