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

# Update Interviewer API

> Partially update an existing Interviewer's configuration programmatically.

Use this endpoint to update an Interviewer that belongs to your Company. Include only the fields you want to change; omitted fields remain unchanged.

## Endpoint

```http theme={null}
PUT https://api.interviewflowai.com/api/external/ingest/job/{jobId}
```

All requests must include your API key.

```http theme={null}
X-API-KEY: your_api_key_here
Content-Type: application/json
```

<Note>
  **Rate limit:** 5 requests per minute per API key. This limit is shared with the [Create Interviewer API](/platform/api-integration/create-interviewer-api). Requests over the limit return `429 Too Many Requests`.
</Note>

## Request body

The body must contain at least one supported field. Unknown fields are rejected.

All fields are optional, but you must provide at least one.

| Field                                           | Type    | Description                                                                                                                                                            |
| ----------------------------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `title`                                         | string  | Interviewer title, 1–255 characters.                                                                                                                                   |
| `role`                                          | string  | Interviewer role, 1–255 characters.                                                                                                                                    |
| `jobDescription`                                | string  | Job description, 1–50,000 characters.                                                                                                                                  |
| `instructions`                                  | string  | Instructions for conducting the interview.                                                                                                                             |
| `interviewMode`                                 | string  | `web_call`, `phone_only`, or `both`.                                                                                                                                   |
| `videoRequired`                                 | boolean | Whether video is required.                                                                                                                                             |
| `resumeRequired`                                | boolean | Whether a resume is required.                                                                                                                                          |
| `desktopOnly`                                   | boolean | Whether Candidates must use a desktop device.                                                                                                                          |
| `portfolioRequired`                             | boolean | Whether a portfolio is required.                                                                                                                                       |
| `viewStatus`                                    | string  | `public` or `private`.                                                                                                                                                 |
| `showToJobSeekers`                              | boolean | Whether the Interviewer appears to job seekers.                                                                                                                        |
| `isArchived`                                    | boolean | Whether the Interviewer is archived.                                                                                                                                   |
| `interviewLanguage`                             | string  | `english`, `hindi`, `spanish`, `french`, `chinese`, `german`, `italian`, `japanese`, `korean`, `portuguese`, `dutch`, `ukrainian`, `malay`, `indonesian`, or `arabic`. |
| `experienceMin`                                 | number  | Minimum experience in years; must be at least `0`.                                                                                                                     |
| `experienceMax`                                 | number  | Maximum experience in years; must be at least `0`.                                                                                                                     |
| `jobType`                                       | string  | `full-time`, `part-time`, `contract`, or `intern`.                                                                                                                     |
| `locationType`                                  | string  | `remote`, `onsite`, or `hybrid`.                                                                                                                                       |
| `country`                                       | string  | Country, up to 255 characters.                                                                                                                                         |
| `city`                                          | string  | City, up to 255 characters.                                                                                                                                            |
| `zipcode`                                       | string  | Postal code, up to 20 characters.                                                                                                                                      |
| `context`                                       | string  | Additional Interviewer context, up to 5,000 characters and 200 words. Required when enabling `candidateQuestioning`.                                                   |
| `candidateQuestioning`                          | boolean | Whether the Candidate can ask questions during the interview.                                                                                                          |
| `candidateOptOutEnabled`                        | boolean | Whether the Candidate can opt out.                                                                                                                                     |
| `introVideoUrl`                                 | string  | Intro video URL, up to 500 characters. Send `""` to clear it.                                                                                                          |
| `completionRedirectUrl`                         | string  | Completion redirect URL, up to 2,048 characters. Send `""` to clear it.                                                                                                |
| `linkExpirationDays`                            | number  | Interview link validity from 1–365 days.                                                                                                                               |
| `interviewDuration`                             | number  | Interview duration from 10–60 minutes.                                                                                                                                 |
| `introductionMessage`                           | string  | Introduction message, 1–1,000 characters.                                                                                                                              |
| `iceBreaker`                                    | string  | Ice breaker message, up to 500 characters.                                                                                                                             |
| `closingMessage`                                | string  | Closing message, 1–500 characters.                                                                                                                                     |
| `retakesAllowed`                                | number  | Number of allowed retakes from 0–3.                                                                                                                                    |
| `tags`                                          | array   | Up to 25 tag definitions.                                                                                                                                              |
| `customQuestions`                               | array   | Replacement custom interview questions.                                                                                                                                |
| `customQuestionConfig`                          | object  | Manual, resume, and skills question configuration.                                                                                                                     |
| `screeningQuestions`                            | array   | Replacement application screening questions.                                                                                                                           |
| `postInterviewQuestions`                        | array   | Replacement post-interview questions.                                                                                                                                  |
| `teamCompletionAlert`                           | object  | Team completion email configuration.                                                                                                                                   |
| `sendCandidateEmailOnInterviewCompletion`       | boolean | Whether to email the Candidate after completion.                                                                                                                       |
| `sendCandidateBasicReportOnInterviewCompletion` | boolean | Whether to include the basic report in that email.                                                                                                                     |
| `rejectionEmail`                                | object  | Automated rejection email configuration.                                                                                                                               |
| `customSummaryConfig`                           | object  | Custom report summary configuration.                                                                                                                                   |

If `locationType` is `onsite` or `hybrid`, the final Interviewer configuration must include `country`, `city`, and `zipcode`. Setting it to `remote` clears those location fields.

### Tags

Each `tags` item requires:

| Field     | Type      | Validation                                         |
| --------- | --------- | -------------------------------------------------- |
| `label`   | string    | 1–100 characters.                                  |
| `options` | string\[] | Up to 20 options; each option is 1–100 characters. |

### Custom questions

Each `customQuestions` item requires `question` and `evaluationCriteria`. `generationSource` is optional.

| Field                             | Type   | Validation                       |
| --------------------------------- | ------ | -------------------------------- |
| `question`                        | string | Non-empty question text.         |
| `generationSource`                | string | `manual`, `skills`, or `resume`. |
| `evaluationCriteria.lookingFor`   | string | Required, non-empty.             |
| `evaluationCriteria.strongAnswer` | string | Required, non-empty.             |
| `evaluationCriteria.weakAnswer`   | string | Required, non-empty.             |
| `evaluationCriteria.weight`       | number | Required, from 1–10.             |
| `evaluationCriteria.maxFollowup`  | number | Required, from 0–2.              |
| `evaluationCriteria.maxDuration`  | number | Optional, from 0.5–10 minutes.   |

### Question configuration

`customQuestionConfig` accepts:

| Field                           | Type      | Validation                                                      |
| ------------------------------- | --------- | --------------------------------------------------------------- |
| `sectionOrder`                  | string\[] | 1–3 unique section names: `manual`, `resume`, or `skills`.      |
| `manual.enabled`                | boolean   | Enables manual questions.                                       |
| `resume.enabled`                | boolean   | Enables resume-generated questions.                             |
| `resume.generationInstructions` | string    | Up to 4,000 characters.                                         |
| `resume.maxQuestions`           | number    | From 1–10.                                                      |
| `resume.maxDuration`            | number    | From 0.5–10 minutes.                                            |
| `skills.enabled`                | boolean   | Enables skills-generated questions.                             |
| `skills.maxQuestions`           | number    | From 1–10.                                                      |
| `skills.maxDuration`            | number    | From 0.5–10 minutes.                                            |
| `skills.allowedSkills`          | array     | Up to 50 skill strings or `{ "name", "instructions" }` objects. |
| `skills.flexibleSkills`         | boolean   | Allows skills outside the configured list.                      |

### Screening and post-interview questions

Each `screeningQuestions` item accepts `id`, `question`, `type`, `idealAnswerType`, `expectedAnswer`, `expectedAnswerMax`, `isRequired`, and `mustHaveQualification`. The required fields are `question`, `type`, `expectedAnswer`, and `isRequired`. `type` must be `yesno`, `numeric`, or `text`; `idealAnswerType` must be `min`, `max`, `range`, or `exact`.

Each `postInterviewQuestions` item requires `question` and optionally accepts `id`. Question text must be 1–200 characters.

### Notifications and reports

| Field                 | Shape                                                                                                                                                                                                             |
| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `teamCompletionAlert` | `{ "isEnabled": boolean, "email": string \| null }`; both fields are required and a valid email is required when enabled.                                                                                         |
| `rejectionEmail`      | `{ "isEnabled": boolean, "time": number }`; `time` must be from 0–720 hours.                                                                                                                                      |
| `customSummaryConfig` | `{ "enabled": boolean, "fields": [{ "key": string, "description": string }] }`; both properties are required and up to five fields are allowed. Keys are 1–80 characters and descriptions are 1–1,000 characters. |

## Example request

```bash theme={null}
curl -X PUT "https://api.interviewflowai.com/api/external/ingest/job/423e37f0-b96d-4a5e-a226-b3b99dffe614" \
  -H "Content-Type: application/json" \
  -H "X-API-KEY: your_api_key_here" \
  -d '{
    "title": "Senior Account Executive",
    "interviewDuration": 20,
    "linkExpirationDays": 14,
    "teamCompletionAlert": {
      "isEnabled": true,
      "email": "hiring@example.com"
    }
  }'
```

## Response

Successful updates return `200 OK` with the complete updated Interviewer in `data`.

```json theme={null}
{
  "data": {
    "id": "423e37f0-b96d-4a5e-a226-b3b99dffe614",
    "title": "Senior Account Executive",
    "interviewDuration": 20,
    "linkExpirationDays": 14
  },
  "code": 200,
  "message": "Job updated successfully"
}
```

## Errors

| Condition                                                        | Status                  |
| ---------------------------------------------------------------- | ----------------------- |
| Invalid `jobId`, empty body, unsupported field, or invalid value | `400 Bad Request`       |
| Missing or invalid API key                                       | `401 Unauthorized`      |
| Interviewer does not exist or belongs to another Company         | `404 Not Found`         |
| Rate limit exceeded                                              | `429 Too Many Requests` |
