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

# Create Job

> This endpoint creates a new job

### Body

<ParamField body="method" type="enum" default="get">
  The HTTP method to use. One of `get`, `post`, `put`, `patch`, `delete`.
</ParamField>

<ParamField body="url" type="string" required>
  The URL to send the HTTP request to. Must use https.
</ParamField>

<ParamField body="query" type="JSON">
  Optional query parameters to pass through to the request.
</ParamField>

<ParamField body="body" type="JSON">
  Optional request body to pass through to the request. <br />
  Supports dynamic fields such as `$job`, `$state`, and `$previous` for recurring
  jobs. Learn more about dynamic fields [here](/knowledge-base/scheduling).
</ParamField>

<ParamField body="headers" type="JSON">
  Optional request headers to pass through to the request.
</ParamField>

<ParamField body="schedule_in" type="number | [number, string]">
  How long to wait before executing the request. Set either as a number of
  seconds, or a tuple such as `[5, "minutes"]`. <br />
  If you'd rather specify a timestamp at which to run the request, use the `scheduled_at`
  field instead.
</ParamField>

<ParamField body="scheduled_at" type="string | number | Date">
  The timestamp at which to execute the request. Set either as a datetime
  string, or a unix timestamp. <br />
  If you want to schedule the request relative to now (e.g. "in 5 mins"), use the
  `schedule_in` field instead.
</ParamField>

<ParamField body="repeat_every" type="number | [number, string]">
  Setting this field will put the job on a recurring schedule. Set as either a
  number of seconds, or a tuple such as `[5, "minutes"]`
</ParamField>

<ParamField body="cron" type="string">
  The cron expression used to set the job on a recurring schedule.
  <br /> For example, `*/5 * * * *` would run every 5 minutes, `0 9 * * 1-5` runs
  every Mon-Fri at 9am UTC.
</ParamField>

<ParamField body="idempotency_key" type="string">
  A value used to enforce idempotency, or uniqueness. <br />
  For example, if multiple jobs are scheduled with the same `idempotency_key` before
  one of them is executed, every job but the first one will be ignored.
</ParamField>

<ParamField body="callback_url" type="string">
  A callback URL to send the result of the HTTP request to. Must use https.
</ParamField>

<ParamField body="webhook_url" type="string">
  A webhook URL to send job events to. Must use https. Job events include:
  `job.started`, `job.request`, `job.response`, `job.finished`, `job.error`.
</ParamField>

### Headers

<ParamField header="Authorization" type="string" initialValue="Bearer sk_public_20230921">
  API key
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl --location --request POST 'https://scheduler.booper.dev/api/jobs' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer sk_public_20230921' \
  --data-raw '{
      "method": "post",
      "url": "https://scheduler.booper.dev/api/broadcast",
      "body": {"content": "Testing 123", "channel": "discord"},
      "schedule_in": [30, "seconds"]
  }'
  ```

  ```bash CLI theme={null}
  npx @booper/cli run \
    POST https://scheduler.booper.dev/api/broadcast \
    --data 'content=Testing 123' \
    --data 'channel=discord' \
    --in '30 seconds'
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  {
    "data": {
      "id": "41d7f28b-dfbe-44b8-b716-b91898bb0ce0",
      "idempotency_key": null,
      "inserted_at": "2023-09-01T18:25:49",
      "name": null,
      "description": null,
      "user_id": "bd2aa099-6eb7-4dbb-9178-32141def1355",
      "schedule_id": null,
      "job_id": 29180,
      "job": {
        "attempted_at": null,
        "cancelled_at": null,
        "completed_at": null,
        "discarded_at": null,
        "has_confict": false,
        "id": 29180,
        "inserted_at": "2023-09-01T18:25:49.705161Z",
        "scheduled_at": "2023-09-01T18:26:19.707539Z",
        "state": "available"
      },
      "args": {
        "body": {
          "author": "alex",
          "content": "Hello world!"
        },
        "headers": {},
        "method": "post",
        "schedule_in": [30, "seconds"],
        "url": "https://scheduler.booper.dev/api/channels/discord"
      }
    }
  }
  ```
</ResponseExample>
