---
title: "Trustfull Document"
method: GET
path: "/document/{requestId}"
tags: ["Products"]
---

# Trustfull Document

`GET /document/{requestId}`

## Request

- Base URL: `https://api.fido.id/1.0`
- URL: `https://api.fido.id/1.0/document/{requestId}`
- Auth: none declared. Required headers: `x-api-key`

Trustfull Document

## Path parameters

- `requestId` string, required

## Headers

- `content-type` string
- `accept` string
- `x-api-key` string, required

## Response `200`

OK

- GetDocumentResponse: Document Base
  - `resolution_id` string
  - `device_request_time` string
  - `request_id` string
  - `model_id` ModelId (unresolved $ref)
  - `document` Document: Document block of GetDocumentResponse
    - `value` string, nullable: URL to fetch the uploaded document.
    - `file_type` 'PDF' | 'JPEG' | 'PNG' | 'WEBP', nullable: User-friendly file type label, derived server-side from the sniffed MIME at upload time.
    - `document_type` 'payslip' | 'tax_document' | 'bank_statement' | 'utility_bill', nullable: Semantic category of the uploaded document, supplied by the customer at upload.
    - `image_quality` 'low' | 'medium' | 'high', nullable: Derived three-cluster image-quality signal computed by the document analysis pipeline.
    - `modality` 'pdf_native' | 'image_pdf' | 'image' | 'other', nullable: Derived document modality: pdf_native (>=500 chars of selectable text), image_pdf (scanned/flattened PDF), image (non-PDF raster), or other.
    - `extractable_chars` integer, nullable: Number of natively extractable text characters in the document
    - `image_area` number, float, nullable: Percentage (0-100) of the analysed page area covered by raster images
    - `vector_drawings` integer, nullable: Count of vector drawing operations in the document
    - `raster_images` integer, nullable: Count of embedded raster images in the document
    - `image_info_mode` 'L' | '1' | 'P' | 'RGB' | 'RGBA' | 'CMYK' | 'YCbCr', nullable: Colour mode of the analysed page.
    - `image_info_width` integer, nullable: Width in pixels of the analysed page
    - `image_info_height` integer, nullable: Height in pixels of the analysed page
    - `image_info_dpi_x` integer, nullable: Horizontal DPI of the analysed page
    - `image_info_dpi_y` integer, nullable: Vertical DPI of the analysed page
    - `image_info_page_no` integer, nullable: Page index analysed (0-based) for multi-page PDFs
    - `image_info_is_from_rendered_pdf` boolean, nullable: True when image stats were measured on a rasterised PDF page
    - `image_info_jpeg_qtable_count` integer, nullable: Number of JPEG quantisation tables; JPEG-only and unset for PDFs/PNGs
    - `image_metrics_sharpness` number, float, nullable: Laplacian-variance sharpness score; higher means sharper text/edges
    - `image_metrics_contrast` number, float, nullable: RMS pixel-intensity contrast
    - `ocr_readability_confidence` number, float, nullable: 25th-percentile per-word OCR confidence (0-100)
    - `ocr_readability_words_count` integer, nullable: Number of words OCR recognised with positive confidence
    - `content_skew_angle` number, float, nullable: Dominant content skew in degrees [-90, 90]; 0 is upright
    - `analysis_status` 'ok' | 'error' | 'skip', nullable: Final state of the analysis pipeline: `ok` if it ran and signals were filled in, `error` on a downstream failure, `skip` if no document was attached.
    - `score` integer, nullable: Document risk score (0-1000).
    - `score_cluster` 'very_low' | 'low' | 'review' | 'high' | 'very_high', nullable: A cluster summarizing the document outcome.
    - `score_model_used` string, nullable: Identifier of the score model that produced this result.
    - `reason_codes` string, nullable: Comma-separated risk and trust signal codes fired by the document explain chain.
    - `risks_number` integer, nullable: Count of risk signals fired for this document.
    - `trusts_number` integer, nullable: Count of trust signals fired for this document.
    - `metadata_software` string, nullable: Producer software that wrote the file (PDF /Producer or image EXIF Software).
    - `metadata_creator` string, nullable: Originating application (PDF /Creator).
    - `metadata_author` string, nullable: Document author (PDF /Author or image EXIF Artist).
    - `metadata_title` string, nullable: Document title (PDF /Title).
    - `metadata_creation_date` string, nullable: Creation date, normalized to UTC (YYYY-MM-DD HH:MM:SS).
    - `metadata_creation_date_timezone` string, nullable: Original UTC offset of the creation date.
    - `metadata_mod_date` string, nullable: Modification date, normalized to UTC (YYYY-MM-DD HH:MM:SS).
    - `metadata_mod_date_timezone` string, nullable: Original UTC offset of the modification date.
    - `metadata_pdf_version` string, nullable: PDF version.
    - `metadata_page_count` integer, nullable: Number of pages in the PDF.
    - `metadata_is_encrypted` boolean, nullable: Whether the PDF is encrypted.
    - `metadata_is_xmp_present` boolean, nullable: Whether the PDF carries an XMP metadata packet.
    - `metadata_image_make` string, nullable: Capture device maker (image EXIF Make).
    - `metadata_image_model` string, nullable: Capture device model (image EXIF Model).
    - `metadata_is_present` boolean, nullable: True when the document carries descriptive metadata headers.
    - `metadata_author_is_absent` boolean, nullable: True when the metadata records no author (expected for a machine-generated document); false when an author is present (unexpected, possibly hand-edited).
    - `metadata_software_is_trusted` boolean, nullable: True when the producer software is an enterprise automated document generator; false for manual/consumer/online editors; null when unknown.
    - `metadata_software_trust_source` string, nullable: How the producer-software trust verdict was reached: curated_list or the LLM fallback.
    - `metadata_is_create_before_edit` boolean, nullable: True when CreationDate precedes ModDate (normal chronology).
    - `metadata_date_is_in_past` boolean, nullable: True when both creation and modification dates are at or before today (1-day slack).
    - `metadata_is_edit_close_to_create` boolean, nullable: True when ModDate is within two days of CreationDate.
    - `metadata_timezone_is_consistent` boolean, nullable: True when CreationDate and ModDate share the same UTC offset.
    - `xray_payslip_holder_first_name` string, nullable: Payslip holder first name, read from the hidden X-Ray section (payslips only).
    - `xray_payslip_holder_last_name` string, nullable: Payslip holder surname, read from the hidden X-Ray section (payslips only).
    - `xray_payslip_month` integer, nullable: Pay-period month (1-12), read from the hidden X-Ray section.
    - `xray_payslip_year` integer, nullable: Pay-period year, read from the hidden X-Ray section.
    - `xray_payslip_net` number, float, nullable: Net pay, read from the hidden X-Ray section.
    - `xray_payslip_gross` number, float, nullable: Total earnings, read from the hidden X-Ray section.
    - `xray_payslip_iban` string, nullable: Payment IBAN, read from the hidden X-Ray section.
    - `ocr_payslip_holder_first_name` string, nullable: Payslip holder first name read from the printed page (payslips only).
    - `ocr_payslip_holder_last_name` string, nullable: Payslip holder surname read from the printed page (payslips only).
    - `ocr_payslip_month` integer, nullable: Pay-period month (1-12) read from the printed page.
    - `ocr_payslip_year` integer, nullable: Pay-period year read from the printed page.
    - `ocr_payslip_net` number, float, nullable: Net pay read from the printed page.
    - `ocr_payslip_gross` number, float, nullable: Total earnings read from the printed page.
    - `ocr_payslip_iban` string, nullable: Payment IBAN read from the printed page.
    - `ocr_payslip_holder_first_name_details` string, nullable: JSON string with the verbatim printed text and its normalized 0-1 bounding box for the holder first name.
    - `ocr_payslip_holder_last_name_details` string, nullable: JSON string with the verbatim printed text and its normalized 0-1 bounding box for the holder surname.
    - `ocr_payslip_month_details` string, nullable: JSON string with the verbatim printed text and its normalized 0-1 bounding box for the pay-period month.
    - `ocr_payslip_year_details` string, nullable: JSON string with the verbatim printed text and its normalized 0-1 bounding box for the pay-period year.
    - `ocr_payslip_net_details` string, nullable: JSON string with the verbatim printed text and its normalized 0-1 bounding box for the net pay.
    - `ocr_payslip_gross_details` string, nullable: JSON string with the verbatim printed text and its normalized 0-1 bounding box for the total earnings.
    - `ocr_payslip_iban_details` string, nullable: JSON string with the verbatim printed text and its normalized 0-1 bounding box for the IBAN.
    - `ocr_payslip_match_first_name` boolean, nullable: True when the printed first name matches the hidden X-Ray section; null when not comparable.
    - `ocr_payslip_match_last_name` boolean, nullable: True when the printed surname matches the hidden X-Ray section; null when not comparable.
    - `ocr_payslip_match_month` boolean, nullable: True when the printed pay-period month matches the hidden X-Ray section; null when not comparable.
    - `ocr_payslip_match_year` boolean, nullable: True when the printed pay-period year matches the hidden X-Ray section; null when not comparable.
    - `ocr_payslip_match_net` boolean, nullable: True when the printed net pay matches the hidden X-Ray section; null when not comparable.
    - `ocr_payslip_match_gross` boolean, nullable: True when the printed total earnings match the hidden X-Ray section; null when not comparable.
    - `ocr_payslip_match_iban` boolean, nullable: True when the printed IBAN matches the hidden X-Ray section; null when not comparable.
    - `ocr_payslip_match_all` boolean, nullable: True when every comparable field matched; null when no field was comparable.
    - `ocr_payslip_is_complete` boolean, nullable: True when every relevant payslip field was read from the printed page; null when the document is not a payslip.
    - `ocr_bank_statement_holder_first_name` string, nullable: Account holder first name read from the printed page (bank statements only).
    - `ocr_bank_statement_holder_last_name` string, nullable: Account holder surname read from the printed page (bank statements only).
    - `ocr_bank_statement_iban` string, nullable: Account IBAN read from the printed page.
    - `ocr_bank_statement_bank_name` string, nullable: Issuing bank name read from the printed page.
    - `ocr_bank_statement_period_start` string, nullable: Statement period start date (YYYY-MM-DD) read from the printed page.
    - `ocr_bank_statement_period_end` string, nullable: Statement period end date (YYYY-MM-DD) read from the printed page.
    - `ocr_bank_statement_opening_balance` number, float, nullable: Opening balance read from the printed page.
    - `ocr_bank_statement_closing_balance` number, float, nullable: Closing balance read from the printed page.
    - `ocr_bank_statement_holder_first_name_details` string, nullable: JSON string with the verbatim printed text and its normalized 0-1 bounding box for the holder first name.
    - `ocr_bank_statement_holder_last_name_details` string, nullable: JSON string with the verbatim printed text and its normalized 0-1 bounding box for the holder surname.
    - `ocr_bank_statement_iban_details` string, nullable: JSON string with the verbatim printed text and its normalized 0-1 bounding box for the IBAN.
    - `ocr_bank_statement_bank_name_details` string, nullable: JSON string with the verbatim printed text and its normalized 0-1 bounding box for the bank name.
    - `ocr_bank_statement_period_start_details` string, nullable: JSON string with the verbatim printed text and its normalized 0-1 bounding box for the period start date.
    - `ocr_bank_statement_period_end_details` string, nullable: JSON string with the verbatim printed text and its normalized 0-1 bounding box for the period end date.
    - `ocr_bank_statement_opening_balance_details` string, nullable: JSON string with the verbatim printed text and its normalized 0-1 bounding box for the opening balance.
    - `ocr_bank_statement_closing_balance_details` string, nullable: JSON string with the verbatim printed text and its normalized 0-1 bounding box for the closing balance.
    - `ocr_bank_statement_is_complete` boolean, nullable: True when every relevant bank-statement field was read from the printed page; null when the document is not a bank statement.
    - `iban_is_valid` boolean, nullable: True when the IBAN read from the document passes the mod-97 checksum and country structure; false when malformed; null when no IBAN was read.
    - `iban_country` string, nullable: ISO country code of the resolved IBAN; null when the IBAN is invalid or absent.
    - `iban_bank_code` string, nullable: Bank identifier of the resolved IBAN (ABI in Italy); null when unresolved.
    - `iban_branch_code` string, nullable: Branch identifier of the resolved IBAN (CAB in Italy); null when unresolved.
    - `iban_bic` string, nullable: BIC/SWIFT derived from the resolved bank code; null when the registry has no entry.
    - `iban_bank_name` string, nullable: Bank name derived from the resolved bank code; null when the registry has no entry.
    - `bank_statement_iban_is_consistent` boolean, nullable: True when the bank printed on the statement matches the bank its IBAN belongs to; false when they disagree (possible tampering); null when not comparable or not a bank statement.
    - `ocr_bank_statement_bank_tax_id` string, nullable: Tax id / VAT number of the issuing bank as printed on the statement (not the account holder); null when not printed or not a bank statement.
    - `iban_bank_tax_id` string, nullable: JSON string array of the issuing bank tax identifiers (Codice Fiscale, Partita IVA) resolved from the IBAN bank code via a maintained static list; null when the bank is not listed.
    - `bank_statement_bank_tax_id_is_consistent` boolean, nullable: True when the bank tax id printed on the statement matches the one its IBAN resolves to; false when they disagree (possible tampering); null when not comparable or not a bank statement.
    - `overlapped_text` boolean, nullable: True when the document contains overlapping text.
    - `overlapped_text_count` integer, nullable: Number of overlapping text occurrences in the document.
    - `overlapped_text_details` string, nullable: JSON string: one region per overlapping-text group, each with the layered text values, page, and normalized 0-1 bounding box.
    - `mixed_font_token_count` integer, nullable: Number of tokens whose glyphs mix more than one font family.
    - `mixed_font_token_details` string, nullable: JSON string: one region per mixed-font token, each with the verbatim text, the fonts involved, page, and normalized 0-1 bounding box.
    - `mixed_fonts_is_absent` boolean, nullable: True when no token mixes font families (good); False when a mixed-font token was found.
    - `overprint_count` integer, nullable: Number of overprinted (text-over-text) regions found on a scanned bank statement.
    - `overprint_details` string, nullable: JSON string: one region per overprint band, each with the page and normalized 0-1 bounding box.
    - `overprint_is_absent` boolean, nullable: True when no text is printed over other text on a scanned bank statement (good); False when an overprinted (text-over-text) region was found.
    - `pdf_incremental_update` boolean, nullable: True when the PDF was re-saved after its original creation (an incremental update / appended revision).
    - `pdf_incremental_update_count` integer, nullable: Number of incremental-update revisions appended to the PDF.
    - `tone_step_score` number, float, nullable: Physical-tamper cue (0-100): a region whose paper tone steps brighter than the sheet, suggesting a separate sheet laid on top.
    - `grid_misalignment_score` number, float, nullable: Physical-tamper cue (0-100): a region whose printing is rotated relative to the form grid.
    - `grid_misalignment_region` string, nullable: JSON string: page + normalized 0-1 bounding box of the grid-misaligned region, when one fired.
    - `print_style_deviation_score` number, float, nullable: Physical-tamper cue (0-100, 50 = firing line): a text run whose darkness/sharpness/stroke is a local outlier (foreign print).
    - `print_style_deviation_region` string, nullable: JSON string: page + normalized 0-1 bounding box of the foreign-print region, when one fired.
    - `is_physically_intact` boolean, nullable: False when the document shows physical alteration of photographed/scanned paper (glued patch or foreign-print insertion); null for non-scanned inputs.
    - `known_format` 'it_noipa_payslip' | 'it_inps_payslip' | 'it_teamsystem_payslip' | 'it_zucchetti_payslip' | 'it_sistemi_payslip' | 'it_carabinieri_payslip' | 'it_intesa_sanpaolo_bank_statement', nullable: Matched issuer template name; null when unrecognised or not assessed.
    - `known_format_is_present` boolean, nullable: True/False once a native PDF is assessed for a known template; null when not assessed (e.g. image PDF below the text threshold).
    - `known_format_is_consistent` boolean, nullable: True when the matched template is structurally consistent with the genuine one; false when it diverges (possible tampering); null when no format matched.
    - `embedded_fonts` string: JSON string: sorted distinct font family names embedded in the document; null when not assessed.
    - `non_embedded_fonts` string: JSON string: sorted distinct font family names referenced but not embedded in the document; null when not assessed.
    - `rendered_fonts` string: JSON string: sorted distinct font family names actually used to render the document text; null when not assessed.
    - `embedded_fonts_are_absent` boolean, nullable: True when the document has no embedded fonts; null when not assessed.

## Changes

- **2026-11-03** `be8ae1d26648`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/trustfull/apis/products/changes/document/:requestId/get.md)

---

[API](https://skmtc.dev/trustfull/apis/products.md) - [All operations](https://skmtc.dev/trustfull/apis/products/llms.txt) - [OpenAPI document](https://skmtc.dev/trustfull/apis/products/revisions/be8ae1d26648?raw)
