> ## Documentation Index
> Fetch the complete documentation index at: https://developer.sandbox.co.in/llms.txt
> Use this file to discover all available pages before exploring further.

# Get bulk PAN verification job status

> Check a TRACES bulk PAN verification job by job ID. Get its processing status, result download URL, or failure message.

When `data.status` is `succeeded`, download the [PAN verification workbook](/api-reference/tds/compliance/pan-verification/pan_verification_workbook) from `data.output_json_url`. The workbook reference contains the output schema, sample, and PAN status guidance.

For upload, polling, and download examples, see [Verify PANs in bulk](/recipes/tds/pan-verification/verify-pans-in-bulk). To receive completion notifications, use the [job status webhook](/api-reference/tds/compliance/pan-verification/endpoints/webhook).


## OpenAPI

````yaml api-reference/tds/compliance/openapi.json GET /tds/compliance/enriched/traces/deductors/pan/verify/status
openapi: 3.1.0
info:
  title: compliance
  description: >-
    Tax Deducted at Source (TDS) is an indirect method of collecting Income Tax.
    TDS is based on the principle of “Pay as you earn” which is beneficial for
    both the Government and the taxpayer. It is where a person making a payment
    of specified nature is liable to deduct tax at a prescribed rate. This
    ensures continuous revenue for the Government by way of Tax Deducted at the
    Source.


    The Payer making a payment is also responsible to deposit TDS with the
    Income Tax Department within a specified date and file a TDS Return. Once
    filed, the deposited amount will be shown in the Payee's Form 26AS which
    they can then use to claim tax credits when filing ITR.


    However, staying TDS compliant can be a hassle for businesses, as they are
    required to :


    1. Deduct TDS from payments that are liable for TDS Deduction at an
    appropriate rate.
        
    2. Deposit TDS to Government before the due date.
        
    3. File TDS Returns on a Quarterly basis.
        
    4. Issue a TDS Certificate by the deductor to the deductee.
        

    Organizations deducting TDS have to remain compliant with each of the steps.
    Failure to do so results in TDS Penalties by Authorities. Sandbox provides
    TDS Compliance APIs to help you automate end-to-end TDS compliance.
  version: 1.0.0
servers:
  - url: https://test-api.sandbox.co.in
    description: test
  - url: https://api.sandbox.co.in
    description: prod
security: []
tags:
  - name: TDS Compliance Check
  - name: Download CSI
  - name: FVU Generation
  - name: E-File TDS Return
  - name: TRACES
  - name: TRACES/TDS Certificate
  - name: TRACES/Credentials
  - name: TRACES/Challans
  - name: TDS
  - name: TDS Certificate
  - name: TRACES Credentials
  - name: Challans
paths:
  /tds/compliance/enriched/traces/deductors/pan/verify/status:
    get:
      tags:
        - TDS
        - TRACES
        - PAN Verification
      summary: Get bulk PAN verification job status
      description: >-
        Returns the current status of a bulk PAN verification job in your
        workspace. This GET request has no body.


        A created job waits for the workbook upload. queued waits to start
        processing. in_progress covers input-size checks, TRACES authentication
        and verification, and output workbook generation. A job succeeds after
        the output JSON workbook is saved and provides output_json_url for its
        download. A failed job provides message. Retrieving a failed job returns
        HTTP 200.


        TRACES report availability is polled for up to one day after successful
        submission. Authentication, processing, and report-availability failures
        appear on the job.


        The output workbook contains payee_sheet and payee_table with the header
        ["sr_no", "pan", "pan_status"]. It includes only submitted PANs returned
        by TRACES. The first input sr_no is retained for each PAN. A missing PAN
        is omitted and does not fail the job.


        The pan_status value is the exact text returned by TRACES. Known values
        include Valid and Operative, Valid and Inoperative, Valid, Inactive, and
        Invalid. Other source values are returned unchanged. An Invalid PAN
        result does not mean the job failed. The input file limit does not limit
        the output file.


        Output workbook example:


        ```json

        {
          "@entity": "workbook",
          "name": "pan_verification_workbook",
          "sheets": [
            {
              "@entity": "sheet",
              "name": "payee_sheet",
              "blocks": [
                {
                  "@entity": "table",
                  "name": "payee_table",
                  "header": [
                    "sr_no",
                    "pan",
                    "pan_status"
                  ],
                  "rows": [
                    [
                      1,
                      "ABCPD1234E",
                      "Valid and Operative"
                    ],
                    [
                      2,
                      "XYZPK5678L",
                      "Valid and Inoperative"
                    ]
                  ]
                }
              ]
            }
          ]
        }

        ```


        This example omits the repeated input PAN and a PAN absent from the
        TRACES report.
      operationId: GetPanVerificationJobStatus
      parameters:
        - name: job_id
          in: query
          description: Job ID returned when the PAN verification job was created.
          required: true
          schema:
            type: string
            format: uuid
          examples:
            Status created:
              summary: Status created
              value: b5084575-7bdf-4a40-a8db-e19c93d34ec4
            Verification in progress:
              summary: Verification in progress
              value: b5084575-7bdf-4a40-a8db-e19c93d34ec4
            Verification completed:
              summary: Verification completed
              value: 8941b6c4-8104-4a4b-b38c-14b0a1ed6837
            Verification failed:
              summary: Verification failed
              value: b5084575-7bdf-4a40-a8db-e19c93d34ec4
            Job not found:
              summary: Job not found
              value: 00000000-0000-4000-8000-000000000000
        - name: Authorization
          in: header
          description: >-
            Sandbox JWT access token. See the [Quickstart
            guide](https://developer.sandbox.co.in/guides/get-started/quickstart).
          required: true
          example: '{{access_token}}'
          schema:
            type: string
        - name: x-api-key
          in: header
          description: Sandbox API key for the request.
          required: true
          example: '{{api_key}}'
          schema:
            type: string
      responses:
        '200':
          description: >-
            The current job status. Failed verification jobs are returned with
            HTTP 200 and status failed.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                    enum:
                      - 200
                    description: HTTP status code.
                  timestamp:
                    type: integer
                    format: int64
                    description: Response timestamp in epoch milliseconds.
                  transaction_id:
                    type: string
                    format: uuid
                    description: Unique identifier for this API transaction.
                  data:
                    $ref: '#/components/schemas/PanVerificationJob'
                required:
                  - code
                  - timestamp
                  - transaction_id
                  - data
              examples:
                Status created:
                  summary: Status created
                  value:
                    code: 200
                    timestamp: 1792136875077
                    data:
                      created_at: 1792136873733
                      updated_at: 1792136873769
                      '@entity': in.co.sandbox.tds.compliance.pan.verification.job
                      job_id: b5084575-7bdf-4a40-a8db-e19c93d34ec4
                      tan: AHMA12345A
                      status: created
                    transaction_id: 41586383-1df1-4c50-8c46-b1e810d6a70d
                Verification in progress:
                  summary: Verification in progress
                  value:
                    code: 200
                    timestamp: 1792136921704
                    data:
                      created_at: 1792136873733
                      updated_at: 1792136921653
                      '@entity': in.co.sandbox.tds.compliance.pan.verification.job
                      job_id: b5084575-7bdf-4a40-a8db-e19c93d34ec4
                      tan: AHMA12345A
                      status: in_progress
                    transaction_id: 825ecaf8-df37-4ca7-9dcf-3f134d9747a6
                Verification completed:
                  summary: Verification completed
                  value:
                    code: 200
                    timestamp: 1792136917339
                    data:
                      created_at: 1792054456408
                      updated_at: 1792054527258
                      '@entity': in.co.sandbox.tds.compliance.pan.verification.job
                      job_id: 8941b6c4-8104-4a4b-b38c-14b0a1ed6837
                      tan: AHMA12345A
                      status: succeeded
                      output_json_url: >-
                        https://sandbox-example.s3.ap-south-1.amazonaws.com/example-workspace/8941b6c4-8104-4a4b-b38c-14b0a1ed6837/pan-verification.json?X-Amz-Signature=example
                    transaction_id: 3663d8df-d06f-4d88-a250-a74d99e5750e
                Verification failed:
                  summary: Verification failed
                  value:
                    code: 200
                    timestamp: 1792136925346
                    data:
                      created_at: 1792136873733
                      updated_at: 1792136925094
                      '@entity': in.co.sandbox.tds.compliance.pan.verification.job
                      job_id: b5084575-7bdf-4a40-a8db-e19c93d34ec4
                      tan: AHMA12345A
                      message: Credentials not found
                      status: failed
                    transaction_id: f77d73e8-5f0f-4e96-a16f-045fdd41618a
          headers: {}
        '401':
          description: Sandbox authorization is missing, invalid, or expired.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                    enum:
                      - 401
                    description: HTTP status code.
                  timestamp:
                    type: integer
                    format: int64
                    description: Response timestamp in epoch milliseconds.
                  transaction_id:
                    type: string
                    format: uuid
                    description: Unique identifier for this API transaction.
                  message:
                    type: string
                    description: Reason the request could not be completed.
                required:
                  - code
                  - timestamp
                  - transaction_id
                  - message
          headers: {}
        '403':
          description: Access to this API is denied.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                    enum:
                      - 403
                    description: HTTP status code.
                  timestamp:
                    type: integer
                    format: int64
                    description: Response timestamp in epoch milliseconds.
                  transaction_id:
                    type: string
                    format: uuid
                    description: Unique identifier for this API transaction.
                  message:
                    type: string
                    description: Reason the request could not be completed.
                required:
                  - code
                  - timestamp
                  - transaction_id
                  - message
          headers: {}
        '500':
          description: The API request could not be completed.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                    enum:
                      - 500
                    description: HTTP status code.
                  timestamp:
                    type: integer
                    format: int64
                    description: Response timestamp in epoch milliseconds.
                  transaction_id:
                    type: string
                    format: uuid
                    description: Unique identifier for this API transaction.
                  message:
                    type: string
                    description: Reason the request could not be completed.
                required:
                  - code
                  - timestamp
                  - transaction_id
                  - message
          headers: {}
        '521':
          description: >-
            No PAN verification job matches the supplied job ID in your
            workspace.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                    enum:
                      - 521
                    description: HTTP status code.
                  timestamp:
                    type: integer
                    format: int64
                    description: Response timestamp in epoch milliseconds.
                  transaction_id:
                    type: string
                    format: uuid
                    description: Unique identifier for this API transaction.
                  message:
                    type: string
                    description: Reason the request could not be completed.
                required:
                  - code
                  - timestamp
                  - transaction_id
                  - message
              examples:
                Job not found:
                  summary: Job not found
                  value:
                    code: 521
                    timestamp: 1792136877482
                    message: Data not found
                    transaction_id: 8eb6e7a7-518b-4471-a6bc-a3bd30b71106
          headers: {}
      deprecated: false
      security: []
components:
  schemas:
    PanVerificationJob:
      type: object
      description: >-
        A bulk PAN verification job. Upload the input through json_url. A
        succeeded job provides output_json_url. A failed job provides message.
      properties:
        '@entity':
          type: string
          enum:
            - in.co.sandbox.tds.compliance.pan.verification.job
          description: Job entity type.
        job_id:
          type: string
          format: uuid
          description: Unique identifier returned when the job is created.
        tan:
          type: string
          pattern: ^[A-Z]{4}[0-9]{5}[A-Z]$
          description: TAN associated with the verification job.
        status:
          type: string
          enum:
            - created
            - queued
            - in_progress
            - succeeded
            - failed
          description: >-
            Current job status. created waits for the workbook upload. queued
            waits to start processing. in_progress covers workbook validation,
            TRACES authentication and verification, and output workbook
            generation. succeeded means the output JSON workbook is saved.
            failed means processing did not complete.
        created_at:
          type: integer
          format: int64
          description: Job creation timestamp in epoch milliseconds.
        updated_at:
          type: integer
          format: int64
          description: >-
            Last job update timestamp in epoch milliseconds. Omitted from the
            job creation response.
        json_url:
          type: string
          format: uri
          description: >-
            Signed URL for uploading the input JSON workbook with HTTP PUT. The
            input limit is 5,000,000 bytes.
        output_json_url:
          type: string
          format: uri
          description: >-
            Signed URL for downloading the completed output JSON workbook with
            HTTP GET. Available when status is succeeded.
        message:
          type: string
          description: Reason the job failed. Present when status is failed.
      required:
        - '@entity'
        - job_id
        - tan
        - status
        - created_at
      additionalProperties: false
      oneOf:
        - properties:
            status:
              enum:
                - created
                - queued
                - in_progress
          type: object
        - properties:
            status:
              enum:
                - succeeded
          type: object
        - properties:
            status:
              enum:
                - failed
          type: object

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.