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

# Retrieve verification or submission email evidence

> Auto Apply is an invite-only beta.

BLOCKS while polling the mailbox for the verification email belonging
to the given application, using the application's apply host and
provider as context to pick the right email. Some providers send a
one-time code, others a confirmation link — the response's type says
which was found: type code carries the code; for type link Jobo
clicks the confirmation link server-side (https-only, SSRF-guarded)
and returns it with link_visited / link_http_status. Explicit type
confirmation instead looks for a positive post-submit acknowledgement
and never visits a link. Pass type to constrain what is accepted
(default any, which remains code-or-link only). Status timeout means no
matching email arrived within wait_seconds — an expected outcome, not
an error.

Optional. This endpoint only saves you reading the inbox yourself —
an integration that resolves the code or link its own way submits it
through the same answers call and never needs a connected mailbox.
Type confirmation is intended for controlled post-submit certification.

Call this the moment an application pauses on a one_time_code step:
the step's answer window is 60 seconds, so keep wait_seconds at the
default 45 to leave time to submit the code through the answers
endpoint. Keep your HTTP client timeout above wait_seconds.

Extracted codes and links are validated server-side and must appear
verbatim in the selected email. Submission acknowledgements must be
time-correlated and match the application provider or a meaningful
apply-host label. Email contents never leave the extraction — only the
evidence type, code or link when applicable, sender, subject, and
received timestamp are returned.




## OpenAPI

````yaml /openapi.yaml post /api/auto-apply/mailboxes/{id}/verification
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 callback-driven job applications.

    Auto Apply is an invite-only beta; accounts without access receive 403

    auto_apply_not_enabled from create.
  version: '2026-08-12'
  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
    description: Search and retrieve job listings
  - name: Feed
    description: Bulk job feeds and expiration tracking
  - name: Companies
    description: Company profiles and company-scoped job listings
  - name: Auto Apply
    description: >-
      Coming soon: profileless applications answered through signed, typed HTTPS
      callbacks
  - name: Locations
    description: Geocoding and location services
paths:
  /api/auto-apply/mailboxes/{id}/verification:
    post:
      tags:
        - Auto Apply
      summary: Retrieve verification or submission email evidence
      description: |
        Auto Apply is an invite-only beta.

        BLOCKS while polling the mailbox for the verification email belonging
        to the given application, using the application's apply host and
        provider as context to pick the right email. Some providers send a
        one-time code, others a confirmation link — the response's type says
        which was found: type code carries the code; for type link Jobo
        clicks the confirmation link server-side (https-only, SSRF-guarded)
        and returns it with link_visited / link_http_status. Explicit type
        confirmation instead looks for a positive post-submit acknowledgement
        and never visits a link. Pass type to constrain what is accepted
        (default any, which remains code-or-link only). Status timeout means no
        matching email arrived within wait_seconds — an expected outcome, not
        an error.

        Optional. This endpoint only saves you reading the inbox yourself —
        an integration that resolves the code or link its own way submits it
        through the same answers call and never needs a connected mailbox.
        Type confirmation is intended for controlled post-submit certification.

        Call this the moment an application pauses on a one_time_code step:
        the step's answer window is 60 seconds, so keep wait_seconds at the
        default 45 to leave time to submit the code through the answers
        endpoint. Keep your HTTP client timeout above wait_seconds.

        Extracted codes and links are validated server-side and must appear
        verbatim in the selected email. Submission acknowledgements must be
        time-correlated and match the application provider or a meaningful
        apply-host label. Email contents never leave the extraction — only the
        evidence type, code or link when applicable, sender, subject, and
        received timestamp are returned.
      operationId: retrieveAutoApplyMailboxVerification
      parameters:
        - name: id
          in: path
          required: true
          description: Mailbox ID.
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MailboxVerificationRequest'
      responses:
        '200':
          description: 'The poll finished: status found with the code, or status timeout.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MailboxVerificationResult'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Mailbox or application not found, or owned by another account.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '409':
          description: >-
            The mailbox is not connected (mailbox_not_connected) or its
            credentials were rejected (mailbox_auth_failed) — reconnect the
            mailbox.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '422':
          description: application_id missing or invalid.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: cURL
          source: >
            curl -X POST
            "https://connect.jobo.world/api/auto-apply/mailboxes/8b6c2f1a-1c9e-4b7f-9d2e-5a1b3c4d5e6f/verification"
            \
              -H "X-Api-Key: $JOBO_API_KEY" \
              -H "Content-Type: application/json" \
              --max-time 120 \
              -d '{"application_id": "6f9227f6-b704-4b58-a553-79773a041933", "wait_seconds": 45}'
components:
  schemas:
    MailboxVerificationRequest:
      type: object
      required:
        - application_id
      properties:
        application_id:
          type: string
          format: uuid
          description: >-
            The application whose verification email should be found. Its apply
            host and provider give the extraction its context.
        wait_seconds:
          type: integer
          nullable: true
          default: 45
          minimum: 5
          maximum: 75
          description: >-
            How long to keep polling before answering timeout. Values are
            clamped server-side.
        type:
          type: string
          enum:
            - code
            - link
            - confirmation
            - any
          nullable: true
          default: any
          description: >-
            What the verification email is expected to carry. code = only a
            one-time code satisfies the request; link = only a confirmation link
            (clicked server-side); confirmation = only a positive post-submit
            acknowledgement, with no link visit; any = code or link only.
    MailboxVerificationResult:
      type: object
      required:
        - api_version
        - status
        - waited_seconds
      properties:
        api_version:
          $ref: '#/components/schemas/AutoApplyApiVersion'
        status:
          type: string
          enum:
            - found
            - timeout
          description: >-
            timeout means no verification email arrived — an expected outcome,
            not an error.
        type:
          type: string
          enum:
            - code
            - link
            - confirmation
          nullable: true
          description: What email evidence was found. Only present when status is found.
        code:
          type: string
          nullable: true
          description: The verification code. Only present when type is code.
        link:
          type: string
          format: uri
          nullable: true
          description: >-
            The confirmation link found in the email. Only present when type is
            link.
        link_visited:
          type: boolean
          nullable: true
          description: >-
            Whether Jobo successfully clicked the confirmation link server-side.
            When false, click the returned link yourself.
        link_http_status:
          type: integer
          nullable: true
          description: Final HTTP status of the server-side click, when one was made.
        email_from:
          type: string
          nullable: true
        email_subject:
          type: string
          nullable: true
        email_received_at:
          type: string
          format: date-time
          nullable: true
        waited_seconds:
          type: integer
      example:
        api_version: '2026-08-12'
        status: found
        type: code
        code: AB12CD34
        email_from: no-reply@greenhouse.io
        email_subject: Your verification code
        email_received_at: '2026-08-15T09:30:12Z'
        waited_seconds: 9
    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'
    AutoApplyApiVersion:
      type: string
      description: Version of the profileless Auto Apply API contract.
      enum:
        - '2026-08-12'
      example: '2026-08-12'
    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
  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

````