Datanem Extraction API

Submitting documents and reading the results.

Operations 6

POST /v1/extract Submit documents and start extraction #
GET /v1/jobs List recent jobs #
GET /v1/jobs/{jobId} Check whether extraction has finished #
DELETE /v1/jobs/{jobId} Delete a job and its documents #
GET /v1/jobs/{jobId}/results Read the extracted data as JSON #
GET /v1/jobs/{jobId}/export Download the job as a spreadsheet, CSV or SQL #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/datanem-com:datanem-com-extraction-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

datanem-com-extraction-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Datanem Extraction API
  summary: Turn PDFs, scans and photos of documents into structured tables and databases.
  description: 'Submit invoices, CVs, receipts, delivery notes, bank statements or any other repeating document type and get back typed columns and rows, or a runnable SQL schema. Extraction runs in the background: POST /v1/extract returns a job id straight away, then poll the job until it is complete.


    AI agents should prefer the MCP server at https://datanem.com/mcp, which is included on every plan and needs no API key.'
  version: 1.0.0
  contact:
    name: Datanem
    email: hello@datanem.com
    url: https://datanem.com
  termsOfService: https://datanem.com/terms
  license:
    name: Proprietary
    url: https://datanem.com/terms
servers:
- url: https://datanem.com
  description: Production
security:
- bearerAuth: []
tags:
- name: Extraction
  description: Submitting documents and reading the results.
paths:
  /v1/extract:
    post:
      tags:
      - Extraction
      operationId: extract
      summary: Submit documents and start extraction
      description: Upload and start in one call. Accepts PDF, DOCX, TXT, JPEG and PNG, including scanned and photographed pages with no selectable text. Returns immediately with a job id; extraction continues in the background. Each document counts against the account's allowance, so do not resubmit to retry.
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
              - file
              properties:
                file:
                  type: array
                  items:
                    type: string
                    format: binary
                  description: One or more documents. Repeat the field for a batch.
                templateId:
                  type: string
                  description: A built-in template id from /v1/templates.
                schemaId:
                  type: string
                  description: A saved design id from /v1/templates.
      responses:
        '202':
          description: Accepted. Extraction is running.
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  status:
                    type: string
                    const: processing
                  documents:
                    type: integer
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '429':
          $ref: '#/components/responses/RateLimited'
  /v1/jobs:
    get:
      tags:
      - Extraction
      operationId: listJobs
      summary: List recent jobs
      responses:
        '200':
          description: Recent jobs, newest first.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/jobs/{jobId}:
    parameters:
    - $ref: '#/components/parameters/JobId'
    get:
      tags:
      - Extraction
      operationId: getJob
      summary: Check whether extraction has finished
      description: Poll this until status is completed, partial or failed before reading results.
      responses:
        '200':
          description: Job status and per-document progress.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobStatus'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      tags:
      - Extraction
      operationId: deleteJob
      summary: Delete a job and its documents
      responses:
        '200':
          description: Deleted.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/jobs/{jobId}/results:
    parameters:
    - $ref: '#/components/parameters/JobId'
    get:
      tags:
      - Extraction
      operationId: getResults
      summary: Read the extracted data as JSON
      parameters:
      - name: shape
        in: query
        schema:
          type: string
          enum:
          - flat
          - grouped
          default: grouped
        description: flat puts each document on one row. grouped splits repeating sections such as invoice line items into their own tables.
      responses:
        '200':
          description: Tables of columns and rows.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Results'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/jobs/{jobId}/export:
    parameters:
    - $ref: '#/components/parameters/JobId'
    get:
      tags:
      - Extraction
      operationId: exportJob
      summary: Download the job as a spreadsheet, CSV or SQL
      description: sql returns CREATE TABLE statements with primary keys, foreign keys and indexes plus the inserts, ready to run in SQLite, PostgreSQL or DuckDB.
      parameters:
      - name: format
        in: query
        schema:
          type: string
          enum:
          - xlsx
          - csv
          - sql
          default: xlsx
      - name: shape
        in: query
        schema:
          type: string
          enum:
          - flat
          - grouped
      responses:
        '200':
          description: The exported file.
          content:
            application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:
              schema:
                type: string
                format: binary
            text/csv:
              schema:
                type: string
            application/sql:
              schema:
                type: string
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  schemas:
    JobStatus:
      type: object
      description: Referenced by this document but never defined in it. API Evangelist added this empty placeholder so the document resolves; the shape is unknown and is NOT a claim about the API.
      x-ae-placeholder: true
    Results:
      type: object
      description: Referenced by this document but never defined in it. API Evangelist added this empty placeholder so the document resolves; the shape is unknown and is NOT a claim about the API.
      x-ae-placeholder: true
  responses:
    NotFound:
      description: Referenced by this document but never defined in it. API Evangelist added this empty placeholder so the document resolves; the shape is unknown and is NOT a claim about the API.
      x-ae-placeholder: true
    PaymentRequired:
      description: Referenced by this document but never defined in it. API Evangelist added this empty placeholder so the document resolves; the shape is unknown and is NOT a claim about the API.
      x-ae-placeholder: true
    BadRequest:
      description: Referenced by this document but never defined in it. API Evangelist added this empty placeholder so the document resolves; the shape is unknown and is NOT a claim about the API.
      x-ae-placeholder: true
    RateLimited:
      description: Referenced by this document but never defined in it. API Evangelist added this empty placeholder so the document resolves; the shape is unknown and is NOT a claim about the API.
      x-ae-placeholder: true
    Unauthorized:
      description: Referenced by this document but never defined in it. API Evangelist added this empty placeholder so the document resolves; the shape is unknown and is NOT a claim about the API.
      x-ae-placeholder: true
  parameters:
    JobId:
      name: jobId
      in: path
      required: true
      schema:
        type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'An API key from https://datanem.com/app/api, sent as `Authorization: Bearer <key>`. Available on ...'
externalDocs:
  description: API keys and usage
  url: https://datanem.com/app/api