Resourcly Analytics API

The analytics API from Resourcly — 7 operation(s) for analytics.

Operations 7

GET /analytics/cost-summary Get should-cost summary #
GET /analytics/export/items/csv Export items as CSV #
GET /analytics/export/procurement/xlsx Export procurement recommendation report as XLSX #
GET /analytics/items/merged List items linked to multiple source documents #
GET /analytics/items/price-analysis Get item price analysis with similar items #
GET /analytics/items/stats Get item analytics statistics #
POST /analytics/price-regression/stream Stream AI price regression analysis #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/resourcly-analytics-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

resourcly-analytics-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: API for document processing, item similarity search, and analytics.
  title: Resourcly Analytics API
  termsOfService: https://resourcly.com/terms
  contact:
    name: API Support
    email: support@resourcly.com
  license:
    name: Proprietary
  version: 1.0.0
servers:
- url: https://api.resourcly.com/v1
tags:
- name: Analytics
paths:
  /analytics/cost-summary:
    get:
      security:
      - BearerAuth: []
      description: 'Returns should-cost metrics: total estimated cost, average cost

        per item, and cost breakdown by category.'
      tags:
      - Analytics
      summary: Get should-cost summary
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/models.CostSummary'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/models.ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/models.ErrorResponse'
      operationId: getAnalyticsCostSummary
      x-operation-id-source: derived
  /analytics/export/items/csv:
    get:
      security:
      - BearerAuth: []
      description: Generates and returns a CSV file with all items for the business
      tags:
      - Analytics
      summary: Export items as CSV
      responses:
        '200':
          description: OK
          content:
            text/csv:
              schema:
                type: string
                format: binary
        '401':
          description: Unauthorized
          content:
            text/csv:
              schema:
                $ref: '#/components/schemas/models.ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            text/csv:
              schema:
                $ref: '#/components/schemas/models.ErrorResponse'
      operationId: getAnalyticsExportItemsCsv
      x-operation-id-source: derived
  /analytics/export/procurement/xlsx:
    get:
      security:
      - BearerAuth: []
      description: 'Generates a multi-sheet XLSX with consolidation summary,

        duplicate groups with members, and all items.'
      tags:
      - Analytics
      summary: Export procurement recommendation report as XLSX
      responses:
        '200':
          description: OK
          content:
            application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:
              schema:
                type: string
                format: binary
        '401':
          description: Unauthorized
          content:
            application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:
              schema:
                $ref: '#/components/schemas/models.ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:
              schema:
                $ref: '#/components/schemas/models.ErrorResponse'
      operationId: getAnalyticsExportProcurementXlsx
      x-operation-id-source: derived
  /analytics/items/merged:
    get:
      security:
      - BearerAuth: []
      description: 'Returns a paginated list of items that have been enriched from

        more than one source document (merged items), along with the

        source document metadata for each item.'
      tags:
      - Analytics
      summary: List items linked to multiple source documents
      parameters:
      - description: Page size (default 50, max 100)
        name: limit
        in: query
        schema:
          type: integer
      - description: Offset for pagination (default 0)
        name: offset
        in: query
        schema:
          type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/models.MergedItemsListResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/models.ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/models.ErrorResponse'
      operationId: getAnalyticsItemsMerged
      x-operation-id-source: derived
  /analytics/items/price-analysis:
    get:
      security:
      - BearerAuth: []
      description: 'Returns price ranges (min/max) and inventory stock for items

        that have similarity relationships above the given threshold, aggregated from ERP data.'
      tags:
      - Analytics
      summary: Get item price analysis with similar items
      parameters:
      - description: Minimum similarity score (0-1, default 0.8)
        name: threshold
        in: query
        schema:
          type: number
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/models.ItemPriceAnalysisResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/models.ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/models.ErrorResponse'
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/models.ErrorResponse'
      operationId: getAnalyticsItemsPriceAnalysis
      x-operation-id-source: derived
  /analytics/items/stats:
    get:
      security:
      - BearerAuth: []
      description: 'Returns aggregated item analytics for the authenticated business:

        duplicate %, similarity distribution, new items timeline,

        documentation availability, review status timeline, and active/passive breakdown.'
      tags:
      - Analytics
      summary: Get item analytics statistics
      parameters:
      - description: Number of days for timelines (default 30, max 90)
        name: days
        in: query
        schema:
          type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/models.ItemAnalyticsResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/models.ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/models.ErrorResponse'
      operationId: getAnalyticsItemsStats
      x-operation-id-source: derived
  /analytics/price-regression/stream:
    post:
      security:
      - BearerAuth: []
      description: 'Accepts an XLSX spreadsheet (max 1 MB) containing purchased parts with

        actual and predicted prices, and streams a token-by-token analysis

        identifying the part with the highest savings potential.'
      tags:
      - Analytics
      summary: Stream AI price regression analysis
      responses:
        '200':
          description: SSE stream of Claude Haiku response
          content:
            text/event-stream:
              schema:
                type: string
        '400':
          description: Bad Request
          content:
            text/event-stream:
              schema:
                $ref: '#/components/schemas/models.ErrorResponse'
        '401':
          description: Unauthorized
          content:
            text/event-stream:
              schema:
                $ref: '#/components/schemas/models.ErrorResponse'
        '413':
          description: Request Entity Too Large
          content:
            text/event-stream:
              schema:
                $ref: '#/components/schemas/models.ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            text/event-stream:
              schema:
                $ref: '#/components/schemas/models.ErrorResponse'
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  description: XLSX spreadsheet file (max 1 MB)
                  format: binary
              required:
              - file
      operationId: postAnalyticsPriceRegressionStream
      x-operation-id-source: derived
components:
  schemas:
    models.MergedItemDocument:
      type: object
      properties:
        classification:
          type: string
        filename:
          type: string
        id:
          type: string
        status:
          type: string
    models.DailyCountEntry:
      type: object
      properties:
        count:
          type: integer
        date:
          type: string
    models.ItemPriceEntry:
      type: object
      properties:
        main_item:
          $ref: '#/components/schemas/models.ItemPriceDetail'
        max_price:
          type: number
        min_price:
          type: number
        similar_items:
          type: array
          items:
            $ref: '#/components/schemas/models.ItemPriceDetail'
        total_stock:
          type: number
    models.ReviewStatusTimelineEntry:
      type: object
      properties:
        alternative:
          type: integer
        date:
          type: string
        duplicate:
          type: integer
        not_related:
          type: integer
        pending_review:
          type: integer
    models.AIClassificationClusterEntry:
      type: object
      properties:
        classification:
          type: string
        cluster_count:
          type: integer
    models.MergedItemsListResponse:
      type: object
      properties:
        business_id:
          type: string
        items:
          type: array
          items:
            $ref: '#/components/schemas/models.MergedItemEntry'
        limit:
          type: integer
        offset:
          type: integer
        total:
          type: integer
    models.ItemAnalyticsResponse:
      type: object
      properties:
        ai_classification_clusters:
          type: array
          items:
            $ref: '#/components/schemas/models.AIClassificationClusterEntry'
        duplicate_erp_records:
          type: integer
        duplicate_items:
          type: integer
        duplicate_percent:
          description: 'DuplicatePercent: % of ERP records that matched to items (duplicate detection).'
          type: number
        merged_documents_count:
          description: 'MergedDocumentsCount: total source documents contributing to merged items.'
          type: integer
        merged_items_count:
          description: 'MergedItemsCount: number of items linked to more than one source document.'
          type: integer
        new_items_timeline:
          type: array
          items:
            $ref: '#/components/schemas/models.DailyCountEntry'
        review_status_timeline:
          type: array
          items:
            $ref: '#/components/schemas/models.ReviewStatusTimelineEntry'
        similar_items:
          type: integer
        similar_threshold:
          description: 'SimilarThreshold: the minimum similarity score used for counting similar items.

            Defaults to 0.8 but may be overridden per business.'
          type: number
        similarity_classes:
          description: 'SimilarityClasses: per-class item counts for tenants on the classified

            similarity taxonomy (duplicate, interchangeable_variant, superseded,

            product_variant, related_parts, component_of). When present the frontend

            renders one tile per class instead of the legacy duplicate/similar pair.'
          type: object
          additionalProperties:
            type: integer
        total_erp_records:
          type: integer
        total_items:
          type: integer
    models.ItemPriceAnalysisResponse:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/models.ItemPriceEntry'
        x_axis_label:
          type: string
        y_axis_label:
          type: string
    models.MergedItemEntry:
      type: object
      properties:
        category:
          type: string
        doc_count:
          type: integer
        documents:
          type: array
          items:
            $ref: '#/components/schemas/models.MergedItemDocument'
        id:
          type: string
        manufacturer:
          type: string
        part_number:
          type: string
        title:
          type: string
    models.ErrorResponse:
      type: object
      properties:
        code:
          type: string
        details: {}
        error:
          type: string
    models.ItemPriceDetail:
      type: object
      properties:
        category:
          type: string
        id:
          type: string
        max_price:
          type: number
        min_price:
          type: number
        similarity_score:
          type: number
        total_stock:
          type: number
    models.CostSummary:
      type: object
      properties:
        avg_cost_per_item_eur:
          type: number
        cost_by_category:
          type: object
          additionalProperties:
            type: number
            format: float64
        items_with_estimates:
          type: integer
        total_estimated_cost_eur:
          type: number
  securitySchemes:
    BearerAuth:
      description: 'Firebase JWT token. Format: "Bearer {token}"'
      type: apiKey
      name: Authorization
      in: header