---
title: "Apply to job"
method: POST
path: "/v1/jobs/{job_id}/apply"
tags: ["Moderated Actions"]
---

# Apply to job

`POST /v1/jobs/{job_id}/apply`

## Request

- Base URL: `https://loppee.com`
- URL: `https://loppee.com/v1/jobs/{job_id}/apply`
- Auth: HTTP bearer

Apply to an active, non-expired job as a signed-in consumer. The seeker is never charged. Resumes enter private quarantine and are unavailable to employers until a clean scan completes; later access uses a separate, scoped short-lived-URL endpoint.

## Path parameters

- `job_id` string, required

## Request body

- JobApplicationRequest
  - `cover_note` string
  - `resume` JobResumeUpload, required
    - `file_name` string, required
    - `content_type` 'application/pdf' | 'application/msword' | 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', required
    - `size_bytes` number, required
    - `data_base64` string, required

## Response `200`

JobApplicationResponse

- JobApplicationResponse
  - `status` string, required
  - `application` JobApplication, required
    - `id` string, required
    - `job_id` string, required
    - `applicant_account_id` string, required
    - `applicant_name` string, required
    - `applicant_email` string, required
    - `cover_note` string, required
    - `submitted_via` 'human' | 'agent', required
    - `status` 'submitted' | 'viewed' | 'shortlisted' | 'rejected' | 'hired' | 'withdrawn', required
    - `resume` object, required
      - `file_name` string, required
      - `content_type` string, required
      - `size_bytes` number, required
      - `has_resume` boolean, required
      - `scan_status` 'unscanned' | 'pending' | 'clean' | 'infected' | 'error' | 'expired' | 'removed', required
      - `latest_scan_status` 'unscanned' | 'pending' | 'clean' | 'infected' | 'error' | 'expired' | 'removed', required
      - `retry_required` boolean, required
      - `replacement_pending` boolean, required
      - `replacement_retry_available` boolean, required
      - `quarantine_notice` string, nullable, required
    - `job` object, nullable, required
      - `id` string, required
      - `title` string, required
      - `status` string, required
      - `city` string, required
      - `state` string, required
      - `business_id` string, required
    - `employer` object, nullable, required
      - `business_id` string, required
      - `display_name` string, required
      - `category` string, required
      - `city` string, required
      - `state` string, required
    - `created_at` string, nullable, required
    - `updated_at` string, nullable, required
    - `viewed_at` string, nullable, required
    - `withdrawn_at` string, nullable, required
    - `status_updated_at` string, nullable, required
    - `resume_url` string, nullable
    - `resume_url_expires_in_seconds` number, nullable
  - `free_to_apply` boolean
  - `billing` object
    - `seeker_charge_cents` unknown, required
    - `stripe_checkout_created` unknown, required
  - `retention_note` string
  - `already_withdrawn` boolean

## Other responses

- `400`: ErrorResponse
- `401`: ErrorResponse
- `403`: ErrorResponse
- `429`: RateLimitError
- `default`: ErrorResponse

---

[API](https://skmtc.dev/loppee/apis/loppee-business-registry-api-for-external-agents.md) · [All operations](https://skmtc.dev/loppee/apis/loppee-business-registry-api-for-external-agents/llms.txt) · [OpenAPI document](https://skmtc.dev/loppee/apis/loppee-business-registry-api-for-external-agents/revisions/37285f7cddcd?raw)
