---
title: "Add keys to job"
method: POST
path: "/projects/{project_id}/jobs/{id}/keys"
tags: ["Jobs"]
---

# Add keys to job

`POST /projects/{project_id}/jobs/{id}/keys`

Add multiple keys to a existing job.

## Path parameters

- `project_id` string, required
- `id` string, required

## Headers

- `X-PhraseApp-OTP` string

## Request body

- object
  - `branch` string — specify the branch to use
  - `translation_key_ids` string[] — ids of keys that should added to the job

## Response `200`

OK

- JobDetails
  - `id` string
  - `name` string
  - `briefing` string
  - `due_date` string, date-time, nullable
  - `state` string
  - `ticket_url` string
  - `project` ProjectShort
    - `id` string
    - `name` string
    - `main_format` string
    - `created_at` string, date-time
    - `updated_at` string, date-time
  - `branch` object
    - `name` string
  - `created_at` string, date-time
  - `updated_at` string, date-time
  - `automation_id` string, nullable — The ID of the automation that created this job, or null if the job was created manually.
  - `job_template_id` string, nullable — The ID of the job template this job was created from, or null if no template was used.
  - `review_due_date` string, date-time, nullable — The review due date for this job. Returns `null` when the project does not have review workflow enabled.
  - `owner` UserPreview
    - `id` string
    - `username` string
    - `name` string
    - `gravatar_uid` string
  - `job_tag_name` string
  - `source_translations_updated_at` string, date-time
  - `source_locale` LocalePreview
    - `id` string
    - `name` string
    - `code` string
  - `locales` LocalePreview[]
    - `id` string
    - `name` string
    - `code` string
  - `keys` KeyPreview[]
    - `id` string
    - `name` string
    - `plural` boolean
    - `use_ordinal_rules` boolean
  - `annotations` JobAnnotationShort[] — Returned only when `include_annotations=true` is supplied on the request.
    - `name` string, required
    - `value` string, required
  - `locked` boolean — `true` if the job has been locked by the project's job-locking workflow (translations attached to the job are read-only until the job advances).

## Other responses

- `400` — Bad request. The request could not be parsed or a parameter failed validation. Verify the request body, the content type, and the parameter types, then retry.
- `404` — Not found. The requested resource does not exist or is not visible to the authenticated user. Verify the identifiers in the request path and that the token has access to them, then retry.
- `429` — Too many requests. The rate limit has been exceeded. Wait until the time indicated by the `X-Rate-Limit-Reset` response header before retrying.

---

[API](https://skmtc.net/phrase/apis/control-hub-service.md) · [All operations](https://skmtc.net/phrase/apis/control-hub-service/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/phrase/control-hub-service/revisions/98ecac7ba2bf/schema)
