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'
  /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'
  /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'
  /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'
  /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'
  /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'
  /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
components:
  schemas:
    models.ReviewStatusTimelineEntry:
      type: object
      properties:
        alternative:
          type: integer
        date:
          type: string
        duplicate:
          type: integer
        not_related:
          type: integer
        pending_review:
          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.AIClassificationClusterEntry:
      type: object
      properties:
        classification:
          type: string
        cluster_count:
          type: integer
    models.ErrorResponse:
      type: object
      properties:
        code:
          type: string
        details: {}
        error:
          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.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.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
    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.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.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
  securitySchemes:
    BearerAuth:
      description: 'Firebase JWT token. Format: "Bearer {token}"'
      type: apiKey
      name: Authorization
      in: header