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-user-oauth-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 User OAuth 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: User OAuth
description: Routes for the User OAuth
paths:
/v1/users/{userId}/oauth:
get:
operationId: getV1UsersByUserIdOauth
description: Get all oauth connections for a user
tags:
- User OAuth
responses:
'200':
description: All oauth connections of the user
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/AuthConnection'
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: showToken
schema:
enum:
- 'false'
- 'true'
examples:
- 'true'
- 'false'
description: Show access and refresh tokens
summary: Get V1Users by user id oauth
x-summary-source: derived
/v1/users/{userId}/oauth/links:
get:
operationId: getV1UsersByUserIdOauthLinks
description: Get the auth urls for the oauth providers
tags:
- User OAuth
responses:
'200':
description: Auth urls for the oauth providers
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
link:
type: string
description: Auth url for the user to connect to the oauth provider
format: uri
provider:
enum:
- google
- microsoft
required:
- link
- provider
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: userId
schema:
type: string
examples:
- user_123
pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$
required: true
- in: query
name: accessType
schema:
anyOf:
- const: offline
description: Access type of the oauth connection
- const: online
description: Access type of the oauth connection
required: true
description: Access type of the oauth connection
- in: query
name: scope
schema:
anyOf:
- type: array
description: Scope of the oauth connection
items:
type: string
- const: edit
description: Scope of the oauth connection
- const: free-busy
description: Scope of the oauth connection
- const: read
description: Scope of the oauth connection
- const: write
description: Scope of the oauth connection
required: true
description: Scope of the oauth connection
- in: query
name: provider
schema:
anyOf:
- type: array
items:
enum:
- google
- microsoft
- const: google
- const: microsoft
summary: Get V1Users by user id oauth links
x-summary-source: derived
/v1/users/{userId}/oauth/{provider}/link:
get:
operationId: getV1UsersByUserIdOauthByProviderLink
description: Get the auth url for the oauth provider
tags:
- User OAuth
responses:
'200':
description: Auth url for the oauth provider
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
link:
type: string
description: Auth url for the user to connect to the oauth provider
format: uri
required:
- link
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
- in: query
name: accessType
schema:
anyOf:
- const: offline
description: Access type of the oauth connection
- const: online
description: Access type of the oauth connection
required: true
description: Access type of the oauth connection
- in: query
name: scope
schema:
anyOf:
- type: array
description: Scope of the oauth connection
items:
type: string
- const: edit
description: Scope of the oauth connection
- const: free-busy
description: Scope of the oauth connection
- const: read
description: Scope of the oauth connection
- const: write
description: Scope of the oauth connection
required: true
description: Scope of the oauth connection
- in: query
name: redirectUrl
schema:
type: string
format: uri
description: Redirect url for the oauth provider
summary: Get V1Users by user id oauth by provider link
x-summary-source: derived
/v1/users/{userId}/oauth/{provider}:
get:
operationId: getV1UsersByUserIdOauthByProvider
description: Get a specific oauth connection for a user
tags:
- User OAuth
responses:
'200':
description: OAuth connection of the user
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/AuthConnection'
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: 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
- in: query
name: showToken
schema:
enum:
- 'false'
- 'true'
examples:
- 'true'
- 'false'
description: Show access and refresh tokens
summary: Get V1Users by user id oauth by provider
x-summary-source: derived
post:
operationId: postV1UsersByUserIdOauthByProvider
description: Create a new oauth connection for a user
tags:
- User OAuth
responses:
'201':
description: OAuth connection created
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/AuthConnection'
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
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
accessToken:
type: string
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'
refreshToken:
anyOf:
- type: string
- {}
scope:
type: array
items:
type: string
required:
- accessToken
- email
- expiresAt
- refreshToken
- scope
summary: Post V1Users by user id oauth by provider
x-summary-source: derived
delete:
operationId: deleteV1UsersByUserIdOauthByProvider
description: Delete an oauth connection for a user
tags:
- User OAuth
responses:
'200':
description: OAuth connection deleted
'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
'500':
description: Internal server error
content:
application/json:
schema:
type: object
properties:
data:
type: 'null'
error:
type: string
examples:
- Internal Server Error
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
summary: Delete V1Users by user id oauth by provider
x-summary-source: derived
components:
schemas:
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