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/jaxon-ai:jaxon-ai-teams-api"
All apis
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.
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: 3.2.0
info:
title: Agent API — REST door Teams API
description: 'Formal policy results over a claim dictionary: every assertion in a ruleset, with what the engine concluded about it. One engine sits behind this door and an MCP door, and both return identical bytes. This service never calls an LLM: extraction happens on your model, against the prompt pack this API generates. DSAIL ruleset grammar (v1.3), the subset this service compiles to SMT:
version 1.3; -- optional; 1.2 and 1.3 are accepted
declare as boolean; -- a yes/no claim
declare as numeric; -- a number; units go on literals (below)
declare as enum ["a","b"]; -- ORDERED vocabulary (comparable with )
declare as enum {"a","b"}; -- UNORDERED vocabulary (== and != only)
declare local as boolean; -- rule-local; NOT a claim, never extracted
assert { }; -- the rule. Holds => compliant. assert [pessimistic] { ... }; -- unknown-resolution policy:
-- optimistic | pessimistic | neutral
Enum members are double-quoted strings. Every statement ends with a semicolon. You do not write `let` bindings for claim values — this service injects them
from the claim dictionary you submit to check. Literals:
numbers 42 3.5 0.05
with a unit 3000 "mi" 25000 "USD" 0 "USD"
-- a number followed by the unit as a QUOTED string. A bare
-- unit word is a syntax error: 3000 mi fails to parse. booleans True False
-- capitalised. Lowercase true and false are read as
-- identifiers and fail as undefined variables. enum members "low" "high" -- double-quoted strings
Expressions:
comparison == != >= (thresholds are STRICT: > means
strictly greater, NOT at-or-above. Write >= if you mean at-or-above. Equality is ==, not =.)
arithmetic + - * / %
LOGIC IS FUNCTION-STYLE, NOT INFIX. There is no `and`/`or`/`not` keyword:
And(a, b, ...) Or(a, b, ...) Not(a)
Xor(a, b) Implies(a, b) If(cond, a, b)
conditional IF THEN [ELSE ] END
CASE OF "x": , "y": , DEFAULT: END
quantifiers ForAll(x in s, p) Exists(x in s, p)
AtLeast(n, x in s, p) AtMost(n, x in s, p)
ExactlyOne(x in s, p) CountWhere(x in s, p)
sets IsMember(v, s) IsSubset(a, b)
Union(a, b) Intersect(a, b) Difference(a, b)
What a check answers. Every assertion gets its own result, and that is the
whole answer:
TRUE the assertion holds
FALSE the assertion is violated
UNKNOWN a claim it needs was submitted as unknown, or is unconstrained
AMBIGUOUS reserved. It means an assertion''s evidence contradicted
itself, which needs several answers for one claim. A claim
dictionary holds exactly one value per claim, so no check
submitted to this service produces it. Handle the word if you
switch on results; there is no input that triggers it. There is no combined verdict, no severity and no ranking. What a violated
assertion should cost — a refusal, a human review, a note in a file — is a
decision for the system reading the result, and this service does not make it. Host annotations. These are ordinary DSAIL comments, invisible to the compiler,
read by this service. Every one of them describes a CLAIM — what to ask for it
and what a valid answer looks like. None of them decides an outcome:
// @ask What is ...? -- the question shown to an extractor
// @context -- extra context for the extractor
// @range 0..100 -- numeric bounds, enforced at check time
// @unit USD -- expected unit for a numeric claim
@effect, @effect-default and @consistency are NOT recognised. A ruleset
carrying one does not compile. Rule descriptions. Directly above every assert, with no blank line between,
write what the rule requires in plain words as an ordinary comment block (no
@ tag). The review widget shows it as the rule''s description and a person
edits it there, so it must say what the assert beneath it actually checks. dsail_compile over MCP refuses an assert that has none, naming its line. Worked example:
version 1.3;
// @ask loanAmount What is the loan principal, in USD? // @unit loanAmount USD
// @range loanAmount 0..100000000
declare loanAmount as numeric;
// @ask hasAppraisal Does the file contain a completed appraisal?'
version: 1.1.1
tags:
- name: Teams
paths:
/v1/workspaces:
get:
tags:
- Teams
summary: Every workspace you may work in, and which one is in use
operationId: list_workspaces_v1_workspaces_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
/v1/workspaces/current:
post:
tags:
- Teams
summary: Work in a different team, or in your own workspace
operationId: use_workspace_v1_workspaces_current_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UseWorkspaceRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
/v1/teams:
post:
tags:
- Teams
summary: Create a team with a ruleset library of its own
operationId: create_team_v1_teams_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateTeamRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
/v1/teams/{team_id}/members:
get:
tags:
- Teams
summary: Who is in this team, and who administers it
operationId: team_members_v1_teams__team_id__members_get
parameters:
- name: team_id
in: path
required: true
schema:
type: string
title: Team Id
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
/v1/teams/{team_id}/invitations:
post:
tags:
- Teams
summary: Invite somebody by email. The link comes back once
operationId: invite_to_team_v1_teams__team_id__invitations_post
parameters:
- name: team_id
in: path
required: true
schema:
type: string
title: Team Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/InviteRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
/v1/teams/{team_id}/members/{member}/role:
post:
tags:
- Teams
summary: Make a member an administrator, or return them to a member
operationId: set_team_role_v1_teams__team_id__members__member__role_post
parameters:
- name: team_id
in: path
required: true
schema:
type: string
title: Team Id
- name: member
in: path
required: true
schema:
type: string
title: Member
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RoleRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
/v1/teams/{team_id}/members/{member}:
delete:
tags:
- Teams
summary: Remove a member and revoke the keys they issued for this team
operationId: remove_from_team_v1_teams__team_id__members__member__delete
parameters:
- name: team_id
in: path
required: true
schema:
type: string
title: Team Id
- name: member
in: path
required: true
schema:
type: string
title: Member
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
/v1/rulesets/{name}/copies:
post:
tags:
- Teams
summary: Copy one of your rulesets into another of your workspaces
operationId: copy_ruleset_v1_rulesets__name__copies_post
parameters:
- name: name
in: path
required: true
schema:
type: string
title: Name
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CopyRulesetRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
components:
schemas:
RoleRequest:
properties:
role:
type: string
title: Role
description: '`admin` or `member`. Changes only who may invite, remove and promote — every member already reads and writes the whole of the team''s library.'
type: object
required:
- role
title: RoleRequest
InviteRequest:
properties:
email:
type: string
maxLength: 254
title: Email
description: The address to invite. Only somebody signing in as this address can accept, and only once. The address itself is not stored.
type: object
required:
- email
title: InviteRequest
UseWorkspaceRequest:
properties:
workspace:
type: string
title: Workspace
description: A team's name or id, or `personal` for your own workspace. Resolved against your own memberships, so two teams may share a name; an ambiguous name is refused and names the ids.
type: object
required:
- workspace
title: UseWorkspaceRequest
CopyRulesetRequest:
properties:
destination:
type: string
title: Destination
description: 'Where to copy it TO: a team''s name or id, or `personal`.'
source:
anyOf:
- type: string
- type: 'null'
title: Source
description: Where to copy it FROM. Defaults to the workspace in use.
new_name:
anyOf:
- type: string
maxLength: 128
- type: 'null'
title: New Name
description: Bind the copy under this name instead. A name already in use in the destination is refused rather than overwritten.
type: object
required:
- destination
title: CopyRulesetRequest
CreateTeamRequest:
properties:
name:
type: string
maxLength: 64
title: Name
description: 'What to call the team. A label shown to its members, not an identifier: it need not be unique, and nothing is addressed by it.'
type: object
required:
- name
title: CreateTeamRequest