Eshway Calendar API

The calendar API from Eshway — 6 operation(s) for calendar.

GitHub OpenAPI

Operations 6

GET /v1/calendar/auth-url Get Auth Url #
GET /v1/calendar/oauth2callback Oauth2Callback #
POST /v1/calendar/sync-task Sync Task To Calendar #
GET /v1/calendar/status Get Calendar Status #
POST /v1/calendar/disconnect Disconnect Calendar #
DELETE /v1/calendar/remove-task-event Remove Task Event #

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/eshway-com:eshway-com-calendar-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

eshway-com-calendar-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Fast Calendar API
  version: 0.1.0
tags:
- name: Calendar
paths:
  /v1/calendar/auth-url:
    get:
      tags:
      - Calendar
      summary: Get Auth Url
      description: 'Mint a Google OAuth authorization URL bound to the calling user.


        H8: We bind the OAuth `state` to current_user.id in Redis so the

        callback can verify the user who started the flow is the same user

        who completed it. Without this, OAuth account-linking CSRF is open:

        an attacker mints an auth URL in their session and tricks a logged-in

        victim to visit it; the victim''s session then receives the attacker''s

        code and the attacker''s Google calendar gets linked to the victim''s

        LTD account.'
      operationId: get_auth_url_v1_calendar_auth_url_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
      security:
      - OAuth2PasswordBearer: []
  /v1/calendar/oauth2callback:
    get:
      tags:
      - Calendar
      summary: Oauth2Callback
      description: 'Complete the Google OAuth flow.


        H8: state must match the user who started the flow. We consume

        (read-and-delete) the binding atomically so a stolen state can''t

        be reused. Mismatch → 400 before exchanging the code with Google.'
      operationId: oauth2callback_v1_calendar_oauth2callback_get
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: code
        in: query
        required: true
        schema:
          type: string
          title: Code
      - name: state
        in: query
        required: true
        schema:
          type: string
          title: State
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/calendar/sync-task:
    post:
      tags:
      - Calendar
      summary: Sync Task To Calendar
      operationId: sync_task_to_calendar_v1_calendar_sync_task_post
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: task_id
        in: query
        required: true
        schema:
          type: integer
          title: Task Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/calendar/status:
    get:
      tags:
      - Calendar
      summary: Get Calendar Status
      operationId: get_calendar_status_v1_calendar_status_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
      security:
      - OAuth2PasswordBearer: []
  /v1/calendar/disconnect:
    post:
      tags:
      - Calendar
      summary: Disconnect Calendar
      operationId: disconnect_calendar_v1_calendar_disconnect_post
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
      security:
      - OAuth2PasswordBearer: []
  /v1/calendar/remove-task-event:
    delete:
      tags:
      - Calendar
      summary: Remove Task Event
      operationId: remove_task_event_v1_calendar_remove_task_event_delete
      security:
      - OAuth2PasswordBearer: []
      parameters:
      - name: task_id
        in: query
        required: true
        schema:
          type: integer
          title: Task Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
  securitySchemes:
    OAuth2PasswordBearer:
      type: oauth2
      flows:
        password:
          scopes: {}
          tokenUrl: token