Good Timing Metrics API
The metrics API from Good Timing — 4 operation(s) for metrics.
The metrics API from Good Timing — 4 operation(s) for metrics.
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/goodtiming-ai:goodtiming-ai-metrics-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a 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: 3.2.0
info:
title: Goodtiming Ai Metrics API
version: 0.1.0
description: 'Operations tagged metrics across 2 of this provider''s published API definitions: goodtiming-ai-baton-console-openapi.json, goodtiming-ai-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://baton.goodtiming.ai
description: Baton API origin (BATON_API_BASE_URL default in github.com/good-timing/baton-mcp README)
tags:
- name: Metrics
paths:
/v0/metrics/demand_intents:
get:
description: What agents arrive to do on a vendor, ranked by distinct sessions.
operationId: demand_intents
parameters:
- description: The vendor surface being asked about (a facet, not the tenant scope).
in: query
name: vendor_id
required: true
schema:
description: The vendor surface being asked about (a facet, not the tenant scope).
title: Vendor Id
type: string
- description: Extra fields to return. 'signal_ids' adds, per row and in total, the ids of the signals behind each count. An agent does not need them.
in: query
name: include
required: false
schema:
description: Extra fields to return. 'signal_ids' adds, per row and in total, the ids of the signals behind each count. An agent does not need them.
items:
const: signal_ids
type: string
title: Include
type: array
- description: Window on captured_at, in days back from now. Omit for all-time.
in: query
name: window_days
required: false
schema:
anyOf:
- exclusiveMinimum: 0
type: integer
- type: 'null'
description: Window on captured_at, in days back from now. Omit for all-time.
title: Window Days
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AgentAnswer'
description: Successful Response
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
security:
- TenantId: []
- BearerApiKey: []
summary: Demand Intents
tags:
- Metrics
/v0/metrics/failure_modes_for_tool:
get:
description: Distinct ways one tool fails, semantically clustered.
operationId: failure_modes_for_tool
parameters:
- description: The vendor surface being asked about (a facet, not the tenant scope).
in: query
name: vendor_id
required: true
schema:
description: The vendor surface being asked about (a facet, not the tenant scope).
title: Vendor Id
type: string
- description: The tool whose distinct failure modes to cluster.
in: query
name: tool_name
required: true
schema:
description: The tool whose distinct failure modes to cluster.
title: Tool Name
type: string
- description: Extra fields to return. 'signal_ids' adds, per row and in total, the ids of the signals behind each count. An agent does not need them.
in: query
name: include
required: false
schema:
description: Extra fields to return. 'signal_ids' adds, per row and in total, the ids of the signals behind each count. An agent does not need them.
items:
const: signal_ids
type: string
title: Include
type: array
- description: Window on captured_at, in days back from now. Omit for all-time.
in: query
name: window_days
required: false
schema:
anyOf:
- exclusiveMinimum: 0
type: integer
- type: 'null'
description: Window on captured_at, in days back from now. Omit for all-time.
title: Window Days
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AgentAnswer'
description: Successful Response
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
security:
- TenantId: []
- BearerApiKey: []
summary: Failure Modes For Tool
tags:
- Metrics
/v0/metrics/top_friction_by_tool:
get:
description: Top friction on a vendor, ranked by distinct sessions per tool.
operationId: top_friction_by_tool
parameters:
- description: The vendor surface being asked about (a facet, not the tenant scope).
in: query
name: vendor_id
required: true
schema:
description: The vendor surface being asked about (a facet, not the tenant scope).
title: Vendor Id
type: string
- description: Extra fields to return. 'signal_ids' adds, per row and in total, the ids of the signals behind each count. An agent does not need them.
in: query
name: include
required: false
schema:
description: Extra fields to return. 'signal_ids' adds, per row and in total, the ids of the signals behind each count. An agent does not need them.
items:
const: signal_ids
type: string
title: Include
type: array
- description: Window on captured_at, in days back from now. Omit for all-time.
in: query
name: window_days
required: false
schema:
anyOf:
- exclusiveMinimum: 0
type: integer
- type: 'null'
description: Window on captured_at, in days back from now. Omit for all-time.
title: Window Days
- description: Narrow to one signal_type (e.g. 'failure').
in: query
name: signal_type
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: Narrow to one signal_type (e.g. 'failure').
title: Signal Type
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AgentAnswer'
description: Successful Response
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
security:
- TenantId: []
- BearerApiKey: []
summary: Top Friction By Tool
tags:
- Metrics
/v0/metrics/top_gaps_clustered:
get:
description: Capability gaps agents ask a vendor to build, semantically clustered.
operationId: top_gaps_clustered
parameters:
- description: The vendor surface being asked about (a facet, not the tenant scope).
in: query
name: vendor_id
required: true
schema:
description: The vendor surface being asked about (a facet, not the tenant scope).
title: Vendor Id
type: string
- description: Extra fields to return. 'signal_ids' adds, per row and in total, the ids of the signals behind each count. An agent does not need them.
in: query
name: include
required: false
schema:
description: Extra fields to return. 'signal_ids' adds, per row and in total, the ids of the signals behind each count. An agent does not need them.
items:
const: signal_ids
type: string
title: Include
type: array
- description: Window on captured_at, in days back from now. Omit for all-time.
in: query
name: window_days
required: false
schema:
anyOf:
- exclusiveMinimum: 0
type: integer
- type: 'null'
description: Window on captured_at, in days back from now. Omit for all-time.
title: Window Days
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AgentAnswer'
description: Successful Response
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
description: Validation Error
security:
- TenantId: []
- BearerApiKey: []
summary: Top Gaps Clustered
tags:
- Metrics
components:
schemas:
ValidationError:
properties:
ctx:
title: Context
type: object
input:
title: Input
loc:
items:
anyOf:
- type: string
- type: integer
title: Location
type: array
msg:
title: Message
type: string
type:
title: Error Type
type: string
required:
- loc
- msg
- type
title: ValidationError
type: object
AgentAnswerRow:
description: 'A ranked row: the entity and its metric, without the ids behind it.'
properties:
label:
title: Label
type: string
value:
title: Value
type: integer
required:
- label
- value
title: AgentAnswerRow
type: object
AgentAnswer:
description: 'An ``Answer`` without its ``signal_ids``.
An agent cannot use the ids and pays tokens for every one, so the
agent-facing surfaces return this.'
properties:
answer_type:
title: Answer Type
type: string
computed_at:
format: date-time
title: Computed At
type: string
embedding_available:
title: Embedding Available
type: boolean
headline:
title: Headline
type: string
n_sessions:
title: N Sessions
type: integer
n_signals:
title: N Signals
type: integer
rows:
items:
$ref: '#/components/schemas/AgentAnswerRow'
title: Rows
type: array
required:
- answer_type
- headline
- rows
- n_signals
- n_sessions
- embedding_available
- computed_at
title: AgentAnswer
type: object
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
title: Detail
type: array
title: HTTPValidationError
type: object
securitySchemes:
BearerApiKey:
description: '''Bearer <your API key>''.'
in: header
name: Authorization
type: apiKey
TenantId:
description: 'Auth key: the tenant identifier the Bearer token belongs to.'
in: header
name: x-baton-tenant-id
type: apiKey
x-refined-from:
- goodtiming-ai-baton-console-openapi.json
- goodtiming-ai-openapi.yml