---
title: "PUT /job-templates/{jobTemplateId}"
method: PUT
path: "/job-templates/{jobTemplateId}"
---

# PUT /job-templates/{jobTemplateId}

`PUT /job-templates/{jobTemplateId}`

Creates a job template.

Requires permission to access the [CreateJobTemplate](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions) action.

## Path parameters

- `jobTemplateId` string, required

## Request body

- object
  - `jobArn` string — The ARN of the job to use as the basis for the job template.
  - `documentSource` string — <p>An S3 link to the job document to use in the template. Required if you don't specify a value for <code>document</code>.</p> <note> <p>If the job document resides in an S3 bucket, you must use a placeholder link when specifying the document.</p> <p>The placeholder link is of the following form:</p> <p> <code>${aws:iot:s3-presigned-url:https://s3.amazonaws.com/<i>bucket</i>/<i>key</i>}</code> </p> <p>where <i>bucket</i> is your bucket name and <i>key</i> is the object in the bucket to which you are linking.</p> </note>
  - `document` string — The job document. Required if you don't specify a value for <code>documentSource</code>.
  - `description` string, required — A description of the job document.
  - `presignedUrlConfig` object — Configuration for pre-signed S3 URLs.
    - `roleArn` string — <p>The ARN of an IAM role that grants grants permission to download files from the S3 bucket where the job data/updates are stored. The role must also grant permission for IoT to download the files.</p> <important> <p>For information about addressing the confused deputy problem, see <a href="https://docs.aws.amazon.com/iot/latest/developerguide/cross-service-confused-deputy-prevention.html">cross-service confused deputy prevention</a> in the <i>Amazon Web Services IoT Core developer guide</i>.</p> </important>
    - `expiresInSec` integer — How long (in seconds) pre-signed URLs are valid. Valid values are 60 - 3600, the default value is 3600 seconds. Pre-signed URLs are generated when Jobs receives an MQTT request for the job document.
  - `jobExecutionsRolloutConfig` object — Allows you to create a staged rollout of a job.
    - `maximumPerMinute` integer — The maximum number of things that will be notified of a pending job, per minute. This parameter allows you to create a staged rollout.
    - `exponentialRate` object — The rate of increase for a job rollout. This parameter allows you to define an exponential rate for a job rollout.
      - `baseRatePerMinute` integer, required — The minimum number of things that will be notified of a pending job, per minute at the start of job rollout. This parameter allows you to define the initial rate of rollout.
      - `incrementFactor` number, double, required — <p>The exponential factor to increase the rate of rollout for a job.</p> <p>Amazon Web Services IoT Core supports up to one digit after the decimal (for example, 1.5, but not 1.55).</p>
      - `rateIncreaseCriteria` object, required — The criteria to initiate the increase in rate of rollout for a job.
        - `numberOfNotifiedThings` integer — The threshold for number of notified things that will initiate the increase in rate of rollout.
        - `numberOfSucceededThings` integer — The threshold for number of succeeded things that will initiate the increase in rate of rollout.
  - `abortConfig` object — The criteria that determine when and how a job abort takes place.
    - `criteriaList` AbortCriteria[] — The list of criteria that determine when and how to abort the job.
      - `failureType` 'FAILED' | 'REJECTED' | 'TIMED_OUT' | 'ALL', required — The type of job execution failures that can initiate a job abort.
      - `action` 'CANCEL', required — The type of job action to take to initiate the job abort.
      - `thresholdPercentage` number, double, required — <p>The minimum percentage of job execution failures that must occur to initiate the job abort.</p> <p>Amazon Web Services IoT Core supports up to two digits after the decimal (for example, 10.9 and 10.99, but not 10.999).</p>
      - `minNumberOfExecutedThings` integer, required — The minimum number of things which must receive job execution notifications before the job can be aborted.
  - `timeoutConfig` object — Specifies the amount of time each device has to finish its execution of the job. A timer is started when the job execution status is set to <code>IN_PROGRESS</code>. If the job execution status is not set to another terminal state before the timer expires, it will be automatically set to <code>TIMED_OUT</code>.
    - `inProgressTimeoutInMinutes` integer — Specifies the amount of time, in minutes, this device has to finish execution of this job. The timeout interval can be anywhere between 1 minute and 7 days (1 to 10080 minutes). The in progress timer can't be updated and will apply to all job executions for the job. Whenever a job execution remains in the IN_PROGRESS status for longer than this interval, the job execution will fail and switch to the terminal <code>TIMED_OUT</code> status.
  - `tags` Tag[] — Metadata that can be used to manage the job template.
    - `Key` string, required — The tag's key.
    - `Value` string — The tag's value.
  - `jobExecutionsRetryConfig` object — The configuration that determines how many retries are allowed for each failure type for a job.
    - `criteriaList` RetryCriteria[] — The list of criteria that determines how many retries are allowed for each failure type for a job.
      - `failureType` 'FAILED' | 'TIMED_OUT' | 'ALL', required — The type of job execution failures that can initiate a job retry.
      - `numberOfRetries` integer, required — The number of retries allowed for a failure type for the job.
  - `maintenanceWindows` MaintenanceWindow[] — Allows you to configure an optional maintenance window for the rollout of a job document to all devices in the target group for a job.
    - `startTime` string, required — Displays the start time of the next maintenance window.
    - `durationInMinutes` integer, required — Displays the duration of the next maintenance window.

## Response `200`

Success

- CreateJobTemplateResponse
  - `jobTemplateArn` string — The ARN of the job template.
  - `jobTemplateId` string — The unique identifier of the job template.

## Other responses

- `480` — InvalidRequestException
- `481` — ResourceNotFoundException
- `482` — ConflictException
- `483` — LimitExceededException
- `484` — ThrottlingException
- `485` — InternalFailureException

---

[API](https://skmtc.net/aws/apis/iot.md) · [All operations](https://skmtc.net/aws/apis/iot/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/aws/iot/versions/deef5c4b09f0/schema)
