OpenAPI Specification
openapi: 3.0.3
info:
title: Aptly App API
version: '1.0'
description: 'The Aptly API lets you read and write cards on any Aptly board from external systems.
All requests require an API key passed as the `x-token` header.
API keys are scoped to your company and work across all boards.
'
servers:
- url: https://core-api.getaptly.com
description: Production
security:
- ApiKeyHeader: []
tags:
- name: App
paths:
/api/app/verify:
post:
summary: Verify a delegate token (keyless)
description: 'Validates a short-lived delegate token without requiring an API key. The token must
include an `appClientId` (i.e. it was issued for an embedded app via
`POST /api/platform/user-token`). Returns the user''s identity, company name, and
the app''s title.
'
operationId: verifyDelegateToken
tags:
- App
security: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- token
properties:
token:
type: string
description: Delegate token returned by `POST /api/platform/user-token`.
responses:
'200':
description: Token is valid.
content:
application/json:
schema:
type: object
properties:
userId:
type: string
email:
type: string
nullable: true
firstName:
type: string
nullable: true
lastName:
type: string
nullable: true
companyId:
type: string
companyName:
type: string
nullable: true
appClientId:
type: string
appTitle:
type: string
nullable: true
'400':
description: token field is missing.
'401':
description: Token is invalid, expired, or was not issued for an embedded app (missing appClientId).
/api/app/me:
get:
summary: Get credential info
description: "Returns identity information for the credential used in the request. The response shape\ndepends on the auth method:\n\n- **Delegate token** (`Authorization: DelegateToken <token>`): returns user identity and,\n if the token has an `appClientId`, embedded-app context.\n- **API key** (`x-token` header or query param): returns company identity.\n- **Partner token** (`Authorization: Bearer <token>`): returns the partner's permission list.\n"
operationId: getMe
tags:
- App
security:
- ApiKeyHeader: []
- DelegateToken: []
- PartnerBearer: []
responses:
'200':
description: Credential identity.
content:
application/json:
schema:
oneOf:
- title: Delegate token — user
type: object
properties:
type:
type: string
enum:
- user
userId:
type: string
email:
type: string
nullable: true
firstName:
type: string
nullable: true
lastName:
type: string
nullable: true
companyId:
type: string
companyName:
type: string
nullable: true
- title: Delegate token — app
type: object
properties:
type:
type: string
enum:
- app
userId:
type: string
email:
type: string
nullable: true
firstName:
type: string
nullable: true
lastName:
type: string
nullable: true
companyId:
type: string
companyName:
type: string
nullable: true
appClientId:
type: string
appTitle:
type: string
nullable: true
- title: API key
type: object
properties:
type:
type: string
enum:
- apiKey
companyId:
type: string
companyName:
type: string
nullable: true
- title: Partner token
type: object
properties:
type:
type: string
enum:
- partner
permissions:
type: array
items:
type: string
'401':
description: Invalid or missing credential.
components:
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>`'