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

# Get a complete Scrub Job result



## OpenAPI

````yaml https://api.dnclatam.com/openapi.json get /v2/scrub/{job_id}/result
openapi: 3.1.0
info:
  title: DNC LATAM API
  version: 2.1.0
  description: >-
    Scrub phone-number arrays against the selected country's Do Not Call
    registry with zero data retention for synchronous v1 and encrypted,
    time-limited storage for durable v2 jobs. Registry type, provider, chunking,
    retries, cost, and capacity are internal implementation details.
servers:
  - url: https://api.dnclatam.com
security: []
paths:
  /v2/scrub/{job_id}/result:
    parameters:
      - name: job_id
        in: path
        required: true
        description: Opaque lowercase UUID returned at admission.
        schema:
          $ref: '#/components/schemas/JobId'
    get:
      summary: Get a complete Scrub Job result
      operationId: getScrubJobResult
      responses:
        '200':
          description: Scrub completed successfully
          headers:
            X-RateLimit-Limit:
              schema:
                type: integer
                minimum: 1
                maximum: 60000
                default: 60
              description: >-
                Effective maximum authenticated requests in the current
                60-second window for this organization. The safe default is 60;
                operator overrides are bounded from 1 to 60000.
            X-RateLimit-Remaining:
              schema:
                type: integer
                minimum: 0
                maximum: 60000
              description: Requests remaining in the current technical window.
            X-RateLimit-Reset:
              schema:
                type: integer
              description: Unix timestamp when the current technical window resets.
            x-retention:
              schema:
                type: string
                const: transient-encrypted
              description: >-
                v2 may retain encrypted input, result, and non-phone metadata
                only for the published lifecycle. This is distinct from v1
                zero-data-retention.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScrubResult'
        '401':
          description: Missing, invalid, or revoked API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvalidKeyError'
          headers:
            x-retention:
              schema:
                type: string
                const: transient-encrypted
              description: >-
                v2 may retain encrypted input, result, and non-phone metadata
                only for the published lifecycle. This is distinct from v1
                zero-data-retention.
        '404':
          description: Job does not exist for this organization
          headers:
            X-RateLimit-Limit:
              schema:
                type: integer
                minimum: 1
                maximum: 60000
                default: 60
              description: >-
                Effective maximum authenticated requests in the current
                60-second window for this organization. The safe default is 60;
                operator overrides are bounded from 1 to 60000.
            X-RateLimit-Remaining:
              schema:
                type: integer
                minimum: 0
                maximum: 60000
              description: Requests remaining in the current technical window.
            X-RateLimit-Reset:
              schema:
                type: integer
              description: Unix timestamp when the current technical window resets.
            x-retention:
              schema:
                type: string
                const: transient-encrypted
              description: >-
                v2 may retain encrypted input, result, and non-phone metadata
                only for the published lifecycle. This is distinct from v1
                zero-data-retention.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobNotFoundError'
        '405':
          description: The HTTP method is not supported for this resource
          headers:
            Allow:
              schema:
                type: string
            X-RateLimit-Limit:
              schema:
                type: integer
                minimum: 1
                maximum: 60000
                default: 60
              description: >-
                Effective maximum authenticated requests in the current
                60-second window for this organization. The safe default is 60;
                operator overrides are bounded from 1 to 60000.
            X-RateLimit-Remaining:
              schema:
                type: integer
                minimum: 0
                maximum: 60000
              description: Requests remaining in the current technical window.
            X-RateLimit-Reset:
              schema:
                type: integer
              description: Unix timestamp when the current technical window resets.
            x-retention:
              schema:
                type: string
                const: transient-encrypted
              description: >-
                v2 may retain encrypted input, result, and non-phone metadata
                only for the published lifecycle. This is distinct from v1
                zero-data-retention.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedError'
        '409':
          description: >-
            The job is queued, running, failed, or cancelled. Queued/running
            jobs may be polled again; failed/cancelled jobs have no complete
            result. Expired jobs use 410 job_expired.
          headers:
            X-RateLimit-Limit:
              schema:
                type: integer
                minimum: 1
                maximum: 60000
                default: 60
              description: >-
                Effective maximum authenticated requests in the current
                60-second window for this organization. The safe default is 60;
                operator overrides are bounded from 1 to 60000.
            X-RateLimit-Remaining:
              schema:
                type: integer
                minimum: 0
                maximum: 60000
              description: Requests remaining in the current technical window.
            X-RateLimit-Reset:
              schema:
                type: integer
              description: Unix timestamp when the current technical window resets.
            Retry-After:
              schema:
                type: integer
                minimum: 1
              description: >-
                Present when a bounded retry may help, especially while the job
                is queued or running.
            x-retention:
              schema:
                type: string
                const: transient-encrypted
              description: >-
                v2 may retain encrypted input, result, and non-phone metadata
                only for the published lifecycle. This is distinct from v1
                zero-data-retention.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobResultNotReadyError'
        '410':
          description: >-
            The result is gone because the successful result retention window
            elapsed or the active job hard cap elapsed.
          headers:
            X-RateLimit-Limit:
              schema:
                type: integer
                minimum: 1
                maximum: 60000
                default: 60
              description: >-
                Effective maximum authenticated requests in the current
                60-second window for this organization. The safe default is 60;
                operator overrides are bounded from 1 to 60000.
            X-RateLimit-Remaining:
              schema:
                type: integer
                minimum: 0
                maximum: 60000
              description: Requests remaining in the current technical window.
            X-RateLimit-Reset:
              schema:
                type: integer
              description: Unix timestamp when the current technical window resets.
            x-retention:
              schema:
                type: string
                const: transient-encrypted
              description: >-
                v2 may retain encrypted input, result, and non-phone metadata
                only for the published lifecycle. This is distinct from v1
                zero-data-retention.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/JobResultExpiredError'
                  - $ref: '#/components/schemas/JobExpiredError'
        '429':
          description: >-
            The organization exceeded its configured shared technical window
            (default 60, bounded 1-60000 requests per 60 seconds) or triggered
            the abuse guard
          headers:
            Retry-After:
              schema:
                type: integer
                minimum: 1
            X-RateLimit-Limit:
              schema:
                type: integer
                minimum: 1
                maximum: 60000
                default: 60
            X-RateLimit-Remaining:
              schema:
                type: integer
                minimum: 0
                maximum: 60000
            X-RateLimit-Reset:
              schema:
                type: integer
            x-retention:
              schema:
                type: string
                const: transient-encrypted
              description: >-
                v2 may retain encrypted input, result, and non-phone metadata
                only for the published lifecycle. This is distinct from v1
                zero-data-retention.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/RateLimitError'
                  - $ref: '#/components/schemas/TemporaryBlockError'
        '500':
          description: Unexpected internal failure
          headers:
            X-RateLimit-Limit:
              schema:
                type: integer
                minimum: 1
                maximum: 60000
                default: 60
              description: >-
                Effective maximum authenticated requests in the current
                60-second window for this organization. The safe default is 60;
                operator overrides are bounded from 1 to 60000.
            X-RateLimit-Remaining:
              schema:
                type: integer
                minimum: 0
                maximum: 60000
              description: Requests remaining in the current technical window.
            X-RateLimit-Reset:
              schema:
                type: integer
              description: Unix timestamp when the current technical window resets.
            x-retention:
              schema:
                type: string
                const: transient-encrypted
              description: >-
                v2 may retain encrypted input, result, and non-phone metadata
                only for the published lifecycle. This is distinct from v1
                zero-data-retention.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalError'
        '503':
          description: The platform could not complete the control operation
          headers:
            X-RateLimit-Limit:
              schema:
                type: integer
                minimum: 1
                maximum: 60000
                default: 60
              description: >-
                Effective maximum authenticated requests in the current
                60-second window for this organization. The safe default is 60;
                operator overrides are bounded from 1 to 60000.
            X-RateLimit-Remaining:
              schema:
                type: integer
                minimum: 0
                maximum: 60000
              description: Requests remaining in the current technical window.
            X-RateLimit-Reset:
              schema:
                type: integer
              description: Unix timestamp when the current technical window resets.
            Retry-After:
              schema:
                type: integer
                minimum: 1
            x-retention:
              schema:
                type: string
                const: transient-encrypted
              description: >-
                v2 may retain encrypted input, result, and non-phone metadata
                only for the published lifecycle. This is distinct from v1
                zero-data-retention.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformFailure'
      security:
        - bearerAuth: []
components:
  schemas:
    JobId:
      type: string
      format: uuid
      pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
      description: >-
        Opaque lowercase UUIDv4 generated by DNC LATAM. It carries no country,
        tenant, provider, or execution meaning; tenant identity remains internal
        and is never returned.
    ScrubResult:
      type: object
      description: >-
        One complete result for the submitted Scrub Batch. No provider chunks or
        partial result are exposed.
      properties:
        prohibited_numbers_to_call:
          type: array
          items:
            type: string
          description: >-
            Original, structurally valid inputs found in the selected DNC
            registry. Do not call these numbers. Original formatting and
            relative order within this category are preserved; duplicates are
            returned once per occurrence.
        safe_numbers_to_call:
          type: array
          items:
            type: string
          description: >-
            Original, structurally valid inputs not found in the selected DNC
            registry at the time of the check. `safe` is limited to this
            registry result; it does not confirm that a number is active or
            reachable, prove consent, or grant universal legal permission to
            call.
        invalid_numbers:
          type: array
          items:
            $ref: '#/components/schemas/InvalidPhone'
          description: >-
            Inputs that failed structural validation or were explicitly rejected
            by the selected registry, in their original relative order.
        summary:
          type: object
          description: >-
            Aggregate counts for this request. `summary.total_checked` equals
            `summary.prohibited_numbers + summary.safe_numbers +
            summary.invalid_numbers`.
          properties:
            total_checked:
              type: integer
              minimum: 0
              description: Total inputs submitted, including invalid inputs and duplicates.
            prohibited_numbers:
              type: integer
              minimum: 0
              description: >-
                Number of entries returned in `prohibited_numbers_to_call`,
                including repeated inputs.
            safe_numbers:
              type: integer
              minimum: 0
              description: >-
                Number of entries returned in `safe_numbers_to_call`, including
                repeated inputs.
            invalid_numbers:
              type: integer
              minimum: 0
              description: Number of entries returned in `invalid_numbers`.
          required:
            - total_checked
            - prohibited_numbers
            - safe_numbers
            - invalid_numbers
          additionalProperties: false
        scrub_record:
          $ref: '#/components/schemas/ScrubRecord'
          description: >-
            Phone-free Screening record for this successful Scrub. Delivered
            with the Scrub Result; v1 does not persist it.
      required:
        - prohibited_numbers_to_call
        - safe_numbers_to_call
        - invalid_numbers
        - summary
      additionalProperties: false
    InvalidKeyError:
      type: object
      properties:
        error:
          type: string
          const: invalid_key
      required:
        - error
      additionalProperties: false
    JobNotFoundError:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            error:
              type: string
              const: job_not_found
          required:
            - error
            - message
      unevaluatedProperties: false
      description: >-
        The job does not exist or belongs to another organization. Both cases
        use the same response to prevent cross-tenant enumeration.
    MethodNotAllowedError:
      type: object
      properties:
        error:
          type: string
          const: method_not_allowed
        message:
          type: string
      required:
        - error
        - message
      additionalProperties: false
    JobResultNotReadyError:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            error:
              type: string
              const: job_result_not_ready
            status:
              type: string
              enum:
                - queued
                - running
                - failed
                - cancelled
              description: >-
                Queued and running jobs may still complete; failed and cancelled
                jobs are terminal and have no complete result. Expired jobs use
                410 job_expired instead.
            retry_after:
              type: integer
              minimum: 1
          required:
            - error
            - message
            - status
      unevaluatedProperties: false
    JobResultExpiredError:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            error:
              type: string
              const: job_result_expired
            job_id:
              $ref: '#/components/schemas/JobId'
          required:
            - error
            - message
            - job_id
      unevaluatedProperties: false
      description: >-
        The encrypted result exceeded its seven-day result retention window
        measured from successful terminalization. Job metadata may remain
        available until its metadata TTL measured from terminalization.
    JobExpiredError:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            error:
              type: string
              const: job_expired
            job_id:
              $ref: '#/components/schemas/JobId'
          required:
            - error
            - message
            - job_id
      unevaluatedProperties: false
      description: >-
        The job could not terminalize before its 24-hour encrypted-input hard
        cap. Its quota reservation was released. An attached input becomes due
        for purge at terminalization; an unconfirmed or unknown upload becomes
        due for exact-identity revalidation at this cap. Failed cleanup remains
        retryable and observable until absence is verified.
    RateLimitError:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            error:
              type: string
              const: rate_limit_exceeded
            limit:
              type: integer
              minimum: 1
              maximum: 60000
            window_seconds:
              type: integer
              const: 60
            retry_after:
              type: integer
              minimum: 1
          required:
            - error
            - message
            - limit
            - window_seconds
            - retry_after
      unevaluatedProperties: false
      description: >-
        The organization exceeded its configured shared technical request limit
        across its API keys. The safe default is 60 requests per 60 seconds; an
        operator may configure 1 to 60,000.
    TemporaryBlockError:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            error:
              type: string
              const: temporarily_blocked
            retry_after:
              type: integer
              minimum: 1
              maximum: 900
          required:
            - error
            - message
            - retry_after
      unevaluatedProperties: false
      description: >-
        The source temporarily triggered the API abuse guard. This is separate
        from Customer Quota and country availability.
    InternalError:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            error:
              type: string
              const: internal
          required:
            - error
            - request_id
      unevaluatedProperties: false
      description: >-
        An unexpected failure outside the public taxonomy. The request_id is
        safe to share with support.
    PlatformFailure:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            error:
              type: string
              const: platform_failure
          required:
            - error
            - message
      unevaluatedProperties: false
      description: >-
        DNC LATAM could not complete the batch because an internal platform
        component failed. No partial result is returned and Customer Quota is
        not consumed.
    InvalidPhone:
      type: object
      description: >-
        An original input that failed structural validation for the selected
        registry country or was explicitly rejected by that registry. Invalid
        inputs do not fail the batch.
      properties:
        input:
          type: string
          description: Original input exactly as submitted.
        reason:
          type: string
          description: >-
            `empty`: blank or separators only. `unparseable`: not recognizable
            as a phone number. `wrong_country`: explicit country code does not
            match the requested registry. `too_short` or `too_long`: normalized
            national number has the wrong number of digits. `provider_rejected`:
            the selected registry did not return an acceptable determination for
            this otherwise structurally valid input; it is not classified as
            safe.
          enum:
            - empty
            - unparseable
            - wrong_country
            - too_short
            - too_long
            - provider_rejected
      required:
        - input
        - reason
      additionalProperties: false
    ScrubRecord:
      type: object
      description: >-
        Phone-free evidence of one Scrub. Public name: Screening record /
        comprobante de screening. Counts and metadata only; never phone inputs
        or per-number determinations.
      additionalProperties: false
      required:
        - record_id
        - record_version
        - surface
        - organization
        - country
        - registry
        - status
        - counts
        - submitted_at
        - completed_at
        - record_issued_at
      properties:
        record_id:
          $ref: '#/components/schemas/JobId'
        record_version:
          type: string
          const: '1'
        surface:
          type: string
          enum:
            - api_v1
            - api_v2
            - panel_csv
        request_id:
          type: string
          description: Present only for api_v1.
        job_id:
          $ref: '#/components/schemas/JobId'
          description: Present only for api_v2.
        client_scrub_reference:
          type: string
          format: uuid
          description: >-
            Optional UUIDv4 Client Scrub Reference on the record when supplied.
            Not an idempotency key. Request-body acceptance is not published in
            this contract version.
        organization:
          type: object
          additionalProperties: false
          required:
            - name
          properties:
            name:
              type: string
              minLength: 1
              maxLength: 200
        country:
          $ref: '#/components/schemas/CountryCode'
        registry:
          type: object
          additionalProperties: false
          required:
            - authority
            - mode
          properties:
            authority:
              type: string
            mode:
              type: string
              enum:
                - snapshot
                - live_consult
            source_observed_at:
              type: string
              format: date-time
            consulted_at:
              type: string
              format: date-time
        status:
          type: string
          enum:
            - succeeded
            - failed
            - cancelled
            - expired
        failure:
          type: object
          additionalProperties: false
          required:
            - error
            - country
          properties:
            error:
              type: string
            country:
              $ref: '#/components/schemas/CountryCode'
        counts:
          type: object
          additionalProperties: false
          required:
            - submitted
            - prohibited
            - safe
            - invalid
          properties:
            submitted:
              type: integer
              minimum: 1
            prohibited:
              type: integer
              minimum: 0
            safe:
              type: integer
              minimum: 0
            invalid:
              type: integer
              minimum: 0
        submitted_at:
          type: string
          format: date-time
        completed_at:
          type: string
          format: date-time
        record_issued_at:
          type: string
          format: date-time
    Error:
      type: object
      description: >-
        Base error envelope. It is only composed into a concrete public error
        schema; every concrete error closes unknown fields with
        additionalProperties or unevaluatedProperties.
      properties:
        error:
          type: string
        message:
          type: string
        request_id:
          type: string
          description: Opaque support identifier. It never contains phone data.
      required:
        - error
    CountryCode:
      type: string
      enum:
        - mx
        - ar
        - co
        - es
        - au
        - sg
      description: >-
        Technical country code. The current sellable catalog is mx/ar/co.
        es/au/sg are planned product coverage, end of September 2026, and are
        not sellable at checkout until their catalog and runtime are released
        together. Every real request requires a matching Country Purchase and
        country availability/activation. Colombia is sellable and operational,
        and a successful initial payment activates its complete API access
        immediately without manual approval; entitlement and operational
        availability are still evaluated at admission.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: dnc_live_*

````