Kita Processing API

Submit documents for extraction.

OpenAPI Specification

kita-processing-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Kita Capture Applications Processing API
  version: v1
  summary: Document intelligence — extract structured, validated, fraud-checked data from bank statements, payslips, IDs, credit reports and 30+ other document types.
  description: 'Kita Capture turns scanned or photographed financial and identity documents into clean

    JSON — transactions, metadata, metrics, and fraud signals. Upload a file (multipart or

    base64), submit a URL, or batch up to 100 documents, then poll for results or receive an

    HMAC-signed webhook.


    Authentication uses an organization API key prefixed `kita_prod_` sent as

    `Authorization: Bearer <key>`. Errors return `{ "error": ..., "message": ... }`.

    Rate limiting is per organization; 429 responses carry a `Retry-After` header.


    NOTE: Kita does not publish a machine-readable OpenAPI description. This document was

    generated by the API Evangelist enrichment pipeline from Kita''s own published API

    documentation (shipped verbatim inside the official `kita-docs-mcp` npm package and

    served at https://www.kita.ai/documentation). Only operations, parameters, fields and

    status codes that Kita documents are represented here.

    '
  contact:
    name: Kita Support
    email: support@kita.ai
    url: https://www.kita.ai/documentation
  x-source:
  - https://www.kita.ai/documentation
  - https://unpkg.com/kita-docs-mcp@0.4.0/docs/Documentation.md
  x-generated-by: api-evangelist-enrichment-pipeline
  x-generated: '2026-07-19'
servers:
- url: https://portal.usekita.com
  description: Production (default; override with the KITA_API_URL environment variable)
security:
- BearerAuth: []
tags:
- name: Processing
  description: Submit documents for extraction.
paths:
  /api/process-async:
    post:
      tags:
      - Processing
      operationId: processDocumentAsync
      summary: Submit a document for extraction
      description: 'Accepts two upload modes on the same URL. Multipart sends the raw `file` plus a

        `document_type`. JSON sends `file_base64` (a data-URI prefix is accepted and stripped)

        plus `filename` and `document_type`. Returns a `documentId` to poll. An optional

        one-shot `webhook_url` delivers the result instead of polling.

        '
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
              - file
              - document_type
              properties:
                file:
                  type: string
                  format: binary
                  description: PDF, PNG, JPG, TIFF or BMP.
                document_type:
                  $ref: '#/components/schemas/DocumentType'
                password:
                  type: string
                  description: PDF password if the file is encrypted.
                webhook_url:
                  type: string
                  format: uri
                  description: One-shot delivery URL for this upload.
          application/json:
            schema:
              type: object
              required:
              - file_base64
              - filename
              - document_type
              properties:
                file_base64:
                  type: string
                  description: Base64-encoded file contents. A `data:` URI prefix is accepted and stripped automatically.
                filename:
                  type: string
                  description: Filename with extension; the extension drives file-type validation.
                document_type:
                  $ref: '#/components/schemas/DocumentType'
                password:
                  type: string
                webhook_url:
                  type: string
                  format: uri
            example:
              file_base64: JVBERi0xLjQg...
              filename: statement.pdf
              document_type: bank_statement
      responses:
        '200':
          description: Document queued for processing.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProcessAccepted'
              example:
                documentId: 12345
                status: pending
                message: Document queued for processing
        '202':
          description: Accepted — poll for results.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProcessAccepted'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
components:
  responses:
    Forbidden:
      description: Upgrade required, or the document type is not enabled for this organization.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: Rate limited. Wait and retry; check the `Retry-After` header.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Invalid or missing API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: Bad request — check the request body and parameters.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Bad Request
            message: documents array is required and must not be empty
    ServerError:
      description: Server error — retry after a brief delay.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          description: Short error label.
        message:
          type: string
          description: Human-readable description.
    ProcessAccepted:
      type: object
      properties:
        documentId:
          type: integer
        status:
          $ref: '#/components/schemas/JobStatus'
        message:
          type: string
    JobStatus:
      type: string
      enum:
      - pending
      - processing
      - completed
      - failed
    DocumentType:
      type: string
      description: 'Document type slug. Case-insensitive. Three types run the legacy stage-config pipeline

        (`bank_statement`, `audited_financial_statement`, `general_information_sheet`); the rest

        run the universal vocabulary-driven pipeline. Slugs without a dedicated vocabulary fall

        back to the `other_document` extractor.

        '
      enum:
      - bank_statement
      - audited_financial_statement
      - general_information_sheet
      - bank_certificate
      - credit_card_statement
      - loan_statement
      - mobile_banking_screenshot
      - passbook
      - payslip
      - business_financials
      - bill
      - receipt
      - remittance_slip
      - sales_invoice
      - government_id
      - certificate_of_employment
      - barangay_clearance
      - credit_report
      - slik
      - acta_constitutiva
      - mx_legal
      - indo_legal
      - combined_document
      - other_document
      - bir_2303
      - bir_2307
      - tin_id
      - secretarys_certificate
      - business_registration_dti
      - business_registration_sec
      - certificate_of_incorporation
      - business_permit
      - mayors_permit
      - purchase_order
      - bill_of_lading
      - proof_of_billing
      - land_title
      - vehicle_registration
      - insurance_policy
      - loan_agreement
      - income_tax_return
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: 'Organization API key prefixed `kita_prod_`, issued from the Kita dashboard at

        https://portal.usekita.com and sent as `Authorization: Bearer <key>`.

        '