Planable Pages API

The Pages API from Planable — 4 operation(s). List the social channels connected to a workspace, pull per-page analytics, and trigger and poll a metrics sync from the source platforms.

OpenAPI Specification

planable-pages-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Planable Public Pages API
  version: 1.0.0
  description: 'REST API for managing Planable companies, workspaces, pages, posts and more.


    **Plan eligibility:** new API tokens can only be generated by companies on the **Pro** and **Enterprise**
    plans. Tokens that have already been generated continue to work regardless of plan.'
servers:
- url: https://api.planable.io/api/v1
security:
- bearerAuth: []
tags:
- name: Pages
paths:
  /pages/{id}/sync:
    post:
      tags:
      - Pages
      summary: Trigger page metrics sync
      description: Triggers a fresh analytics metrics sync for a page.
      security:
      - bearerAuth:
        - write
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Page metrics sync queued or deduplicated
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      pageId:
                        type: string
                      started:
                        type: boolean
                      message:
                        type: string
                    required:
                    - pageId
                    - started
                    - message
                required:
                - data
        '400':
          description: Page type does not support analytics sync
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
        '404':
          description: Page not found
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /pages/{id}/sync-status:
    get:
      tags:
      - Pages
      summary: Get page metrics sync status
      description: Returns whether a page metrics sync is in progress and when metrics last synced.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      security:
      - bearerAuth: []
      responses:
        '200':
          description: Page metrics sync status
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      pageId:
                        type: string
                      syncInProgress:
                        type: boolean
                      lastSyncedAt:
                        type:
                        - string
                        - 'null'
                        format: date-time
                    required:
                    - pageId
                    - syncInProgress
                    - lastSyncedAt
                required:
                - data
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
        '404':
          description: Page not found
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /pages:
    get:
      tags:
      - Pages
      summary: List pages
      description: Returns pages (social channels) the token has access to, with pagination.
      parameters:
      - name: workspaceId
        in: query
        required: false
        schema:
          type: string
      - name: offset
        in: query
        required: false
        schema:
          type: integer
          default: 0
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          default: 20
      security:
      - bearerAuth: []
      responses:
        '200':
          description: List of pages with pagination
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                        name:
                          type: string
                        platform:
                          type: string
                        workspaceId:
                          type: string
                        createdAt:
                          type:
                          - string
                          - 'null'
                          format: date-time
                        isConnected:
                          type: boolean
                        profilePicture:
                          type:
                          - string
                          - 'null'
                        link:
                          type:
                          - string
                          - 'null'
                      required:
                      - id
                      - name
                      - platform
                      - workspaceId
                      - createdAt
                      - isConnected
                      - profilePicture
                      - link
                  pagination:
                    type: object
                    properties:
                      offset:
                        type: number
                      limit:
                        type: number
                      hasMore:
                        type: boolean
                    required:
                    - offset
                    - limit
                    - hasMore
                required:
                - data
                - pagination
        '400':
          description: Validation error
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /pages/{id}/metrics:
    get:
      tags:
      - Pages
      summary: Get page metrics
      description: Returns paginated raw page metrics snapshots for a date range.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: startDate
        in: query
        required: true
        schema:
          type: string
          format: date-time
      - name: endDate
        in: query
        required: true
        schema:
          type: string
          format: date-time
      - name: offset
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
          default: 0
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 90
          default: 30
      security:
      - bearerAuth: []
      responses:
        '200':
          description: Paginated page metrics snapshots
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        pageId:
                          type: string
                        pageType:
                          type: string
                        fetchedAt:
                          type: string
                          format: date-time
                        partial:
                          type: boolean
                        facebook:
                          type: object
                          properties:
                            followers:
                              type: number
                            gainedFollowers:
                              type: number
                            posts:
                              type: number
                            engagement:
                              type: number
                            reactions:
                              type: number
                            pageViews:
                              type: number
                            unFollows:
                              type: number
                            views:
                              type: number
                            organic:
                              type: object
                              properties:
                                views:
                                  type: number
                              required:
                              - views
                            paid:
                              type: object
                              properties:
                                views:
                                  type: number
                                impressions:
                                  type: number
                                clicks:
                                  type: number
                                spend:
                                  type: number
                                spendCurrency:
                                  type: string
                            paidByAdAccount:
                              type: object
                              additionalProperties:
                                type: object
                                properties:
                                  impressions:
                                    type: number
                                  clicks:
                                    type: number
                                  spend:
                                    type: number
                                  spendCurrency:
                                    type: string
                                required:
                                - impressions
                                - clicks
                                - spend
                            totalFollowers:
                              type: number
                          required:
                          - followers
                          - gainedFollowers
                          - posts
                          - engagement
                          - reactions
                          - pageViews
                          - unFollows
                          - views
                        instagram:
                          type: object
                          properties:
                            gainedFollowers:
                              type: number
                            unFollows:
                              type: number
                            totalFollowers:
                              type: number
                            followersIncomplete:
                              type: boolean
                            impressions:
                              type: number
                            views:
                              type: number
                            reach:
                              type: number
                            accountsReachBreakdown:
                              type: object
                              properties:
                                total:
                                  type: number
                                followers:
                                  type: number
                                nonFollowers:
                                  type: number
                              required:
                              - total
                              - followers
                              - nonFollowers
                            profileViews:
                              type: number
                            posts:
                              type: number
                            engagement:
                              type: number
                            engagementBreakdown:
                              type: object
                              properties:
                                post:
                                  type: number
                                reel:
                                  type: number
                                ad:
                                  type: number
                                story:
                                  type: number
                                carousel:
                                  type: number
                            reachBreakdown:
                              type: object
                              properties:
                                post:
                                  type: object
                                  properties:
                                    total:
                                      type: number
                                    followers:
                                      type: number
                                    nonFollowers:
                                      type: number
                                  required:
                                  - total
                                  - followers
                                  - nonFollowers
                                reel:
                                  type: object
                                  properties:
                                    total:
                                      type: number
                                    followers:
                                      type: number
                                    nonFollowers:
                                      type: number
                                  required:
                                  - total
                                  - followers
                                  - nonFollowers
                                story:
                                  type: object
                                  properties:
                                    total:
                                      type: number
                                    followers:
                                      type: number
                                    nonFollowers:
                                      type: number
                                  required:
                                  - total
                                  - followers
                                  - nonFollowers
                                ad:
                                  type: object
                                  properties:
                                    total:
                                      type: number
                                    followers:
                                      type: number
                                    nonFollowers:
                                      type: number
                                  required:
                                  - total
                                  - followers
                                  - nonFollowers
                              required:
                              - post
                              - reel
                              - story
                            viewsBreakdown:
                              type: object
                              properties:
                                post:
                                  type: object
                                  properties:
                                    total:
                                      type: number
                                    followers:
                                      type: number
                                    nonFollowers:
                                      type: number
                                  required:
                                  - total
                                  - followers
                                  - nonFollowers
                                reel:
                                  type: object
                                  properties:
                                    total:
                                      type: number
                                    followers:
                                      type: number
                                    nonFollowers:
                                      type: number
                                  required:
                                  - total
                                  - followers
                                  - nonFollowers
                                story:
                                  type: object
                                  properties:
                                    total:
                                      type: number
                                    followers:
                                      type: number
                                    nonFollowers:
                                      type: number
                                  required:
                                  - total
                                  - followers
                                  - nonFollowers
                                ad:
                                  type: object
                                  properties:
                                    total:
                                      type: number
                                    followers:
                                      type: number
                                    nonFollowers:
                                      type: number
                                  required:
                                  - total
                                  - followers
                                  - nonFollowers
                              required:
                              - post
                              - reel
                              - story
                            viewsAudienceBreakdown:
                              type: object
                              properties:
                                total:
                                  type: number
                                followers:
                                  type: number
                                nonFollowers:
                                  type: number
                              required:
                              - total
                              - followers
                              - nonFollowers
                            organic:
                              type: object
                              properties:
                                reach:
                                  type: number
                                views:
                                  type: number
                            paid:
                              type: object
                              properties:
                                reach:
                                  type: number
                                views:
                                  type: number
                                impressions:
                                  type: number
                                clicks:
                                  type: number
                                spend:
                                  type: number
                                spendCurrency:
                                  type: string
                            paidByAdAccount:
                              type: object
                              additionalProperties:
                                type: object
                                properties:
                                  impressions:
                                    type: number
                                  clicks:
                                    type: number
                                  spend:
                                    type: number
                                  spendCurrency:
                                    type: string
                                required:
                                - impressions
                                - clicks
                                - spend
                          required:
                          - gainedFollowers
                          - unFollows
                          - reach
                          - posts
                          - engagement
                        linkedin:
                          type: object
                          properties:
                            followers:
                              type: number
                            paidFollowers:
                              type: number
                            totalFollowers:
                              type: number
                            impressions:
                              type: number
                            engagement:
                              type: number
                            pageInsights:
                              type: number
                            pageViews:
                              type: number
                            posts:
                              type: number
                            reshares:
                              type: number
                            reactions:
                              type: number
                            comments:
                              type: number
                            shareStats:
                              type: object
                              properties:
                                uniqueImpressionsCount:
                                  type: number
                                clickCount:
                                  type: number
                                engagement:
                                  type: number
                                likeCount:
                                  type: number
                                commentCount:
                                  type: number
                                shareCount:
                                  type: number
                                impressionCount:
                                  type: number
                                commentMentionsCount:
                                  type: number
                                shareMentionsCount:
                                  type: number
                              required:
                              - uniqueImpressionsCount
                              - clickCount
                              - engagement
                              - likeCount
                              - commentCount
                              - shareCount
                              - impressionCount
                            paid:
                              type: object
                              properties:
                                impressions:
                                  type: number
                                engagement:
                                  type: number
                                clicks:
                                  type: number
                                reactions:
                                  type: number
                                comments:
                                  type: number
                                shares:
                                  type: number
                                oneClickLeads:
                                  type: number
                                qualifiedLeads:
                                  type: number
                                spend:
                                  type: number
                                spendCurrency:
                                  type: string
                              required:
                              - impressions
                              - engagement
                              - clicks
                              - reactions
                              - comments
                              - shares
                              - spend
                          required:
                          - followers
                          - impressions
                        tiktok:
                          type: object
                          properties:
                            profile_views:
                              type: number
                            video_views:
                              type: number
                            likes:
                              type: number
                            comments:
                              type: number
                            shares:
                              type: number
                            followers_count:
                              type: number
                            engagement:
                              type: number
                            videos:
                              type: number
                            paid:
                              type: object
                              properties:
                                impressions:
                                  type: number
                                clicks:
                                  type: number
                                spend:
                                  type: number
                                likes:
                                  type: number
                                comments:
                                  type: number
                                shares:
                                  type: number
                                videoViews:
                                  type: number
                                engagement:
                                  type: number
                                reach:
                                  type: number
                                videoWatched2s:
                                  type: number
                                videoWatched6s:
                                  type: number
                                videoViewsP25:
                                  type: number
                                videoViewsP50:
                                  type: number
                                videoViewsP75:
                                  type: number
                                videoViewsP100:
                                  type: number
                                follows:
                                  type: number
                                profileVisits:
                                  type: number
                                conversions:
                                  type: number
                                spendCurrency:
                                  type: string
                              required:
                              - impressions
                              - clicks
                              - spend
                              - likes
                              - comments
                              - shares
                              - videoViews
                              - engagement
                              - reach
                              - videoWatched2s
                              - videoWatched6s
                              - videoViewsP25
                              - videoViewsP50
                              - videoViewsP75
                              - videoViewsP100
                              - follows
                              - profileVisits
                              - conversions
                            paidByAdAccount:
                              type: object
                              additionalProperties:
                                type: object
                                properties:
                                  impressions:
                                    type: number
                                  clicks:
                                    type: number
                                  spend:
                                    type: number
                                  likes:
                                    type: number
                                  comments:
                                    type: number
                                  shares:
                                    type: number
                                  videoViews:
                                    type: number
                                  engagement:
                                    type: number
                                  reach:
                                    type: number
                                  videoWatched2s:
                                    type: number
                                  videoWatched6s:
                                    type: number
                                  videoViewsP25:
                                    type: number
                                  videoViewsP50:
                                    type: number
                                  videoViewsP75:
                                    type: number
                                  videoViewsP100:
                                    type: number
                                  follows:
                                    type: number
                                  profileVisits:
                                    type: number
                                  conversions:
                                    type: number
                                  spendCurrency:
                                    type: string
                                required:
                                - impressions
                                - clicks
                                - spend
                                - likes
                                - comments
                                - shares
                                - videoViews
                                - engagement
                                - reach
                                - videoWatched2s
                                - videoWatched6s
                                - videoViewsP25
                                - videoViewsP50
                                - videoViewsP75
                                - videoViewsP100
                                - follows
                                - profileVisits
                                - conversions
                          required:
                          - profile_views
                          - video_views
                          - likes
                          - comments
                          - shares
                          - followers_count
                          - engagement
                          - videos
                        threads:
                          type: object
                          properties:
                            views:
                              type: number
                            likes:
                              type: number
                            replies:
                              type: number
                            reposts:
                              type: number
                            quotes:
                              type: nu

# --- truncated at 32 KB (37 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/planable/refs/heads/main/openapi/planable-pages-api-openapi.yml