Astrocal Team API
The Team API from Astrocal — 6 operation(s) for team.
The Team API from Astrocal — 6 operation(s) for team.
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/astrocal-dev:astrocal-dev-team-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: Astrocal Team API
version: 1.0.0
description: Scheduling API for AI agents and developers
servers:
- url: https://api.astrocal.dev
description: Production
- url: https://api.astrocal.dev
description: Local development
security:
- BearerAuth: []
tags:
- name: Team
paths:
/v1/organizations/{orgId}/members:
get:
tags:
- Team
summary: List organization members
description: Lists all members of an organization. Service key authentication required.
parameters:
- schema:
type: string
format: uuid
required: true
name: orgId
in: path
responses:
'200':
description: List of members
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: string
format: uuid
organization_id:
type: string
format: uuid
user_id:
type: string
user_email:
type: string
nullable: true
role:
type: string
enum:
- owner
- admin
- member
- viewer
invited_by:
type: string
nullable: true
created_at:
type: string
updated_at:
type: string
required:
- id
- organization_id
- user_id
- user_email
- role
- invited_by
- created_at
- updated_at
required:
- data
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
operationId: getV1OrganizationsByOrgIdMembers
x-operation-id-source: derived
/v1/organizations/{orgId}/members/{memberId}:
patch:
tags:
- Team
summary: Update member role
description: Updates a member's role. Cannot change the owner's role (use transfer-ownership). Requires owner or admin role.
parameters:
- schema:
type: string
format: uuid
required: true
name: orgId
in: path
- schema:
type: string
format: uuid
required: true
name: memberId
in: path
requestBody:
content:
application/json:
schema:
type: object
properties:
role:
type: string
enum:
- admin
- member
- viewer
required:
- role
responses:
'200':
description: Member updated
content:
application/json:
schema:
type: object
properties:
id:
type: string
format: uuid
organization_id:
type: string
format: uuid
user_id:
type: string
user_email:
type: string
nullable: true
role:
type: string
enum:
- owner
- admin
- member
- viewer
invited_by:
type: string
nullable: true
created_at:
type: string
updated_at:
type: string
required:
- id
- organization_id
- user_id
- user_email
- role
- invited_by
- created_at
- updated_at
'400':
description: Validation error
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
'403':
description: Forbidden — insufficient permissions
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
'404':
description: Member not found
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
operationId: patchV1OrganizationsByOrgIdMembersByMemberId
x-operation-id-source: derived
delete:
tags:
- Team
summary: Remove member
description: Removes a member from the organization. The owner cannot be removed.
parameters:
- schema:
type: string
format: uuid
required: true
name: orgId
in: path
- schema:
type: string
format: uuid
required: true
name: memberId
in: path
responses:
'204':
description: Member removed
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
'403':
description: Forbidden
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
'404':
description: Member not found
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
operationId: deleteV1OrganizationsByOrgIdMembersByMemberId
x-operation-id-source: derived
/v1/organizations/{orgId}/invitations:
post:
tags:
- Team
summary: Create invitation
description: Sends an email invitation to join the organization.
parameters:
- schema:
type: string
format: uuid
required: true
name: orgId
in: path
requestBody:
content:
application/json:
schema:
type: object
properties:
email:
type: string
format: email
role:
type: string
enum:
- admin
- member
- viewer
required:
- email
- role
responses:
'201':
description: Invitation created
content:
application/json:
schema:
type: object
properties:
id:
type: string
format: uuid
organization_id:
type: string
format: uuid
email:
type: string
role:
type: string
enum:
- owner
- admin
- member
- viewer
status:
type: string
enum:
- pending
- accepted
- expired
- revoked
invited_by:
type: string
expires_at:
type: string
accepted_at:
type: string
nullable: true
created_at:
type: string
required:
- id
- organization_id
- email
- role
- status
- invited_by
- expires_at
- accepted_at
- created_at
'400':
description: Validation error
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
'409':
description: Conflict — already a member or pending invitation exists
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
operationId: postV1OrganizationsByOrgIdInvitations
x-operation-id-source: derived
get:
tags:
- Team
summary: List pending invitations
description: Lists all pending invitations for the organization.
parameters:
- schema:
type: string
format: uuid
required: true
name: orgId
in: path
responses:
'200':
description: List of pending invitations
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: string
format: uuid
organization_id:
type: string
format: uuid
email:
type: string
role:
type: string
enum:
- owner
- admin
- member
- viewer
status:
type: string
enum:
- pending
- accepted
- expired
- revoked
invited_by:
type: string
expires_at:
type: string
accepted_at:
type: string
nullable: true
created_at:
type: string
required:
- id
- organization_id
- email
- role
- status
- invited_by
- expires_at
- accepted_at
- created_at
required:
- data
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
operationId: getV1OrganizationsByOrgIdInvitations
x-operation-id-source: derived
/v1/organizations/{orgId}/invitations/{invitationId}:
delete:
tags:
- Team
summary: Revoke invitation
description: Revokes a pending invitation.
parameters:
- schema:
type: string
format: uuid
required: true
name: orgId
in: path
- schema:
type: string
format: uuid
required: true
name: invitationId
in: path
responses:
'204':
description: Invitation revoked
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
'404':
description: Invitation not found or not pending
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
operationId: deleteV1OrganizationsByOrgIdInvitationsByInvitationId
x-operation-id-source: derived
/v1/invitations/accept:
post:
tags:
- Team
summary: Accept invitation
description: Accepts an invitation by token. Creates a member record and marks the invitation as accepted.
requestBody:
content:
application/json:
schema:
type: object
properties:
token:
type: string
minLength: 1
user_id:
type: string
minLength: 1
user_email:
type: string
format: email
required:
- token
- user_id
- user_email
responses:
'200':
description: Invitation accepted, member created
content:
application/json:
schema:
type: object
properties:
id:
type: string
format: uuid
organization_id:
type: string
format: uuid
user_id:
type: string
user_email:
type: string
nullable: true
role:
type: string
enum:
- owner
- admin
- member
- viewer
invited_by:
type: string
nullable: true
created_at:
type: string
updated_at:
type: string
required:
- id
- organization_id
- user_id
- user_email
- role
- invited_by
- created_at
- updated_at
'400':
description: Invitation expired or revoked
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
'404':
description: Invitation not found
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
'409':
description: Already accepted or already a member
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
operationId: postV1InvitationsAccept
x-operation-id-source: derived
/v1/organizations/{orgId}/transfer-ownership:
post:
tags:
- Team
summary: Transfer ownership
description: Transfers organization ownership to another member. The current owner becomes an admin.
parameters:
- schema:
type: string
format: uuid
required: true
name: orgId
in: path
requestBody:
content:
application/json:
schema:
type: object
properties:
member_id:
type: string
format: uuid
required:
- member_id
responses:
'200':
description: Ownership transferred
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
required:
- success
'400':
description: Validation error
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
'403':
description: Forbidden — not the owner
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
'404':
description: Target member not found
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties:
nullable: true
required:
- code
- message
required:
- error
operationId: postV1OrganizationsByOrgIdTransferOwnership
x-operation-id-source: derived
components:
securitySchemes:
BearerAuth:
type: http
scheme: bearer
description: API key authentication. Use your API key as the bearer token.