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

# Submit a job application

> Submits a candidate application for a job posting. The full URL (including the authentication token) is provided by the `apply_url` field in the job feed — do not build this URL manually.

A HEAD request can be used to verify the availability and status of the endpoint without submitting any data.

You can use the [validation form](https://jobaffinity.fr/apply/api/#validation-form) to check your data before submitting.



## OpenAPI

````yaml /api-reference/openapi.json post /apply/{token}
openapi: 3.0.3
info:
  title: JobAffinity REST API
  version: '1.12'
  description: >
    JobAffinity REST API for managing jobs, candidates, applications, and
    recruitment processes.


    ## Authentication

    All endpoints require HTTP Basic Authentication.


    ## Versioning

    Current version: 1.12


    See `/restapi/changelog` for version history and changes.
  contact:
    name: JobAffinity API Support
servers:
  - url: https://jobaffinity.fr/restapi/v1
    description: REST API v1
  - url: https://jobaffinity.fr/restapi
    description: REST API root (for changelog)
security:
  - basicAuth: []
tags:
  - name: API Info
    description: API metadata and changelog
  - name: Jobs
    description: Job listings and details
  - name: Candidates
    description: Candidate information
  - name: Applications
    description: Job applications
  - name: Processes
    description: Recruitment processes and steps
  - name: Notes
    description: Candidate notes
  - name: Questionnaires
    description: Questionnaire answers
  - name: Webhooks
    description: Webhook tasks
  - name: Job Application Submission
    description: >-
      Submit candidate applications to a job posting via the apply URL provided
      in the job feed. The authentication token is embedded in the URL — no
      additional credentials are required.
paths:
  /apply/{token}:
    servers:
      - url: https://jobaffinity.fr
        description: JobAffinity apply endpoint
    post:
      tags:
        - Job Application Submission
      summary: Submit a job application
      description: >-
        Submits a candidate application for a job posting. The full URL
        (including the authentication token) is provided by the `apply_url`
        field in the job feed — do not build this URL manually.


        A HEAD request can be used to verify the availability and status of the
        endpoint without submitting any data.


        You can use the [validation
        form](https://jobaffinity.fr/apply/api/#validation-form) to check your
        data before submitting.
      operationId: submitApplication
      parameters:
        - name: token
          in: path
          required: true
          description: >-
            Authentication token embedded in the apply URL provided by the job
            feed
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApplicationSubmissionInput'
      responses:
        '200':
          description: Application submitted successfully
        '400':
          description: Invalid request body or missing required fields
        '404':
          description: Apply URL not found or token invalid
      security: []
components:
  schemas:
    ApplicationSubmissionInput:
      type: object
      description: >-
        Candidate application payload for the job apply API (version 1.2). Send
        as a JSON body via POST to the `apply_url` provided in the job feed.
      required:
        - version
        - first_name
        - last_name
        - email
        - country
      properties:
        version:
          type: string
          description: Schema version. Must be `"1"` or any `"1.x"` value.
          pattern: ^1(\.\d+)?$
          example: '1.2'
        first_name:
          type: string
          description: Candidate's first name.
          maxLength: 50
          example: John
        last_name:
          type: string
          description: Candidate's last name.
          maxLength: 50
          example: Doe
        title:
          type: string
          description: Candidate's title. New in version 1.1.
          enum:
            - UNKNOWN
            - MR
            - MS
            - MRS
            - MISS
          example: MR
        email:
          type: string
          description: Candidate's email address.
          maxLength: 100
          format: email
          example: john@doe.site
        url_linkedin:
          type: string
          description: URL of the candidate's LinkedIn profile page. New in version 1.2.
          maxLength: 255
          format: uri
          example: https://www.linkedin.com/in/username/
        office_phone:
          type: string
          description: Candidate's office phone number.
          maxLength: 30
          example: +33 1 55-55-55-55
        mobile_phone:
          type: string
          description: Candidate's mobile phone number.
          maxLength: 30
          example: +33 6 55-55-55-55
        home_phone:
          type: string
          description: Candidate's home phone number.
          maxLength: 30
          example: +33 9 55-55-55-55
        address:
          type: string
          description: Candidate's street address.
          maxLength: 150
          example: 1 rue Champs Bon
        zip_code:
          type: string
          description: Candidate's postal code.
          maxLength: 15
          example: '75001'
        town:
          type: string
          description: Town where the candidate lives.
          maxLength: 30
          example: Paris
        country:
          type: string
          description: >-
            Country where the candidate lives. Must be an ISO 3166-1 alpha-2
            code.
          maxLength: 2
          example: FR
        availability:
          type: string
          description: >-
            When the candidate is available for a new position. Use `"date"` to
            specify an exact date via `availability_date`.
          enum:
            - now
            - 15d
            - 1m
            - 2m
            - 3m
            - '>3m'
            - ope
            - na
            - date
          example: now
        availability_date:
          type: string
          description: >-
            Specific availability date. Only used when `availability` is
            `"date"`. Must be a future ISO 8601 date.
          format: date
          example: '2030-01-10'
        cv:
          allOf:
            - $ref: '#/components/schemas/DocumentInput'
          description: >-
            CV document of the candidate. Required if `cv_required` is `true`
            for this job in the job feed.
        cover:
          allOf:
            - $ref: '#/components/schemas/DocumentInput'
          description: >-
            Cover letter document of the candidate. Required if `cover_required`
            is `true` for this job in the job feed. Can also be used to provide
            any raw candidate information such as assessments.
      example:
        version: '1.2'
        first_name: John
        last_name: Doe
        title: MR
        email: john@doe.email
        mobile_phone: +33 6 55-55-55-55
        address: 1 rue Champs Bon
        zip_code: '75001'
        town: Paris
        country: FR
        cv:
          name: cv.pdf
          mime_type: application/pdf
          content: |
            RG9jdW1lbnQgY29udGVudA==
    DocumentInput:
      type: object
      description: A file document encoded as Base64
      properties:
        name:
          type: string
          description: File name
          maxLength: 255
          example: cv.pdf
        mime_type:
          type: string
          description: Media type of the file (MIME type)
          maxLength: 128
          example: application/pdf
        content:
          type: string
          description: 'Base64-encoded content of the file. Maximum size: 100 MB.'
          example: |
            RG9jdW1lbnQgY29udGVudA==
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: HTTP Basic Authentication with API credentials

````