Ethora Sharelinks API
Secure sharing links for resources such as User Profiles and Documents. ℹ️ Used when resource is not public and/or encrypted.
Secure sharing links for resources such as User Profiles and Documents. ℹ️ Used when resource is not public and/or encrypted.
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/ethora-com:ethora-com-sharelinks-api"
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.
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: 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.'