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

# Get a specific job

> Retrieve a specific job by job ID from your Hirempire account

## Parameters

<ParamField query="job_id" type="string" required placeholder="Enter job ID">
  The job ID to retrieve
</ParamField>

## Authentication

<ResponseField name="Authorization" type="string" required>
  Bearer authentication header of the form `Bearer <token>`, where `<token>` is your auth token.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl --location --request GET 'https://api.hirempire.com/v1/get-job?job_id={job_id}' \
  --header 'Authorization: Bearer YOUR_TOKEN'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch('https://api.hirempire.com/v1/get-job?job_id={job_id}', {
    method: 'GET',
    headers: {
      'Authorization': 'Bearer YOUR_TOKEN'
    }
  });

  const data = await response.json();
  console.log(data);
  ```

  ```python Python theme={null}
  import requests

  url = "https://api.hirempire.com/v1/get-job"
  params = {
      "job_id": "{job_id}"
  }
  headers = {
      "Authorization": "Bearer YOUR_TOKEN"
  }

  response = requests.get(url, params=params, headers=headers)
  data = response.json()
  print(data)
  ```

  ```php PHP theme={null}
  <?php
  $curl = curl_init();

  curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://api.hirempire.com/v1/get-job?job_id={job_id}',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => array(
      'Authorization: Bearer YOUR_TOKEN'
    ),
  ));

  $response = curl_exec($curl);
  curl_close($curl);

  $data = json_decode($response, true);
  print_r($data);
  ?>
  ```

  ```ruby Ruby theme={null}
  require 'net/http'
  require 'json'
  require 'uri'

  uri = URI('https://api.hirempire.com/v1/get-job')
  uri.query = URI.encode_www_form({job_id: '{job_id}'})
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true

  request = Net::HTTP::Get.new(uri)
  request['Authorization'] = 'Bearer YOUR_TOKEN'

  response = http.request(request)
  data = JSON.parse(response.body)
  puts data
  ```

  ```go Go theme={null}
  package main

  import (
      "fmt"
      "io"
      "net/http"
      "net/url"
  )

  func main() {
      baseURL := "https://api.hirempire.com/v1/get-job"
      params := url.Values{}
      params.Add("job_id", "{job_id}")
      
      client := &http.Client{}
      req, _ := http.NewRequest("GET", baseURL+"?"+params.Encode(), nil)
      req.Header.Add("Authorization", "Bearer YOUR_TOKEN")
      
      resp, _ := client.Do(req)
      defer resp.Body.Close()
      
      body, _ := io.ReadAll(resp.Body)
      fmt.Println(string(body))
  }
  ```

  ```java Java theme={null}
  import java.net.http.HttpClient;
  import java.net.http.HttpRequest;
  import java.net.http.HttpResponse;
  import java.net.URI;

  public class HirempireAPI {
      public static void main(String[] args) throws Exception {
          HttpClient client = HttpClient.newHttpClient();
          HttpRequest request = HttpRequest.newBuilder()
              .uri(URI.create("https://api.hirempire.com/v1/get-job?job_id={job_id}"))
              .header("Authorization", "Bearer YOUR_TOKEN")
              .GET()
              .build();
              
          HttpResponse<String> response = client.send(request, 
              HttpResponse.BodyHandlers.ofString());
          System.out.println(response.body());
      }
  }
  ```

  ```csharp C# theme={null}
  using System;
  using System.Net.Http;
  using System.Threading.Tasks;

  class Program
  {
      private static readonly HttpClient client = new HttpClient();

      static async Task Main(string[] args)
      {
          client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");
          
          HttpResponseMessage response = await client.GetAsync("https://api.hirempire.com/v1/get-job?job_id={job_id}");
          string responseBody = await response.Content.ReadAsStringAsync();
          
          Console.WriteLine(responseBody);
      }
  }
  ```

  ```swift Swift theme={null}
  import Foundation

  var components = URLComponents(string: "https://api.hirempire.com/v1/get-job")!
  components.queryItems = [URLQueryItem(name: "job_id", value: "{job_id}")]

  var request = URLRequest(url: components.url!)
  request.setValue("Bearer YOUR_TOKEN", forHTTPHeaderField: "Authorization")

  let task = URLSession.shared.dataTask(with: request) { data, response, error in
      if let data = data {
          let json = try? JSONSerialization.jsonObject(with: data)
          print(json ?? "No data")
      }
  }

  task.resume()
  ```

  ```kotlin Kotlin theme={null}
  import kotlinx.coroutines.*
  import java.net.http.HttpClient
  import java.net.http.HttpRequest
  import java.net.http.HttpResponse
  import java.net.URI

  fun main() = runBlocking {
      val client = HttpClient.newHttpClient()
      val request = HttpRequest.newBuilder()
          .uri(URI.create("https://api.hirempire.com/v1/get-job?job_id={job_id}"))
          .header("Authorization", "Bearer YOUR_TOKEN")
          .GET()
          .build()
          
      val response = client.send(request, HttpResponse.BodyHandlers.ofString())
      println(response.body())
  }
  ```

  ```rust Rust theme={null}
  use reqwest::header::{HeaderMap, HeaderValue, AUTHORIZATION};

  #[tokio::main]
  async fn main() -> Result<(), Box<dyn std::error::Error>> {
      let mut headers = HeaderMap::new();
      headers.insert(AUTHORIZATION, HeaderValue::from_str("Bearer YOUR_TOKEN")?);
      
      let client = reqwest::Client::new();
      let response = client
          .get("https://api.hirempire.com/v1/get-job")
          .query(&[("job_id", "{job_id}")])
          .headers(headers)
          .send()
          .await?;
          
      let body = response.text().await?;
      println!("{}", body);
      
      Ok(())
  }
  ```
</RequestExample>

## Response

<ResponseField name="success" type="boolean">
  Indicates if the request was successful
</ResponseField>

<ResponseField name="job" type="object">
  The job object

  <Expandable title="Job object properties">
    <ResponseField name="id" type="string">
      Unique identifier for the job
    </ResponseField>

    <ResponseField name="created_time" type="string">
      ISO 8601 timestamp when the job was created
    </ResponseField>

    <ResponseField name="job_title" type="string">Title of the job position.</ResponseField>

    <ResponseField name="public_slug" type="string">URL slug for the public job board page.</ResponseField>

    <ResponseField name="company_name" type="string">Name of the hiring company.</ResponseField>

    <ResponseField name="company_logo_url" type="string">URL to the hiring company's logo.</ResponseField>

    <ResponseField name="department" type="string">Department the job is in (e.g. Engineering).</ResponseField>

    <ResponseField name="industry" type="string">Industry classification.</ResponseField>

    <ResponseField name="career_level" type="string">Career level. One of: `junior` `mid-level` `senior` `team-leader` `manager` `director` `vp` `c-level`.</ResponseField>

    <ResponseField name="job_type" type="string">Employment type. One of: `full-time` `part-time` `contract` `freelance` `internship` `temporary` `project-based`.</ResponseField>

    <ResponseField name="job_mode" type="string">Work arrangement. One of: `onsite` `remote` `hybrid`.</ResponseField>

    <ResponseField name="job_location" type="string">Geographic location, formatted as `"City, Country"`. The city portion is omitted if not set.</ResponseField>

    <ResponseField name="salary" type="string">Computed salary display string. `null` when confidential.</ResponseField>

    <ResponseField name="salary_type" type="string">One of: `fixed` `range` `confidential`.</ResponseField>

    <ResponseField name="salary_min" type="number">Lower bound (range mode).</ResponseField>

    <ResponseField name="salary_max" type="number">Upper bound (range mode).</ResponseField>

    <ResponseField name="salary_fixed" type="number">Fixed salary (fixed mode).</ResponseField>

    <ResponseField name="currency" type="string">ISO 4217 three-letter code (e.g., `USD`).</ResponseField>

    <ResponseField name="salary_period" type="string">One of: `Per hour` `Per day` `Per week` `Bi-weekly` `Per month` `Per year`.</ResponseField>

    <ResponseField name="is_salary_hidden" type="boolean">`true` if the salary is hidden on the public board.</ResponseField>

    <ResponseField name="job_description" type="string">Full description of the job requirements and responsibilities.</ResponseField>

    <ResponseField name="questions" type="object">
      Application form configuration. `null` if no custom questions are set up.

      <Expandable title="questions structure">
        <ResponseField name="fields" type="object">
          Built-in toggles for standard application data. Each is a boolean:

          * `show_cover_letter`
          * `show_photo`
          * `show_experience_years`
          * `show_languages`
          * `show_nationality`
          * `show_location`
          * `show_salary_expectation`
        </ResponseField>

        <ResponseField name="custom" type="array">
          Array of per-job custom questions. Each item:

          * `id` (string) — question UUID
          * `label` (string) — the question text
          * `type` (string) — one of: `text` `textarea` `number` `date` `url` `file` `single_select` `multi_select` `video` `audio`
          * `options` (any) — for select types, the list of choices; otherwise `null`
          * `required` (boolean) — whether the candidate must answer
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="sources" type="object">
      Source link tracking for the job.

      <Expandable title="sources structure">
        <ResponseField name="count" type="integer">Number of source links.</ResponseField>

        <ResponseField name="items" type="array">
          Each item:

          * `id` (string) — source link UUID
          * `source_name` (string) — label like `LinkedIn`
          * `source_url` (string) — public tracking URL: `https://jobs.hirempire.com/{company-slug}/{source-id}`
          * `visits` (integer) — visits to that URL
          * `created_at` (string) — ISO 8601
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="status" type="string">Current status. One of: `draft` `active` `paused` `closed`.</ResponseField>

    <ResponseField name="applicants" type="integer">Number of applicants on this job.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseExample>
  ```json 200 theme={null}
  {
      "success": true,
      "job": {
          "id": "f3a2c1d4-1111-4222-9333-444455556666",
          "created_time": "2026-06-23T12:40:08.000Z",
          "job_title": "Marketing Manager",
          "company_name": "Hirempire",
          "job_type": "full-time",
          "job_mode": "remote",
          "salary": "500000",
          "currency": "USD",
          "salary_period": "Per year",
          "is_salary_hidden": false,
          "career_level": "mid-level",
          "job_location": "Cairo, Egypt",
          "status": "active",
          "applicants": 13,
          "job_description": "Job Description",
          "sources": {
              "count": 2,
              "items": [
                  { "source_name": "LinkedIn" },
                  { "source_name": "Referral" }
              ]
          }
      }
  }
  ```
</ResponseExample>

## Error Responses

### 400 Bad Request

```json theme={null}
{
    "success": false,
    "error": "Only 'job_id' query parameter is allowed."
}
```

### 401 Unauthorized

```json theme={null}
{
    "success": false,
    "error": "Invalid token"
}
```

```json theme={null}
{
    "success": false,
    "error": "Token is expired"
}
```

### 404 Not Found

```json theme={null}
{
    "success": false,
    "error": "Job not found"
}
```
