Ethora Sharelinks API

Secure sharing links for resources such as User Profiles and Documents. ℹ️ Used when resource is not public and/or encrypted.

GitHub OpenAPI

Operations 3

POST /v1/sharelink Create share link #

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/ethora-com:ethora-com-sharelinks-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

ethora-com-sharelinks-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Platform Sharelinks API
  description: 'Ethora Platform API.


    ## Getting Started

    - For new backend and tenant integrations, start with the `/v2/...` endpoints.

    - Use `/v2/apps/{appId}/...` when your backend/admin flow manages a specific target app explicitly.

    - Some legacy operations still exist only under `/v1/...`; when so, the operation description will say so.


    ## Integration Tracks

    - `Frontend / app runtime`: app-auth login/sign-up flows, then user-auth chats/files/sharelinks.

    - `Tenant admin / B2B backend`: explicit app management and app-scoped admin flows under `/v2/apps/{appId}/...`.


    ## Auth Token Legend

    - `App JWT`: app-scoped runtime token for sign-up/login/runtime app operations.

    - `User JWT`: end-user or admin-user session token.

    - `Refresh JWT`: refresh-only token for access token renewal.

    - `Client JWT`: legacy client-side token used only for chat/client credential exchange compatibility flows.

    - `B2B Server JWT`: tenant/backend integration token. Prefer `Authorization: Bearer `; `x-custom-token` is still accepted for backward compatibility.


    ## Which Token Where

    - `App JWT`: `/v1/users/login-with-email`, `/v2/users/sign-up-with-email`, similar app-runtime auth endpoints.

    - `User JWT`: user session endpoints like chats, files, sharelinks, profile/session management.

    - `B2B Server JWT`: tenant/backend integration endpoints, especially explicit `/v2/apps/{appId}/...` admin flows.

    - `Client JWT`: only where the endpoint explicitly says `Client JWT` and typically only for legacy compatibility.


    ## Auth Approach

    - `/v2/...` endpoints are the canonical API surface for new integrations.

    - Endpoints may support one or more token types depending on the actor and scope.

    - App-scoped admin/integration endpoints use `/v2/apps/{appId}/...` so the target app is always explicit.

    - When an endpoint supports both `User JWT` and `B2B Server JWT`, Swagger will show both under Security.

    - Public Swagger excludes internal-only, operational, and experimental surfaces.'
  contact:
    name: Dappros developers team
  version: 26.11.05
servers:
- url: https://api.chat.ethora.com
security:
- JwtAuth: []
tags:
- name: Sharelinks
  description: 'Secure sharing links for resources such as User Profiles and Documents.

    ℹ️ Used when resource is not public and/or encrypted.'
paths:
  /v1/sharelink:
    post:
      description: '**Auth**: User JWT


        sharelink creation'
      tags:
      - Sharelinks
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                expiration:
                  description: 'Unix-epoch timestamp (seconds) when this share link stops

                    working. Omit for a non-expiring link.

                    '
                  type: number
                memo:
                  description: 'Free-form description shown to recipients alongside the

                    link. Up to ~500 characters.

                    '
                  type: string
                resource:
                  description: 'The thing being shared, as either a chat name

                    (`<appId>_<chatId>`) or a fully-qualified MUC JID.

                    '
                  type: string
      responses:
        '200':
          description: "```\n   {sharelinkData: {\n     userId: string,\n     walletAddress: string,\n     expiration: string,\n     token: string,\n     targetRecordId: string,\n   }}\n```"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SharelinkCreateResponse'
              examples:
                created:
                  value:
                    sharelinkData:
                      userId: 65f1a9c8e2b4c10087654321
                      walletAddress: '0x0000000000000000000000000000000000000000'
                      expiration: -1
                      memo: no description
                      resource: profile
                      token: 65f1aa1de2b4c10012345681
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: Not found
        '422':
          description: Validations error
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
      - UserJwtAuth: []
      summary: Create share link
      operationId: post_v1_sharelink
  /v1/sharelink/:
    get:
      description: '**Auth**: User JWT


        Docs get'
      tags:
      - Sharelinks
      responses:
        '200':
          description: "```\n   {items: [{\n     userId: string,\n     walletAddress: string,\n     expiration: string,\n     token: string,\n     targetRecordId: string,\n   }]}\n```"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SharelinkListResponse'
              examples:
                list:
                  value:
                    items:
                    - userId: 65f1a9c8e2b4c10087654321
                      walletAddress: '0x0000000000000000000000000000000000000000'
                      expiration: -1
                      memo: no description
                      resource: profile
                      token: 65f1aa1de2b4c10012345681
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
      - UserJwtAuth: []
      summary: List share links
      operationId: get_v1_sharelink_
  /v1/sharelink/{token}:
    delete:
      description: '**Auth**: User JWT


        Docs get'
      tags:
      - Sharelinks
      parameters:
      - in: path
        name: token
        description: 'The share-link token returned when the link was created. Anyone

          who holds this string can access (or revoke) the link.

          '
        required: true
        schema:
          type: string
      responses:
        '200':
          description: A successful response
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: Not found
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
      - UserJwtAuth: []
      summary: Delete share link
      operationId: delete_v1_sharelink_token
components:
  schemas:
    SharelinkCreateResponse:
      type: object
      properties:
        sharelinkData:
          $ref: '#/components/schemas/SharelinkRecord'
      required:
      - sharelinkData
    SharelinkListResponse:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/SharelinkRecord'
      required:
      - items
    SharelinkRecord:
      type: object
      properties:
        userId:
          type: string
        walletAddress:
          type: string
        expiration:
          type: number
        memo:
          type:
          - string
          - 'null'
        resource:
          type: string
        token:
          type: string
        targetRecordId:
          type:
          - string
          - 'null'
      additionalProperties: true
    ErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          description: Always false for error responses.
          example: false
        error:
          type: string
          description: A brief, human-readable message about the error.
        code:
          type: string
          description: A stable machine-readable error code.
          example: VALIDATION_ERROR
        details:
          type: object
          description: Optional, more specific details about the error (e.g., validation errors).
        errors:
          description: Legacy validation errors (if applicable).
        requestId:
          type: string
          description: Request correlation id for debugging/support.
      required:
      - error
      example:
        success: false
        error: Validation Failed
        code: VALIDATION_ERROR
        details:
          field: Reason
        requestId: '...'
  responses:
    UnprocessableEntity:
      description: Unprocessable Entity
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFound:
      description: Not Found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    InternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    BadRequest:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    JwtAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Authorization: Bearer <JWT>'
    AppJwtAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'App JWT (data.type="app"). Use this token to call app-authorized endpoints (e.g. create user, login, signup). Authorization: Bearer <JWT>. Wrong token type returns code=INVALID_TOKEN_TYPE.'
    UserJwtAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'User JWT (data.type="user"). Use this token for user-authorized endpoints (e.g. chats/files/sharelinks/me). Authorization: Bearer <JWT>. Wrong token type returns code=INVALID_TOKEN_TYPE.'
    RefreshJwtAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Refresh JWT (data.type="refresh"). Use this token only for refresh flow. Authorization: Bearer <JWT>. Wrong token type returns code=INVALID_TOKEN_TYPE.'
    ClientJwtAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Client JWT (data.type="client"). Legacy compatibility token used only for client credential exchange endpoints. Preferred header: x-custom-token; Authorization Bearer may also be accepted by some deployments.'
    B2BServerJwtAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'B2B Server JWT (data.type="server"). Use this token for tenant/backend integration endpoints. Preferred header: Authorization: Bearer <JWT>. Legacy header x-custom-token is also accepted for backward compatibility.'