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

<AgentInstructions>

## Submitting Feedback

If you encounter incorrect, outdated, or confusing documentation on this page, submit feedback:

POST https://docs.affinda.com/feedback

```json
{
  "path": "/api-reference/job-description-parser/upload-a-job-description-for-parsing",
  "feedback": "Description of the issue"
}
```

Only submit feedback when you have something specific and actionable to report.

</AgentInstructions>

# Upload a job description for parsing

> Uploads a job description for parsing.
When successful, returns an `identifier` in the response for subsequent use with the [/job_descriptions/{identifier}](#get-/job_descriptions/-identifier-) endpoint to check processing status and retrieve results.
Job Descriptions can be uploaded as a file or a URL. In addition, data can be added directly if users want to upload directly without parsing any resume file. For uploading resume data, the `data` argument provided must be a JSON-encoded string. Data uploads will not impact upon parsing credits.



## OpenAPI

````yaml https://api.affinda.com/static/v2/api_spec.yaml post /v2/job_descriptions
openapi: 3.0.3
info:
  description: >-
    # Introduction

    Affinda uses the latest advancements in AI technology to rapidly process
    documents with better-than-human accuracy.

    This guide covers how to:

    * Extract structured data from a range of document types

    * Integrate our solutions into your platform

    * Manage users


    *Note: This API spec is for the deprecated v2 of the API, the v3
    documentation [can be found here](https://api.affinda.com/docs/v3)*


    > **Important: Use the correct API URL for your region.** Affinda is hosted
    across multiple instances. Make sure you are sending requests to the correct
    URL for your account:

    > | Instance | API Base URL |

    > |----------|-------------|

    > | **AUS / Global** | `https://api.affinda.com` |

    > | **US** | `https://api.us1.affinda.com` |

    > | **EU** | `https://api.eu1.affinda.com` |

    >

    > You can determine your instance from the URL you use to access the Affinda
    web app (e.g. `app.us1.affinda.com` means you are on the US instance). When
    using the "Try it" feature, select the matching region from the server
    dropdown.

    # Getting Started

    * Obtain an API key by [signing up for a
    free-trial](https://app.affinda.com/auth/register)

    * (Recommended) Download and install one of our client libraries:
      * [Python](https://github.com/affinda/affinda-python) : `pip install affinda`
      * [Javascript](https://github.com/affinda/affinda-typescript) : `npm install @affinda/affinda`
      * [.NET](https://github.com/affinda/affinda-dotnet): `dotnet add package Affinda.API`
      * [Java](https://github.com/affinda/affinda-java) - [maven repository](https://mvnrepository.com/artifact/com.affinda.api/affinda-api-client)

    * Without a client library, API requests via HTTP according to the API spec
    in this documentation
  version: v2
  title: Affinda API
  contact:
    email: contact@affinda.com
  license:
    name: MIT
    url: https://raw.githubusercontent.com/affinda/affinda-api-spec/master/LICENSE
  x-logo:
    url: https://api.affinda.com/static/documentation/affinda_logo.png
    backgroundColor: '#FFFFFF'
    altText: Affinda logo
servers:
  - url: https://{region}.affinda.com
    description: >-
      Select the correct server for your instance: api (AUS/Global), api.us1
      (US), or api.eu1 (EU).
    variables:
      region:
        default: api
        description: >-
          The instance region. Use 'api' for AUS/Global, 'api.us1' for US, or
          'api.eu1' for EU. You can find your region in the Affinda web app URL.
        enum:
          - api
          - api.eu1
          - api.us1
        x-ms-parameter-location: client
security:
  - ApiKeyAuth: []
tags:
  - name: Invoice Extractor
    description: >-
      Operations to perform on parsed invoices via the Affinda Invoice Extractor
      API or a client library
  - name: Resume Parser
    description: >-
      Operations to perform on parsed resumes via the Affinda Resume Parser API
      or a client library
  - name: Job Description Parser
    description: >-
      Operations to perform on job descriptions via the Affinda Job Description
      API or a client library
  - name: Search & Match - Indexing
    description: >
      Operations to create and manage indexes and to add new documents to these
      indexes via the Affinda Resume Parser API or a client library.


      Resumes and job descriptions must be explicitly added to an index, which
      then makes them searchable (see Search & Match – Searching).
  - name: Search & Match - Searching
    description: >-
      Operations to search through an index of documents via the Affinda Resume
      Parser API or a client library.
  - name: Search & Match - Embedding
    description: Operations to fetch and configure the embeddable search tool.
  - name: Resume Search
    description: >
      Operations to search parsed resumes via the Affinda Resume Parser API or a
      client library.


      Resumes must be explicitly added to an index, which then makes them
      searchable with the below endpoint.
  - name: Resume Redactor
    description: >-
      Operations to perform on redacted resumes via the Affinda Resume Parser
      API or a client library
  - name: Users
    description: >
      Operations to manage users that are part of an account.


      For example, you may want to implement different settings

      for different users in your platform.  You can use these endpoints to
      generate new user accounts, and the usage

      for these accounts will be deducted from your master account.


      If you would like these user accounts to be able to login at
      https://app.affinda.com/, they will need to

      go to https://app.affinda.com/ and reset their password using the email
      used to create their account.
  - name: Documents API
    description: Placeholder
  - name: Webhook API
    description: Manage webhook integrations with your apps.
paths:
  /v2/job_descriptions:
    post:
      tags:
        - Job Description Parser
      summary: Upload a job description for parsing
      description: >-
        Uploads a job description for parsing.

        When successful, returns an `identifier` in the response for subsequent
        use with the
        [/job_descriptions/{identifier}](#get-/job_descriptions/-identifier-)
        endpoint to check processing status and retrieve results.

        Job Descriptions can be uploaded as a file or a URL. In addition, data
        can be added directly if users want to upload directly without parsing
        any resume file. For uploading resume data, the `data` argument provided
        must be a JSON-encoded string. Data uploads will not impact upon parsing
        credits.
      operationId: createJobDescription
      requestBody:
        description: Job Description to upload, either via fileupload or URL to a file
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              title: JobDescriptionRequestBody
              additionalProperties: false
              properties:
                file:
                  $ref: '#/components/schemas/File'
                url:
                  type: string
                  nullable: true
                  description: URL to download the job description.
                  example: >-
                    https://api.affinda.com/static/sample_job_descriptions/example.pdf
                data:
                  $ref: '#/components/schemas/JobDescriptionDataUpdate'
                identifier:
                  type: string
                  description: Deprecated in favor of `customIdentifier`.
                  deprecated: true
                customIdentifier:
                  type: string
                  description: >-
                    Specify a custom identifier for the document if you need
                    one, not required to be unique.
                fileName:
                  $ref: '#/components/schemas/FileName'
                wait:
                  $ref: '#/components/schemas/Wait'
                rejectDuplicates:
                  $ref: '#/components/schemas/RejectDuplicatesMaybeString'
                language:
                  $ref: '#/components/schemas/Language'
                expiryTime:
                  $ref: '#/components/schemas/ExpiryTime'
                regionBias:
                  $ref: '#/components/schemas/RegionBiasCreate'
                lowPriority:
                  $ref: '#/components/schemas/LowPriority'
      responses:
        '200':
          description: Only returned when wait=True, will return the created resume
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobDescription'
        '201':
          description: >-
            Only returned when wait=False, will return document uploaded and
            identifier created
          x-summary: >-
            Document uploaded and created, use job_description.meta.identifier
            to poll for processing status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobDescription'
        '400':
          $ref: '#/components/responses/400Error'
        '401':
          $ref: '#/components/responses/401Error'
        '403':
          $ref: '#/components/responses/403Error'
        default:
          $ref: '#/components/responses/DefaultError'
components:
  schemas:
    File:
      type: string
      format: binary
      description: >-
        File as binary data blob. Supported formats: PDF, DOC, DOCX, TXT, RTF,
        HTML, PNG, JPG, TIFF, ODT, XLS, XLSX
    JobDescriptionDataUpdate:
      type: object
      additionalProperties:
        anyOf:
          - type: string
            nullable: true
          - type: integer
            nullable: true
          - type: number
            nullable: true
          - type: boolean
            nullable: true
          - type: array
            items: {}
            description: >-
              For fields with multiple entries, use lists. E.g. 'multipleField':
              ['entry1', 'entry2']
            nullable: true
        description: 'For custom fields. E.g. ''isAvailable'': true'
        not:
          type: object
      nullable: true
      description: A JSON-encoded string of the `JobDescriptionData` object.
      properties:
        jobTitle:
          $ref: '#/components/schemas/JobTitleAnnotation_update'
        contactEmail:
          $ref: '#/components/schemas/TextAnnotation_v2_update'
        contactName:
          $ref: '#/components/schemas/TextAnnotation_v2_update'
        contactPhone:
          $ref: '#/components/schemas/TextAnnotation_v2_update'
        startDate:
          $ref: '#/components/schemas/DateAnnotation_v2_update'
        endDate:
          $ref: '#/components/schemas/DateAnnotation_v2_update'
        jobType:
          $ref: '#/components/schemas/TextAnnotation_v2_update'
        languages:
          type: array
          items:
            $ref: '#/components/schemas/LanguageAnnotation_v2_update'
        skills:
          type: array
          items:
            $ref: '#/components/schemas/SkillAnnotation_v2_update'
        organizationName:
          $ref: '#/components/schemas/TextAnnotation_v2_update'
        organizationWebsite:
          $ref: '#/components/schemas/TextAnnotation_v2_update'
        educationLevel:
          $ref: '#/components/schemas/TextAnnotation_v2_update'
        educationAccreditation:
          $ref: '#/components/schemas/TextAnnotation_v2_update'
        expectedRemuneration:
          $ref: '#/components/schemas/ExpectedRemunerationAnnotation_v2_update'
        location:
          $ref: '#/components/schemas/LocationAnnotation_v2_update'
        certifications:
          type: array
          items:
            $ref: '#/components/schemas/TextAnnotation_v2_update'
        yearsExperience:
          $ref: '#/components/schemas/YearsExperienceAnnotation_v2_update'
      x-csharp-usage: output
    FileName:
      type: string
      nullable: true
      description: Optional filename of the file
      example: Document.pdf
    Wait:
      type: boolean
      description: >-
        If "true" (default), will return a response only after processing has
        completed. If "false", will return an empty data object which can be
        polled at the GET endpoint until processing is complete.
      example: true
      default: true
      nullable: false
    RejectDuplicatesMaybeString:
      type: boolean
      description: >-
        If "true", parsing will fail when the uploaded document is duplicate of
        an existing document, no credits will be consumed. If "false", will
        parse the document normally whether its a duplicate or not. If not
        provided, will fallback to the workspace settings.
      example: true
      nullable: true
    Language:
      type: string
      nullable: true
      description: >-
        Language code in ISO 639-1 format. Must specify zh-cn or zh-tw for
        Chinese.
      example: en
    ExpiryTime:
      type: string
      nullable: true
      format: date-time
      description: >-
        The date/time in ISO-8601 format when the document will be automatically
        deleted.  Defaults to no expiry.
    RegionBiasCreate:
      type: string
      description: A JSON representation of the RegionBias object.
      example: '{"country": "vn"}'
    LowPriority:
      type: boolean
      description: Explicitly mark this document as low priority.
      example: true
    JobDescription:
      type: object
      additionalProperties: false
      required:
        - data
        - meta
        - error
      properties:
        data:
          $ref: '#/components/schemas/JobDescriptionData'
        meta:
          $ref: '#/components/schemas/Meta'
        error:
          $ref: '#/components/schemas/Error'
    JobTitleAnnotation_update:
      type: object
      nullable: true
      allOf:
        - $ref: '#/components/schemas/Annotation_v2_base'
        - $ref: '#/components/schemas/JobTitleParsed'
    TextAnnotation_v2_update:
      type: object
      nullable: true
      allOf:
        - $ref: '#/components/schemas/Annotation_v2_base'
        - type: object
          properties:
            parsed:
              type: string
              nullable: true
              example: John Smith
    DateAnnotation_v2_update:
      type: object
      nullable: true
      allOf:
        - $ref: '#/components/schemas/Annotation_v2_base'
        - type: object
          properties:
            parsed:
              type: string
              format: date
              nullable: true
              example: '2022-02-09'
    LanguageAnnotation_v2_update:
      type: object
      nullable: true
      allOf:
        - $ref: '#/components/schemas/Annotation_v2_base'
        - type: object
          properties:
            parsed:
              type: string
              readOnly: true
              nullable: true
              example: Mandarin Chinese
    SkillAnnotation_v2_update:
      type: object
      nullable: true
      allOf:
        - $ref: '#/components/schemas/Annotation_v2_base'
        - type: object
          properties:
            parsed:
              type: string
              readOnly: true
              nullable: true
              example: Basket weaving
    ExpectedRemunerationAnnotation_v2_update:
      type: object
      nullable: true
      allOf:
        - $ref: '#/components/schemas/Annotation_v2_base'
        - type: object
          properties:
            parsed:
              type: object
              properties:
                minimum:
                  type: number
                  nullable: true
                  example: '3455343.50'
                maximum:
                  type: number
                  nullable: true
                  example: '55545343.50'
                currency:
                  type: string
                  nullable: true
                  example: USD
                unit:
                  type: string
                  nullable: true
                  example: Annually
    LocationAnnotation_v2_update:
      type: object
      nullable: true
      allOf:
        - $ref: '#/components/schemas/Annotation_v2_base'
        - type: object
          properties:
            parsed:
              readOnly: true
              allOf:
                - $ref: '#/components/schemas/Location'
    YearsExperienceAnnotation_v2_update:
      type: object
      nullable: true
      allOf:
        - $ref: '#/components/schemas/Annotation_v2_base'
        - type: object
          properties:
            parsed:
              type: object
              description: Years of experience range
              properties:
                minimum:
                  type: number
                  nullable: true
                  description: Minimum years of experience
                  example: 0.5
                maximum:
                  type: number
                  nullable: true
                  description: Maximum years of experience
                  example: 5
    JobDescriptionData:
      type: object
      additionalProperties:
        anyOf:
          - type: string
            nullable: true
          - type: integer
            nullable: true
          - type: number
            nullable: true
          - type: boolean
            nullable: true
          - type: array
            items: {}
            description: >-
              For fields with multiple entries, use lists. E.g. 'multipleField':
              ['entry1', 'entry2']
            nullable: true
        description: 'For custom fields. E.g. ''isAvailable'': true'
        not:
          type: object
      nullable: true
      properties:
        jobTitle:
          $ref: '#/components/schemas/JobTitleAnnotation'
        contactEmail:
          $ref: '#/components/schemas/TextAnnotation'
        contactName:
          $ref: '#/components/schemas/TextAnnotation'
        contactPhone:
          $ref: '#/components/schemas/TextAnnotation'
        startDate:
          $ref: '#/components/schemas/DateAnnotation'
        endDate:
          $ref: '#/components/schemas/DateAnnotation'
        jobType:
          $ref: '#/components/schemas/TextAnnotation'
        languages:
          type: array
          items:
            $ref: '#/components/schemas/LanguageAnnotation'
        skills:
          type: array
          items:
            $ref: '#/components/schemas/SkillAnnotation'
        organizationName:
          $ref: '#/components/schemas/TextAnnotation'
        organizationWebsite:
          $ref: '#/components/schemas/TextAnnotation'
        educationLevel:
          $ref: '#/components/schemas/TextAnnotation'
        educationAccreditation:
          $ref: '#/components/schemas/TextAnnotation'
        expectedRemuneration:
          $ref: '#/components/schemas/ExpectedRemunerationAnnotation'
        location:
          $ref: '#/components/schemas/LocationAnnotation'
        certifications:
          type: array
          items:
            $ref: '#/components/schemas/TextAnnotation'
        yearsExperience:
          $ref: '#/components/schemas/YearsExperienceAnnotation'
        rawText:
          type: string
          example: >-
            Human Resources Assistant Switzerland '... <rest of job description
            text>'
          description: >-
            All of the raw text of the parsed job description, example is
            shortened for readability
      x-csharp-usage: output
    Meta:
      type: object
      properties:
        identifier:
          type: string
          description: Unique identifier for the document
        customIdentifier:
          type: string
          nullable: true
          description: >-
            Optional identifier for the document that you can set to track the
            document in the Affinda system.  Is not required to be unique.
          example: 46ab8b02-0e5b-420c-877c-8b678d46a834
        fileName:
          $ref: '#/components/schemas/FileName'
        ready:
          type: boolean
          nullable: false
          example: true
          description: >-
            If true, the document has finished processing. Particularly useful
            if an endpoint request specified wait=False, when polling use this
            variable to determine when to stop polling
        readyDt:
          type: string
          format: date-time
          example: '2020-12-10T01:43:32.276724Z'
          nullable: true
          description: The datetime when the document was ready
        failed:
          type: boolean
          nullable: false
          example: false
          description: >-
            If true, some exception was raised during processing. Check the
            'error' field of the main return object.
        expiryTime:
          $ref: '#/components/schemas/ExpiryTime'
        language:
          type: string
          nullable: true
          example: en
          description: The document's language.
        pdf:
          type: string
          nullable: true
          example: >-
            https://affinda-api.s3.amazonaws.com/media/documents/Document.pdf?AWSAccessKeyId=KEY&Signature=SIG&Expires=1663302062
          description: >-
            The URL to the document's pdf (if the uploaded document is not
            already pdf, it's converted to pdf as part of the parsing process).
        parentDocument:
          type: object
          nullable: true
          description: >-
            If this document is part of a splitted document, this attribute
            points to the original document that this document is splitted from.
          properties:
            identifier:
              $ref: '#/components/schemas/identifier'
        childDocuments:
          type: array
          description: >-
            If this document has been splitted into a number of child documents,
            this attribute points to those child documents.
          items:
            type: object
            properties:
              identifier:
                $ref: '#/components/schemas/identifier'
        pages:
          type: array
          items:
            $ref: '#/components/schemas/PageMeta'
          description: The document's pages.
        isVerified:
          type: boolean
          nullable: false
          example: false
          description: >-
            This is true if the 'confirm' button has been clicked in the Affinda
            validation tool
        reviewUrl:
          type: string
          nullable: true
          example: https://app.affinda.com/review/XJ5kK123?signature=12345
          description: >-
            Signed URL (valid for 60 minutes) to access the validation tool. 
            Not applicable for documents types such a resumes.
        ocrConfidence:
          type: number
          nullable: true
          example: 0.97
          description: >-
            The overall confidence in the conversion of image to text.  (only
            applicable for images or PDF documents without a text layer)
        createdDt:
          type: string
          format: date-time
        documentType:
          type: string
          example: resume
        regionBias:
          $ref: '#/components/schemas/RegionBias'
        isOcrd:
          type: boolean
    Error:
      type: object
      additionalProperties: false
      properties:
        errorCode:
          type: string
          nullable: true
          example: document_conversion_failed
        errorDetail:
          type: string
          nullable: true
          example: Unable to convert word document
    RequestError:
      type: object
      additionalProperties: false
      required:
        - type
        - errors
      properties:
        type:
          type: string
          example: validation_error
        errors:
          type: array
          items:
            type: object
            required:
              - attr
              - code
              - detail
            properties:
              attr:
                type: string
                nullable: true
                example: non_field_errors
              code:
                type: string
                example: unique
              detail:
                type: string
                example: This index name has already been used
    Annotation_v2_base:
      type: object
      additionalProperties: true
      nullable: true
      properties:
        id:
          type: integer
          minimum: 1
        rectangle:
          $ref: '#/components/schemas/Rectangle'
          nullable: true
        rectangles:
          type: array
          readOnly: true
          items:
            $ref: '#/components/schemas/Rectangle'
          nullable: true
        pageIndex:
          type: integer
          nullable: true
          example: 0
          minimum: 0
        raw:
          type: string
          nullable: true
          example: 2/9/2022
        confidence:
          type: number
          nullable: true
          example: 0.86
          description: The overall confidence that the model's prediction is correct
        classificationConfidence:
          type: number
          nullable: true
          example: 0.95
          description: The model's confidence that the text has been classified correctly
        textExtractionConfidence:
          type: number
          nullable: true
          example: 0.9
          description: >-
            If the document was submitted as an image, this is the confidence
            that the text in the image has been correctly read by the model.
        isVerified:
          type: boolean
        isClientVerified:
          type: boolean
        isAutoVerified:
          type: boolean
        dataPoint:
          type: string
        contentType:
          type: string
    JobTitleParsed:
      type: object
      properties:
        parsed:
          type: object
          nullable: true
          description: Matching job title to extracted text
          readOnly: true
          properties:
            name:
              type: string
              nullable: true
              example: Software Developer
            emsiId:
              type: string
              nullable: true
              example: ETE2AD3A1C11B4EC9B
              description: EMSI id of the normalised job title.
            managementLevel:
              type: string
              nullable: true
              example: Mid
            classification:
              type: object
              nullable: true
              properties:
                socCode:
                  type: number
                  example: 2463
                title:
                  type: string
                  example: Clergy
                minorGroup:
                  type: string
                  example: Welfare Professionals
                subMajorGroup:
                  type: string
                  example: BUSINESS, MEDIA AND PUBLIC SERVICE PROFESSIONALS
                majorGroup:
                  type: string
                  example: PROFESSIONAL OCCUPATIONS
                minorGroupCode:
                  type: integer
                  example: 4122
                  minimum: 0
                  maximum: 9999
                  description: >-
                    The 4 digit code representing the SOC2020 classification for
                    this job title
                subMajorGroupCode:
                  type: integer
                  example: 4122
                  minimum: 0
                  maximum: 9999
                  description: >-
                    The 4 digit code representing the SOC2020 classification for
                    this job title
                majorGroupCode:
                  type: integer
                  example: 4122
                  minimum: 0
                  maximum: 9999
                  description: >-
                    The 4 digit code representing the SOC2020 classification for
                    this job title
    Location:
      type: object
      nullable: true
      required:
        - rawInput
      properties:
        formatted:
          type: string
          nullable: true
          readOnly: true
          example: Blacksburg, VA, USA
        postalCode:
          type: string
          readOnly: true
          example: '3124'
          nullable: true
        state:
          type: string
          readOnly: true
          nullable: true
          example: Virginia
        stateCode:
          type: string
          nullable: true
          readOnly: true
          example: TX
        country:
          type: string
          readOnly: true
          nullable: true
          example: United States
        countryCode:
          type: string
          nullable: true
          readOnly: true
          example: US
          description: Two letter country code (ISO 3166-1 alpha-2)
        rawInput:
          type: string
          example: Blacksburg, VA
        streetNumber:
          type: string
          nullable: true
          readOnly: true
          example: '1'
        street:
          type: string
          nullable: true
          readOnly: true
          example: Smith St
        apartmentNumber:
          type: string
          nullable: true
          readOnly: true
          example: '12'
        city:
          type: string
          nullable: true
          readOnly: true
          example: Blacksburg
        latitude:
          type: number
          nullable: true
          readOnly: true
          example: '67.0124'
        longitude:
          type: number
          nullable: true
          readOnly: true
          example: '67.0124'
        poBox:
          type: string
          nullable: true
          readOnly: true
          example: P.O. Box 123
    JobTitleAnnotation:
      type: object
      nullable: true
      allOf:
        - $ref: '#/components/schemas/Annotation'
        - $ref: '#/components/schemas/JobTitleParsed'
    TextAnnotation:
      type: object
      nullable: true
      allOf:
        - $ref: '#/components/schemas/Annotation'
        - type: object
          properties:
            parsed:
              type: string
              nullable: true
    DateAnnotation:
      type: object
      nullable: true
      allOf:
        - $ref: '#/components/schemas/Annotation'
        - type: object
          properties:
            parsed:
              type: string
              format: date
              nullable: true
              example: '2022-02-09'
    LanguageAnnotation:
      type: object
      nullable: true
      allOf:
        - $ref: '#/components/schemas/Annotation'
        - type: object
          properties:
            parsed:
              type: string
              nullable: true
              example: Mandarin Chinese
    SkillAnnotation:
      type: object
      nullable: true
      allOf:
        - $ref: '#/components/schemas/Annotation'
        - type: object
          properties:
            parsed:
              type: string
              nullable: true
              example: Mandarin Chinese
    ExpectedRemunerationAnnotation:
      type: object
      nullable: true
      allOf:
        - $ref: '#/components/schemas/Annotation'
        - type: object
          properties:
            parsed:
              type: object
              properties:
                minimum:
                  type: number
                  nullable: true
                  example: '3455343.50'
                maximum:
                  type: number
                  nullable: true
                  example: '55545343.50'
                currency:
                  type: string
                  nullable: true
                  example: USD
                unit:
                  type: string
                  nullable: true
                  example: Annually
    LocationAnnotation:
      type: object
      nullable: true
      allOf:
        - $ref: '#/components/schemas/Annotation'
        - type: object
          properties:
            parsed:
              $ref: '#/components/schemas/Location'
    YearsExperienceAnnotation:
      type: object
      nullable: true
      allOf:
        - $ref: '#/components/schemas/Annotation'
        - type: object
          properties:
            parsed:
              type: object
              description: Years of experience range
              properties:
                minimum:
                  type: number
                  nullable: true
                  description: Minimum years of experience
                  example: 0.5
                maximum:
                  type: number
                  nullable: true
                  description: Maximum years of experience
                  example: 5
    identifier:
      type: string
      description: Unique identifier for the document
    PageMeta:
      type: object
      required:
        - id
        - pageIndex
        - image
        - width
        - height
        - rotation
      properties:
        id:
          type: integer
          minimum: 1
        pageIndex:
          type: integer
          example: 0
          minimum: 0
          description: Page number within the document, starts from 0.
        image:
          type: string
          nullable: true
          example: >-
            https://affinda-api.s3.amazonaws.com/media/pages/Page.png?AWSAccessKeyId=KEY&Signature=SIG&Expires=1663302062
          description: The URL to the image of the page.
        imageTranslated:
          type: string
          nullable: true
          example: >-
            https://affinda-api.s3.amazonaws.com/media/pages/PageTranslated.png?AWSAccessKeyId=KEY&Signature=SIG&Expires=1663302062
          description: The URL to the translated image of the page.
        height:
          type: number
          example: 700
          description: Height of the page's image in px.
        width:
          type: number
          example: 500
          description: Width of the page's image in px.
        rotation:
          type: integer
          example: 90
          minimum: -360
          maximum: 360
          description: >-
            The degree of rotation applied to the page. Greater than 0 indicates
            clockwise rotation. Less than 0 indicates counter-clockwise
            rotation.
    RegionBias:
      type: object
      nullable: true
      properties:
        country:
          type: string
          nullable: true
          description: >-
            A single alpha-2 country code (e.g. AU) used by google geocoding
            service
        countries:
          type: array
          items:
            type: string
          nullable: true
          description: A list of alpha-2 country codes used by Pelias
        squareCoordinates:
          type: array
          items:
            type: number
          nullable: true
          description: >-
            A list of coordinates used by Pelias in the shape of [min_lon,
            min_lat, max_lon, max_lat]
        strict:
          type: boolean
          description: >
            If true, the location must be within the region, as opposed to
            prefering locations within the region.

            Default to false.
          example: true
    Rectangle:
      type: object
      additionalProperties: false
      nullable: false
      required:
        - x0
        - y0
        - x1
        - y1
      properties:
        pageIndex:
          type: integer
          nullable: false
          example: 1
          minimum: 0
        x0:
          type: number
          nullable: false
          example: 2.43
        y0:
          type: number
          nullable: false
          example: 4.55
        x1:
          type: number
          nullable: false
          example: 4.56
        y1:
          type: number
          nullable: false
          example: 6.32
    Annotation:
      type: object
      additionalProperties: true
      nullable: true
      required:
        - id
        - rectangle
        - rectangles
        - pageIndex
        - raw
        - confidence
        - classificationConfidence
        - textExtractionConfidence
        - isVerified
        - isClientVerified
        - isAutoVerified
        - contentType
      properties:
        id:
          type: integer
          minimum: 1
        rectangle:
          $ref: '#/components/schemas/Rectangle'
          nullable: true
        rectangles:
          type: array
          items:
            $ref: '#/components/schemas/Rectangle'
          nullable: true
        pageIndex:
          type: integer
          nullable: true
          example: 0
          minimum: 0
        raw:
          type: string
          nullable: true
        confidence:
          type: number
          nullable: true
          example: 0.86
          description: The overall confidence that the model's prediction is correct
        classificationConfidence:
          type: number
          nullable: true
          example: 0.95
          description: The model's confidence that the text has been classified correctly
        textExtractionConfidence:
          type: number
          nullable: true
          example: 0.9
          description: >-
            If the document was submitted as an image, this is the confidence
            that the text in the image has been correctly read by the model.
        isVerified:
          type: boolean
        isClientVerified:
          type: boolean
        isAutoVerified:
          type: boolean
        dataPoint:
          type: string
        contentType:
          type: string
  responses:
    400Error:
      description: >-
        Bad request. If it is a validation error will contain a list of each
        invalid field
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RequestError'
      x-ms-error-response: true
    401Error:
      description: Authorisation error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RequestError'
      x-ms-error-response: true
    403Error:
      description: Forbidden error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RequestError'
      x-ms-error-response: true
    DefaultError:
      description: UnexpectedError
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RequestError'
      x-ms-error-response: true
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      description: >-
        Basic authentication using an API key, e.g. `{Authorization: Bearer
        75z0bb4fbdf97b7e4111ff6c0015471094155f91}`.

        You can find your API key within the Settings page of the [Affinda web
        app](https://app.affinda.com/). You can obtain an API key by [signing up
        for a free trial](https://app.affinda.com/auth/register).

````