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.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/crowddev-dashboard-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
openapi: 3.2.0
info:
title: Crowddev Dashboard API
version: 1.0.0
description: 'Operations tagged Dashboard across 2 of this provider''s published API definitions: crowddev-cdp-akrites-openapi.yml, crowddev-cdp-ossprey-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://cm.lfx.dev/api/v1
description: Production
- url: https://lf-staging.crowd.dev/api/v1
description: Staging
tags:
- name: Dashboard
description: KPI bar metrics and activity feed.
paths:
/akrites/metrics:
get:
operationId: getAkritesMetrics
summary: Get KPI bar metrics
description: 'Returns aggregate counts that power the global KPI bar on the OSSPREY dashboard (total packages, coverage %, active stewards, unassigned critical, needs-attention, escalated).
'
tags:
- Dashboard
responses:
'200':
description: Metrics snapshot.
content:
application/json:
schema:
$ref: '#/components/schemas/OsspreyMetrics'
'401':
description: Missing or invalid bearer token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- BearerAuth: []
servers:
- url: https://cm.lfx.dev/api/v1
description: Production
- url: https://lf-staging.crowd.dev/api/v1
description: Staging
/akrites/activity:
get:
operationId: getAkritesActivity
summary: Get stewardship activity feed
description: 'Returns a paginated, reverse-chronological list of stewardship activity events across all packages (status changes, assignments, escalations, etc.).
'
tags:
- Dashboard
parameters:
- name: page
in: query
schema:
type: integer
minimum: 1
default: 1
- name: pageSize
in: query
schema:
type: integer
minimum: 1
maximum: 100
default: 25
responses:
'200':
description: Paginated activity feed.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/PaginationMeta'
- type: object
required:
- rows
properties:
rows:
type: array
items:
$ref: '#/components/schemas/ActivityEntry'
'400':
description: Validation error.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Missing or invalid bearer token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- BearerAuth: []
servers:
- url: https://cm.lfx.dev/api/v1
description: Production
- url: https://lf-staging.crowd.dev/api/v1
description: Staging
/ossprey/metrics:
get:
operationId: getOsspreyMetrics
summary: Global KPI bar metrics
description: 'Returns the seven aggregate metrics shown in the sticky KPI bar across all four dashboard tabs. Fetch once on page load; refresh after any write action.
'
tags:
- Dashboard
security:
- BearerAuth: []
responses:
'200':
description: KPI metrics.
content:
application/json:
schema:
type: object
required:
- totalPackages
- criticalPackages
- coveragePercent
- activeStewards
- unassignedCritical
- needsAttention
- escalated
properties:
totalPackages:
type: integer
description: Total critical packages (is_critical = true).
example: 1842
criticalPackages:
type: integer
description: Critical packages with at least one critical-severity advisory.
example: 312
coveragePercent:
type: number
format: float
description: 'Percentage of critical packages with status in (assessing, active, needs_attention). One decimal place.
'
example: 33.2
coverageTrend:
type:
- number
- 'null'
description: 'Percentage-point change vs. previous month. Null until snapshot mechanism is implemented.
'
example: null
activeStewards:
type: integer
description: 'COUNT(DISTINCT user_id) from stewardship_stewards where deleted_at IS NULL and stewardship status != inactive.
'
example: 42
unassignedCritical:
type: integer
description: Critical packages with no stewardship row or status = unassigned.
example: 1230
needsAttention:
type: integer
description: Critical packages with status = needs_attention.
example: 47
escalated:
type: integer
description: Critical packages with status = escalated.
example: 8
example:
totalPackages: 1842
criticalPackages: 312
coveragePercent: 33.2
coverageTrend: null
activeStewards: 42
unassignedCritical: 1230
needsAttention: 47
escalated: 8
'401':
description: Missing or invalid bearer token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
servers:
- url: https://cm.lfx.dev/api/v1
description: Production
- url: https://lf-staging.crowd.dev/api/v1
description: Staging
/ossprey/activity:
get:
operationId: listStewardshipActivity
summary: Paginated stewardship activity feed
description: 'Returns recent stewardship events across all packages, ordered by most recent first. Used to populate the activity feed on the Overview tab. The frontend groups items by day using `createdAt`.
'
tags:
- Dashboard
security:
- BearerAuth: []
parameters:
- name: page
in: query
schema:
type: integer
minimum: 1
default: 1
- name: pageSize
in: query
schema:
type: integer
minimum: 1
maximum: 100
default: 25
responses:
'200':
description: Paginated activity feed.
content:
application/json:
schema:
type: object
required:
- rows
- total
- page
- pageSize
properties:
rows:
type: array
items:
$ref: '#/components/schemas/ActivityFeedItem'
total:
type: integer
example: 142
page:
type: integer
example: 1
pageSize:
type: integer
example: 25
example:
rows:
- id: '9182736'
stewardshipId: '4501'
packagePurl: pkg:maven/org.slf4j/slf4j-api
packageName: slf4j-api
packageEcosystem: maven
actorUserId: auth0|mock-user-alice
actorType: user
activityType: state_changed
content: Assessment complete, moving to active
metadata:
from: assessing
to: active
stewardshipStatus: active
createdAt: '2026-06-14T10:23:00Z'
total: 11
page: 1
pageSize: 25
'400':
description: Validation error.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Missing or invalid bearer token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
servers:
- url: https://cm.lfx.dev/api/v1
description: Production
- url: https://lf-staging.crowd.dev/api/v1
description: Staging
components:
schemas:
Error:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
properties:
code:
type: string
example: VALIDATION_ERROR
message:
type: string
example: Invalid query parameter.
StewardshipStatus:
type: string
enum:
- unassigned
- open
- assessing
- active
- needs_attention
- escalated
- blocked
- inactive
ActivityEntry:
type: object
required:
- id
- stewardshipId
- packagePurl
- packageName
- packageEcosystem
- actorUserId
- actorName
- actorType
- activityType
- stewardshipStatus
- createdAt
properties:
id:
type: string
stewardshipId:
type: string
packagePurl:
type: string
packageName:
type: string
packageEcosystem:
type: string
actorUserId:
type: string
nullable: true
actorName:
type: string
nullable: true
description: Display name (currently same as actorUserId; resolution from members table is pending).
actorType:
type: string
example: user
activityType:
type: string
example: status_change
content:
type: string
nullable: true
metadata:
type: object
nullable: true
additionalProperties: true
stewardshipStatus:
$ref: '#/components/schemas/StewardshipStatus'
createdAt:
type: string
format: date-time
PaginationMeta:
type: object
required:
- total
- page
- pageSize
properties:
total:
type: integer
page:
type: integer
pageSize:
type: integer
OsspreyMetrics:
type: object
required:
- criticalPackages
- coveragePercent
- coverageTrend
- activeStewards
- unassignedCritical
- needsAttention
- escalated
properties:
criticalPackages:
type: integer
description: Total number of packages marked as critical (is_critical = true).
coveragePercent:
type: number
format: float
description: Percentage of critical packages with an active stewardship (assessing, active, or needs_attention).
coverageTrend:
type: number
format: float
nullable: true
description: Coverage delta vs. previous period. Currently always null (requires snapshot mechanism).
activeStewards:
type: integer
description: Distinct stewards assigned to a non-inactive stewardship.
unassignedCritical:
type: integer
description: Critical packages with no stewardship or status = unassigned.
needsAttention:
type: integer
description: Critical packages whose stewardship status is needs_attention.
escalated:
type: integer
description: Critical packages whose stewardship status is escalated.
ActivityFeedItem:
type: object
required:
- id
- stewardshipId
- packagePurl
- packageName
- packageEcosystem
- actorType
- activityType
- stewardshipStatus
- createdAt
properties:
id:
type: string
example: '9182736'
stewardshipId:
type: string
example: '4501'
packagePurl:
type: string
example: pkg:npm/minimist@1.2.6
packageName:
type: string
example: minimist
packageEcosystem:
type: string
example: npm
actorUserId:
type:
- string
- 'null'
description: Auth0 sub. Null for system events.
example: auth0|abc123
actorName:
type:
- string
- 'null'
description: 'Display name of the actor. Currently returns actorUserId as a placeholder — will be resolved to a display name once the cross-DB users join is implemented.
'
example: auth0|abc123
actorType:
type: string
enum:
- user
- system
activityType:
type: string
enum:
- state_changed
- steward_added
- steward_removed
- escalation
- escalation_resolved
- assessment_started
- assessment_completed
- assessment_flagged
- spot_check
- note_added
example: escalation
content:
type:
- string
- 'null'
example: 'Escalated with resolution path: right_of_first_refusal'
metadata:
type:
- object
- 'null'
additionalProperties: true
stewardshipStatus:
$ref: '#/components/schemas/StewardshipStatus'
createdAt:
type: string
format: date-time
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
x-refined-from:
- crowddev-cdp-akrites-openapi.yml
- crowddev-cdp-ossprey-openapi.yml