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/recal:recal-users-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
openapi: 3.2.0
info:
title: Recal Users API
description: 'The official Recal.dev API.
**Tip:** Use `x-timezone` header to set timezone for all returned datetimes.'
version: 0.2.0
servers:
- url: https://api.recal.dev
description: Recal API
security:
- token: []
tags:
- name: Users
description: Routes for the Users
paths:
/v1/users:
get:
operationId: getV1Users
description: Get all users
tags:
- Users
responses:
'200':
description: List of users
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
createdAt:
type: string
examples:
- '2025-04-24T00:00:00.000Z'
format: date-time
pattern: ^([+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))(T((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([,.]\d+(?!:))?)?(\17[0-5]\d([,.]\d+)?)?([Zz]|([+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$
id:
type: string
examples:
- user_123
oauthConnections:
type: array
items:
$ref: '#/components/schemas/AuthConnection'
organizations:
type: array
items:
$ref: '#/components/schemas/Organization'
required:
- createdAt
- id
required:
- data
summary: Get V1Users
x-summary-source: derived
post:
operationId: postV1Users
description: Create a user and optionally connect to organizations directly
tags:
- Users
responses:
'201':
description: Created user
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
createdAt:
type: string
examples:
- '2025-04-24T00:00:00.000Z'
format: date-time
pattern: ^([+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))(T((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([,.]\d+(?!:))?)?(\17[0-5]\d([,.]\d+)?)?([Zz]|([+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$
id:
type: string
examples:
- user_123
oauthConnections:
type: array
items:
$ref: '#/components/schemas/AuthConnection'
organizations:
type: array
items:
$ref: '#/components/schemas/Organization'
required:
- createdAt
- id
required:
- data
'400':
description: Validation Error
content:
application/json:
schema:
type: object
properties:
error:
type: string
data:
type: 'null'
required:
- error
- data
'404':
description: Organization not found
content:
application/json:
schema:
type: object
properties:
data:
type: 'null'
error:
type: string
examples:
- Organization with slug {slug} not found
required:
- data
- error
'409':
description: User already exists
content:
application/json:
schema:
type: object
properties:
data:
type: 'null'
error:
type: string
examples:
- User with id {id} already exists
required:
- data
- error
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
id:
type: string
examples:
- user_123
pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$
organizationSlugs:
type: array
items:
type: string
examples:
- recal
pattern: ^[a-z0-9][a-z0-9_-]{2,127}$
required:
- id
summary: Post V1Users
x-summary-source: derived
/v1/users/{userId}:
get:
operationId: getV1UsersByUserId
description: Get a user
tags:
- Users
responses:
'200':
description: User
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
createdAt:
type: string
examples:
- '2025-04-24T00:00:00.000Z'
format: date-time
pattern: ^([+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))(T((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([,.]\d+(?!:))?)?(\17[0-5]\d([,.]\d+)?)?([Zz]|([+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$
id:
type: string
examples:
- user_123
oauthConnections:
type: array
items:
$ref: '#/components/schemas/AuthConnection'
organizations:
type: array
items:
$ref: '#/components/schemas/Organization'
required:
- createdAt
- id
required:
- data
'400':
description: Validation Error
content:
application/json:
schema:
type: object
properties:
error:
type: string
data:
type: 'null'
required:
- error
- data
'404':
description: User not found
content:
application/json:
schema:
type: object
properties:
data:
type: 'null'
error:
type: string
examples:
- User with id {id} not found
required:
- data
- error
parameters:
- in: path
name: userId
schema:
type: string
examples:
- user_123
pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$
required: true
- in: query
name: include
schema:
anyOf:
- type: array
items:
enum:
- oauthConnections
- organizations
- const: oauthConnections
- const: organizations
summary: Get V1Users by user id
x-summary-source: derived
put:
operationId: putV1UsersByUserId
description: Update a user
tags:
- Users
responses:
'200':
description: User
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
createdAt:
type: string
examples:
- '2025-04-24T00:00:00.000Z'
format: date-time
pattern: ^([+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))(T((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([,.]\d+(?!:))?)?(\17[0-5]\d([,.]\d+)?)?([Zz]|([+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$
id:
type: string
examples:
- user_123
oauthConnections:
type: array
items:
$ref: '#/components/schemas/AuthConnection'
organizations:
type: array
items:
$ref: '#/components/schemas/Organization'
required:
- createdAt
- id
required:
- data
'400':
description: Validation Error
content:
application/json:
schema:
type: object
properties:
error:
type: string
data:
type: 'null'
required:
- error
- data
'404':
description: User not found
content:
application/json:
schema:
type: object
properties:
data:
type: 'null'
error:
type: string
examples:
- User with id {id} not found
required:
- data
- error
'409':
description: User already exists
content:
application/json:
schema:
type: object
properties:
data:
type: 'null'
error:
type: string
examples:
- User with id {id} already exists
required:
- data
- error
parameters:
- in: path
name: userId
schema:
type: string
examples:
- user_123
pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$
required: true
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
userId:
type: string
examples:
- user_123
pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$
required:
- userId
summary: Put V1Users by user id
x-summary-source: derived
delete:
operationId: deleteV1UsersByUserId
description: Delete a user
tags:
- Users
responses:
'200':
description: User
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
createdAt:
type: string
examples:
- '2025-04-24T00:00:00.000Z'
format: date-time
pattern: ^([+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))(T((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([,.]\d+(?!:))?)?(\17[0-5]\d([,.]\d+)?)?([Zz]|([+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$
id:
type: string
examples:
- user_123
oauthConnections:
type: array
items:
$ref: '#/components/schemas/AuthConnection'
organizations:
type: array
items:
$ref: '#/components/schemas/Organization'
required:
- createdAt
- id
required:
- data
'400':
description: Validation Error
content:
application/json:
schema:
type: object
properties:
error:
type: string
data:
type: 'null'
required:
- error
- data
'404':
description: User not found
content:
application/json:
schema:
type: object
properties:
data:
type: 'null'
error:
type: string
examples:
- User with id {id} not found
required:
- data
- error
parameters:
- in: path
name: userId
schema:
type: string
examples:
- user_123
pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$
required: true
summary: Delete V1Users by user id
x-summary-source: derived
/v1/users/{userId}/organizations:
get:
operationId: getV1UsersByUserIdOrganizations
description: Get all organizations a user is connected to
tags:
- Users
responses:
'200':
description: List of organizations
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Organization'
required:
- data
'400':
description: Validation Error
content:
application/json:
schema:
type: object
properties:
error:
type: string
data:
type: 'null'
required:
- error
- data
'404':
description: User not found
content:
application/json:
schema:
type: object
properties:
data:
type: 'null'
error:
type: string
examples:
- User with id {id} not found
required:
- data
- error
parameters:
- in: path
name: userId
schema:
type: string
examples:
- user_123
pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$
required: true
summary: Get V1Users by user id organizations
x-summary-source: derived
/v1/users/oauth/{provider}/verify:
post:
operationId: postV1UsersOauthByProviderVerify
description: Validate the oauth code
responses:
'200':
description: OAuth code verified successfully
'400':
description: Invalid request
content:
application/json:
schema:
type: object
properties:
data:
type: 'null'
error:
type: string
examples:
- 'OAuth code verification faild with error: {error}'
required:
- data
- error
'404':
description: User not found
content:
application/json:
schema:
type: object
properties:
data:
type: 'null'
error:
type: string
examples:
- User with id {id} not found
required:
- data
- error
parameters:
- in: path
name: provider
schema:
enum:
- google
- microsoft
required: true
- in: query
name: redirectUrl
schema:
type: string
format: uri
description: Redirect url for the oauth provider
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
code:
type: string
scope:
type: array
items:
type: string
state:
type: string
required:
- code
- scope
- state
tags:
- Users
summary: Post V1Users oauth by provider verify
x-summary-source: derived
/v1/users/{userId}/oauth/{provider}/token:
get:
operationId: getV1UsersByUserIdOauthByProviderToken
description: Get a fresh access token for a user for a provider
responses:
'200':
description: Access token
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
accessToken:
type: string
required:
- accessToken
required:
- data
'400':
description: Invalid request
content:
application/json:
schema:
type: object
properties:
error:
type: string
data:
type: 'null'
required:
- error
- data
'404':
description: User not found
content:
application/json:
schema:
type: object
properties:
data:
type: 'null'
error:
type: string
examples:
- User with id {id} not found
required:
- data
- error
parameters:
- in: path
name: provider
schema:
enum:
- google
- microsoft
required: true
- in: path
name: userId
schema:
type: string
examples:
- user_123
pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$
required: true
tags:
- Users
summary: Get V1Users by user id oauth by provider token
x-summary-source: derived
components:
schemas:
Organization:
type: object
description: Organization
properties:
createdAt:
type: string
examples:
- '2025-04-24T00:00:00.000Z'
format: date-time
pattern: ^([+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))(T((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([,.]\d+(?!:))?)?(\17[0-5]\d([,.]\d+)?)?([Zz]|([+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$
name:
anyOf:
- type: string
maxLength: 128
minLength: 3
- type: 'null'
examples:
- Recal
slug:
type: string
examples:
- recal
pattern: ^[a-z0-9][a-z0-9_-]{2,127}$
members:
type: array
items:
$ref: '#/components/schemas/User'
required:
- createdAt
- name
- slug
User:
type: object
description: User
properties:
createdAt:
type: string
examples:
- '2025-04-24T00:00:00.000Z'
format: date-time
pattern: ^([+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))(T((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([,.]\d+(?!:))?)?(\17[0-5]\d([,.]\d+)?)?([Zz]|([+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$
id:
type: string
examples:
- user_123
required:
- createdAt
- id
AuthConnection:
type: object
description: OAuth Connection
properties:
alive:
type: boolean
email:
anyOf:
- type: string
pattern: ^[\w%+.-]+@[\d.A-Za-z-]+\.[A-Za-z]{2,}$
format: email
- type: 'null'
expiresAt:
anyOf:
- type: string
pattern: ^([+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))(T((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([,.]\d+(?!:))?)?(\17[0-5]\d([,.]\d+)?)?([Zz]|([+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$
- type: 'null'
format: date-time
provider:
enum:
- google
- microsoft
scope:
type: array
items:
type: string
type:
type: string
accessToken: {}
refreshToken: {}
required:
- alive
- email
- expiresAt
- provider
- scope
- type
securitySchemes:
token:
type: http
scheme: bearer
bearerFormat: recal-token
description: Recal API token