---
title: "Moving an application"
method: PATCH
path: "/jobs/{jobId}/applications/{applicationId}"
tags: ["Applications"]
---

# Moving an application

`PATCH /jobs/{jobId}/applications/{applicationId}`

## Request

- Base URL: `https://api.gupy.io/api/v1`
- URL: `https://api.gupy.io/api/v1/jobs/{jobId}/applications/{applicationId}`
- Auth: HTTP bearer

Moves an application to another step of the job.

## Path parameters

- `jobId` integer, required
- `applicationId` integer, required

## Request body

- object
  - `currentStepId` integer: Step to be moved to
  - `status` 'in_process' | 'reproved': New status of application
  - `disapprovalReasonNotes` string: Disapproval reason notes
  - `disapprovalReason` 'hired_by_another_company' | 'invited_to_another_process' | 'missed_steps_of_process' | 'insufficient_knowledge' | 'hiring_not_allowed' | 'incompatible_curriculum' | 'gave_up_for_personal_reasons' | 'inconsistent_admission_docs' | 'elevated_wage_expectation' | 'lack_of_culture_alignment' | 'insufficient_academic_background' | 'no_potential_for_growth' | 'overqualified' | 'insufficient_seniority' | 'fulfilled_vacancy' | 'reject_at_medical_exam' | 'candidate_outside_required_location' | 'test_result_below_cutoff' | 'not_respond_to_contacts' | 'proposal_not_accepted' | 'hired_in_another_job' | 'lack_of_professional_experience' | 'little_stability_in_previous_companies' | 'medical_report_disqualified' | 'incomplete_screening_stage' | 'incomplete_registration_step' | 'other_reason': Disapproval reason

## Response `200`

A confirmation of successful move of the application

- ApplicationResponse: Application created
  - `id` integer: Application identifier
  - `tags` string[]: Application tags
  - `score` number, double, nullable: Deprecated. Sorting score for the application (legacy affinity or latest consolidated AI per job). Returns null when the company is not eligible via feature flags. Planned for removal in a future API version.
  - `status` 'in_process' | 'give_up' | 'reproved' | 'hired': Current application status
  - `currentStep` object: Current step of the application
    - `id` integer: Step identifier
    - `name` string: Step name
    - `status` 'approved' | 'done' | 'not_started' | 'started': Status of the application step
  - `candidate` object: Candidate information
    - `id` integer: Candidate identifier
    - `name` string: First name of the candidate
    - `lastName` string: Last name of the candidate
    - `email` string, email: E-mail of the candidate
    - `mobileNumber` string: Mobile phone number of the candidate (eg. +5511912345678)
    - `linkedinProfileUrl` string: LinkedIn profile URL
  - `manualCandidate` object: Manual insertion candidate information
    - `id` integer: Candidate identifier
    - `name` string: First name of the candidate
    - `lastName` string: Last name of the candidate
    - `email` string, email: E-mail of the candidate
    - `mobileNumber` string: Mobile phone number of the candidate (eg. +5511912345678)
    - `documentNumber` string: Document number of the candidate
    - `linkedinProfileUrl` string: LinkedIn profile URL
    - `insertionSource` 'candidate_active_contact' | 'events' | 'hunting' | 'market_referral_consulting' | 'employee_referral' | 'chrome_extension': Source of the application insertion

## Other responses

- `400`: BadRequest / Invalid Input
- `401`: Unauthorized
- `403`: Forbidden
- `404`: NotFound / Resource not found

## Changes

- **2026-11-03** `b84c14658872`: 1 info
  - response property `score` deprecated

[Operation history](https://skmtc.dev/gupy/apis/gupy-public-api/changes/jobs/:jobId/applications/:applicationId/patch.md)

---

[API](https://skmtc.dev/gupy/apis/gupy-public-api.md) - [All operations](https://skmtc.dev/gupy/apis/gupy-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/gupy/apis/gupy-public-api/revisions/b84c14658872?raw)
