Skip to content

Запуск извлечения

POST /v1/extractions/run

Запуск извлечения из PDF-документа. Документ обрабатывается с использованием указанного шаблона, а извлеченные данные возвращаются в виде структурированного JSON, соответствующего определениям полей шаблона.

Попробуйте

Протестируйте этот эндпоинт интерактивно в Swagger UI.

Требуется авторизация

Укажите ваш API-ключ в заголовке Authorization.

Запрос

Заголовки

ЗаголовокЗначениеОбязательно
AuthorizationBearer <token>Да
Content-Typeapplication/jsonДа

Параметры запроса

ПараметрТипОбязательноОписание
asyncstringНетУстановите значение "true", чтобы немедленно получить ответ со статусом processing вместо ожидания завершения. Поведение по умолчанию (не указан или "false") -- синхронное.

Тело запроса

ПолеТипОбязательноОписание
templateIdstringДаID шаблона извлечения для использования.
fileNamestringДаИсходное имя файла документа.
pdfBase64stringДаСодержимое PDF-файла, закодированное в Base64.
mimeTypestringДаMIME-тип файла. Допустимые значения: application/pdf, application/vnd.openxmlformats-officedocument.wordprocessingml.document.
runIdstringНетНеобязательный идентификатор для группировки связанных извлечений в пакетном запуске.

Примеры кода

bash
curl -X POST https://api.docmap.io/v1/extractions/run \
  -H "Authorization: Bearer dm_live_abc123def456ghi789jkl012mno345" \
  -H "Content-Type: application/json" \
  -d '{
    "templateId": "tmpl_8f3a2b1c4d5e6f7g",
    "fileName": "invoice-2024-001.pdf",
    "pdfBase64": "JVBERi0xLjQKMSAwIG9iago8PAovVHlwZSAvQ2F0YW...",
    "mimeType": "application/pdf"
  }'
typescript
const apiKey = process.env.DOCMAP_API_KEY

const response = await fetch('https://api.docmap.io/v1/extractions/run', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    templateId: 'tmpl_8f3a2b1c4d5e6f7g',
    fileName: 'invoice-2024-001.pdf',
    pdfBase64: pdfBuffer.toString('base64'),
    mimeType: 'application/pdf',
  }),
})

const { data } = await response.json()
console.log(data.extractedData)
python
import requests
import base64

api_key = "dm_live_abc123def456ghi789jkl012mno345"

with open("invoice-2024-001.pdf", "rb") as f:
    pdf_base64 = base64.b64encode(f.read()).decode("utf-8")

response = requests.post(
    "https://api.docmap.io/v1/extractions/run",
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    json={
        "templateId": "tmpl_8f3a2b1c4d5e6f7g",
        "fileName": "invoice-2024-001.pdf",
        "pdfBase64": pdf_base64,
        "mimeType": "application/pdf",
    },
)

data = response.json()["data"]
print(data["extractedData"])

Ответ

Статус: 200 OK

Тело ответа обернуто в объект data.

Поля

ПолеТипОписание
idstringУникальный ID извлечения (с префиксом extract_).
userIdstringID пользователя, которому принадлежит это извлечение.
templateIdstringID шаблона, использованного для извлечения.
templateNamestringОтображаемое имя использованного шаблона.
fileNamestringИсходное имя загруженного документа.
status"processing" | "completed" | "failed"Текущий статус извлечения. "processing" при использовании асинхронного режима, "completed" при успехе, "failed" при ошибке.
extractedDataobject | nullИзвлеченные данные, соответствующие полям шаблона. null, если извлечение не удалось.
errorstring | nullСообщение об ошибке с описанием неудачи. null, если извлечение прошло успешно.
variablesVariable[]Массив определений переменных шаблона, использованных при извлечении.
source"dashboard" | "api"Способ запуска извлечения.
runIdstring | nullID пакетного запуска, если он был указан в запросе.
processingTimeMsnumber | nullОбщая продолжительность обработки в миллисекундах.
createdAtstringВременная метка ISO 8601 создания извлечения.

Пример

json
{
  "data": {
    "id": "extract_9k2m4n6p8q0r1s3t",
    "userId": "uid_a1b2c3d4e5f6",
    "templateId": "tmpl_8f3a2b1c4d5e6f7g",
    "templateName": "Invoice Template",
    "fileName": "invoice-2024-001.pdf",
    "status": "completed",
    "extractedData": {
      "vendor_name": "Acme Corp",
      "invoice_number": "INV-2024-001",
      "invoice_date": "2024-11-15",
      "total_amount": 1250.00,
      "currency": "USD",
      "line_items": [
        {
          "description": "Widget A",
          "quantity": 10,
          "unit_price": 125.00
        }
      ]
    },
    "error": null,
    "variables": [
      {
        "name": "vendor_name",
        "type": "string",
        "description": "Name of the vendor or supplier"
      },
      {
        "name": "total_amount",
        "type": "number",
        "description": "Total invoice amount"
      }
    ],
    "source": "api",
    "runId": null,
    "processingTimeMs": 3842,
    "createdAt": "2024-11-20T14:30:00.000Z"
  }
}

Асинхронный режим

По умолчанию API ожидает завершения извлечения перед отправкой ответа (синхронный режим). Для длительных извлечений вы можете использовать асинхронный режим, чтобы получить немедленный ответ и затем опрашивать результат.

Добавьте ?async=true к URL для включения асинхронного режима:

bash
curl -X POST "https://api.docmap.io/v1/extractions/run?async=true" \
  -H "Authorization: Bearer dm_live_abc123def456ghi789jkl012mno345" \
  -H "Content-Type: application/json" \
  -d '{
    "templateId": "tmpl_8f3a2b1c4d5e6f7g",
    "fileName": "invoice-2024-001.pdf",
    "pdfBase64": "JVBERi0xLjQKMSAwIG9iago8PAovVHlwZSAvQ2F0YW...",
    "mimeType": "application/pdf"
  }'

Ответ: 202 Accepted

Ответ имеет ту же структуру, что и синхронный ответ, но status будет "processing", extractedData будет null, а processingTimeMs будет null:

json
{
  "data": {
    "id": "extract_9k2m4n6p8q0r1s3t",
    "userId": "uid_a1b2c3d4e5f6",
    "templateId": "tmpl_8f3a2b1c4d5e6f7g",
    "templateName": "Invoice Template",
    "fileName": "invoice-2024-001.pdf",
    "status": "processing",
    "extractedData": null,
    "error": null,
    "variables": [...],
    "source": "api",
    "runId": null,
    "processingTimeMs": null,
    "createdAt": "2024-11-20T14:30:00.000Z"
  }
}

Используйте возвращенный id для опроса эндпоинта Получение извлечения, пока status не изменится на "completed" или "failed".

WARNING

Если извлечение остается в статусе "processing" более 2 минут, считайте его неудачным. Автоматического тайм-аута нет -- в редких случаях (например, при перезагрузке сервера) запись может оставаться в статусе "processing" бесконечно.

Ошибки

СтатусКодОписание
401UNAUTHORIZEDОтсутствующий, недействительный или просроченный API-ключ / токен.
404NOT_FOUNDУказанный шаблон не найден или не принадлежит вашему аккаунту.
429USAGE_LIMIT_EXCEEDEDВы достигли ежемесячного лимита извлечений вашего плана.
500INTERNAL_ERRORПроизошла непредвиденная ошибка во время обработки извлечения.

Документация DocMap API