Aptly Files API
The Files API from Aptly — 2 operation(s) for files.
The Files API from Aptly — 2 operation(s) for files.
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/aptly:aptly-files-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: Aptly Files API
version: '1.1'
description: 'The Aptly API lets external systems work with boards, contacts, inboxes,
tasks, files, and other Aptly resources.
Most endpoints accept an API key in the `x-token` header. Some endpoints
also accept a delegate token or partner bearer token, as shown in each
operation''s security requirements, and explicitly public endpoints require
no credential. API keys are scoped to a company and may be restricted to
specific boards and read, insert, or update permissions; requests outside
those restrictions receive a 403 `FORBIDDEN` response.'
servers:
- url: https://core-api.getaptly.com
description: Production
security:
- ApiKeyHeader: []
tags:
- name: Files
paths:
/api/files/upload-url:
post:
summary: Get a presigned URL for a direct file upload
description: 'First step of the direct file-upload flow. Issues a presigned S3 POST
policy and records a pending upload.
**Uploading a file takes three steps:**
1. **Get a URL** — call this endpoint. It returns `{ fileId, url, fields }`.
2. **Upload directly to S3** — send a `multipart/form-data` `POST` to
`url`. Include **every** key/value from `fields` as form fields first,
then the file itself as the last field named `file`. The upload goes
straight to S3; it does not pass through this API. A successful upload
returns HTTP `204` from S3.
3. **Mark the upload complete** — call
`POST /api/files/upload-complete` with the `fileId` from step 1. This
records the file and returns its download URL.
The presigned policy enforces the content type and a 1 byte–50 MB size
range. Both `extension` and `contentType` must be on the accepted lists.
`attachEntityType` is `channel`, `aptlet`, `knowledge`, or `template`, and
`attachEntityId` is the channel id, aptlet uuid, knowledge doc id, or
communication template id respectively. The target must exist (scoped to your
company) or the request is rejected. The file is stored under that entity''s
folder.'
operationId: getFileUploadUrl
tags:
- Files
security:
- ApiKeyHeader: []
- DelegateToken: []
- PartnerBearer: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- name
- extension
- size
- contentType
- attachEntityType
- attachEntityId
properties:
name:
type: string
description: Original file name.
example: invoice.pdf
extension:
type: string
description: File extension (lowercase, no dot). Must be an accepted extension.
example: pdf
size:
type: integer
description: File size in bytes. Must be 1–52428800 (50 MB).
example: 20480
contentType:
type: string
description: MIME type. Must be an accepted content type.
example: application/pdf
attachEntityType:
type: string
enum:
- channel
- aptlet
- knowledge
- template
description: The kind of entity the file is attached to.
example: channel
attachEntityId:
type: string
description: The channel id (`channel`), aptlet uuid (`aptlet`), knowledge doc id (`knowledge`), or communication template id (`template`) the file belongs to. Must exist within your company.
example: 7f3c2a1b9d4e5f6a7b8c9d0e
responses:
'200':
description: Presigned upload policy.
content:
application/json:
schema:
type: object
properties:
fileId:
type: string
description: ID to pass to `/api/files/upload-complete`.
url:
type: string
description: S3 endpoint to POST the multipart form to.
fields:
type: object
additionalProperties:
type: string
description: Form fields that must be included in the multipart POST (the file part goes last).
'400':
description: Invalid or unsupported file, or missing required field.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Invalid or missing credential.
'404':
description: Target channel, aptlet, or knowledge doc not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/files/upload-complete:
post:
summary: Finalize a direct file upload
description: 'Final (third) step of the direct file-upload flow. Confirms the file
was uploaded to S3 and records it. Call this with the `fileId` from
`/api/files/upload-url` after the `multipart/form-data` POST to the
presigned `url` succeeded. Returns the file''s download URL.'
operationId: completeFileUpload
tags:
- Files
security:
- ApiKeyHeader: []
- DelegateToken: []
- PartnerBearer: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- fileId
properties:
fileId:
type: string
description: The `fileId` returned by `/api/files/upload-url`.
responses:
'200':
description: Upload finalized.
content:
application/json:
schema:
type: object
properties:
fileId:
type: string
description: ID of the stored file.
url:
type: string
description: Download URL for the stored file.
'400':
description: Missing fileId or the upload was already completed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Invalid or missing credential.
'404':
description: No pending upload found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
Error:
type: object
properties:
error:
type: string
message:
type: string
securitySchemes:
ApiKeyHeader:
type: apiKey
in: header
name: x-token
DelegateToken:
type: apiKey
in: header
name: Authorization
description: 'Delegate token issued by the platform. Format: `DelegateToken <token>`'
PartnerBearer:
type: http
scheme: bearer
description: 'Partner token. Format: `Authorization: Bearer <token>`'
x-provenance:
method: harvested
publisher: Aptly
source: https://docs.getaptly.com/openapi.yaml
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)