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/circuit-members-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: Spoke Members API
description: This is the documentation of the Spoke Public API HTTP endpoints.
version: v1
servers:
- url: https://api.spoke.com/public/v1
security:
- BasicAuth: []
tags:
- name: Members
description: Endpoints to operate on Members resources.
paths:
/members:
post:
operationId: createMember
summary: Create a new member
tags:
- Members
description: Create a member with the given data in your team. Prefer using the batch import endpoint for creating multiple members at once as it is more efficient.
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
description: The member's full name
anyOf:
- type: string
minLength: 1
maxLength: 255
- type: 'null'
displayName:
description: The name displayed for the member in the UI
anyOf:
- type: string
minLength: 1
maxLength: 255
- type: 'null'
email:
description: Member's email
anyOf:
- type: string
minLength: 1
maxLength: 255
format: email
pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
- type: 'null'
linkedDriverId:
description: The existing driver to link the member to
anyOf:
- type: string
pattern: ^drivers\/[a-zA-Z0-9---_]{1,50}$
- type: 'null'
role:
description: The operational role given to the member.
type: string
enum:
- admin
- depot-manager
- dispatcher
- read-only
depots:
description: The depot IDs associated with the member in the format `depots/<id>`, duplicates will be ignored. If set to null or not provided, the team's Main depot will be set as member depot.
anyOf:
- minItems: 1
maxItems: 50
type: array
items:
description: The depot ID, in the format `depots/<id>`
type: string
pattern: ^depots\/[a-zA-Z0-9---_]{1,50}$
- type: 'null'
required:
- role
additionalProperties: false
required: true
responses:
'200':
description: The created member
content:
application/json:
schema:
description: The created member
$ref: '#/components/schemas/memberSchema'
'400':
description: Failed to validate the request
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message.
code:
type: string
description: The error code.
param:
type: string
description: The parameter that caused the error.
url:
type: string
description: The URL with more information about the error.
required:
- message
description: Failed to validate the request
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message.
url:
type: string
description: The URL with more information about the error.
required:
- message
description: Unauthorized
'404':
description: The linked driver could not be found.
content:
application/json:
schema:
type: object
properties:
message:
anyOf:
- type: string
enum:
- Driver not found
- type: string
required:
- message
description: The linked driver could not be found.
title: Driver not found
'409':
description: Conflict when creating member.
content:
application/json:
schema:
type: object
properties:
message:
anyOf:
- type: string
enum:
- The member could not be created because of a conflict, such as a member already existing with the same email.
- type: string
required:
- message
description: Conflict when creating member.
'422':
description: Failed to create member.
content:
application/json:
schema:
type: object
properties:
message:
anyOf:
- type: string
enum:
- An error occured when creating the member, but the error is not due to a validation error, instead it is another conflict, check if the provided data is semantically valid.
- type: string
required:
- message
description: Failed to create member.
'500':
description: An internal server error occurred
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message.
code:
type: string
description: The error code.
param:
type: string
description: The parameter that caused the error.
url:
type: string
description: The URL with more information about the error.
required:
- message
description: An internal server error occurred
default:
description: The default error model
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message.
code:
type: string
description: The error code.
param:
type: string
description: The parameter that caused the error.
url:
type: string
description: The URL with more information about the error.
required:
- message
description: The default error model
/members/{memberId}:
patch:
operationId: updateMember
summary: Update a member
tags:
- Members
description: Updates a member from your team.
requestBody:
content:
application/json:
schema:
description: The request body for updating a member.
type: object
properties:
name:
description: The member's full name
anyOf:
- type: string
minLength: 1
maxLength: 255
- type: 'null'
displayName:
description: The name displayed for the member in the UI
anyOf:
- type: string
minLength: 1
maxLength: 255
- type: 'null'
role:
description: The operational role given to the member.
anyOf:
- description: The operational role given to the member.
type: string
enum:
- admin
- depot-manager
- dispatcher
- read-only
- type: 'null'
depots:
description: The depot IDs associated with the member in the format `depots/<id>`, duplicates will be ignored. If set to null or not provided, the team's Main depot will be set as member depot.
anyOf:
- minItems: 1
maxItems: 50
type: array
items:
description: The depot ID, in the format `depots/<id>`
type: string
pattern: ^depots\/[a-zA-Z0-9---_]{1,50}$
- type: 'null'
additionalProperties: false
description: The request body for updating a member.
parameters:
- schema:
type: string
pattern: ^[a-zA-Z0-9---_]{1,50}$
in: path
name: memberId
required: true
description: The member id
responses:
'200':
description: The updated member
content:
application/json:
schema:
description: The updated member
$ref: '#/components/schemas/memberSchema'
'400':
description: Failed to validate the request
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message.
code:
type: string
description: The error code.
param:
type: string
description: The parameter that caused the error.
url:
type: string
description: The URL with more information about the error.
required:
- message
description: Failed to validate the request
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message.
url:
type: string
description: The URL with more information about the error.
required:
- message
description: Unauthorized
'404':
description: The provided member id does not exist
content:
application/json:
schema:
type: object
properties:
message:
anyOf:
- type: string
enum:
- Member not found
- type: string
required:
- message
description: The provided member id does not exist
title: Member not found
'422':
description: Failed to update member.
content:
application/json:
schema:
type: object
properties:
message:
anyOf:
- type: string
enum:
- An error occured when updating the member, but the error is not due to a validation error, instead it is another conflict, check if the provided data is semantically valid.
- type: string
required:
- message
description: Failed to update member.
'500':
description: An internal server error occurred
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message.
code:
type: string
description: The error code.
param:
type: string
description: The parameter that caused the error.
url:
type: string
description: The URL with more information about the error.
required:
- message
description: An internal server error occurred
default:
description: The default error model
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message.
code:
type: string
description: The error code.
param:
type: string
description: The parameter that caused the error.
url:
type: string
description: The URL with more information about the error.
required:
- message
description: The default error model
delete:
operationId: deleteMember
summary: Remove a member
tags:
- Members
description: Removes a member from your team. If the member also has driver access, the member will only have their operational role(s) revoked; thus not being listed among the team members, but will keep their driver access.
parameters:
- schema:
type: string
pattern: ^[a-zA-Z0-9---_]{1,50}$
in: path
name: memberId
required: true
description: The member id
responses:
'204':
description: Member removed successfully
'400':
description: ID format is invalid
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message.
code:
type: string
description: The error code.
param:
type: string
description: The parameter that caused the error.
url:
type: string
description: The URL with more information about the error.
required:
- message
description: ID format is invalid
title: The request is invalid
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message.
url:
type: string
description: The URL with more information about the error.
required:
- message
description: Unauthorized
'404':
description: The provided member id does not exist
content:
application/json:
schema:
type: object
properties:
message:
anyOf:
- type: string
enum:
- Member not found
- type: string
required:
- message
description: The provided member id does not exist
title: Member not found
'422':
description: Failed to delete member.
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message.
required:
- message
description: Failed to delete member.
'500':
description: An internal server error occurred
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message.
code:
type: string
description: The error code.
param:
type: string
description: The parameter that caused the error.
url:
type: string
description: The URL with more information about the error.
required:
- message
description: An internal server error occurred
default:
description: The default error model
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message.
code:
type: string
description: The error code.
param:
type: string
description: The parameter that caused the error.
url:
type: string
description: The URL with more information about the error.
required:
- message
description: The default error model
/members:import:
post:
operationId: importMembers
summary: Import multiple members
tags:
- Members
description: Import multiple members at once.
requestBody:
content:
application/json:
schema:
description: An array of member descriptions to be created in batch.
minItems: 1
maxItems: 50
type: array
items:
type: object
properties:
name:
description: The member's full name
anyOf:
- type: string
minLength: 1
maxLength: 255
- type: 'null'
displayName:
description: The name displayed for the member in the UI
anyOf:
- type: string
minLength: 1
maxLength: 255
- type: 'null'
email:
description: Member's email
anyOf:
- type: string
minLength: 1
maxLength: 255
format: email
pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
- type: 'null'
linkedDriverId:
description: The existing driver to link the member to
anyOf:
- type: string
pattern: ^drivers\/[a-zA-Z0-9---_]{1,50}$
- type: 'null'
role:
description: The operational role given to the member.
type: string
enum:
- admin
- depot-manager
- dispatcher
- read-only
depots:
description: The depot IDs associated with the member in the format `depots/<id>`, duplicates will be ignored. If set to null or not provided, the team's Main depot will be set as member depot.
anyOf:
- minItems: 1
maxItems: 50
type: array
items:
description: The depot ID, in the format `depots/<id>`
type: string
pattern: ^depots\/[a-zA-Z0-9---_]{1,50}$
- type: 'null'
required:
- role
additionalProperties: false
description: An array of member descriptions to be created in batch.
responses:
'200':
description: The imported members
content:
application/json:
schema:
description: The imported members
type: object
properties:
success:
type: array
items:
type: string
pattern: ^members\/[a-zA-Z0-9---_]{1,50}$
description: The id of the member, in the format `members/<id>`.
description: The ids of the successfully imported members
failed:
type: array
items:
type: object
properties:
error:
type: object
properties:
message:
type: string
description: The error that occurred during import
required:
- message
member:
type: object
properties:
name:
anyOf:
- type: string
minLength: 1
maxLength: 255
- type: 'null'
description: The member's full name
displayName:
anyOf:
- type: string
minLength: 1
maxLength: 255
- type: 'null'
description: The name displayed for the member in the UI
email:
anyOf:
- type: string
minLength: 1
maxLength: 255
format: email
pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
- type: 'null'
description: Member's email
linkedDriverId:
anyOf:
- type: string
pattern: ^drivers\/[a-zA-Z0-9---_]{1,50}$
- type: 'null'
description: The existing driver to link the member to
role:
type: string
enum:
- admin
- depot-manager
- dispatcher
- read-only
description: The operational role given to the member.
depots:
anyOf:
- minItems: 1
maxItems: 50
type: array
items:
type: string
pattern: ^depots\/[a-zA-Z0-9---_]{1,50}$
description: The depot ID, in the format `depots/<id>`
- type: 'null'
description: The depot IDs associated with the member in the format `depots/<id>`, duplicates will be ignored. If set to null or not provided, the team's Main depot will be set as member depot.
required:
- role
description: The request body for creating a member.
required:
- error
- member
description: The failed members
required:
- success
- failed
'400':
description: Failed to validate the request
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message.
code:
type: string
description: The error code.
param:
type: string
description: The parameter that caused the error.
url:
type: string
description: The URL with more information about the error.
required:
- message
description: Failed to validate the request
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message.
url:
type: string
description: The URL with more information about the error.
required:
- message
description: Unauthorized
'409':
description: Conflict when creating member.
content:
application/json:
schema:
type: object
properties:
message:
anyOf:
- type: string
enum:
- The member could not be created because of a conflict, such as a member already existing with the same email.
- type: string
required:
- message
description: Conflict when creating member.
'422':
description: Failed to import members.
content:
application/json:
schema:
type: object
properties:
message:
anyOf:
- type: string
enum:
- An error occured when importing members, but the error is not due to a validation error, instead it is another conflict, check if the provided data is semantically valid.
- type: string
required:
- message
description: Failed to import members.
'500':
description: An internal server error occurred
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message.
code:
type: string
description: The error code.
param:
type: string
description: The parameter that caused the error.
url:
type: string
description: The URL with more information about the error.
required:
- message
description: An internal server error occurred
default:
description: The default error model
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message.
code:
type: string
description: The error code.
param:
type: string
description: The parameter that caused the error.
url:
type: string
description: The URL with more information about the error.
required:
- message
description: The default error model
components:
schemas:
memberIdSchema:
type: string
pattern: ^members\/[a-zA-Z0-9---_]{1,50}$
driverIdSchema:
type: string
pattern: ^drivers\/[a-zA-Z0-9---_]{1,50}$
memberSchema:
type: object
properties:
id:
allOf:
- $ref: '#/components/schemas/memberIdSchema'
description: The member id, in the format `members/<id>`
name:
anyOf:
- type: string
- type: 'null'
description: The name of the member.
email:
anyOf:
- type: string
- type: 'null'
description: The email of the member.
phone:
anyOf:
- type: string
- type: 'null'
description: The phone number of the member.
linkedDriverId:
anyOf:
- $ref: '#/components/schemas/driverIdSchema'
- type: 'null'
description: The driver linked to the member (where applicable).
displayName:
anyOf:
- type: string
- type: 'null'
description: The display name of the member.
active:
type: boolean
description: Whether the member membership is active or paused.
depots:
type: array
items:
type: string
pattern: ^depots\/[a-zA-Z0-9---_]{1,50}$
description: Depots associated with the member.
roles:
$ref: '#/components/schemas/roleSchema'
required:
- id
- name
- email
- phone
- linkedDriverId
- displayName
- active
- depots
- roles
additionalProperties: false
description: A dashboard member.
roleSchema:
type: array
items:
type: string
enum:
- owner
- admin
- depot-manager
- dispatcher
- read-only
- driver
description: The role(s) given to the member.
securitySchemes:
BasicAuth:
type: http
scheme: basic
description: Use the API key as the username and leave the password empty.