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

# Return form data (for example, required fields and tax parameter schema)

> Return form data for specified form (fields, validations, schema).



## OpenAPI

````yaml /spf/api-reference/payroll-forms-api.yaml get /fillPdf/{formId}
openapi: 3.0.1
info:
  title: SPF Api
  contact:
    name: Symmetry Software
    url: https://www.symmetry.com
    email: support@symmetry.com
  license:
    name: Symmetry Software/Subscription & Service Agreement
    url: http://www.symmetry.com/software-subscription-license
  version: 1.94.0
  x-release-name:
    value: 2026.7.1
  x-endpoint-versions:
    fill_pdf_post_version: 1.95.0
    forms_version: 1.95.0
    form_questions_version: 1.95.0
    docs_version: 1.93.0
    guided_flows_version: 1.95.0
    flow_questions_version: 1.95.0
    getPdf_version: 1.95.0
    ste_mapping_version: 1.1.0
    fill_pdf_get_version: 1.95.0
    /v2/forms_version: 1.95.0
    form_ids_version: 1.95.0
    form_catalog_version: 1.87.0
servers:
  - url: https://api.symmetry.com/spf
    description: prod2
security: []
tags:
  - name: Forms
    description: Determine all applicable forms and retrieve information for each
  - name: Questions
    description: Retrieve form and guide flow questions
  - name: PDF and Tax Parameters
    description: Retrieve pdf and tax parameter schemas and generate filled documents
  - name: Documentation
    description: Retrieve OpenApi configuration yaml and use it to generate a client api
  - name: Postman
    description: Resources for Postman
  - name: STE Mapping
    description: Retrieve SPF-to-STE tax parameter mappings
paths:
  /fillPdf/{formId}:
    get:
      tags:
        - PDF and Tax Parameters
      summary: Return form data (for example, required fields and tax parameter schema)
      description: Return form data for specified form (fields, validations, schema).
      operationId: getFormInfo
      parameters:
        - name: formId
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/WithholdingForm'
        - name: formVersion
          in: query
          required: false
          schema:
            type: string
        - name: hasFederalValues
          in: query
          required: false
          schema:
            type: boolean
            default: false
        - name: exemptFromFed
          in: query
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FormInfo'
              examples:
                Requesting information for the US based AZ101 form:
                  summary: US Withholding form information
                  description: Requesting information for the US based AZ101 form
                  value:
                    id: AZ101
                    locality: AZ
                    name: A-4
                    title: Employee's Arizona Withholding Election
                    formType: RESIDENT
                    initialQuestionSetId: QS1
                    effectiveDate: '2021-01-01'
                    formVersion: 2020.12.0
                    formFields:
                      formId: AZ101
                      formVersion: 2020.12.0
                      employee:
                        firstName: ^[A-Za-z.\'\-\, \xC0-\xD6\xD8-\xF6\xF8-\xFF]{1,}$
                        middleInitial: ^[A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\xFF]{0,1}$
                        lastName: ^[A-Za-z.\'\-\, \xC0-\xD6\xD8-\xF6\xF8-\xFF]{1,}$
                        socialSecurityNumber: ^([0-9]{3}-[0-9]{2}-[0-9]{4}|[0-9]{9})$
                        address:
                          streetAddress1: ^[A-Za-z0-9#,.&\'\- \xC0-\xD6\xD8-\xF6\xF8-\xFF]+$
                          streetAddress2: ^[A-Za-z0-9#,.&\'\- \xC0-\xD6\xD8-\xF6\xF8-\xFF]+$
                          city: ^[A-Za-z.,&\'\- \xC0-\xD6\xD8-\xF6\xF8-\xFF]+$
                          state: >-
                            ^(AL|AK|AZ|AR|AS|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VA|VI|WA|WV|WI|WY)$
                          zipCode: ^[0-9]{5}$|^[0-9]{5}-[0-9]{4}$|^[0-9]{9}$
                      fields:
                        additionalStateWithholding: ^[+-]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?$
                        withholdingPercentage: ^(0|0.8|1.3|1.8|2.7|3.6|4.2|5.1)$
                      signForm: PREVIEW
                    blankFormImages:
                      - >-
                        https://spfcdn.symmetry.com/images/AZ101/2020.12.0/az101_1.png
                    taxParameters:
                      - id: AZ.percentState
                        valueType: regex
                        regexOptions: ^(0|0.8|1.3|1.8|2.7|3.6|4.2|5.1)$
                        description: >-
                          Value represents the tax rate percentage that the
                          employee has elected
                      - id: additionalStateWithholding
                        valueType: dollarAmount
                        description: >-
                          Additional withholding dollar amount employee has a
                          elected
                      - id: exemptFromStateWithholding
                        valueType: boolean
                        description: Exempt from state withholding tax
                      - id: mustFileWithState
                        valueType: boolean
                        description: Employer must file the form with the state
                      - id: employerIntervention
                        valueType: boolean
                        description: >-
                          Additional employer processing required to complete
                          the form
                      - id: employerInterventionReason
                        valueType: regex
                        regexOptions: ^(null)$
                        description: null - employerIntervention is null or false
                Requesting information for the Canada based TD1AB form:
                  summary: Canada Withholding form information
                  description: Requesting information for the Canada based TD1AB form
                  value:
                    id: TD1AB
                    locality: AB
                    name: TD1AB
                    title: 2023 Alberta Personal Tax Credits Return
                    formType: CANADA_RESIDENT
                    initialQuestionSetId: QS1
                    effectiveDate: '2023-01-01'
                    formVersion: 2023.01.0
                    formFields:
                      formId: TD1AB
                      formVersion: 2023.01.0
                      employee:
                        firstName: ^[A-Za-z.', \-\xC0-\xD6\xD8-\xF6\xF8-\xFF]{1,}$
                        middleInitial: ^[A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\xFF]{0,1}$
                        lastName: ^[A-Za-z.', \-\xC0-\xD6\xD8-\xF6\xF8-\xFF]{1,}$
                        address:
                          streetAddress1: ^[A-Za-z0-9#,.&'\- \xC0-\xD6\xD8-\xF6\xF8-\xFF]+$
                          streetAddress2: ^[A-Za-z0-9#,.&'\- \xC0-\xD6\xD8-\xF6\xF8-\xFF]+$
                          city: ^[A-Za-z.,&'\- \xC0-\xD6\xD8-\xF6\xF8-\xFF]+$
                          provinceTerritory: ^(AB|BC|MB|NB|NL|NT|NS|NU|ON|PE|QC|SK|YT)$
                          postalCode: ^(?!.*[DFIOQU])[A-VXY][0-9][A-Z] ?[0-9][A-Z][0-9]$
                        socialInsuranceNumber: >-
                          ^([0-9]{3}-[0-9]{3}-[0-9]{3}|[0-9]{9}|[0-9]{3}
                          [0-9]{3} [0-9]{3})$
                        canadianEmployee: true
                      fields:
                        hasTotalIncomeLessThanTotalClaim: ^(true|false)$
                        infirmDependantAmount: ^[+]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?$
                        spousePartnerTransferAmount: ^[+]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?$
                        dependantTransferredAmount: ^[+]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?$
                        line8DependantNetIncome: ^[+]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?$
                        line8EligibleDependantAmount: ^[+]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?$
                        isEligible: ^(true|false)$
                        ageAmountSurvey: ^(true|false)$
                        hasMultipleEmployers: ^(true|false)$
                        dateOfBirth: >-
                          ^(?:(?:0[13578]|1[02])(/)(?:31)(/)|(?:(?:0[13-9]|1[0-2])(/)(?:29|30)(/)))(?:(?:1[6-9]|[2-9]\d){1}\d{2})$|^(?:02(/)29(/)(?:(?:(?:1[6-9]|[2-9]\d){1}(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0[1-9])|(?:1[0-2]))(/)(?:0[1-9]|1\d|2[0-8])(/)(?:(?:1[6-9]|[2-9]\d){1}\d{2})$|^(?:(?:1[6-9]|[2-9]\d){1}\d{2})(\-)(?:(?:0[13578]|1[02])(\-)(?:31)|(?:(?:0[13-9]|1[0-2])(\-)(?:29|30)))$|^((?:(?:(?:1[6-9]|[2-9]\d){1}(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(\-)02(\-)29)$|^(?:(?:1[6-9]|[2-9]\d){1}\d{2})(\-)(?:(?:0[1-9])|(?:1[0-2]))(\-)(?:0[1-9]|1\d|2[0-8])$
                        employeeNumber: ^[a-zA-Z0-9\xC0-\xD6\xD8-\xF6\xF8-\xFF,.!\?\-' ]*$
                        countryOrResidence: >-
                          ^(AC|AD|AE|AF|AG|AI|AL|AM|AN|AO|AQ|AR|AS|AT|AU|AW|AX|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BJ|BL|BM|BN|BO|BQ|BR|BS|BT|BU|BV|BW|BY|BZ|CA|CC|CD|CF|CG|CH|CI|CK|CL|CM|CN|CO|CP|CR|CS|CU|CV|CW|CX|CY|CZ|DE|DG|DJ|DK|DM|DO|DZ|EA|EC|EE|EG|EH|ER|ES|ET|EU|EZ|FI|FJ|FK|FM|FO|FR|FX|GA|GB|GD|GE|GF|GG|GH|GI|GL|GM|GN|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|HU|IC|ID|IE|IL|IM|IN|IO|IQ|IR|IS|IT|JE|JM|JO|JP|KE|KG|KH|KI|KM|KN|KP|KR|KW|KY|KZ|LA|LB|LC|LI|LK|LR|LS|LT|LU|LV|LY|MA|MC|MD|ME|MF|MG|MH|MK|ML|MM|MN|MO|MP|MQ|MR|MS|MT|MU|MV|MW|MX|MY|MZ|NA|NC|NE|NF|NG|NI|NL|NO|NP|NR|NT|NU|NZ|OM|PA|PE|PF|PG|PH|PK|PL|PM|PN|PR|PS|PT|PW|PY|QA|RE|RO|RS|RU|RW|SA|SB|SC|SD|SE|SF|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|SS|ST|SU|SV|SX|SY|SZ|TA|TC|TD|TF|TG|TH|TJ|TK|TL|TM|TN|TO|TP|TR|TT|TV|TW|TZ|UA|UG|UK|UM|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|WF|WS|XK|YE|YT|YU|ZA|ZM|ZR|ZW)$
                        ageAmountCredit: ^[+]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?$
                        pensionIncomeAmount: ^[+]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?$
                        disabilityCreditAmount: ^(0|16201)$
                        spouseCommonLawAmount: ^[+]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?$
                        eligibleDependantAmount: ^[+]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?$
                        line2NetIncome: ^[+]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?$
                        line7DependantNetIncome: ^[+]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?$
                        caregiverDependantAmountSurvey: ^(true|false)$
                        infirmDependantAmountSurvey: ^(true|false)$
                        caregiverDependantAmount: ^[+]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?$
                      signForm: PREVIEW
                    blankFormImages:
                      - >-
                        https://spfcdn.symmetry.com/images/canada/TD1AB/2023.01.0/td1ab_1.png
                      - >-
                        https://spfcdn.symmetry.com/images/canada/TD1AB/2023.01.0/td1ab_2.png
                    taxParameters:
                      - id: CA.hasMoreThanOnePayer
                        valueType: boolean
                        description: >-
                          Has more than one employer or payer and already has
                          claimed personal tax credits on another TD1AB
                      - id: CA.hasTotalIncomeLessThanTotalClaim
                        valueType: boolean
                        description: >-
                          Total income from all employers or payers is less than
                          Line 13
                      - id: CA.totalClaimAmount
                        valueType: dollarAmount
                        description: Total claim amount from line 13
        '400':
          description: ''
          content: {}
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ApiError'
        '404':
          description: ''
          content: {}
        '500':
          description: Internal Server Error
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ApiError'
      security:
        - jwtToken: []
components:
  schemas:
    WithholdingForm:
      type: string
      description: >-
        Form IDs - Use the /getAllFormIds endpoint to get all withholding form
        IDs available
    FormInfo:
      type: object
      properties:
        id:
          type: string
        notice:
          $ref: '#/components/schemas/Notice'
        locality:
          type: string
          description: States and territories
        name:
          type: string
        title:
          type: string
        formType:
          type: string
          enum:
            - CANADA_RESIDENT
            - RESIDENT
            - NON_RESIDENT
            - RESIDENT_OUT_OF_STATE
            - EXEMPT
            - MILITARY
            - EIC
            - LOCAL
            - PENSION
            - EXEMPT_STUDENT
            - EXEMPT_NATIVE_AMERICAN
            - NONRESIDENT_EMPLOYER
            - RESIDENT_ALLOWANCE_ADJ
            - NON_RESIDENT_FORT_CAMPBELL
            - EXEMPT_TAX_CREDIT
            - RESIDENT_PITTSBURGH
            - NON_RESIDENT_PITTSBURGH
            - TAX_ADJ
            - EXEMPT_MILITARY_SPOUSE
        initialQuestionSetId:
          type: string
        effectiveDate:
          type: string
          format: date
        formVersion:
          type: string
        formFields:
          $ref: '#/components/schemas/FormFieldsValidations'
        blankFormImages:
          type: array
          items:
            type: string
        taxParameters:
          type: array
          items:
            $ref: '#/components/schemas/TaxParameter'
    ApiError:
      type: object
      properties:
        path:
          type: string
        status:
          type: string
        statusCode:
          type: integer
          format: int32
        timestamp:
          type: string
          format: date-time
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ValidationError'
        errorCount:
          type: integer
          format: int32
    Notice:
      type: object
      properties:
        type:
          type: string
          enum:
            - WARNING
            - DEPRECATION
            - INFORMATION
        message:
          type: string
    FormFieldsValidations:
      type: object
      properties:
        formId:
          $ref: '#/components/schemas/WithholdingForm'
        formVersion:
          type: string
        employee:
          $ref: '#/components/schemas/EmployeeValidations'
        employer:
          $ref: '#/components/schemas/EmployerValidations'
        fields:
          type: object
          additionalProperties:
            type: string
        signForm:
          type: string
        signatureFormat:
          type: string
        federalValues:
          type: object
          additionalProperties:
            type: string
        hasFederalLockInLetter:
          type: string
    TaxParameter:
      type: object
      properties:
        id:
          type: string
          description: Tax parameter's ID
        value:
          type: object
          description: Tax parameter's value
          nullable: true
        valueType:
          type: string
          description: Data type of the tax parameter's value field
        regexOptions:
          type: string
          description: Tax parameter's allowed values when valueType is 'regex'
          nullable: true
        description:
          type: string
          description: >-
            Description of the tax parameter, this is field is not returned
            outside of a documentation context
          nullable: true
    ValidationError:
      type: object
      properties:
        field:
          type: string
        message:
          type: string
        rejectedValue:
          type: string
    EmployeeValidations:
      type: object
      properties:
        firstName:
          type: string
        middleInitial:
          type: string
        lastName:
          type: string
        address:
          $ref: '#/components/schemas/AddressValidations'
        socialSecurityNumber:
          type: string
        socialInsuranceNumber:
          type: string
        socialInsuranceNumberExpiryDate:
          type: string
    EmployerValidations:
      type: object
      properties:
        name:
          type: string
          description: >-
            If this field contains a regex in the result of the /fillPdf GET
            endpoint, the employer.name field submitted to the /fillPdf POST
            endpoint must match that regex or the PDF will fail to generate.
            Note that the regex for this field may match empty string, but this
            field is required and empty string will also result in a PDF
            generation error.
        federalEIN:
          type: string
          description: >-
            If this field contains a regex in the result of the /fillPdf GET
            endpoint, the employer.federalEin field submitted to the /fillPdf
            POST endpoint must match that regex or the PDF will fail to
            generate.
        contactPerson:
          type: string
          description: >-
            If this field contains a regex in the result of the /fillPdf GET
            endpoint, the employer.contactPerson field submitted to the /fillPdf
            POST endpoint must match that regex or the PDF will fail to
            generate.
        telephoneNumber:
          type: string
          description: >-
            If this field contains a regex in the result of the /fillPdf GET
            endpoint, the employer.telephoneNumber field submitted to the
            /fillPdf POST endpoint must match that regex or the PDF will fail to
            generate.
        firstDateOfEmployment:
          type: string
        address:
          $ref: '#/components/schemas/AddressValidations'
        stateEIN:
          type: string
          deprecated: true
    AddressValidations:
      type: object
      properties:
        streetAddress1:
          type: string
        streetAddress2:
          type: string
        city:
          type: string
        state:
          type: string
        zipCode:
          type: string
        stateEIN:
          type: string
          description: >-
            For the employer address object only, if this field contains a regex
            in the result of the /fillPdf GET endpoint, the
            employer.address.stateEin field submitted to the /fillPdf POST
            endpoint should match that regex; If missing, the tax form PDF and
            tax params will be returned but the tax params may contain the
            MISSING_STATE_EIN warning. This validation is not applicable to the
            employee home address and work addresses.
        provinceTerritory:
          type: string
        postalCode:
          type: string
  securitySchemes:
    jwtToken:
      type: http
      scheme: bearer
      bearerFormat: JWT

````