Uniform Aggregates API
The Aggregates API from Uniform — 1 operation(s) for aggregates.
The Aggregates API from Uniform — 1 operation(s) for aggregates.
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/uniform:uniform-aggregates-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: Uniform Platform Aggregates API
version: '2.0'
tags:
- name: Aggregates
paths:
/api/v2/aggregate:
options:
tags:
- Aggregates
description: Handles preflight requests. This endpoint allows CORS.
responses:
'204':
description: OK
summary: Describe api aggregate
x-summary-source: derived
operationId: optionsApiV2Aggregate
x-operation-id-source: derived
get:
tags:
- Aggregates
parameters:
- in: query
name: projectId
description: The project to fetch aggregates for
required: true
schema:
type: string
format: uuid
- in: query
name: aggregateId
description: Limit the results to a specific aggregate ID
required: false
schema:
type: string
minLength: 1
maxLength: 36
pattern: ^[A-Za-z0-9\-\$]+$
- in: query
name: type
description: 'Limit the results to a specific aggregate type
0: Audience
1: Intent
'
required: false
schema:
type: number
enum:
- 0
- 1
security:
- ApiKeyAuth: []
- BearerAuth: []
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
required:
- aggregates
properties:
aggregates:
type: array
items:
$ref: '#/components/schemas/AggregateData'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'429':
$ref: '#/components/responses/RateLimitError'
'500':
$ref: '#/components/responses/InternalServerError'
summary: Get api aggregate
x-summary-source: derived
operationId: getApiV2Aggregate
x-operation-id-source: derived
put:
tags:
- Aggregates
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- projectId
- aggregate
properties:
aggregate:
$ref: '#/components/schemas/AggregateData'
projectId:
type: string
format: uuid
skipInputs:
type: boolean
default: false
description: 'Skips updating aggregate inputs and upserts only the aggregate definition.
Inputs data is still required, but is ignored and not saved or validated.
Useful when creating aggregates that reference each other: Create the definitions, then the inputs.
'
additionalProperties: false
security:
- ApiKeyAuth: []
- BearerAuth: []
responses:
'204':
description: OK
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'429':
$ref: '#/components/responses/RateLimitError'
'500':
$ref: '#/components/responses/InternalServerError'
summary: Replace api aggregate
x-summary-source: derived
operationId: putApiV2Aggregate
x-operation-id-source: derived
delete:
tags:
- Aggregates
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- projectId
- aggregateId
properties:
aggregateId:
type: string
maxLength: 40
minLength: 1
projectId:
type: string
format: uuid
additionalProperties: false
security:
- ApiKeyAuth: []
- BearerAuth: []
responses:
'204':
description: OK
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'429':
$ref: '#/components/responses/RateLimitError'
'500':
$ref: '#/components/responses/InternalServerError'
summary: Delete api aggregate
x-summary-source: derived
operationId: deleteApiV2Aggregate
x-operation-id-source: derived
components:
responses:
InternalServerError:
description: Execution error occurred
UnauthorizedError:
description: API key or token was not valid
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
ForbiddenError:
description: Permission was denied
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
BadRequestError:
description: Request input validation failed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
RateLimitError:
description: Too many requests in allowed time period
schemas:
AggregateDimensionInput:
description: Defines an input dimension to an aggregate dimension
type: object
required:
- dim
properties:
dim:
description: 'Dimension name to reference as an input.
For enrichment inputs, use CATEGORY_KEY as the dimension.
Enrichments, signals, and other aggregate dimensions may be referenced.
Note that creating a cycle of aggregate dimensions is allowed, however
the final score will _ignore_ the cycled aggregate dimension in the result.
This can be used to create mutually exclusive aggregates
'
type: string
minLength: 1
sign:
description: 'The sign of the input dimension controls how it affects the aggregate dimension''s final score.
''+'' = add to the final score
''-'' = subtract from the final score
''c'' = clear the final score (if the input dimension has any score at all, this aggregate will have no score regardless of other inputs)
Default if unspecified: ''+''
'
type: string
enum:
- +
- '-'
- c
default: +
additionalProperties: false
Error:
type: object
properties:
errorMessage:
description: Error message(s) that occurred while processing the request
oneOf:
- type: array
items:
type: string
- type: string
AggregateData:
type: object
required:
- id
- name
- type
- inputs
properties:
id:
type: string
minLength: 1
maxLength: 36
pattern: ^[A-Za-z0-9\-\$]+$
name:
type: string
minLength: 1
maxLength: 100
pattern: ^[^<>]{1,100}$
description:
type: string
maxLength: 1000
pattern: ^[^<>]{0,1000}$
type:
description: 'The type of aggregate
0: Audience
1: Intent
'
type: number
enum:
- 0
- 1
inputs:
type: array
minItems: 1
items:
$ref: '#/components/schemas/AggregateDimensionInput'
additionalProperties: false
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: x-api-key
BearerAuth:
type: http
scheme: bearer
x-provenance:
method: harvested
publisher: Uniform
source: https://docs.uniform.app/openapi.json
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)