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

# Create a certificate job with a deductor token

> Create a Form 131 TDS or Form 133 TCS certificate job with a deductor access token, tax year, and quarter.

The `Authorization` header requires a deductor access token from [Authenticate a TRACES deductor](https://developer.sandbox.co.in/api-reference/tds/compliance/traces/endpoints/authenticate.md). The token identifies the TAN.

Certificate type `131` is for non-salary TDS, and `133` is for TCS. The request body contains only `@entity`, `tax_year`, and `quarter`.

Use the returned `data.job_id` to [check the certificate job status](https://developer.sandbox.co.in/api-reference/tds/compliance/certificates/endpoints/poll_with_deductor_token.md). For the complete cURL workflow, see [Generate certificates with a deductor token](https://developer.sandbox.co.in/recipes/tds/certificates/generate-with-deductor-token.md).


## OpenAPI

````yaml api-reference/tds/compliance/openapi.json POST /tds/compliance/traces/deductor/certificates/{certificate_type}
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: TDS
  - name: TDS Certificate
  - name: TRACES Credentials
  - name: E-File TDS Return
paths:
  /tds/compliance/traces/deductor/certificates/{certificate_type}:
    post:
      tags:
        - TDS Certificate
      summary: Create TDS or TCS certificate job
      description: >-
        Create a certificate job for the deductor identified by your access
        token. Use certificate type 131 for TDS on non-salary payments or 133
        for TCS. The response includes a job_id and the current job status. Use
        the status endpoint to check progress and retrieve signed download URLs
        when the certificate ZIP files are ready.
      operationId: SubmitVanillaCertificateJob
      parameters:
        - name: certificate_type
          in: path
          description: >-
            Certificate type. Use 131 for TDS on non-salary payments or 133 for
            TCS.
          required: true
          example: '131'
          schema:
            type: string
            enum:
              - '131'
              - '133'
        - name: Authorization
          in: header
          description: >-
            Deductor access token returned by [Authenticate a TRACES
            deductor](https://developer.sandbox.co.in/api-reference/tds/compliance/traces/endpoints/authenticate).
            The token identifies the deductor TAN.
          required: true
          example: '{{deductor_access_token}}'
          schema:
            type: string
        - name: x-api-key
          in: header
          description: Sandbox API key.
          required: true
          example: '{{api_key}}'
          schema:
            type: string
        - name: Content-Type
          in: header
          description: Request body format.
          required: true
          example: application/json
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                '@entity':
                  type: string
                  description: Request entity type.
                  examples:
                    - in.co.sandbox.tds.compliance.certificate.job.request
                  const: in.co.sandbox.tds.compliance.certificate.job.request
                tax_year:
                  type: string
                  description: >-
                    Tax year for the certificate request. Use the TY YYYY-YY
                    format.
                  examples:
                    - TY 2026-27
                  pattern: ^TY [0-9]{4}-[0-9]{2}$
                quarter:
                  type: string
                  enum:
                    - Q1
                    - Q2
                    - Q3
                    - Q4
                  description: Quarter of the tax year.
              required:
                - '@entity'
                - quarter
                - tax_year
              additionalProperties: false
            examples:
              Non-salary TDS certificates requested:
                value:
                  '@entity': in.co.sandbox.tds.compliance.certificate.job.request
                  tax_year: TY 2026-27
                  quarter: Q1
                summary: Non-salary TDS certificates requested
              TCS certificates requested:
                value:
                  '@entity': in.co.sandbox.tds.compliance.certificate.job.request
                  tax_year: TY 2026-27
                  quarter: Q1
                summary: TCS certificates requested
              Quarter is missing:
                value:
                  '@entity': in.co.sandbox.tds.compliance.certificate.job.request
                  tax_year: TY 2026-27
                summary: Quarter is missing
              Deductor access token is missing:
                value:
                  '@entity': in.co.sandbox.tds.compliance.certificate.job.request
                  tax_year: TY 2026-27
                  quarter: Q1
                summary: Deductor access token is missing
              Deductor access token has expired:
                value:
                  '@entity': in.co.sandbox.tds.compliance.certificate.job.request
                  tax_year: TY 2026-27
                  quarter: Q1
                summary: Deductor access token has expired
        required: true
      responses:
        '200':
          description: Certificate generation job created.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                  timestamp:
                    type: integer
                  data:
                    type: object
                    properties:
                      '@entity':
                        type: string
                        description: Certificate job entity type.
                      job_id:
                        type: string
                        description: Unique identifier for the certificate job.
                      tan:
                        type: string
                        description: Tax Deduction and Collection Account Number (TAN).
                      tax_year:
                        type: string
                        description: >-
                          Tax year for the certificate job, in TY YYYY-YY
                          format.
                      quarter:
                        type: string
                        enum:
                          - Q1
                          - Q2
                          - Q3
                          - Q4
                        description: Quarter of the tax year.
                      created_at:
                        type: integer
                        description: Job creation time as a Unix timestamp in milliseconds.
                      updated_at:
                        type: integer
                        description: >-
                          Last job update time as a Unix timestamp in
                          milliseconds, when available.
                      status:
                        type: string
                        enum:
                          - created
                          - queued
                          - in_progress
                          - succeeded
                          - failed
                        description: Current status of the certificate job.
                      message:
                        type: string
                        description: Reason the job failed, when available.
                      certificate_pdf_zip_urls:
                        type: array
                        description: >-
                          Signed URLs for the certificate ZIP files, available
                          after the job succeeds.
                        items:
                          type: string
                          format: uri
                    required:
                      - '@entity'
                      - job_id
                      - tan
                      - tax_year
                      - quarter
                      - status
                  transaction_id:
                    type: string
                    description: Unique identifier for the API transaction.
                required:
                  - code
                  - timestamp
                  - data
                  - transaction_id
              examples:
                Non-salary TDS certificates requested:
                  summary: Non-salary TDS certificates requested
                  value:
                    code: 200
                    timestamp: 1792479600000
                    data:
                      '@entity': in.co.sandbox.tds.compliance.certificate.job
                      job_id: 4d882797-f968-474e-b05b-85cb5eba3d9a
                      tan: AHMA12345A
                      tax_year: TY 2026-27
                      quarter: Q1
                      created_at: 1792479600000
                      updated_at: 1792479600000
                      status: in_progress
                    transaction_id: 171f4869-bcd6-4f7d-905a-b1186b907857
                TCS certificates requested:
                  summary: TCS certificates requested
                  value:
                    code: 200
                    timestamp: 1792479600000
                    data:
                      '@entity': in.co.sandbox.tds.compliance.certificate.job
                      job_id: 4d882797-f968-474e-b05b-85cb5eba3d9a
                      tan: AHMA12345A
                      tax_year: TY 2026-27
                      quarter: Q1
                      created_at: 1792479600000
                      updated_at: 1792479600000
                      status: in_progress
                    transaction_id: 171f4869-bcd6-4f7d-905a-b1186b907857
          headers: {}
        '400':
          description: The request body or certificate type is invalid.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                  timestamp:
                    type: integer
                  message:
                    type: string
                  transaction_id:
                    type: string
                required:
                  - code
                  - timestamp
                  - message
                  - transaction_id
              examples:
                Quarter is missing:
                  summary: Quarter is missing
                  value:
                    code: 400
                    timestamp: 1792479600000
                    message: Invalid request body
                    transaction_id: 171f4869-bcd6-4f7d-905a-b1186b907857
          headers: {}
        '401':
          description: The deductor access token is missing.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                  timestamp:
                    type: integer
                  message:
                    type: string
                  transaction_id:
                    type: string
                required:
                  - code
                  - timestamp
                  - message
                  - transaction_id
              examples:
                Deductor access token is missing:
                  summary: Deductor access token is missing
                  value:
                    code: 401
                    timestamp: 1792479600000
                    message: Unauthorized
                    transaction_id: 171f4869-bcd6-4f7d-905a-b1186b907857
          headers: {}
        '403':
          description: >-
            The deductor access token has expired, or the API key or deductor
            token does not permit this request.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                  timestamp:
                    type: integer
                  message:
                    type: string
                  transaction_id:
                    type: string
                required:
                  - code
                  - timestamp
                  - message
                  - transaction_id
              examples:
                Deductor access token has expired:
                  summary: Deductor access token has expired
                  value:
                    code: 403
                    timestamp: 1792479600000
                    message: Insufficient privilege
                    transaction_id: 171f4869-bcd6-4f7d-905a-b1186b907857
          headers: {}
        '500':
          description: The request could not be completed.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                  timestamp:
                    type: integer
                  message:
                    type: string
                  transaction_id:
                    type: string
                required:
                  - code
                  - timestamp
                  - message
                  - transaction_id
          headers: {}
        '503':
          description: TRACES is temporarily unavailable.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                  timestamp:
                    type: integer
                  message:
                    type: string
                  transaction_id:
                    type: string
                required:
                  - code
                  - timestamp
                  - message
                  - transaction_id
          headers: {}
      deprecated: false
      security: []

````

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