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

# Create an application

> COMING SOON: This operation is a contract preview and does not currently
accept beta or production traffic.

Validate and queue a profileless job application. Supply exactly one of
job_id or apply_url. Jobo returns immediately and sends discovered form
fields to the effective callback URL for your integration to answer.

callback_url is an optional per-application override. When omitted, the
account default configured in the Auto Apply portal is copied onto the
application. The account must have a webhook secret, and create fails
when neither callback URL source is available. The secret cannot be
supplied or replaced in this request.

Idempotency-Key is required. Reusing a key with the same canonical body
returns the original application for 24 hours; reusing it with a
different body returns a conflict.




## OpenAPI

````yaml /openapi.yaml post /api/auto-apply/applications
openapi: 3.0.3
info:
  title: Jobo Enterprise API
  description: >
    The Jobo Enterprise API provides programmatic access to job listings,
    intelligent search,

    real-time feeds, geocoding services, and a contract preview for
    callback-driven

    job applications. Auto Apply is coming soon and is not available in beta or
    production.
  version: '2026-07-21'
  contact:
    name: Jobo Support
    url: https://jobo.world
    email: support@jobo.world
  license:
    name: Proprietary — see terms of service
    url: https://jobo.world/terms
  termsOfService: https://jobo.world/terms
servers:
  - url: https://connect.jobo.world
    description: Production
security:
  - ApiKeyAuth: []
tags:
  - name: Jobs Search
    description: Search and retrieve job listings
  - name: Jobs Feed
    description: Bulk job feeds and expiration tracking
  - name: Companies
    description: Company profiles and company-scoped job listings
  - name: Auto Apply Applications
    description: >-
      Coming soon: profileless applications answered through signed, typed HTTPS
      callbacks
  - name: Locations
    description: Geocoding and location services
paths:
  /api/auto-apply/applications:
    post:
      tags:
        - Auto Apply Applications
      summary: Create an application
      description: |
        COMING SOON: This operation is a contract preview and does not currently
        accept beta or production traffic.

        Validate and queue a profileless job application. Supply exactly one of
        job_id or apply_url. Jobo returns immediately and sends discovered form
        fields to the effective callback URL for your integration to answer.

        callback_url is an optional per-application override. When omitted, the
        account default configured in the Auto Apply portal is copied onto the
        application. The account must have a webhook secret, and create fails
        when neither callback URL source is available. The secret cannot be
        supplied or replaced in this request.

        Idempotency-Key is required. Reusing a key with the same canonical body
        returns the original application for 24 hours; reusing it with a
        different body returns a conflict.
      operationId: createAutoApplyApplication
      parameters:
        - name: Idempotency-Key
          in: header
          required: true
          description: Unique key for this create request. Retained for 24 hours.
          schema:
            type: string
            minLength: 1
            maxLength: 200
          example: application-01J2Q7Y4V9T3
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAutoApplyApplicationRequest'
            examples:
              job_id:
                summary: Apply to a Jobo job
                value:
                  job_id: 2c1ac0f5-8772-43d2-b5a8-26b44a3fa171
              apply_url_override:
                summary: Use an apply URL and callback override
                value:
                  apply_url: https://boards.greenhouse.io/acme/jobs/4567890
                  callback_url: https://integrator.example.com/webhooks/jobo
              sandbox:
                summary: Run a deterministic sandbox scenario
                value:
                  apply_url: >-
                    https://sandbox.jobo.world/ats/apply/education-and-work-history
                  sandbox: true
      responses:
        '202':
          description: Application durably accepted in queued state.
          headers:
            Location:
              description: Relative URL of the accepted application.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AutoApplyApplication'
        '400':
          description: >-
            Invalid target, callback URL, cursor-independent validation, or
            Idempotency-Key.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: job_id is invalid or unknown.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '409':
          description: >-
            Webhook secret missing, ambiguous provider match, or Idempotency-Key
            conflict.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '422':
          description: >-
            Job has no apply URL, or the apply URL is not supported by the
            active provider catalog.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '503':
          description: >-
            Auto Apply creation is deployment-gated before launch. The current
            response uses problem code auto_apply_coming_soon.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
              example:
                title: auto_apply_coming_soon
                status: 503
                detail: Auto Apply application creation is coming soon.
                code: auto_apply_coming_soon
                api_version: '2026-07-21'
      callbacks:
        fieldsRequested:
          '{$request.body#/callback_url}':
            post:
              operationId: receiveAutoApplyFieldsRequested
              summary: Answer discovered application fields
              description: |
                Jobo posts to the effective callback URL. The expression above
                represents callback_url when supplied; otherwise Jobo uses the
                account default captured when the application was created.

                Verify the HMAC signature over the raw body before parsing it.
                Return any 2xx response with a proceed or cancel command before
                the absolute callback deadline.
              security: []
              parameters:
                - name: X-Jobo-Webhook-Id
                  in: header
                  required: true
                  schema:
                    type: string
                  description: Stable event ID. Transport retries reuse it.
                - name: X-Jobo-Webhook-Timestamp
                  in: header
                  required: true
                  schema:
                    type: integer
                    format: int64
                  description: Unix timestamp used in the signature input.
                - name: X-Jobo-Webhook-Signature
                  in: header
                  required: true
                  schema:
                    type: string
                  description: One or more comma-separated v1 HMAC-SHA256 signatures.
                - name: X-Jobo-Delivery-Attempt
                  in: header
                  required: true
                  schema:
                    type: integer
                    minimum: 1
                  description: One-based transport delivery attempt.
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      $ref: '#/components/schemas/AutoApplyFieldsRequestedEvent'
              responses:
                '400':
                  description: Callback receiver rejected an invalid signature or event.
                2XX:
                  description: |
                    Callback accepted. Return an AutoApplyAnswerCommand JSON
                    body. A non-2xx response is treated as callback rejection.
                  content:
                    application/json:
                      schema:
                        $ref: '#/components/schemas/AutoApplyAnswerCommand'
              method: post
              type: path
            path: '{$request.body#/callback_url}'
        terminalEvent:
          '{$request.body#/callback_url}':
            post:
              operationId: receiveAutoApplyTerminalEvent
              summary: Receive the terminal application event
              description: |
                Exactly one terminal event type is selected for an application:
                application.submitted, application.failed, or
                application.canceled. Delivery is retried until accepted or the
                delivery schedule is exhausted.
              security: []
              parameters:
                - name: X-Jobo-Webhook-Id
                  in: header
                  required: true
                  schema:
                    type: string
                - name: X-Jobo-Webhook-Timestamp
                  in: header
                  required: true
                  schema:
                    type: integer
                    format: int64
                - name: X-Jobo-Webhook-Signature
                  in: header
                  required: true
                  schema:
                    type: string
                - name: X-Jobo-Delivery-Attempt
                  in: header
                  required: true
                  schema:
                    type: integer
                    minimum: 1
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      $ref: '#/components/schemas/AutoApplyTerminalEvent'
              responses:
                '400':
                  description: Callback receiver rejected an invalid signature or event.
                2XX:
                  description: Event accepted. The response body is ignored.
              method: post
              type: path
            path: '{$request.body#/callback_url}'
components:
  schemas:
    CreateAutoApplyApplicationRequest:
      type: object
      description: |
        Profileless application target and callback selection. Supply exactly
        one of job_id and apply_url. callback_url is optional when the account
        has a default callback; the account webhook secret is configured
        separately and can never be supplied here.
      properties:
        job_id:
          type: string
          format: uuid
          description: Jobo job ID whose current apply URL should be used.
          example: 2c1ac0f5-8772-43d2-b5a8-26b44a3fa171
        apply_url:
          type: string
          format: uri
          description: >-
            Public HTTPS application URL handled by an active Auto Apply
            provider.
          example: https://boards.greenhouse.io/acme/jobs/4567890
        callback_url:
          type: string
          format: uri
          nullable: true
          description: |
            Optional public HTTPS callback override for this application. When
            omitted or null, the account default is copied onto the application.
          example: https://integrator.example.com/webhooks/jobo
        sandbox:
          type: boolean
          default: false
          description: Use the deterministic sandbox pipeline and its separate quota.
      oneOf:
        - required:
            - job_id
        - required:
            - apply_url
    AutoApplyApplication:
      allOf:
        - $ref: '#/components/schemas/AutoApplyApplicationSummary'
        - type: object
          required:
            - callback_url
            - callback_source
            - provider_version
            - matcher_revision
            - catalog_revision
            - settings_revision
            - failure
            - canceled_by
            - steps
            - events
          properties:
            callback_url:
              type: string
              format: uri
              description: >-
                Effective callback URL captured when the application was
                created.
            callback_source:
              type: string
              enum:
                - account_default
                - application_override
              description: Where the effective callback URL came from.
            provider_version:
              type: string
              description: Provider implementation version captured at intake.
            matcher_revision:
              type: integer
              format: int64
            catalog_revision:
              type: integer
              format: int64
            settings_revision:
              type: integer
              format: int64
            failure:
              type: object
              allOf:
                - $ref: '#/components/schemas/AutoApplyFailure'
              nullable: true
            canceled_by:
              type: string
              nullable: true
              description: Actor that completed cancellation, when applicable.
            steps:
              type: array
              items:
                $ref: '#/components/schemas/AutoApplyApplicationStep'
            events:
              type: array
              description: Terminal webhook deliveries and their attempts.
              items:
                $ref: '#/components/schemas/AutoApplyEventDelivery'
    ProblemDetails:
      type: object
      description: Problem Details object returned for error responses.
      properties:
        type:
          type: string
          nullable: true
        title:
          type: string
          nullable: true
        status:
          type: integer
          nullable: true
        detail:
          type: string
          nullable: true
        instance:
          type: string
          nullable: true
        code:
          type: string
          nullable: true
          description: Stable machine-readable code for Auto Apply domain errors.
        api_version:
          $ref: '#/components/schemas/AutoApplyApiVersion'
    AutoApplyFieldsRequestedEvent:
      type: object
      required:
        - id
        - type
        - api_version
        - attempt
        - created_at
        - application
        - step
      properties:
        id:
          type: string
          description: Stable event ID reused by transport retries.
          example: evt_a6b0381d7d9f452a928641f216a0b88f
        type:
          type: string
          enum:
            - application.fields_requested
        api_version:
          $ref: '#/components/schemas/AutoApplyApiVersion'
        attempt:
          type: integer
          minimum: 1
          description: >-
            Logical event attempt. Use X-Jobo-Delivery-Attempt for transport
            retries.
        created_at:
          type: string
          format: date-time
        application:
          type: object
          required:
            - id
            - status
          properties:
            id:
              type: string
              format: uuid
            status:
              type: string
              enum:
                - awaiting_answers
        step:
          $ref: '#/components/schemas/AutoApplyFieldsRequestedStep'
      example:
        id: evt_a6b0381d7d9f452a928641f216a0b88f
        type: application.fields_requested
        api_version: '2026-07-21'
        attempt: 1
        created_at: '2026-07-21T09:30:00Z'
        application:
          id: 6f9227f6-b704-4b58-a553-79773a041933
          status: awaiting_answers
        step:
          id: d55b4504-8702-4078-b168-f8e9518f11fe
          sequence: 2
          correction_round: 0
          fields:
            - field_id: grp_education
              type: repeating_group
              group_type: education
              label: Education
              required: true
              requires_answer: true
              current_value: null
              options: []
              constraints: {}
              category: education
              semantic_key: education
              sensitive: false
              format: null
              min_items: 1
              max_items: 5
              item_fields:
                - key: school
                  type: typeahead
                  label: School
                  required: true
                  options: []
                  constraints: {}
                - key: degree
                  type: select
                  label: Degree
                  required: true
                  options:
                    - value: BS
                      label: Bachelor of Science
                  constraints: {}
            - field_id: grp_work_experience
              type: repeating_group
              group_type: work_experience
              label: Work experience
              required: false
              requires_answer: true
              current_value: null
              options: []
              constraints: {}
              category: work
              semantic_key: work_experience
              sensitive: false
              format: null
              min_items: 0
              max_items: 10
              item_fields:
                - key: company
                  type: text
                  label: Company
                  required: true
                  options: []
                  constraints: {}
                - key: title
                  type: text
                  label: Title
                  required: true
                  options: []
                  constraints: {}
                - key: is_current
                  type: checkbox
                  label: Current role
                  required: true
                  options: []
                  constraints: {}
                - key: end_date
                  type: partial_date
                  label: End date
                  required: false
                  options: []
                  constraints:
                    minimum_precision: month
          command_errors: []
    AutoApplyAnswerCommand:
      description: >-
        Immediate command returned from an application.fields_requested
        callback.
      oneOf:
        - $ref: '#/components/schemas/AutoApplyProceedCommand'
        - $ref: '#/components/schemas/AutoApplyCancelCommand'
      discriminator:
        propertyName: action
        mapping:
          proceed:
            $ref: '#/components/schemas/AutoApplyProceedCommand'
          cancel:
            $ref: '#/components/schemas/AutoApplyCancelCommand'
    AutoApplyTerminalEvent:
      type: object
      required:
        - id
        - type
        - api_version
        - attempt
        - created_at
        - application
      properties:
        id:
          type: string
          description: Stable event ID reused by delivery retries.
        type:
          type: string
          enum:
            - application.submitted
            - application.failed
            - application.canceled
        api_version:
          $ref: '#/components/schemas/AutoApplyApiVersion'
        attempt:
          type: integer
          minimum: 1
        created_at:
          type: string
          format: date-time
        application:
          type: object
          required:
            - id
            - status
          properties:
            id:
              type: string
              format: uuid
            status:
              type: string
              enum:
                - submitted
                - failed
                - canceled
    AutoApplyApplicationSummary:
      type: object
      required:
        - api_version
        - id
        - job_id
        - apply_url
        - provider_id
        - provider_name
        - status
        - cancel_requested
        - status_updated_at
        - queued_at
        - started_at
        - submitted_at
        - failed_at
        - canceled_at
        - completed_at
        - created_at
      properties:
        api_version:
          $ref: '#/components/schemas/AutoApplyApiVersion'
        id:
          type: string
          format: uuid
          description: Stable application ID.
        job_id:
          type: string
          nullable: true
          description: Supplied Jobo job ID, or null when apply_url was supplied directly.
        apply_url:
          type: string
          format: uri
          description: Resolved application URL.
        provider_id:
          type: string
          description: Stable provider identifier selected at intake.
        provider_name:
          type: string
          description: Provider display name captured at intake.
        status:
          $ref: '#/components/schemas/AutoApplyApplicationStatus'
        cancel_requested:
          type: boolean
          description: Whether cancellation has been requested.
        status_updated_at:
          type: string
          format: date-time
        queued_at:
          type: string
          format: date-time
        started_at:
          type: string
          format: date-time
          nullable: true
        submitted_at:
          type: string
          format: date-time
          nullable: true
        failed_at:
          type: string
          format: date-time
          nullable: true
        canceled_at:
          type: string
          format: date-time
          nullable: true
        completed_at:
          type: string
          format: date-time
          nullable: true
          description: submitted_at, failed_at, or canceled_at, whichever is set.
        created_at:
          type: string
          format: date-time
    AutoApplyFailure:
      type: object
      required:
        - code
        - message
        - retryable
      properties:
        code:
          type: string
          description: Stable machine-readable failure code.
          example: submission_unconfirmed
        message:
          type: string
          description: Safe human-readable failure detail.
        retryable:
          type: boolean
          description: Whether retrying can be considered safe.
    AutoApplyApplicationStep:
      type: object
      required:
        - id
        - sequence
        - status
        - correction_round
        - fields
        - answers
        - command_errors
        - created_at
        - completed_at
        - field_count
        - answer_count
      properties:
        id:
          type: string
          format: uuid
        sequence:
          type: integer
          minimum: 1
        status:
          type: string
          description: Durable processing state for this form step.
          example: answered
        correction_round:
          type: integer
          minimum: 0
        fields:
          type: array
          items:
            $ref: '#/components/schemas/AutoApplyField'
        answers:
          type: array
          description: Accepted answers for this step. Never reused by another application.
          items:
            $ref: '#/components/schemas/AutoApplyAnswer'
        command_errors:
          type: array
          description: Validation errors returned in the next correction callback.
          items:
            $ref: '#/components/schemas/AutoApplyCommandError'
        created_at:
          type: string
          format: date-time
        completed_at:
          type: string
          format: date-time
          nullable: true
        field_count:
          type: integer
          minimum: 0
        answer_count:
          type: integer
          minimum: 0
    AutoApplyEventDelivery:
      type: object
      required:
        - id
        - type
        - status
        - attempt_count
        - attempts
        - created_at
        - delivered_at
      properties:
        id:
          type: string
          description: Terminal webhook event ID.
        type:
          type: string
          enum:
            - application.submitted
            - application.failed
            - application.canceled
        status:
          type: string
          enum:
            - pending
            - delivering
            - delivered
            - exhausted
        attempt_count:
          type: integer
          minimum: 0
        attempts:
          type: array
          items:
            $ref: '#/components/schemas/AutoApplyEventDeliveryAttempt'
        created_at:
          type: string
          format: date-time
        delivered_at:
          type: string
          format: date-time
          nullable: true
    AutoApplyApiVersion:
      type: string
      description: Version of the profileless Auto Apply API contract.
      enum:
        - '2026-07-21'
      example: '2026-07-21'
    ApiRateLimitError:
      type: object
      description: API-key request-window rejection returned by rate-limit middleware.
      required:
        - error
        - detail
        - group
        - retry_after_seconds
      properties:
        error:
          type: string
          example: Rate limit exceeded
        detail:
          type: string
        group:
          type: string
          example: AutoApply
        retry_after_seconds:
          type: integer
          minimum: 0
          nullable: true
    AutoApplyFieldsRequestedStep:
      type: object
      required:
        - id
        - sequence
        - correction_round
        - fields
        - command_errors
      properties:
        id:
          type: string
          format: uuid
        sequence:
          type: integer
          minimum: 1
        correction_round:
          type: integer
          minimum: 0
        fields:
          type: array
          items:
            $ref: '#/components/schemas/AutoApplyField'
        command_errors:
          type: array
          items:
            $ref: '#/components/schemas/AutoApplyCommandError'
    AutoApplyProceedCommand:
      type: object
      required:
        - action
        - answers
      properties:
        action:
          type: string
          enum:
            - proceed
        answers:
          type: array
          description: |
            Every field with requires_answer true exactly once. Unknown and
            duplicate field IDs are rejected.
          items:
            $ref: '#/components/schemas/AutoApplyAnswer'
    AutoApplyCancelCommand:
      type: object
      required:
        - action
      properties:
        action:
          type: string
          enum:
            - cancel
        answers:
          type: array
          nullable: true
          maxItems: 0
          description: Omit for cancellation; a non-empty array is rejected.
    AutoApplyApplicationStatus:
      type: string
      description: Current durable application state.
      enum:
        - queued
        - running
        - awaiting_answers
        - submitted
        - failed
        - canceled
    AutoApplyField:
      type: object
      required:
        - field_id
        - type
        - group_type
        - label
        - required
        - requires_answer
        - current_value
        - options
        - constraints
        - category
        - semantic_key
        - sensitive
        - format
        - min_items
        - max_items
        - item_fields
      properties:
        field_id:
          type: string
          description: Stable within this callback event; echo it in the answer.
        type:
          $ref: '#/components/schemas/AutoApplyFieldType'
        group_type:
          type: string
          allOf:
            - $ref: '#/components/schemas/AutoApplyGroupType'
          nullable: true
          description: Set only when type is repeating_group.
        label:
          type: string
        required:
          type: boolean
          description: Whether the ATS marks the field required.
        requires_answer:
          type: boolean
          description: Whether the callback must supply this field exactly once.
        current_value:
          description: Current ATS value, or null when empty.
        options:
          type: array
          description: Allowed values for select, radio, multi_select, and related fields.
          items:
            $ref: '#/components/schemas/AutoApplyFieldOption'
        constraints:
          type: object
          additionalProperties: {}
          description: Type-specific limits such as minimum_precision.
        category:
          type: string
          nullable: true
        semantic_key:
          type: string
          nullable: true
          description: Stable semantic hint such as address.country.
        sensitive:
          type: boolean
          description: True for voluntary self-identification and similar sensitive fields.
        format:
          type: string
          nullable: true
        min_items:
          type: integer
          minimum: 0
          nullable: true
          description: Minimum complete items for a repeating group.
        max_items:
          type: integer
          minimum: 0
          maximum: 10
          nullable: true
          description: Provider limit, capped at ten by the platform.
        item_fields:
          type: array
          description: Ordered child-field contract for each repeating-group item.
          items:
            $ref: '#/components/schemas/AutoApplyGroupItemField'
    AutoApplyAnswer:
      type: object
      required:
        - field_id
        - value
      properties:
        field_id:
          type: string
          description: Exact field_id from the fields_requested event.
        value:
          $ref: '#/components/schemas/AutoApplyAnswerValue'
    AutoApplyCommandError:
      type: object
      required:
        - field_id
        - item_index
        - field_key
        - code
        - message
      properties:
        field_id:
          type: string
          nullable: true
        item_index:
          type: integer
          minimum: 0
          nullable: true
          description: Zero-based index for a repeating-group error.
        field_key:
          type: string
          nullable: true
          description: Child key for a repeating-group error.
        code:
          type: string
          description: Stable validation error code.
          example: invalid_option
        message:
          type: string
    AutoApplyEventDeliveryAttempt:
      type: object
      required:
        - attempt
        - at
        - response_status
        - error
      properties:
        attempt:
          type: integer
          minimum: 1
        at:
          type: string
          format: date-time
        response_status:
          type: integer
          minimum: 100
          maximum: 599
          nullable: true
        error:
          type: string
          nullable: true
          description: Null after successful delivery; otherwise a stable result code.
    AutoApplyFieldType:
      type: string
      description: |
        Expected JSON value is determined by this type. repeating_group values
        are ordered arrays whose items follow item_fields.
      enum:
        - text
        - textarea
        - select
        - multi_select
        - radio
        - checkbox
        - number
        - date
        - partial_date
        - typeahead
        - file
        - repeating_group
        - unknown
    AutoApplyGroupType:
      type: string
      description: Semantic kind of a repeating group.
      enum:
        - education
        - work_experience
        - website
        - language
        - skill
        - other
    AutoApplyFieldOption:
      type: object
      required:
        - value
        - label
      properties:
        value:
          type: string
          description: Exact value the answer must use.
        label:
          type: string
          description: Display text shown by the ATS.
    AutoApplyGroupItemField:
      type: object
      required:
        - key
        - type
        - label
        - required
        - options
        - constraints
      properties:
        key:
          type: string
          description: Exact object key to use in each group item.
        type:
          $ref: '#/components/schemas/AutoApplyFieldType'
        label:
          type: string
        required:
          type: boolean
        options:
          type: array
          items:
            $ref: '#/components/schemas/AutoApplyFieldOption'
        constraints:
          type: object
          additionalProperties: {}
    AutoApplyAnswerValue:
      description: |
        Value selected by the corresponding field type. Repeating education and
        work_experience fields use the typed ordered arrays shown here; other
        groups use the same advertised-item contract.
      anyOf:
        - $ref: '#/components/schemas/AutoApplyScalarAnswerValue'
        - $ref: '#/components/schemas/AutoApplyEducationGroupValue'
        - $ref: '#/components/schemas/AutoApplyWorkExperienceGroupValue'
        - $ref: '#/components/schemas/AutoApplyGenericRepeatingGroupValue'
    AutoApplyScalarAnswerValue:
      description: |
        Typed scalar value. text, textarea, select, and radio use strings;
        checkbox uses a boolean; number uses a JSON number; multi_select uses an
        array of option-value strings; date and partial_date use date strings;
        typeahead and file use their structured objects.
      anyOf:
        - type: string
        - type: number
        - type: boolean
        - type: array
          items:
            type: string
        - $ref: '#/components/schemas/AutoApplyTypeaheadValue'
        - $ref: '#/components/schemas/AutoApplyFileValue'
    AutoApplyEducationGroupValue:
      type: array
      maxItems: 10
      description: |
        Ordered education entries. The callback must follow the event's
        item_fields exactly; these common properties illustrate the typed shape.
      items:
        allOf:
          - $ref: '#/components/schemas/AutoApplyRepeatingGroupItem'
          - type: object
            properties:
              school:
                anyOf:
                  - type: string
                  - $ref: '#/components/schemas/AutoApplyTypeaheadValue'
              degree:
                type: string
              field_of_study:
                type: string
              start_date:
                type: string
                pattern: ^\d{4}(?:-(?:0[1-9]|1[0-2])(?:-(?:0[1-9]|[12]\d|3[01]))?)?$
              end_date:
                type: string
                nullable: true
                pattern: ^\d{4}(?:-(?:0[1-9]|1[0-2])(?:-(?:0[1-9]|[12]\d|3[01]))?)?$
              graduation_date:
                type: string
                nullable: true
                pattern: ^\d{4}(?:-(?:0[1-9]|1[0-2])(?:-(?:0[1-9]|[12]\d|3[01]))?)?$
              description:
                type: string
      example:
        - school:
            query: MIT
            selection:
              value: school_123
              label: Massachusetts Institute of Technology
          degree: BS
          field_of_study: Computer Science
          start_date: 2017-09
          graduation_date: 2021-06
    AutoApplyWorkExperienceGroupValue:
      type: array
      maxItems: 10
      description: |
        Ordered work-history entries. The callback must follow the event's
        item_fields exactly; these common properties illustrate the typed shape.
      items:
        allOf:
          - $ref: '#/components/schemas/AutoApplyRepeatingGroupItem'
          - type: object
            properties:
              company:
                anyOf:
                  - type: string
                  - $ref: '#/components/schemas/AutoApplyTypeaheadValue'
              title:
                type: string
              location:
                type: string
              start_date:
                type: string
                pattern: ^\d{4}(?:-(?:0[1-9]|1[0-2])(?:-(?:0[1-9]|[12]\d|3[01]))?)?$
              end_date:
                type: string
                nullable: true
                pattern: ^\d{4}(?:-(?:0[1-9]|1[0-2])(?:-(?:0[1-9]|[12]\d|3[01]))?)?$
              is_current:
                type: boolean
              description:
                type: string
      example:
        - company: Acme
          title: Engineer
          location: Remote
          start_date: 2021-03
          end_date: null
          is_current: true
          description: Built internal systems.
    AutoApplyGenericRepeatingGroupValue:
      type: array
      maxItems: 10
      description: Ordered website, language, skill, or other group entries.
      items:
        $ref: '#/components/schemas/AutoApplyRepeatingGroupItem'
    AutoApplyTypeaheadValue:
      type: object
      required:
        - query
        - selection
      properties:
        query:
          type: string
          description: Text used to search the ATS typeahead.
        selection:
          type: object
          required:
            - value
            - label
          properties:
            value:
              type: string
              description: Exact result value returned by the ATS.
            label:
              type: string
              description: Result display label.
      example:
        query: MIT
        selection:
          value: school_123
          label: Massachusetts Institute of Technology
    AutoApplyFileValue:
      type: object
      required:
        - url
        - filename
      properties:
        url:
          type: string
          format: uri
          description: >-
            Signed public HTTPS URL Jobo can download within the callback
            deadline.
        filename:
          type: string
          minLength: 1
        content_type:
          type: string
          nullable: true
          example: application/pdf
      example:
        url: https://files.example.com/signed/resume.pdf
        filename: resume.pdf
        content_type: application/pdf
    AutoApplyRepeatingGroupItem:
      type: object
      description: |
        One complete repeating-group item. Keys not advertised in item_fields
        are rejected; each value must match the advertised child type.
      additionalProperties:
        $ref: '#/components/schemas/AutoApplyGroupItemValue'
    AutoApplyGroupItemValue:
      description: |
        Typed value for one advertised item field. Null is used only when the
        advertised item contract permits it.
      anyOf:
        - $ref: '#/components/schemas/AutoApplyScalarAnswerValue'
        - type: string
          nullable: true
  responses:
    Unauthorized:
      description: Missing or invalid API key
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
    TooManyRequests:
      description: Rate limit exceeded.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
            minimum: 0
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
        application/json:
          schema:
            $ref: '#/components/schemas/ApiRateLimitError'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-Api-Key
      description: API key provided by Jobo

````