Skip to main content
POST
/
api
/
documents
Upload a document
curl --request POST \
  --url https://api.example.com/api/documents \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: multipart/form-data' \
  --form 'file=<string>' \
  --form confirm_ocr=false \
  --form 'subtype=<string>'
import requests

url = "https://api.example.com/api/documents"

payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"confirm_ocr\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"subtype\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "multipart/form-data"
}

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

print(response.text)
const form = new FormData();
form.append('file', '<string>');
form.append('confirm_ocr', 'false');
form.append('subtype', '<string>');

const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};

options.body = form;

fetch('https://api.example.com/api/documents', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/documents",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"confirm_ocr\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"subtype\"\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

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

func main() {

url := "https://api.example.com/api/documents"

payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"confirm_ocr\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"subtype\"\r\n\r\n<string>\r\n-----011000010111000001101001--")

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

req.Header.Add("Authorization", "Bearer <token>")

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

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

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://api.example.com/api/documents")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"confirm_ocr\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"subtype\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();
require 'uri'
require 'net/http'

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

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"confirm_ocr\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"subtype\"\r\n\r\n<string>\r\n-----011000010111000001101001--"

response = http.request(request)
puts response.read_body
{
  "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "filename": "<string>",
  "owner": "<string>",
  "mime_type": "<string>",
  "size_bytes": 123,
  "page_count": 123,
  "chunk_count": 123,
  "subtype": "<string>",
  "datahub_urn": "<string>",
  "extraction_warning": "<string>",
  "suggested_summary": "<string>",
  "error": "<string>",
  "s3_key": "<string>",
  "suggested_tags": [
    {
      "name": "<string>",
      "is_existing": false,
      "urn": "<string>"
    }
  ],
  "suggested_glossary_terms": [
    {
      "name": "<string>",
      "is_existing": false,
      "urn": "<string>"
    }
  ],
  "suggested_domain": {
    "name": "<string>",
    "is_existing": false,
    "urn": "<string>"
  }
}
{
"error": "<string>",
"code": 500
}
{
"error": "<string>",
"code": 500
}
{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}

Authorizations

Authorization
string
header
required

The access token received from the authorization server in the OAuth 2.0 flow.

Body

multipart/form-data
file
string
required

Document to ingest. Supported formats are PDF, DOCX, PPTX, MD, TXT, and HTML.

confirm_ocr
boolean
default:false

Set to true to opt into Optical Character Recognition (OCR) for scanned PDFs.

subtype
string | null

DataHub document subtype. Valid values are Runbook, FAQ, Insight, Definition, and Decision. Omit or leave empty for no subtype, DataHub shows 'None' in the Type dropdown.

Response

Successful Response

id
string<uuid>
required
filename
string
required
owner
string
required
mime_type
string
required
size_bytes
integer
required
page_count
integer | null
required
chunk_count
integer | null
required
subtype
string | null
required
status
enum<string>
required

Lifecycle status of an ingested document.

Available options:
uploading,
extracting,
ocr_required,
indexed,
failed
enrichment_status
enum<string>
required

Crew-driven enrichment lifecycle.

Available options:
pending,
running,
awaiting_review,
confirmed,
failed
datahub_urn
string | null
required
extraction_warning
string | null
required
suggested_summary
string | null
required
error
string | null
required
s3_key
string | null
required
suggested_tags
SuggestionItem · object[]
suggested_glossary_terms
SuggestionItem · object[]
suggested_domain
SuggestionItem · object | null

A flagged enrichment suggestion for a tag, glossary term, or domain.