Parsio Documents API

Upload PDFs and files (synchronously or asynchronously), submit HTML or plain-text documents for parsing, list documents with pagination and filters, retrieve the extracted structured JSON for a document, reparse, and skip documents.

OpenAPI Specification

parsio-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Parsio Public API
  description: >-
    Specification of the Parsio public REST API for AI-powered document and email
    parsing. Create and manage mailboxes (parsers), upload documents and emails for
    parsing, retrieve extracted structured JSON, manage parsing templates, and
    configure webhooks for real-time parsed-data delivery. All endpoints require an
    API key supplied via the X-API-Key request header.
  termsOfService: https://parsio.io/terms/
  contact:
    name: Parsio Support
    url: https://help.parsio.io
  version: '1.0'
servers:
  - url: https://api.parsio.io
security:
  - ApiKeyAuth: []
tags:
  - name: Mailboxes
    description: Create and manage mailboxes (parsers) and their table fields.
  - name: Documents
    description: Upload, parse, list, and retrieve documents and their parsed data.
  - name: Templates
    description: Manage parsing templates attached to a mailbox.
  - name: Webhooks
    description: Manage webhooks for real-time parsed-data delivery.
paths:
  /mailboxes:
    get:
      operationId: listMailboxes
      tags:
        - Mailboxes
      summary: List all mailboxes.
      description: Retrieves all mailboxes (parsers) for the authenticated account.
      responses:
        '200':
          description: A list of mailboxes.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Mailbox'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /mailboxes/create:
    post:
      operationId: createMailbox
      tags:
        - Mailboxes
      summary: Create a new mailbox.
      description: Creates a new mailbox (parser) bound to a parsing engine and preset.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateMailboxRequest'
      responses:
        '200':
          description: The created mailbox.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Mailbox'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /mailboxes/{mailbox_id}:
    parameters:
      - $ref: '#/components/parameters/MailboxId'
    get:
      operationId: getMailbox
      tags:
        - Mailboxes
      summary: Get a mailbox.
      description: Fetches the settings of a specific mailbox by its ID.
      responses:
        '200':
          description: The requested mailbox.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Mailbox'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: updateMailbox
      tags:
        - Mailboxes
      summary: Update a mailbox.
      description: Updates the configuration of an existing mailbox.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateMailboxRequest'
      responses:
        '200':
          description: The updated mailbox.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Mailbox'
        '401':
          $ref: '#/components/responses/Unauthorized'
    delete:
      operationId: deleteMailbox
      tags:
        - Mailboxes
      summary: Delete a mailbox.
      description: Removes a mailbox and its associated configuration.
      responses:
        '200':
          description: Mailbox deleted.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /mailboxes/{mailbox_id}/tableFields:
    parameters:
      - $ref: '#/components/parameters/MailboxId'
    get:
      operationId: listTableFields
      tags:
        - Mailboxes
      summary: List table fields.
      description: Lists the table fields configured for a mailbox.
      responses:
        '200':
          description: A list of table fields.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TableField'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /mailboxes/{mailbox_id}/doc-sync:
    parameters:
      - $ref: '#/components/parameters/MailboxId'
    post:
      operationId: parseDocumentSync
      tags:
        - Documents
      summary: Parse an HTML or text document synchronously.
      description: >-
        Submits an HTML or plain-text document and waits for the parsing result.
        Supply at least one of html or text; if both are present, html takes
        precedence.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ParseDocumentRequest'
      responses:
        '200':
          description: The parsed document.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Document'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /mailboxes/{mailbox_id}/doc:
    parameters:
      - $ref: '#/components/parameters/MailboxId'
    post:
      operationId: parseDocumentAsync
      tags:
        - Documents
      summary: Parse an HTML or text document asynchronously.
      description: >-
        Submits an HTML or plain-text document for background parsing and returns
        immediately with a document ID. Results are delivered via webhooks or
        retrieved later by document ID.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ParseDocumentRequest'
      responses:
        '200':
          description: The accepted document.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Document'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /mailboxes/{mailbox_id}/upload-sync:
    parameters:
      - $ref: '#/components/parameters/MailboxId'
    post:
      operationId: uploadFileSync
      tags:
        - Documents
      summary: Upload a file and wait for the parsing result.
      description: >-
        Uploads a single file (PDF, DOCX, image, HTML, JSON, XML, and more) up to
        20MB and waits for the parsing result.
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UploadFileRequest'
      responses:
        '200':
          description: The parsed document.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Document'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /mailboxes/{mailbox_id}/upload:
    parameters:
      - $ref: '#/components/parameters/MailboxId'
    post:
      operationId: uploadFileAsync
      tags:
        - Documents
      summary: Upload a file for asynchronous parsing.
      description: >-
        Uploads a file (up to 50MB, ZIP archives supported) for background parsing
        and returns immediately. Results are delivered via webhooks or retrieved
        later by document ID.
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UploadFileRequest'
      responses:
        '200':
          description: The accepted document.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Document'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /mailboxes/{mailbox_id}/docs:
    parameters:
      - $ref: '#/components/parameters/MailboxId'
    get:
      operationId: listDocuments
      tags:
        - Documents
      summary: List documents.
      description: Lists documents in a mailbox with pagination and filters.
      parameters:
        - name: page
          in: query
          schema:
            type: integer
        - name: per_page
          in: query
          schema:
            type: integer
            maximum: 500
        - name: from
          in: query
          description: ISO 8601 start date filter.
          schema:
            type: string
            format: date
        - name: to
          in: query
          description: ISO 8601 end date filter.
          schema:
            type: string
            format: date
        - name: q
          in: query
          description: Free-text search query.
          schema:
            type: string
        - name: status
          in: query
          schema:
            $ref: '#/components/schemas/DocumentStatus'
      responses:
        '200':
          description: A paginated list of documents.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Document'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /mailboxes/{mailbox_id}/docs/skip:
    parameters:
      - $ref: '#/components/parameters/MailboxId'
    post:
      operationId: skipDocuments
      tags:
        - Documents
      summary: Skip documents.
      description: Marks multiple documents as skipped.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdsRequest'
      responses:
        '200':
          description: Documents skipped.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /docs/{document_id}:
    parameters:
      - $ref: '#/components/parameters/DocumentId'
    get:
      operationId: getDocument
      tags:
        - Documents
      summary: Get a parsed document.
      description: Retrieves a document and its extracted structured JSON by ID.
      responses:
        '200':
          description: The requested document.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Document'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /docs/{document_id}/parse:
    parameters:
      - $ref: '#/components/parameters/DocumentId'
    post:
      operationId: reparseDocument
      tags:
        - Documents
      summary: Reparse a document.
      description: Reprocesses an existing document with the mailbox's current parser.
      responses:
        '200':
          description: The reparsed document.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Document'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /mailboxes/{mailbox_id}/parsed:
    parameters:
      - $ref: '#/components/parameters/MailboxId'
    get:
      operationId: getParsedData
      tags:
        - Documents
      summary: Retrieve parsed data.
      description: Retrieves the parsed data for a mailbox's documents.
      parameters:
        - name: page
          in: query
          schema:
            type: integer
        - name: from
          in: query
          schema:
            type: string
            format: date
        - name: to
          in: query
          schema:
            type: string
            format: date
      responses:
        '200':
          description: Parsed data records.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /mailboxes/{mailbox_id}/emails:
    parameters:
      - $ref: '#/components/parameters/MailboxId'
    get:
      operationId: listCollectedEmails
      tags:
        - Documents
      summary: Get collected email addresses.
      description: Returns the email addresses collected by a mailbox.
      responses:
        '200':
          description: A list of collected email addresses.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
                  format: email
        '401':
          $ref: '#/components/responses/Unauthorized'
  /mailboxes/{mailbox_id}/templates:
    parameters:
      - $ref: '#/components/parameters/MailboxId'
    get:
      operationId: listTemplates
      tags:
        - Templates
      summary: List templates.
      description: Lists the parsing templates configured for a mailbox.
      parameters:
        - name: page
          in: query
          schema:
            type: integer
      responses:
        '200':
          description: A list of templates.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Template'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /templates/{template_id}:
    parameters:
      - $ref: '#/components/parameters/TemplateId'
    get:
      operationId: getTemplate
      tags:
        - Templates
      summary: Get a template.
      description: Retrieves the details of a parsing template.
      responses:
        '200':
          description: The requested template.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Template'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /templates/enable_many:
    post:
      operationId: enableTemplates
      tags:
        - Templates
      summary: Enable templates.
      description: Activates multiple parsing templates.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdsRequest'
      responses:
        '200':
          description: Templates enabled.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /templates/disable_many:
    post:
      operationId: disableTemplates
      tags:
        - Templates
      summary: Disable templates.
      description: Deactivates multiple parsing templates.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdsRequest'
      responses:
        '200':
          description: Templates disabled.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /templates/clone_many:
    post:
      operationId: cloneTemplates
      tags:
        - Templates
      summary: Clone templates.
      description: Duplicates multiple parsing templates into a target mailbox.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                ids:
                  type: array
                  items:
                    type: string
                mailbox_id:
                  type: string
      responses:
        '200':
          description: Templates cloned.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /templates:
    delete:
      operationId: deleteTemplates
      tags:
        - Templates
      summary: Delete templates.
      description: Removes multiple parsing templates.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdsRequest'
      responses:
        '200':
          description: Templates deleted.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /webhooks/mb/{mailbox_id}:
    parameters:
      - $ref: '#/components/parameters/MailboxId'
    get:
      operationId: listWebhooks
      tags:
        - Webhooks
      summary: List webhooks for a mailbox.
      description: Lists the webhooks configured for a mailbox.
      responses:
        '200':
          description: A list of webhooks.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Webhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /webhooks/{webhook_id}:
    parameters:
      - $ref: '#/components/parameters/WebhookId'
    get:
      operationId: getWebhook
      tags:
        - Webhooks
      summary: Get a webhook.
      description: Retrieves the details of a webhook.
      responses:
        '200':
          description: The requested webhook.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /webhooks/{mailbox_id}:
    parameters:
      - $ref: '#/components/parameters/MailboxId'
    post:
      operationId: createWebhook
      tags:
        - Webhooks
      summary: Create a webhook.
      description: Creates a webhook bound to a mailbox for real-time parsed-data delivery.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateWebhookRequest'
      responses:
        '200':
          description: The created webhook.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /webhooks:
    post:
      operationId: updateWebhook
      tags:
        - Webhooks
      summary: Update a webhook.
      description: Updates an existing webhook identified by its _id.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateWebhookRequest'
      responses:
        '200':
          description: The updated webhook.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
    delete:
      operationId: deleteWebhooks
      tags:
        - Webhooks
      summary: Delete webhooks.
      description: Removes multiple webhooks.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdsRequest'
      responses:
        '200':
          description: Webhooks deleted.
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
  parameters:
    MailboxId:
      name: mailbox_id
      in: path
      required: true
      description: The unique identifier of the mailbox (parser).
      schema:
        type: string
    DocumentId:
      name: document_id
      in: path
      required: true
      description: The unique identifier of the document.
      schema:
        type: string
    TemplateId:
      name: template_id
      in: path
      required: true
      description: The unique identifier of the parsing template.
      schema:
        type: string
    WebhookId:
      name: webhook_id
      in: path
      required: true
      description: The unique identifier of the webhook.
      schema:
        type: string
  responses:
    Unauthorized:
      description: API key missing or invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Mailbox:
      type: object
      properties:
        _id:
          type: string
        name:
          type: string
        email_prefix:
          type: string
          description: The inbound email address prefix for this mailbox.
        preset:
          type: string
          description: The parsing preset/engine bound to the mailbox.
        ml_model:
          type: string
          description: The AI/ML model used by AI or GPT parsers.
        has_raw_data:
          type: boolean
        parse_sig:
          type: boolean
          description: Whether email signatures are parsed.
        process_attachments:
          type: boolean
        collect_emails:
          type: boolean
        receive_email:
          type: boolean
        created_at:
          type: string
          format: date-time
    CreateMailboxRequest:
      type: object
      required:
        - name
      properties:
        name:
          type: string
        preset:
          type: string
        ml_model:
          type: string
        has_raw_data:
          type: boolean
        parse_sig:
          type: boolean
    UpdateMailboxRequest:
      type: object
      properties:
        name:
          type: string
        email_prefix:
          type: string
        process_attachments:
          type: boolean
        collect_emails:
          type: boolean
        alert_email_h:
          type: boolean
        receive_email:
          type: boolean
        preset:
          type: string
        ml_model:
          type: string
    TableField:
      type: object
      properties:
        _id:
          type: string
        name:
          type: string
        type:
          type: string
    ParseDocumentRequest:
      type: object
      properties:
        name:
          type: string
          description: Document identifier or subject line.
        html:
          type: string
          description: HTML markup to parse. Takes precedence over text when both are supplied.
        text:
          type: string
          description: Plain-text content to parse.
        from:
          type: string
          description: Sender address.
        to:
          type: string
          description: Recipient address.
        meta:
          type: object
          description: Custom metadata returned in the response as __meta__.
          additionalProperties: true
    UploadFileRequest:
      type: object
      required:
        - file
      properties:
        file:
          type: string
          format: binary
          description: The file to upload and parse.
        meta:
          type: string
          description: Custom payload as a JSON object or JSON-encoded string.
    Document:
      type: object
      properties:
        doc_id:
          type: string
        parsing_in_progress:
          type: boolean
        status:
          $ref: '#/components/schemas/DocumentStatus'
        name:
          type: string
        content_type:
          type: string
        created_at:
          type: string
          format: date-time
        processed_at:
          type: string
          format: date-time
        json:
          type: object
          description: The extracted structured data.
          additionalProperties: true
    DocumentStatus:
      type: string
      enum:
        - new
        - parsing
        - parsed
        - fail
        - skipped
        - quota
        - exception
    Template:
      type: object
      properties:
        _id:
          type: string
        name:
          type: string
        enabled:
          type: boolean
        mailbox_id:
          type: string
    Webhook:
      type: object
      properties:
        _id:
          type: string
        name:
          type: string
        url:
          type: string
          format: uri
        event:
          $ref: '#/components/schemas/WebhookEvent'
        enabled:
          type: boolean
        table_id:
          type: string
    CreateWebhookRequest:
      type: object
      required:
        - url
        - event
      properties:
        name:
          type: string
        url:
          type: string
          format: uri
        event:
          $ref: '#/components/schemas/WebhookEvent'
        enabled:
          type: boolean
        table_id:
          type: string
    UpdateWebhookRequest:
      type: object
      required:
        - _id
      properties:
        _id:
          type: string
        name:
          type: string
        url:
          type: string
          format: uri
        event:
          $ref: '#/components/schemas/WebhookEvent'
        enabled:
          type: boolean
        table_id:
          type: string
    WebhookEvent:
      type: string
      enum:
        - doc.parsed
        - doc.parsed.flat
        - doc.fail
        - doc.received
        - table.parsed
    IdsRequest:
      type: object
      required:
        - ids
      properties:
        ids:
          type: array
          items:
            type: string
    Error:
      type: object
      properties:
        error:
          type: string
        message:
          type: string