---
title: "Create a state transition for an application"
method: POST
path: "/api/v1/job/applications/{application_id}/application_states"
tags: ["Job::ApplicationStates"]
---

# Create a state transition for an application

`POST /api/v1/job/applications/{application_id}/application_states`

## Request

- Base URL: `https://api.flexiple.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.flexiple.com/api/v1/job/applications/{application_id}/application_states`
- Auth: HTTP bearer

## Request body

- object
  - `state` 'screening' | 'interview' | 'hired' | 'rejected', required
  - `interview_round_id` integer
  - `rejection_reason_bucket` 'unfit' | 'not_interested_this_job' | 'broad_no'
  - `reason_for_rejection` 'Resume not fit' | 'Technically not fit' | 'Culturally not fit' | 'Communication skills' | 'Experience level mismatch' | 'Notice period mismatch' | 'Timezone / Location mismatch' | 'Out of Budget' | 'No Show / Drop off' | 'Candidate withdrew' | 'Other'
  - `rejection_details` string
  - `reason_for_no_interest` 'not_interested_in_this_job' | 'not_looking_for_job_change'
  - `confirm_interest` boolean
  - `acknowledge_questions` boolean

## Response `200`

Application state updated

- object
  - `data` JobApplicationWithClientOnly, required
    - `id` integer, required
    - `job_post_id` integer, required
    - `source` 'job_application' | 'shortlist' | 'auto_recommendation' | 'public_network' | 'sourcing_agent', required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `talent_profile_id` string, required
    - `state` 'screening' | 'interview' | 'hired' | 'rejected', required
    - `human_state` string, required
    - `state_description` string
    - `is_interested` boolean, nullable, required
    - `stage` 'review' | 'screening' | 'interview' | 'hired' | 'rejected' | 'null', nullable, required
    - `rejection_origin` 'auto_score' | 'candidate_declined' | 'manual' | 'fit_rubric' | 'agent_dismissed' | 'null', nullable, required
    - `rejected_at` string
    - `interview_rounds` JobApplicationInterviewRound[], required
      - `id` integer, required
      - `job_application_id` integer, nullable, required
      - `job_post_interview_round_id` integer, nullable, required
      - `scheduled_at` string, date-time, nullable, required
      - `meeting_url` string, nullable, required
      - `interviewers` string[], nullable, required
      - `status` 'to_be_scheduled' | 'scheduled' | 'awaiting_feedback' | 'completed' | 'rejected' | 'on_hold' | 'null', nullable, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
      - `feedback` string, nullable
      - `job_post_interview_round` JobPostInterviewRound, required
        - `id` integer, required
        - `job_post_id` integer, nullable, required
        - `name` string, required
        - `order` integer, required
        - `duration` integer, required
        - `round_type` 'assignment' | 'automated_coding' | 'founder_interview' | 'culture_fit' | 'profile_shortlisting' | 'tech_interview', required
        - `created_at` string, date-time, required
        - `updated_at` string, date-time, required
        - `poc` 'hr' | 'tech_team' | 'founder'
        - `agenda` string
    - `ai_eval` object
      - `score` number, required
      - `metric_scores` object[], required
        - `name` string, required
        - `score` number, required
        - `reasoning` string, required
      - `failed_mandatory` string[]
      - `rubric_version` number, nullable
      - `model` string, required
      - `evaluated_at` string, required
    - `questions_answered` 'none' | 'some' | 'all', required
    - `applied_via_client_link` boolean
    - `outreach_summary` AutomationOutreachSummary, required
      - `id` integer, required
      - `automation_flow_id` integer, required
      - `responded` boolean, required
      - `responded_channel` 'email' | 'whatsapp' | 'ai_call' | 'linkedin' | 'null', nullable, required
      - `stop_reason` string, nullable, required
      - `current_step_id` integer, nullable, required
      - `automation_flow_name` string, nullable, required
      - `current_step_name` string, nullable, required
      - `current_step_type` string, nullable, required
      - `status` 'queued' | 'running' | 'completed' | 'failed' | 'stopped', required
      - `created_at` string, required
      - `queued_at` string, nullable, required
      - `started_at` string, nullable, required
      - `ended_at` string, nullable, required
      - `responded_at` string, nullable, required
    - `outreach_summary_version` string, required
    - `comments` string
    - `tags` JobTag[], required
      - `label` string, required
      - `value` number, required
    - `automation_flow_executions` AutomationFlowExecution[], required
      - `id` integer, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
      - `queued_at` string, date-time, nullable, required
      - `started_at` string, date-time, nullable, required
      - `ended_at` string, date-time, nullable, required
      - `status` 'running' | 'completed' | 'failed' | 'cancelled' | 'stopped' | 'queued', required
      - `current_step_id` integer, nullable, required
      - `automation_flow_id` integer, required
      - `automation_flow_name` string, nullable, required
      - `job_application_id` integer, required
      - `responded` boolean, required
      - `stop_reason` string, nullable, required
      - `meaningful_step_completed` boolean, required
      - `candidate_name` string, nullable, required
      - `current_step_name` string, nullable, required
      - `current_step_type` string, nullable, required
      - `startup_last_error` string, nullable, required
    - `saved_searches` object[], required
      - `id` number, required
      - `title` string, required
    - `tasks_count` number, required
    - `closed_tasks_count` number, required
    - `in_review_tasks_count` number, required
    - `custom_columns` object, required
    - `rejected_from_state` string
    - `rejection_reason_bucket` 'unfit' | 'not_interested_this_job' | 'broad_no' | 'null', nullable, required
    - `reason_for_rejection` string
    - `hired_at` string
    - `shortlisted_at` string
    - `shortlisted_by_id` integer, nullable, required
  - `meta` object, nullable

## Other responses

- `401`: Authentication failed

---

[API](https://skmtc.dev/flexiple/apis/flexiple-platform-api-v1.md) - [All operations](https://skmtc.dev/flexiple/apis/flexiple-platform-api-v1/llms.txt) - [OpenAPI document](https://skmtc.dev/flexiple/apis/flexiple-platform-api-v1/revisions/27e7987859f2?raw)
