Aptly Cards API

The Cards API from Aptly — 6 operation(s) for cards.

OpenAPI Specification

aptly-cards-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Aptly App Cards 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: Cards
paths:
  /api/board/{boardId}:
    get:
      summary: List cards
      description: 'Returns a paginated list of cards on the board.


        Field values are keyed by field UUID — use the schema endpoint to map keys to labels.

        Money fields are returned as `{ amount, currency }` where `amount` is a decimal.


        All filter params are optional and ANDed together.

        '
      operationId: listCards
      tags:
      - Cards
      security:
      - ApiKeyHeader: []
      - DelegateToken: []
      parameters:
      - name: boardId
        in: path
        required: true
        schema:
          type: string
        description: The board's UUID.
      - name: page
        in: query
        required: true
        schema:
          type: integer
          minimum: 0
          maximum: 9999
        description: Zero-based page number.
      - name: pageSize
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 1000
          default: 20
        description: Number of cards per page.
      - name: updatedAtMin
        in: query
        schema:
          type: string
          format: date-time
        description: Only return cards updated after this ISO timestamp.
      - name: includeArchived
        in: query
        schema:
          type: boolean
          default: false
        description: Include archived cards.
      - name: relatedId
        in: query
        schema:
          type: string
        description: Only return cards where `references.value` contains this ID.
      - name: contactEmail
        in: query
        schema:
          type: string
        description: Resolves the email to contact IDs, then filters cards referencing those contacts.
      - name: keyTerm
        in: query
        schema:
          type: string
        description: Full-text autocomplete search on card title using the Atlas Search index.
      - name: assignee
        in: query
        schema:
          type: string
        description: Filter cards by assignee user ID.
      responses:
        '200':
          description: Paginated list of cards.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Card'
                  count:
                    type: integer
                    description: Total number of matching cards.
                  page:
                    type: integer
                  pageSize:
                    type: integer
        '401':
          description: Invalid or missing API key.
        '403':
          description: API access is disabled for this board.
        '404':
          description: Board not found.
    post:
      summary: Create or update a card
      description: 'Creates a new card on the board. Use field UUIDs (from the schema endpoint) as keys in the request body.


        To update an existing card, include its `_id` in the request body. The card must belong to this board.

        Fields not provided in the body are left unchanged on update.

        '
      operationId: createCard
      tags:
      - Cards
      security:
      - ApiKeyHeader: []
      - DelegateToken: []
      parameters:
      - name: boardId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                _id:
                  type: string
                  description: Existing card ID. When provided, updates that card instead of creating a new one.
                name:
                  type: string
                  description: Card title (also accepted as `title`).
              additionalProperties:
                description: Any board field UUID as key, with the field's value.
            example:
              name: John Smith
              abc123: john@example.com
              ghi789: 1500
      responses:
        '200':
          description: Card created.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      _id:
                        type: string
                        description: ID of the created card.
        '401':
          description: Invalid or missing API key.
        '403':
          description: API access is disabled for this board.
        '404':
          description: Board not found.
  /api/board/{boardId}/{cardId}:
    get:
      summary: Get a card
      description: Returns a single card by its ID.
      operationId: getCard
      tags:
      - Cards
      security:
      - ApiKeyHeader: []
      - DelegateToken: []
      parameters:
      - name: boardId
        in: path
        required: true
        schema:
          type: string
      - name: cardId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Card data.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Card'
        '401':
          description: Invalid or missing API key.
        '403':
          description: API access is disabled for this board.
        '404':
          description: Card not found.
  /api/board/{boardId}/{cardId}/comments:
    get:
      summary: List comments on a card
      description: Returns all comments on the specified card in chronological order.
      operationId: listComments
      tags:
      - Cards
      security:
      - ApiKeyHeader: []
      - DelegateToken: []
      parameters:
      - name: boardId
        in: path
        required: true
        schema:
          type: string
      - name: cardId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Array of comments.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Comment'
              example:
                data:
                - id: lk3jf8
                  userId: user_abc
                  content: Application approved.
                  createdAt: '2026-01-15T10:30:00Z'
        '401':
          description: Invalid or missing API key.
        '403':
          description: API access is disabled for this board.
        '404':
          description: Board or card not found.
  /api/board/{boardId}/{cardId}/contacts:
    get:
      summary: List contacts linked to a card
      description: 'Returns all person contacts linked to the card via its person/persons fields.

        Returns an empty array if the board has no person fields or none are populated.

        '
      operationId: listCardContacts
      tags:
      - Cards
      security:
      - ApiKeyHeader: []
      - DelegateToken: []
      parameters:
      - name: boardId
        in: path
        required: true
        schema:
          type: string
      - name: cardId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Array of linked contacts.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Contact'
        '401':
          description: Invalid or missing API key.
        '403':
          description: API access is disabled for this board.
        '404':
          description: Board or card not found.
  /api/board/{boardId}/{cardId}/comment:
    post:
      summary: Add or update a comment
      description: 'Adds a new comment to a card. To update an existing comment, include its `id` in the body —

        the `userId` must match the original comment''s author.

        '
      operationId: postComment
      tags:
      - Cards
      security:
      - ApiKeyHeader: []
      - DelegateToken: []
      parameters:
      - name: boardId
        in: path
        required: true
        schema:
          type: string
      - name: cardId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - userId
              - content
              properties:
                userId:
                  type: string
                  description: Aptly user ID of the comment author.
                content:
                  type: string
                  description: Comment text.
                id:
                  type: string
                  description: Existing comment ID — include to update rather than create.
      responses:
        '200':
          description: Comment created or updated.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Comment'
        '401':
          description: Invalid or missing API key.
        '404':
          description: Card or comment not found.
  /api/board/{boardId}/{cardId}/file:
    post:
      summary: Upload a file to a card
      description: 'Uploads a file and attaches it to a card. Send as `multipart/form-data` with the file in the `file` field.


        **Max file size:** 50 MB


        **Accepted types:** JPEG, PNG, GIF, WebP, SVG, PDF, Word, Excel, plain text, CSV, MP4, MOV, MP3, WAV

        '
      operationId: uploadFile
      tags:
      - Cards
      security:
      - ApiKeyHeader: []
      - DelegateToken: []
      parameters:
      - name: boardId
        in: path
        required: true
        schema:
          type: string
      - name: cardId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
              - file
              properties:
                file:
                  type: string
                  format: binary
      responses:
        '200':
          description: File uploaded and attached.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      fileId:
                        type: string
                      name:
                        type: string
                      size:
                        type: integer
                      type:
                        type: string
        '400':
          description: Missing file or unsupported file type.
        '401':
          description: Invalid or missing API key.
        '404':
          description: Card not found.
components:
  schemas:
    Contact:
      type: object
      properties:
        _id:
          type: string
          description: MongoDB ObjectId of the contact.
        uuid:
          type: string
        firstname:
          type: string
        lastname:
          type: string
        fullName:
          type: string
          description: Computed display name (first + last, or company name for org records).
        duogram:
          type: string
          description: Two-letter initials derived from first and last name.
        photoId:
          type: string
          nullable: true
        imageUrl:
          type: string
          nullable: true
          description: CDN thumbnail URL for the contact's photo, or null if none.
        email:
          type: string
        phone:
          type: string
        typeId:
          type: string
        companyId:
          type: string
        address:
          type: object
        title:
          type: string
        alerts:
          type: array
          items:
            type: object
        company:
          type: string
          description: Company name — populated when isCompany is true.
        isCompany:
          type: boolean
    Card:
      type: object
      properties:
        cardId:
          type: string
          description: Unique ID of the card.
        boardUuid:
          type: string
          description: UUID of the board this card belongs to.
        archived:
          type: boolean
        assignee:
          type: string
          description: Full name of the assigned user.
      additionalProperties:
        description: Additional properties are dynamic board fields keyed by their field UUID.
    Comment:
      type: object
      properties:
        id:
          type: string
        userId:
          type: string
        content:
          type: string
        createdAt:
          type: string
          format: date-time
  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>`'