Resourcly analytics API
The analytics API from Resourcly — 7 operation(s) for analytics.
The analytics API from Resourcly — 7 operation(s) for analytics.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/resourcly-analytics-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: 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