Ocrolus Detect API

The Detect API from Ocrolus — 4 operation(s) for detect.

OpenAPI Specification

ocrolus-detect-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Account Level Webhooks Book Commands Detect API
  version: 1.0.0
servers:
- url: https://api.ocrolus.com
security:
- oauth: []
tags:
- name: Detect
paths:
  /v2/detect/book/{book_uuid}/signals:
    get:
      summary: Book-level Fraud Signals
      operationId: book-fraud-signals
      description: 'Scan every <<glossary:Document>> in an uploaded <<glossary:Book>> for signs of potentially fraudulent tampering.


        ---


        > 📘 This is the better version!

        > This endpoint supersedes our existing [Suspicious Activity Flags endpoint](ref:suspicious-activity), as well as the `primary_recon_error_reason` and `secondary_recon_error_reason` attributes returned by the [Analytics endpoints](ref:analytics). A deprecation plan will be announced in the future.'
      tags:
      - Detect
      parameters:
      - name: book_uuid
        in: path
        required: true
        description: The unique identifier of a <<glossary:Book>>.
        schema:
          type: string
          format: uuid
          example: 88fca8c7-aa20-4bc0-a4f3-2dfcf96c3c27
      - name: exclude_dashboard_url
        in: query
        required: false
        description: determines whether Ocrolus will return the unique Ocrolus Dashboard URL that links directly to the Dashboard for the given book.
        schema:
          type: boolean
          default: false
          example: true
      x-readme:
        samples-languages:
        - curl
        - python
        explorer-enabled: false
      responses:
        '200':
          description: 'The <<glossary:Book>> was scanned for potential fraud, and the results are enclosed.

            '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SignalAnalysis'
              examples:
                Success:
                  $ref: '#/components/examples/SuccessBookSignalsResponse'
        '400':
          description: 'The provided value of `book_uuid` wasn''t a valid UUID. Ensure that it''s correctly-formatted and that it comes from the right source.

            '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                InvalidBookUuid:
                  summary: Invalid Book UUID
                  value:
                    message: 'Invalid book uuid: ''88fca8c7-aa20-4bc0-a4f3-2dfcf96c3c2'''
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: 'No <<glossary:Book>> with the UUID given in `book_uuid` could be found.

            '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                InvalidBookUuid:
                  summary: Book Not Found
                  value:
                    message: Book not found
  /v2/detect/uploaded_doc/{uploaded_doc_uuid}/signals:
    get:
      summary: Document-Level Fraud Signals
      operationId: doc-fraud-signals
      tags:
      - Detect
      description: 'Scan a <<glossary:Document>> for signs of potentially fraudulent tampering.


        ---


        > 📘 This is the better version!

        > This endpoint supersedes our existing [Suspicious Activity Flags endpoint](ref:suspicious-activity), as well as the `primary_recon_error_reason` and `secondary_recon_error_reason` attributes returned by the [Analytics endpoints](ref:analytics). A deprecation plan will be announced in the future.'
      parameters:
      - name: uploaded_doc_uuid
        in: path
        required: true
        description: The unique identifier of a <<glossary:Document>>.
        schema:
          type: string
          format: uuid
          example: 88fca8c7-aa20-4bc0-a4f3-2dfcf96c3c27
      - name: exclude_dashboard_url
        in: query
        required: false
        description: determines whether Ocrolus will return the unique Ocrolus Dashboard URL that links directly to the Dashboard for the given book.
        schema:
          type: boolean
          default: false
          example: true
      x-readme:
        samples-languages:
        - curl
        - python
        explorer-enabled: false
      responses:
        '200':
          description: 'The Document was successfully scanned for potential fraud, and the results are enclosed. The `doc_analysis` attribute in the returned object will have exactly one element representing the requested document.

            '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SignalAnalysis'
              examples:
                Success:
                  $ref: '#/components/examples/SuccessDocSignalsResponse'
        '400':
          description: 'The provided value of `uploaded_doc_uuid` wasn''t a valid UUID. Ensure that it''s correctly-formatted and that it comes from the right source.

            '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                InvalidDocUuid:
                  summary: Invalid Document UUID
                  value:
                    message: 'Invalid uploaded_doc uuid: ''5e6c12fb-d624-4d83-9353-618480113f1'''
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: 'No <<glossary:Document>> with the UUID given in `uploaded_doc_uuid` could be found.

            '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                DocNotFound:
                  summary: Document Not Found
                  value:
                    message: 'Uploaded doc not found: ''6f7e292c-57c8-0651-8f1b-8d409065661a'''
      callbacks:
        WebhookEvent:
          $ref: '#/components/callbacks/WebhookEvent'
  /v2/detect/visualization/{visualization_uuid}:
    get:
      summary: Signal visualization
      operationId: signal-visualization
      tags:
      - Detect
      description: 'Retrieve an image file that contains a Detect Signal visualization.


        ---

        See our guide on [Interpreting Detect Signal Visualizations](doc:detect-signals#interpreting-visualizations) for more information about what the image means.


        You''ll generally use this endpoint through the URLs returned by the [Document-Level Fraud Signals](ref:doc-fraud-signals) or [Book-Level Fraud Signals](ref:book-fraud-signals) endpoints.

        > 📘 Don''t forget your keys!

        > This endpoint requires authentication, just as the others do. This means that you can''t hotlink images from this endpoint with `<img>` tags; to display them in your own applications, you''ll need to retrieve and serve them yourself, although this can be done in-browser with JavaScript.'
      parameters:
      - name: visualization_uuid
        in: path
        required: true
        description: 'The UUID of a visualization (*not* of a <<glossary:Document>>, <<glossary:Book>>, or page). The [other](ref:doc-fraud-signals) [two](ref:book-fraud-signals) Detect endpoints return the complete URL, so you won''t need to populate this parameter explicitly.

          '
        schema:
          type: string
          format: uuid
      x-readme:
        samples-languages:
        - curl
        - python
        explorer-enabled: false
      responses:
        '200':
          description: 'The visualization was retrieved and is enclosed.

            '
          content:
            image/png:
              schema:
                type: string
                format: binary
                description: The image containing the visualizations.
        '400':
          description: 'The UUID given in `visualization_uuid` wasn''t valid.

            '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                InvalidUuid:
                  summary: Invalid UUID
                  value:
                    message: 'Invalid visualization uuid: ''1d8fdf29-77b5-4614-8ed1-45ba8e1945c1w'''
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: 'No visualization with the UUID given in `visualization_uuid` could be found.

            '
          content:
            application/json:
              examples:
                NotFound:
                  summary: Not Found
                  value:
                    message: Visualization uuid not found
  /v1/book/{book_uuid}/suspicious-activity-flags:
    get:
      summary: Suspicious Activity Flags (Legacy)
      operationId: suspicious-activity-flags
      tags:
      - Detect
      description: 'Retrieve a report on possible instances of file tampering on any of the given <<glossary:Book>>''s bank statements, W-2s, and pay stubs.


        ---


        > 🚧 We have a better version!

        > This product is superseded by our new Detect offering, which we recommend for all new work. A deprecation plan will be announced in the future.'
      parameters:
      - name: book_uuid
        in: path
        required: true
        description: The unique identifier of the <<glossary:Book>> that you want to receive Suspicious Activity information on.
        schema:
          type: string
          format: uuid
      x-readme:
        samples-languages:
        - curl
        - python
        explorer-enabled: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuspiciousActivityFlagsSuccessfulResponse'
              examples:
                Success:
                  value:
                    status: 200
                    response:
                      book_uuid: 9da3dd68e5624bf79796c791a8c81651
                      suspicious_activity_results:
                      - form_uuid: d0bff378-9718-4271-b337-4530e1a0fbac
                        form_type:
                          name: BANK_ACCOUNT
                        account_type: CHECKING
                        flags:
                        - suspicious_activity_detected: false
                          reason: FILE_TAMPERING
                          suspicious_activity_location:
                            upload_origin: PRE_IDENTIFIED
                            doc_uuid: 310066c4-485c-42f0-9f5f-5cf1de67472b
                            suspicious_activity_page_indexes: []
                      - form_uuid: 0313fd74-8e16-4377-b88a-903dc90c9b97
                        form_type:
                          name: BANK_ACCOUNT
                        account_type: CHECKING
                        flags:
                        - suspicious_activity_detected: false
                          reason: FILE_TAMPERING
                          suspicious_activity_location:
                            upload_origin: PRE_IDENTIFIED
                            doc_uuid: f284ecf7-f1c9-42b2-bdb0-ade2b51398c5
                            suspicious_activity_page_indexes: []
                      - form_uuid: 4e190b23-55b9-4646-860b-3d08d99d9065
                        form_type:
                          name: BANK_ACCOUNT
                        account_type: CHECKING
                        flags:
                        - suspicious_activity_detected: false
                          reason: FILE_TAMPERING
                          suspicious_activity_location:
                            upload_origin: PRE_IDENTIFIED
                            doc_uuid: 877e7496-8d12-4fb5-92eb-7cdc86db26da
                            suspicious_activity_page_indexes: []
                      - form_uuid: 1829553f-51fa-4ae9-a942-63c82c2225a1
                        form_type:
                          name: BANK_ACCOUNT
                        account_type: CHECKING
                        flags:
                        - suspicious_activity_detected: false
                          reason: FILE_TAMPERING
                          suspicious_activity_location:
                            upload_origin: PRE_IDENTIFIED
                            doc_uuid: f9ffbf6c-f5e1-486a-9736-5cad8a4a90f8
                            suspicious_activity_page_indexes: []
                      - form_uuid: d71ccd30-a8eb-40d1-80cc-73086edadb23
                        form_type:
                          name: BANK_ACCOUNT
                        account_type: CHECKING
                        flags:
                        - suspicious_activity_detected: false
                          reason: FILE_TAMPERING
                          suspicious_activity_location:
                            upload_origin: PRE_IDENTIFIED
                            doc_uuid: 8657dab0-4fa1-4da0-9428-9874100dd191
                            suspicious_activity_page_indexes: []
                    message: OK
        '400':
          description: Client Errors
          content:
            application/json:
              examples:
                Book not found:
                  value:
                    status: 400
                    code: 1401
                    response: null
                    message: Book not found
                    meta:
                      status: 400
                      msg: Book not found
                      code: 1401
                Missing Required Parameters:
                  value:
                    status: 400
                    code: 1103
                    response: null
                    message: Required pk or book uuid
                    meta:
                      status: 400
                      msg: Required pk or book uuid
                      code: 1103
                No Permission:
                  value:
                    status: 400
                    code: 2102
                    response: null
                    message: No permission to access this book
                    meta:
                      status: 400
                      msg: No permission to access this book
                      code: 2102
              schema:
                oneOf:
                - title: Book not found
                  type: object
                  properties:
                    status:
                      type: integer
                      description: A numerical code that indicates the status of the request.
                      example: 400
                    code:
                      type: integer
                      description: A numerical code that indicates the nature of an error.
                      example: 1401
                    response:
                      type: object
                      description: An object received from the server that potentially contains data.
                      example: null
                    message:
                      type: string
                      default: OK
                      description: A textual description that indicates details about this response's status.
                      example: Book not found
                    meta:
                      type: object
                      description: An object received from the server that potentially contains information about the request.
                      properties:
                        status:
                          type: integer
                          description: A numerical code that indicates the status of the request.
                          example: 400
                        message:
                          type: string
                          description: A textual description that indicates details about this response's status.
                          example: Book not found
                        code:
                          type: integer
                          example: 1401
                          description: A numerical code that indicates the nature of an error.
                - title: Missing Required Parameter
                  type: object
                  properties:
                    status:
                      type: integer
                      example: 400
                      description: A numerical code that indicates the status of the request.
                    code:
                      type: integer
                      example: 1103
                      description: A numerical code that indicates the nature of an error.
                    response:
                      type: object
                      example: null
                      description: An object received from the server that potentially contains data.
                    message:
                      type: string
                      example: Required pk or book uuid
                      description: A textual description that indicates details about this response's status.
                    meta:
                      type: object
                      description: An object received from the server that potentially contains information about the request.
                      properties:
                        status:
                          type: integer
                          example: 400
                          description: A numerical code that indicates the status of the request.
                        msg:
                          type: string
                          example: Required pk or book uuid
                          description: A textual description that indicates details about this response's status.
                        code:
                          type: integer
                          example: 1103
                          description: A numerical code that indicates the nature of an error.
                - title: No Permission
                  type: object
                  properties:
                    status:
                      type: integer
                      example: 400
                      description: A numerical code that indicates the status of the request.
                    code:
                      type: integer
                      example: 2102
                      description: A numerical code that indicates the nature of an error.
                    response:
                      type: object
                      example: null
                      description: An object received from the server that potentially contains data.
                    message:
                      type: string
                      example: No permission to access this book
                      description: A textual description that indicates details about this response's status.
                    meta:
                      type: object
                      description: An object received from the server that potentially contains information about the request.
                      properties:
                        status:
                          type: integer
                          example: 400
                          description: A numerical code that indicates the status of the request.
                        msg:
                          type: string
                          example: No permission to access this book
                          description: A textual description that indicates details about this response's status.
                        code:
                          type: integer
                          example: 2102
                          description: A numerical code that indicates the nature of an error.
components:
  examples:
    SuccessBookSignalsResponse:
      value:
        book_uuid: 739184f1-8bff-4c46-8b65-af0616902a11
        doc_analysis:
        - uploaded_doc_uuid: cbc5507d-b5e4-4ae0-bae3-4cda69c66476
          uploaded_doc_type: BANK_STATEMENT
          detect_status: COMPLETED
          form_analysis:
          - form_type: BANK_STATEMENT
            form_uuid: cbc5507d-b5e4-4ae0-bae3-4cda69c66476
            signals:
            - identifier: dollar_amount_edits
              display_name: Dollar Amount Edits
              signal_count: 1
              page_number: 1
              supporting_data:
              - values:
                - key: field_name
                  value: amount
                  data_type: str
                - key: tampered_text
                  value: 10,000.00
                  data_type: str
            visualizations:
            - page_number: 1
              page_visualizations:
              - visual_type: tamper_overview
                display_name: Tamper Overview
                description: Tampered fields are highlighted in red.
                image_url: https://api.ocrolus.com/v2/detect/visualization/ec75a8e8-07eb-4098-9c28-fad9d268d982
              - visual_type: misaligned_text
                display_name: Misaligned Text
                description: Fields are not aligned as expected. Gray lines indicate expected alignments. Misaligned fields are highlighted in red, with misaligned characters emphasized.
                image_url: https://api.ocrolus.com/v2/detect/visualization/2dfaab38-4420-4232-9b16-e4308a652112
            form_dashboard_url: https://dashboard.ocrolus.com/books/739184f1-8bff-4c46-8b65-af0616902a11?selectedUploadPks=56735083&selectedDocType=bankStatements&detectPaneOpen=True&detectTab=1
            form_authenticity:
              version: '1.0'
              score: 70
              reason_codes:
              - code: 006-L
                confidence: LOW
                description: fields misaligned
              authenticity_status: LOW
          is_image_based_pdf: false
        book_dashboard_url: https://dashboard.ocrolus.com/books/739184f1-8bff-4c46-8b65-af0616902a11
    DetectSignalFoundEvent:
      value:
        status: VERIFICATION_COMPLETE
        book_pk: 103780
        book_name: test-notification-3
        book_uuid: a2703368-b362-4d57-abd4-e00efc05657b
        event_name: document.detect.signal_found
        uploaded_doc_pk: 1434693
        notification_type: STATUS
        uploaded_doc_name: sample bankstatement3.pdf
        uploaded_doc_uuid: 4961c569-39a4-4f7c-8d32-02e6162e9b88
        is_cloud_compliant: true
        notification_reason: Detect signals found in document
    DetectSignalNotFoundEvent:
      value:
        status: VERIFICATION_COMPLETE
        book_pk: 103760
        book_name: test-notification
        book_uuid: 5a9f2eed-7de7-4d6a-ab8a-28d0e91bf680
        event_name: document.detect.signal_not_found
        uploaded_doc_pk: 1434677
        notification_type: STATUS
        uploaded_doc_name: sample bankstatement.pdf
        uploaded_doc_uuid: 63231617-d558-4838-ab4c-699b392f0c17
        is_cloud_compliant: true
        notification_reason: No detect signals found in document
    SuccessDocSignalsResponse:
      value:
        book_uuid: 739184f1-8bff-4c46-8b65-af0616902a11
        doc_analysis:
        - uploaded_doc_uuid: cbc5507d-b5e4-4ae0-bae3-4cda69c66476
          uploaded_doc_type: BANK_STATEMENT
          detect_status: COMPLETED
          form_analysis:
          - form_type: BANK_STATEMENT
            form_uuid: cbc5507d-b5e4-4ae0-bae3-4cda69c66476
            signals:
            - identifier: dollar_amount_edits
              display_name: Dollar Amount Edits
              signal_count: 1
              page_number: 1
              supporting_data:
              - values:
                - key: field_name
                  value: amount
                  data_type: str
                - key: tampered_text
                  value: 10,000.00
                  data_type: str
            visualizations:
            - page_number: 1
              page_visualizations:
              - visual_type: tamper_overview
                display_name: Tamper Overview
                description: Tampered fields are highlighted in red.
                image_url: https://api.ocrolus.com/v2/detect/visualization/ec75a8e8-07eb-4098-9c28-fad9d268d982
              - visual_type: misaligned_text
                display_name: Misaligned Text
                description: Fields are not aligned as expected. Gray lines indicate expected alignments. Misaligned fields are highlighted in red, with misaligned characters emphasized.
                image_url: https://api.ocrolus.com/v2/detect/visualization/2dfaab38-4420-4232-9b16-e4308a652112
            form_dashboard_url: https://dashboard.ocrolus.com/books/739184f1-8bff-4c46-8b65-af0616902a11?selectedUploadPks=56735083&selectedDocType=bankStatements&detectPaneOpen=True&detectTab=1
            form_authenticity:
              version: '1.0'
              score: 70
              reason_codes:
              - code: 006-L
                confidence: LOW
                description: fields misaligned
          is_image_based_pdf: false
        book_dashboard_url: https://dashboard.ocrolus.com/books/739184f1-8bff-4c46-8b65-af0616902a11
  schemas:
    DocumentAnalysis:
      description: 'Represents signal analysis for a particular <<glossary:Document>> within a <<glossary:Book>>.

        '
      required:
      - uploaded_doc_type
      - detect_status
      - uploaded_doc_uuid
      - form_analysis
      properties:
        uploaded_doc_uuid:
          type: string
          format: uuid
          description: 'The unique identifier of the uploaded document.

            '
        uploaded_doc_type:
          type: string
          description: 'The type of the uploaded document. We currently only support signal analysis on the types that are listed here.

            '
          enum:
          - BANK_STATEMENT
          - PAYSTUB
          - FORM
        mixed_uploaded_doc_uuid:
          type: string
          format: uuid
          nullable: true
          description: 'The unique identifier of the Mixed Document that this object represents. This field will be `null` if this was not a Mixed Document.

            '
        detect_status:
          type: string
          description: 'The current state of this document in our processing pipeline. The statuses are as follows:

            - *`PENDING`:* This document is still being processed, and no results are available yet. Check back later.

            - *`COMPLETED`:* This document has been completely processed, and complete results are enclosed.

            - *`UNABLE_TO_PROCESS`:* This document could not be processed, most likely because it''s of an unsupported type.

            - *`UNSUPPORTED`:* This document is of unsupported file type.

            - *`DELETED`:* This document has been deleted.

            '
          enum:
          - PENDING
          - COMPLETED
          - UNABLE_TO_PROCESS
          - UNSUPPORTED
          - DELETED
        form_analysis:
          type: array
          minItems: 1
          description: 'Analysis results on each form in this document. Each object represents a different form.

            '
          items:
            $ref: '#/components/schemas/FormAnalysis'
        is_image_based_pdf:
          type: string
          description: Determines whether the document is an image based PDF (a scan of a PDF or an export of a PDF or similar) or an original PDF produced by a financial institution or payroll provider.
    VisualizationRegion:
      description: 'A highlighted region of suspected fraud, as well as the information needed to depict it visually.

        '
      required:
      - visual_type
      - display_name
      - description
      - image_url
      properties:
        visual_type:
          type: string
          description: 'A machine-readable identifier that indicates the type of file tampering visualization offered in this image. This value will not change; you may rely on it in your application logic.

            - *`tamper_overview`:* Tampered fields are highlighted in red.

            - *`edit_regions`:* Red highlights indicate the areas of the original document that were changed.

            - *`original_pdf`:* Red highlights indicate the areas of the original document that were changed.

            - *`tampered_font`:* The same field appears to use multiple fonts. Where possible, the fonts within a field are highlighted with different colors.

            - *`added_fonts`:* Text that was added to the document is highlighted in red.

            - *`overwritten_text`:* Text has been added to (or modified from) the original document. Where possible, unchanged text will be highlighted in green while added text will be highlighted in red. In some cases, only one of these two regions will be shown; this still indicates suspicious activity.

            '
          enum:
          - tamper_overview
          - edit_regions
          - original_pdf
          - tampered_fonts
          - added_fonts
          - overwritten_text
        display_name:
          type: string
          minLength: 1
          description: 'A human-readable version of the value given in `identifier`. You should display this value within your application.

            '
        description:
          type: string
          minLength: 1
          description: 'A human-readable description of the visualized fraud signal and guidance on how to interpret it. You should display this value within your application.

            '
        image_url:
          type: string
          format: url
          description: 'A URL to an image that represents this visualization. The image''s content is the analyzed page with translucent colored squares overlaid on the regions of suspected fraud.

            The image requires authentication to access, which means it can''t be hot-linked within your own web apps. You can provide your credentials to retrieve it the same way you would with our other endpoints.

            The image is stored indefinitely, but will be deleted if the associated <<glossary:Book>> or <<glossary:Document>> is deleted.

            '
    SignalAnalysis:
      description: 'The result of the fraud analysis that was requested for the provided <<glossary:Book>>.

        '
      required:
      - book_uuid
      - doc_analysis
      properties:
        book_uuid:
          type: string
          format: uuid
          description: 'The unique identifier of the Book that was provided to the endpoint''s request.

            '
        doc_analysis:
          type: array
          minItems: 1
          description: 'Details about potential indicators of fraud found within the analyzed <<glossary:Book>>. Each object in this array represents one document.

            '
          items:
            $ref: '#/components/schemas/DocumentAnalysis'
        book_dashboard_url:
          type: string
          description: A unique Ocrolus Dashboard URL that links directly to the Dashboard for the given <<glossary:Book>>.
    Signal:
      description: 'Details about a suspected instance of fraudulent document manipulation and all accompanying data.

        '
      required:
      - identifier
      - display_name
      - signal_count
      - supporting_data
      - page_number
      properties:
        identifier:
          type: string
          description: "An identifier that describes the type of suspected fraud signal. This value is stable and can be relied upon in your application logic. For a list of all possible values, [visit our guide on Detect Signals](https://docs.ocrolus.com/reference/signal-definition#identifier) \n"
        display_name:
          type: string
          description: 'A human-friendly name for the fraud signal named in `identifier`. This value is unlikely to change, but you shouldn''t rely on it for application logic. You should display this value within your own application where applicable.

            '
        signal_count:
          type: integer
          minimum: 1
          description: 'The number of fraud signals that we''ve identified. Will be the same as the length of the `supporting_data` array.

            '
        page_number:
          type: integer
          minimum: 1
          nullable: true
          description: 'The (one-indexed) number of the flagged page. Will be `null` if the fraud signal isn''t specific to any particular page, such as for inconsistent data or erroneous arithmetic.

            This number refers to the index of the page within the document, rather than any number that''s captured from the page or its

# --- truncated at 32 KB (44 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/ocrolus/refs/heads/main/openapi/ocrolus-detect-api-openapi.yml