> ## 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.

# Scrub a small batch of phone numbers synchronously

> Use v1 for batches of up to 10,000 inputs and 25 MiB of JSON body, whichever limit is reached first, that should complete within the 15-second synchronous execution budget. The response is one complete result or an error; no partial result is returned. Every v1 response, including 4xx and 5xx errors, carries x-retention: zero and Cache-Control: no-store, max-age=0. Phone Input and per-number Scrub Result exist only in request memory; bounded non-phone request metadata (including idempotency digests and quota state) and approved aggregate usage data may remain. Country examples are contractual and still require a matching Country Purchase and operational/activation gates. Use v2 for larger batches or work that may wait on a country service.



## OpenAPI

````yaml https://api.dnclatam.com/openapi.json post /v1/scrub
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:
  /v1/scrub:
    post:
      summary: Scrub a small batch of phone numbers synchronously
      description: >-
        Use v1 for batches of up to 10,000 inputs and 25 MiB of JSON body,
        whichever limit is reached first, that should complete within the
        15-second synchronous execution budget. The response is one complete
        result or an error; no partial result is returned. Every v1 response,
        including 4xx and 5xx errors, carries x-retention: zero and
        Cache-Control: no-store, max-age=0. Phone Input and per-number Scrub
        Result exist only in request memory; bounded non-phone request metadata
        (including idempotency digests and quota state) and approved aggregate
        usage data may remain. Country examples are contractual and still
        require a matching Country Purchase and operational/activation gates.
        Use v2 for larger batches or work that may wait on a country service.
      operationId: scrubPhones
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScrubRequest'
            examples:
              mexico:
                value:
                  country: mx
                  phones:
                    - +52 55 1234 5678
                    - 55 8765 4321
                    - abc
              colombia:
                description: >-
                  Colombia is sellable and operational. A real request requires
                  an active Country Purchase; successful initial payment
                  activates access immediately without manual approval. Normal
                  quota and operational availability checks still apply.
                value:
                  country: co
                  phones:
                    - +57 300 555 0101
                    - +57 601 555 0102
      responses:
        '200':
          description: Scrub completed
          headers:
            x-retention:
              schema:
                type: string
                const: zero
              description: >-
                Synchronous v1 never persists Phone Input or the per-number
                Scrub Result after the request completes. The guarantee also
                applies to error responses.
            cache-control:
              schema:
                type: string
                const: no-store, max-age=0
              description: >-
                The response contains customer Scrub data and must not be cached
                by browsers, CDNs, or shared proxies.
            Idempotency-Replayed:
              schema:
                type: string
                const: 'true'
              description: >-
                Present when an exact completed retry returns without charging
                or recording usage again.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScrubResult'
        '400':
          description: The request body, country, or idempotency key is invalid
          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: zero
              description: >-
                Synchronous v1 never persists Phone Input or the per-number
                Scrub Result after the request completes. The guarantee also
                applies to error responses.
            cache-control:
              schema:
                type: string
                const: no-store, max-age=0
              description: >-
                The response contains customer Scrub data and must not be cached
                by browsers, CDNs, or shared proxies.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
        '401':
          description: Missing, invalid, or revoked API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvalidKeyError'
          headers:
            x-retention:
              schema:
                type: string
                const: zero
              description: >-
                Synchronous v1 never persists Phone Input or the per-number
                Scrub Result after the request completes. The guarantee also
                applies to error responses.
            cache-control:
              schema:
                type: string
                const: no-store, max-age=0
              description: >-
                The response contains customer Scrub data and must not be cached
                by browsers, CDNs, or shared proxies.
        '402':
          description: The country subscription is inactive
          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: zero
              description: >-
                Synchronous v1 never persists Phone Input or the per-number
                Scrub Result after the request completes. The guarantee also
                applies to error responses.
            cache-control:
              schema:
                type: string
                const: no-store, max-age=0
              description: >-
                The response contains customer Scrub data and must not be cached
                by browsers, CDNs, or shared proxies.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionInactiveError'
        '403':
          description: The organization is suspended or has no country entitlement
          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: zero
              description: >-
                Synchronous v1 never persists Phone Input or the per-number
                Scrub Result after the request completes. The guarantee also
                applies to error responses.
            cache-control:
              schema:
                type: string
                const: no-store, max-age=0
              description: >-
                The response contains customer Scrub data and must not be cached
                by browsers, CDNs, or shared proxies.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/AccountSuspendedError'
                  - $ref: '#/components/schemas/ActivationIncompleteError'
                  - $ref: '#/components/schemas/CountryNotInPlanError'
        '405':
          description: The HTTP method is not supported for this resource
          headers:
            Allow:
              schema:
                type: string
              description: Comma-separated methods supported by the resource.
            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: zero
              description: >-
                Synchronous v1 never persists Phone Input or the per-number
                Scrub Result after the request completes. The guarantee also
                applies to error responses.
            cache-control:
              schema:
                type: string
                const: no-store, max-age=0
              description: >-
                The response contains customer Scrub data and must not be cached
                by browsers, CDNs, or shared proxies.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedError'
        '409':
          description: >-
            The idempotency key is still processing or was reused with a
            different payload
          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: >-
                Seconds before retrying an in-progress request. Present only for
                `idempotency_request_in_progress`.
            x-retention:
              schema:
                type: string
                const: zero
              description: >-
                Synchronous v1 never persists Phone Input or the per-number
                Scrub Result after the request completes. The guarantee also
                applies to error responses.
            cache-control:
              schema:
                type: string
                const: no-store, max-age=0
              description: >-
                The response contains customer Scrub data and must not be cached
                by browsers, CDNs, or shared proxies.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/IdempotencyInProgressError'
                  - $ref: '#/components/schemas/IdempotencyConflictError'
        '413':
          description: >-
            The request is too large. For v1 this means the raw HTTP or
            canonical JSON body exceeds 25 MiB; for v2 it can also mean the
            canonical durable input or conservative complete-result estimate
            exceeds 25 MiB. The 500,000-entry limit is a separate hard ceiling
            and is conditional on these byte checks.
          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: zero
              description: >-
                Synchronous v1 never persists Phone Input or the per-number
                Scrub Result after the request completes. The guarantee also
                applies to error responses.
            cache-control:
              schema:
                type: string
                const: no-store, max-age=0
              description: >-
                The response contains customer Scrub data and must not be cached
                by browsers, CDNs, or shared proxies.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayloadTooLargeError'
        '429':
          description: >-
            The technical request rate limit or the country Customer Quota was
            exceeded
          headers:
            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
              description: Unix timestamp when the technical window resets.
            Retry-After:
              schema:
                type: integer
                minimum: 1
              description: >-
                Seconds until another technical request may be attempted. Not
                present for Customer Quota exhaustion.
            x-retention:
              schema:
                type: string
                const: zero
              description: >-
                Synchronous v1 never persists Phone Input or the per-number
                Scrub Result after the request completes. The guarantee also
                applies to error responses.
            cache-control:
              schema:
                type: string
                const: no-store, max-age=0
              description: >-
                The response contains customer Scrub data and must not be cached
                by browsers, CDNs, or shared proxies.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/RateLimitError'
                  - $ref: '#/components/schemas/QuotaError'
                  - $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: zero
              description: >-
                Synchronous v1 never persists Phone Input or the per-number
                Scrub Result after the request completes. The guarantee also
                applies to error responses.
            cache-control:
              schema:
                type: string
                const: no-store, max-age=0
              description: >-
                The response contains customer Scrub data and must not be cached
                by browsers, CDNs, or shared proxies.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalError'
        '503':
          description: >-
            The platform or selected country cannot complete a complete scrub at
            this time
          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: Seconds before a bounded retry may be attempted.
            x-retention:
              schema:
                type: string
                const: zero
              description: >-
                Synchronous v1 never persists Phone Input or the per-number
                Scrub Result after the request completes. The guarantee also
                applies to error responses.
            cache-control:
              schema:
                type: string
                const: no-store, max-age=0
              description: >-
                The response contains customer Scrub data and must not be cached
                by browsers, CDNs, or shared proxies.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/CountryServiceError'
                  - $ref: '#/components/schemas/PlatformFailure'
      security:
        - bearerAuth: []
components:
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: true
      description: >-
        Opaque key for one logical request, scoped to the authenticated API key.
        Use a high-entropy value and never include phone numbers or other PII.
        Exact retries are protected for at least 7 days for v1; v2 keeps the
        accepted job identity for the job metadata lifetime.
      schema:
        type: string
        minLength: 1
        maxLength: 255
        pattern: ^[\x21-\x7e]+$
      example: 018f47c2-9b0d-7c95-bf47-cd84c12f8912
  schemas:
    ScrubRequest:
      type: object
      description: >-
        The v1 body is limited by both 10,000 phone entries and a 25 MiB JSON
        body. The first limit reached controls admission.
      properties:
        country:
          $ref: '#/components/schemas/CountryCode'
        phones:
          type: array
          minItems: 1
          maxItems: 10000
          items:
            type: string
            maxLength: 64
          description: >-
            Phone numbers in international or supported local formats. Invalid
            and duplicate entries count toward Customer Quota.
      required:
        - country
        - phones
      additionalProperties: false
    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
    ValidationError:
      type: object
      properties:
        error:
          type: string
          enum:
            - missing_idempotency_key
            - invalid_idempotency_key
            - invalid_body
            - unsupported_country
            - too_many_phones
            - phone_too_long
        message:
          type: string
        max:
          type: integer
          minimum: 1
        max_chars:
          type: integer
          minimum: 1
      required:
        - error
        - message
      additionalProperties: false
    InvalidKeyError:
      type: object
      properties:
        error:
          type: string
          const: invalid_key
      required:
        - error
      additionalProperties: false
    SubscriptionInactiveError:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            error:
              type: string
              const: subscription_inactive
          required:
            - error
            - message
      unevaluatedProperties: false
    AccountSuspendedError:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            error:
              type: string
              const: account_suspended
          required:
            - error
            - message
      unevaluatedProperties: false
    ActivationIncompleteError:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            error:
              type: string
              const: activation_incomplete
          required:
            - error
            - message
      unevaluatedProperties: false
      description: >-
        The organization has not completed its required privacy/onboarding
        configuration. This is not a prepaid-country capacity signal.
    CountryNotInPlanError:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            error:
              type: string
              const: country_not_in_plan
            country:
              $ref: '#/components/schemas/CountryCode'
          required:
            - error
            - message
            - country
      unevaluatedProperties: false
    MethodNotAllowedError:
      type: object
      properties:
        error:
          type: string
          const: method_not_allowed
        message:
          type: string
      required:
        - error
        - message
      additionalProperties: false
    IdempotencyInProgressError:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            error:
              type: string
              const: idempotency_request_in_progress
          required:
            - error
            - message
      unevaluatedProperties: false
    IdempotencyConflictError:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            error:
              type: string
              const: idempotency_key_reused
          required:
            - error
            - message
      unevaluatedProperties: false
    PayloadTooLargeError:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            error:
              type: string
              const: payload_too_large
            max_bytes:
              type: integer
              const: 26214400
          required:
            - error
            - max_bytes
      unevaluatedProperties: false
    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.
    QuotaError:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            error:
              type: string
              const: customer_quota_exceeded
            country:
              $ref: '#/components/schemas/CountryCode'
            limit:
              type: integer
              minimum: 0
            used:
              type: integer
              minimum: 0
            requested:
              type: integer
              minimum: 1
            upgrade_url:
              type: string
              format: uri
          required:
            - error
            - message
            - country
            - limit
            - used
            - requested
            - upgrade_url
      unevaluatedProperties: false
      description: >-
        The requested number of inputs would exceed the organization's Customer
        Quota for the selected country. No provider call starts and no quota is
        consumed.
    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.
    CountryServiceError:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            error:
              type: string
              enum:
                - country_service_maintenance
                - country_service_temporarily_unavailable
            country:
              $ref: '#/components/schemas/CountryCode'
            retry_after:
              type: integer
              minimum: 1
              description: Seconds before a bounded retry may be attempted.
          required:
            - error
            - country
            - message
      unevaluatedProperties: false
      description: >-
        The selected country could not produce a complete determination. A paid
        prepaid country that is pending activation maps to
        country_service_temporarily_unavailable; the public API never exposes
        pending_activation, Registry Capacity, provider balance, or prepaid
        credits. No partial result is returned and Customer Quota is not
        consumed.
    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.
    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.
    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
    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.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: dnc_live_*

````