openapi: 3.0.1 info: title: Parsio Public Documents 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: Documents description: Upload, parse, list, and retrieve documents and their parsed data. paths: /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' components: 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 schemas: 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 Error: type: object properties: error: type: string message: 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 IdsRequest: type: object required: - ids properties: ids: type: array items: type: string 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. DocumentStatus: type: string enum: - new - parsing - parsed - fail - skipped - quota - exception responses: Unauthorized: description: API key missing or invalid. content: application/json: schema: $ref: '#/components/schemas/Error' securitySchemes: ApiKeyAuth: type: apiKey in: header name: X-API-Key