> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.emtelligent.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.emtelligent.com/_mcp/server.

# Create a Job

POST /api/v1/jobs
Content-Type: application/json

Create a new job. The customer will upload files into a source s3 bucket and provide credentials in the request body to access it. This source bucket must hold both the file manifest and the input files to be processed. The customer must use the source bucket created during onboarding.

The source files will be validated against the file manifest:

- If any files listed in the manifest are missing, validation will fail.
- Only the files listed in the manifest will be processed.

Once the files have been processed and extracted, the `job_status` will be updated to `completed` to indicate that the job outputs are ready to be collected.

Pipeline names available to each customers will be provided during onboarding. Pipeline parameters are specific to each pipeline and will be detailed in the _Pipeline Documentation_.

The optional `job_name` is a human friendly string that you can associate with the job_id. Job names can be used to filter job information (see GET /api/v1/jobs)

Reference: https://docs.emtelligent.com/extract/api/create-job-api-v-1-jobs-post

## Request

### Headers

- `X-API-Key` (string, optional, nullable) — API key for authentication

### Body (application/json)

This endpoint expects a CreateJobRequest.

- `manifest_key` (string, required) — S3 manifest object key
- `pipeline_name` (string, required) — Name of the pipeline
- `user_credentials` (UserCredentials, required)
- `aws_region` (string, required) — AWS region
- `pipeline_parameters` (map from string to any, optional, nullable) — Optional pipeline parameters as key-value pairs
- `job_name` (string, optional, nullable) — Optional job name

## Response

### 201

Created

- `any`

## Types

### UserCredentials

- `aws_access_key_id` (string, required) — AWS access key ID
- `aws_secret_access_key` (string, required) — AWS secret access key
- `session_token` (string, optional, nullable) — AWS session token
- `expiry` (string, optional, nullable) — ISO 8601 UTC timestamp for when credentials expire

## Examples

### create_job_api_v1_jobs_post_example

**Response**

```json
{
  "job_details": {},
  "job_id": "{jobId}",
  "job_name": "name",
  "job_status": "queued"
}
```

**SDK Code**

```python create_job_api_v1_jobs_post_example
import requests

url = "https://api.example.com/api/v1/jobs"

response = requests.post(url)

print(response.json())
```

```javascript create_job_api_v1_jobs_post_example
const url = 'https://api.example.com/api/v1/jobs';
const options = {method: 'POST'};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go create_job_api_v1_jobs_post_example
package main

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

func main() {

	url := "https://api.example.com/api/v1/jobs"

	req, _ := http.NewRequest("POST", url, nil)

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby create_job_api_v1_jobs_post_example
require 'uri'
require 'net/http'

url = URI("https://api.example.com/api/v1/jobs")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)

response = http.request(request)
puts response.read_body
```

```java create_job_api_v1_jobs_post_example
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.example.com/api/v1/jobs")
  .asString();
```

```php create_job_api_v1_jobs_post_example
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.example.com/api/v1/jobs');

echo $response->getBody();
```

```csharp create_job_api_v1_jobs_post_example
using RestSharp;

var client = new RestClient("https://api.example.com/api/v1/jobs");
var request = new RestRequest(Method.POST);
IRestResponse response = client.Execute(request);
```

```swift create_job_api_v1_jobs_post_example
import Foundation

let request = NSMutableURLRequest(url: NSURL(string: "https://api.example.com/api/v1/jobs")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

### Example 1

**Request**

```json
{
  "manifest_key": "s3_key/to/manifest.csv",
  "pipeline_name": "pipeline_name",
  "user_credentials": {
    "aws_access_key_id": "key",
    "aws_secret_access_key": "secret",
    "session_token": "token",
    "expiry": "2025-08-01T20:15:30Z"
  },
  "aws_region": "region"
}
```

**Response**

```json
{
  "job_details": {},
  "job_id": "{jobId}",
  "job_name": "name",
  "job_status": "queued"
}
```

**SDK Code**

```python Example 1
import requests

url = "https://api.example.com/api/v1/jobs"

payload = {
    "manifest_key": "s3_key/to/manifest.csv",
    "pipeline_name": "pipeline_name",
    "user_credentials": {
        "aws_access_key_id": "key",
        "aws_secret_access_key": "secret",
        "session_token": "token",
        "expiry": "2025-08-01T20:15:30Z"
    },
    "aws_region": "region"
}
headers = {"Content-Type": "application/json"}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Example 1
const url = 'https://api.example.com/api/v1/jobs';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '{"manifest_key":"s3_key/to/manifest.csv","pipeline_name":"pipeline_name","user_credentials":{"aws_access_key_id":"key","aws_secret_access_key":"secret","session_token":"token","expiry":"2025-08-01T20:15:30Z"},"aws_region":"region"}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Example 1
package main

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

func main() {

	url := "https://api.example.com/api/v1/jobs"

	payload := strings.NewReader("{\n  \"manifest_key\": \"s3_key/to/manifest.csv\",\n  \"pipeline_name\": \"pipeline_name\",\n  \"user_credentials\": {\n    \"aws_access_key_id\": \"key\",\n    \"aws_secret_access_key\": \"secret\",\n    \"session_token\": \"token\",\n    \"expiry\": \"2025-08-01T20:15:30Z\"\n  },\n  \"aws_region\": \"region\"\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Example 1
require 'uri'
require 'net/http'

url = URI("https://api.example.com/api/v1/jobs")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n  \"manifest_key\": \"s3_key/to/manifest.csv\",\n  \"pipeline_name\": \"pipeline_name\",\n  \"user_credentials\": {\n    \"aws_access_key_id\": \"key\",\n    \"aws_secret_access_key\": \"secret\",\n    \"session_token\": \"token\",\n    \"expiry\": \"2025-08-01T20:15:30Z\"\n  },\n  \"aws_region\": \"region\"\n}"

response = http.request(request)
puts response.read_body
```

```java Example 1
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.example.com/api/v1/jobs")
  .header("Content-Type", "application/json")
  .body("{\n  \"manifest_key\": \"s3_key/to/manifest.csv\",\n  \"pipeline_name\": \"pipeline_name\",\n  \"user_credentials\": {\n    \"aws_access_key_id\": \"key\",\n    \"aws_secret_access_key\": \"secret\",\n    \"session_token\": \"token\",\n    \"expiry\": \"2025-08-01T20:15:30Z\"\n  },\n  \"aws_region\": \"region\"\n}")
  .asString();
```

```php Example 1
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.example.com/api/v1/jobs', [
  'body' => '{
  "manifest_key": "s3_key/to/manifest.csv",
  "pipeline_name": "pipeline_name",
  "user_credentials": {
    "aws_access_key_id": "key",
    "aws_secret_access_key": "secret",
    "session_token": "token",
    "expiry": "2025-08-01T20:15:30Z"
  },
  "aws_region": "region"
}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Example 1
using RestSharp;

var client = new RestClient("https://api.example.com/api/v1/jobs");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"manifest_key\": \"s3_key/to/manifest.csv\",\n  \"pipeline_name\": \"pipeline_name\",\n  \"user_credentials\": {\n    \"aws_access_key_id\": \"key\",\n    \"aws_secret_access_key\": \"secret\",\n    \"session_token\": \"token\",\n    \"expiry\": \"2025-08-01T20:15:30Z\"\n  },\n  \"aws_region\": \"region\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Example 1
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = [
  "manifest_key": "s3_key/to/manifest.csv",
  "pipeline_name": "pipeline_name",
  "user_credentials": [
    "aws_access_key_id": "key",
    "aws_secret_access_key": "secret",
    "session_token": "token",
    "expiry": "2025-08-01T20:15:30Z"
  ],
  "aws_region": "region"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.example.com/api/v1/jobs")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

### Example 2

**Request**

```json
{
  "manifest_key": "s3_key/to/manifest.csv",
  "pipeline_name": "pipeline_name",
  "user_credentials": {
    "aws_access_key_id": "key",
    "aws_secret_access_key": "secret"
  },
  "aws_region": "region"
}
```

**Response**

```json
{
  "job_details": {},
  "job_id": "{jobId}",
  "job_name": "name",
  "job_status": "queued"
}
```

**SDK Code**

```python Example 2
import requests

url = "https://api.example.com/api/v1/jobs"

payload = {
    "manifest_key": "s3_key/to/manifest.csv",
    "pipeline_name": "pipeline_name",
    "user_credentials": {
        "aws_access_key_id": "key",
        "aws_secret_access_key": "secret"
    },
    "aws_region": "region"
}
headers = {"Content-Type": "application/json"}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Example 2
const url = 'https://api.example.com/api/v1/jobs';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '{"manifest_key":"s3_key/to/manifest.csv","pipeline_name":"pipeline_name","user_credentials":{"aws_access_key_id":"key","aws_secret_access_key":"secret"},"aws_region":"region"}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Example 2
package main

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

func main() {

	url := "https://api.example.com/api/v1/jobs"

	payload := strings.NewReader("{\n  \"manifest_key\": \"s3_key/to/manifest.csv\",\n  \"pipeline_name\": \"pipeline_name\",\n  \"user_credentials\": {\n    \"aws_access_key_id\": \"key\",\n    \"aws_secret_access_key\": \"secret\"\n  },\n  \"aws_region\": \"region\"\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Example 2
require 'uri'
require 'net/http'

url = URI("https://api.example.com/api/v1/jobs")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n  \"manifest_key\": \"s3_key/to/manifest.csv\",\n  \"pipeline_name\": \"pipeline_name\",\n  \"user_credentials\": {\n    \"aws_access_key_id\": \"key\",\n    \"aws_secret_access_key\": \"secret\"\n  },\n  \"aws_region\": \"region\"\n}"

response = http.request(request)
puts response.read_body
```

```java Example 2
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.example.com/api/v1/jobs")
  .header("Content-Type", "application/json")
  .body("{\n  \"manifest_key\": \"s3_key/to/manifest.csv\",\n  \"pipeline_name\": \"pipeline_name\",\n  \"user_credentials\": {\n    \"aws_access_key_id\": \"key\",\n    \"aws_secret_access_key\": \"secret\"\n  },\n  \"aws_region\": \"region\"\n}")
  .asString();
```

```php Example 2
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.example.com/api/v1/jobs', [
  'body' => '{
  "manifest_key": "s3_key/to/manifest.csv",
  "pipeline_name": "pipeline_name",
  "user_credentials": {
    "aws_access_key_id": "key",
    "aws_secret_access_key": "secret"
  },
  "aws_region": "region"
}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Example 2
using RestSharp;

var client = new RestClient("https://api.example.com/api/v1/jobs");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"manifest_key\": \"s3_key/to/manifest.csv\",\n  \"pipeline_name\": \"pipeline_name\",\n  \"user_credentials\": {\n    \"aws_access_key_id\": \"key\",\n    \"aws_secret_access_key\": \"secret\"\n  },\n  \"aws_region\": \"region\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Example 2
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = [
  "manifest_key": "s3_key/to/manifest.csv",
  "pipeline_name": "pipeline_name",
  "user_credentials": [
    "aws_access_key_id": "key",
    "aws_secret_access_key": "secret"
  ],
  "aws_region": "region"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.example.com/api/v1/jobs")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```