Jaxon Teams API

The teams API from Jaxon — 8 operation(s) for teams.

GitHub OpenAPI

Operations 8

GET /v1/workspaces Every workspace you may work in, and which one is in use #
POST /v1/workspaces/current Work in a different team, or in your own workspace #
POST /v1/teams Create a team with a ruleset library of its own #
GET /v1/teams/{team_id}/members Who is in this team, and who administers it #
POST /v1/teams/{team_id}/invitations Invite somebody by email. The link comes back once #
POST /v1/teams/{team_id}/members/{member}/role Make a member an administrator, or return them to a member #
DELETE /v1/teams/{team_id}/members/{member} Remove a member and revoke the keys they issued for this team #
POST /v1/rulesets/{name}/copies Copy one of your rulesets into another of your workspaces #

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.
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 Specification

jaxon-ai-teams-api-openapi.yml Raw ↑
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