> ## Documentation Index
> Fetch the complete documentation index at: https://nova.dweet.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Delete Application Data

> Request deletion for one application under one job

Deletes active Nova data for a single application under a specific job.

Send the tenant external ID in `X-Tenant-Id`. The request has no JSON body.

<RequestExample>
  ```bash cURL theme={null}
  curl -X DELETE 'https://embed.nova.dweet.com/v1/jobs/job-123/applications/app-456' \
    -H 'Authorization: Bearer sk_live_abc123...' \
    -H 'X-Tenant-Id: acme-corp'
  ```
</RequestExample>

<ResponseExample>
  ```json 202 Accepted theme={null}
  {
    "deletionRequest": {
      "id": "delreq_abc123",
      "scope": "application",
      "status": "pending",
      "createdAt": "2026-05-13T09:00:00.000Z",
      "updatedAt": "2026-05-13T09:00:00.000Z",
      "completedAt": null,
      "failedAt": null
    }
  }
  ```
</ResponseExample>

## Behavior

The endpoint returns `202 Accepted` with a `deletionRequest.id`. Deletion runs in the background.

Poll [Get Deletion Request Status](/embed-api/endpoints/deletion/status) until the request is `completed` or `failed`.

Duplicate requests return the same deletion request where possible. Unknown applications are accepted without revealing whether active data existed.

## Deleted data

Application deletion removes active scoring data, stored resume copies, and delivery records linked to the specified job and application.

It doesn't remove unrelated tenant data. Use tenant deletion when the tenant's full Embed data set must be removed.

<Warning>
  Application deletion is scoped by both `jobId` and `applicationId`.
</Warning>


## OpenAPI

````yaml DELETE /v1/jobs/{jobId}/applications/{applicationId}
openapi: 3.1.0
info:
  title: Nova Embed API
  description: >-
    The Nova Embed API enables ATS platforms to generate job-scoped screening
    criteria and score applications asynchronously against those criteria.
  version: 1.0.0
  contact:
    name: Nova Support
    email: nova@dweet.com
servers:
  - url: https://embed.nova.dweet.com
    description: >-
      Environment is determined by API key prefix: sk_test_* for sandbox,
      sk_live_* for production.
security:
  - bearerAuth: []
tags:
  - name: Analytics
    description: View scoring performance, webhook health, and error breakdowns.
  - name: Criteria
    description: Generate and manage job-scoped screening criteria.
  - name: Scoring
    description: Submit applications for scoring and fetch scoring job results.
  - name: Deletion
    description: Request application or tenant deletion and poll for completion.
  - name: Criteria Library
    description: Manage tenant-scoped reusable criteria templates.
  - name: Rate Limits
    description: Check your current rate limit status.
  - name: Webhooks
    description: >-
      Events sent to your registered webhook endpoints. Verify signatures with
      HMAC-SHA256 using your webhook secret.
paths:
  /v1/jobs/{jobId}/applications/{applicationId}:
    delete:
      tags:
        - Deletion
      summary: Delete application data
      description: >-
        Accepts an application-level deletion request for a specific tenant,
        job, and application. The request is processed asynchronously and
        duplicate requests return the same deletion request.
      operationId: deleteApplicationData
      parameters:
        - $ref: '#/components/parameters/TenantId'
        - $ref: '#/components/parameters/JobId'
        - $ref: '#/components/parameters/ApplicationId'
      responses:
        '202':
          description: Deletion request accepted
          headers:
            X-RateLimit-Bucket:
              $ref: '#/components/headers/X-RateLimit-Bucket'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeletionRequestResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '429':
          $ref: '#/components/responses/RateLimitedResponse'
        '500':
          $ref: '#/components/responses/ErrorResponse'
      x-codeSamples:
        - lang: typescript
          label: '@nova-sdk/api'
          source: |-
            import { Nova } from "@nova-sdk/api";

            const nova = new Nova({
              apiKey: "sk_test_...",
              tenantId: "acme-corp",
            });

            const result = await nova.deletion.deleteApplication({
              jobId: "job_abc123",
              applicationId: "app_xyz789",
            });
        - lang: bash
          label: cURL
          source: >-
            curl -X DELETE
            "https://embed.nova.dweet.com/v1/jobs/job_abc123/applications/app_xyz789"
            \
              -H "Authorization: Bearer sk_test_..." \
              -H "X-Tenant-Id: acme-corp"
components:
  parameters:
    TenantId:
      name: X-Tenant-Id
      in: header
      required: true
      description: Your customer identifier. Tenants are auto-provisioned on first request.
      schema:
        type: string
      example: acme-corp
    JobId:
      name: jobId
      in: path
      required: true
      description: Your job identifier (external ID).
      schema:
        type: string
    ApplicationId:
      name: applicationId
      in: path
      required: true
      description: Your application identifier (external ID).
      schema:
        type: string
  headers:
    X-RateLimit-Bucket:
      description: Which rate limit bucket the request was classified into
      schema:
        type: string
        enum:
          - criteria_ai
          - criteria_current_reads
          - scoring_intake_batch
          - scoring_intake_single
          - read_and_ops
          - rate_limit_status
          - analytics
    X-RateLimit-Limit:
      description: Maximum requests per second for this bucket
      schema:
        type: integer
    X-RateLimit-Remaining:
      description: Requests remaining in the current 1-second window
      schema:
        type: integer
    X-RateLimit-Reset:
      description: Unix timestamp when the current window resets
      schema:
        type: integer
    Retry-After:
      description: >-
        Seconds to wait before retrying after a 429 response or retryable 503
        response
      schema:
        type: integer
    X-RateLimit-Degraded:
      description: >-
        Present and set to "true" when rate limiting is operating in degraded
        mode (Redis unavailable). Values in other rate limit headers are
        best-effort estimates.
      schema:
        type: string
        enum:
          - 'true'
  schemas:
    DeletionRequestResponse:
      type: object
      required:
        - deletionRequest
      properties:
        deletionRequest:
          $ref: '#/components/schemas/DeletionRequest'
    DeletionRequest:
      type: object
      required:
        - id
        - scope
        - status
        - createdAt
        - updatedAt
        - completedAt
        - failedAt
      properties:
        id:
          type: string
        scope:
          $ref: '#/components/schemas/DeletionScope'
        status:
          $ref: '#/components/schemas/DeletionStatus'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        completedAt:
          type:
            - string
            - 'null'
          format: date-time
        failedAt:
          type:
            - string
            - 'null'
          format: date-time
    HttpError:
      type: object
      required:
        - type
        - code
        - status
        - message
        - retryable
        - traceId
      properties:
        type:
          type: string
          description: URI reference that identifies the error type
        code:
          $ref: '#/components/schemas/ErrorCode'
        status:
          type: integer
          description: HTTP status code
        message:
          type: string
          description: Error message
        retryable:
          type: boolean
          description: When true, retrying the request may succeed
        traceId:
          type: string
          description: Trace ID for debugging
        details:
          type:
            - array
            - 'null'
          description: Field-level validation details
          items:
            type: object
            required:
              - field
              - code
              - message
            properties:
              field:
                type: string
              code:
                type: string
              message:
                type: string
    DeletionScope:
      type: string
      enum:
        - application
        - tenant
    DeletionStatus:
      type: string
      enum:
        - pending
        - processing
        - completed
        - failed
    ErrorCode:
      type: string
      description: >-
        Machine-readable error code. Generated from the canonical error
        registry.
      enum:
        - UNAUTHORIZED
        - FORBIDDEN
        - VALIDATION_ERROR
        - ANSWER_MISMATCH
        - CRITERIA_INVALID
        - CRITERIA_REVISION_CONFLICT
        - NOT_FOUND
        - TENANT_NOT_FOUND
        - JOB_NOT_FOUND
        - APPLICATION_NOT_FOUND
        - QUESTION_SET_NOT_FOUND
        - CRITERIA_NOT_FOUND
        - CRITERION_NOT_FOUND
        - CRITERIA_VERSION_NOT_FOUND
        - SCORING_JOB_NOT_FOUND
        - BATCH_NOT_FOUND
        - LIBRARY_CRITERION_NOT_FOUND
        - RATE_LIMITED
        - IDEMPOTENCY_KEY_ALREADY_USED
        - IDEMPOTENCY_REQUEST_IN_PROGRESS
        - RESUME_FETCH_FAILED
        - RESUME_CONVERSION_FAILED
        - RESUME_ENCRYPTED
        - RESUME_CORRUPTED
        - RESUME_PARSE_FAILED
        - RESUME_TOO_LARGE
        - RESUME_EMPTY
        - RESUME_URL_BLOCKED
        - AI_PROCESSING_FAILED
        - AI_GENERATION_FAILED
        - AI_SCORING_FAILED
        - MISSING_JOB_DESCRIPTION
        - TIMEOUT
        - MAX_RETRIES_EXCEEDED
        - TASK_STUCK
        - DELETION_REQUEST_NOT_FOUND
        - DELETION_REQUEST_FAILED
        - INTERNAL_ERROR
        - SERVICE_UNAVAILABLE
        - UNKNOWN
  responses:
    ErrorResponse:
      description: Error response
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/HttpError'
    RateLimitedResponse:
      description: Rate limit exceeded
      headers:
        Retry-After:
          $ref: '#/components/headers/Retry-After'
        X-RateLimit-Bucket:
          $ref: '#/components/headers/X-RateLimit-Bucket'
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
        X-RateLimit-Degraded:
          $ref: '#/components/headers/X-RateLimit-Degraded'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/HttpError'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key
      description: 'Use Authorization: Bearer sk_test_* or Authorization: Bearer sk_live_*.'

````