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

# Form 131 API: generate certificates, formerly Form 16A

> Generate Form 131 certificates, formerly Form 16A, with Sandbox's API. Follow cURL examples to create a TRACES job and download certificate PDFs in ZIP files.

Use Sandbox's API to generate Form 131 certificates from TRACES and download ZIP files containing certificate PDFs. Form 131 is the non-salary TDS certificate that replaces Form 16A under the Income-tax Act, 2025. See the [Income Tax Department's Form 131 FAQs](https://www.incometaxindia.gov.in/documents/d/guest/form-131-faqs) for the statutory requirements.

## Before you start

* Obtain a Sandbox access token using the [Quickstart guide](/guides/get-started/quickstart).
* Confirm that TRACES has processed the relevant Form 140 or Form 144 statement and made the certificates available. This applies whether you filed through Sandbox or elsewhere.
* Keep the TAN and its TRACES password ready.

Replace the sample TAN and period with your own values. Use the same TAN as the saved credentials.

## Generate the certificates

<Steps>
  <Step title="Add the TRACES credentials" titleSize="h3">
    Add the TAN and its password with the [Add TRACES credentials](/api-reference/tds/compliance/traces-credentials/endpoints/save_credential) endpoint.

    ```bash theme={null}
    curl --request POST \
      --url https://api.sandbox.co.in/tds/traces/deductors/credential \
      --header 'Authorization: {sandbox-access-token}' \
      --header 'Content-Type: application/json' \
      --header 'x-api-key: {sandbox-api-key}' \
      --data '{
        "@entity": "in.co.sandbox.tds.traces.deductor.credential.request",
        "tan": "AHMS45586C",
        "password": "{traces-password}"
      }'
    ```

    Skip this step if valid credentials are already saved for the TAN. To replace saved credentials, follow the [credential endpoint instructions](/api-reference/tds/compliance/traces-credentials/endpoints/save_credential).
  </Step>

  <Step title="Create a Form 131 certificate job" titleSize="h3">
    Call the [Create TDS or TCS certificate job](/api-reference/tds/compliance/certificates/endpoints/submit_job) endpoint with `131` in the path. Set the JSON `form` field to `"131"`.

    ```bash theme={null}
    curl --request POST \
      --url https://api.sandbox.co.in/tds/compliance/traces/deductors/forms/131 \
      --header 'Authorization: {sandbox-access-token}' \
      --header 'Content-Type: application/json' \
      --header 'x-api-key: {sandbox-api-key}' \
      --data '{
        "@entity": "in.co.sandbox.tds.compliance.certificate.job.request",
        "quarter": "Q1",
        "tax_year": "TY 2026-27",
        "form": "131",
        "tan": "AHMS45586C"
      }'
    ```

    Save `data.job_id` from the response. You need this value to check the job status.
  </Step>

  <Step title="Check the certificate job status" titleSize="h3">
    Call the [Get TDS certificate job status](/api-reference/tds/compliance/certificates/endpoints/poll_job) endpoint with the `job_id` from the submit response.

    ```bash theme={null}
    curl --request GET \
      --url 'https://api.sandbox.co.in/tds/compliance/traces/deductors/forms/131/status?job_id={job_id}' \
      --header 'Authorization: {sandbox-access-token}' \
      --header 'x-api-key: {sandbox-api-key}'
    ```

    Continue polling while the status is `created`, `queued`, or `in_progress`. When the status is `failed`, read `data.message` for the reason. Stop and resolve the error before submitting another job.
  </Step>

  <Step title="Download the certificate ZIP files" titleSize="h3">
    When the status is `succeeded`, the response contains one or more download URLs in `data.certificate_pdf_zip_urls`.

    Response excerpt:

    ```json theme={null}
    {
      "data": {
        "job_id": "518bf6d5-be9d-4723-8fee-2382919fb605",
        "form": "131",
        "status": "succeeded",
        "certificate_pdf_zip_urls": [
          "{certificate-pdf-zip-url}"
        ]
      }
    }
    ```

    Download each ZIP file and store it in your system.

    ```bash theme={null}
    curl --request GET \
      --url '{certificate-pdf-zip-url}' \
      --output form-131-certificates.zip
    ```
  </Step>
</Steps>

## Related API operations

* [Search certificate jobs](/api-reference/tds/compliance/certificates/endpoints/fetch_job) to find previous requests for a TAN and period.
* [Certificate webhooks](/api-reference/tds/compliance/certificates/endpoints/webhook) to receive job completion updates instead of polling.
