Metricool Approval Task Api Service API

The Approval Task Api Service API from Metricool — 4 operation(s) for approval task api service.

Business capability
Content Marketing Management BC-400.70

Operations 4

GET /v2/scheduler/tasks/{reviewerId}/count Get reviewer approval task count #
GET /v2/scheduler/tasks/{userId} Get approval task #
PUT /v2/scheduler/tasks/{userId}/approvals Approve or reject the posts on a reviewer's task list #
GET /v2/scheduler/tasks/{userId}/counters Get user opened tasks count #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/metricool:metricool-approval-task-api-service-api"
All apis
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.

Get an API 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 Specification

metricool-approval-task-api-service-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Metricool Approval Task Api Service API
  description: 'Metricool API


    The base URL for all endpoints is: https://app.metricool.com/api


    All endpoints require authentication.'
  version: 2.0.0
servers:
- url: https://app.metricool.com/api
tags:
- name: Approval Task Api Service
paths:
  /v2/scheduler/tasks/{reviewerId}/count:
    get:
      tags:
      - Approval Task Api Service
      operationId: getReviewerApprovalTaskCount
      parameters:
      - name: reviewerId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      - name: brandIdToReview
        in: query
        required: false
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonOkResponseInteger'
      summary: Get reviewer approval task count
      x-summary-source: derived
  /v2/scheduler/tasks/{userId}:
    get:
      tags:
      - Approval Task Api Service
      operationId: getApprovalTask
      parameters:
      - name: editorStatus[]
        in: query
        required: false
        schema:
          type: array
          items:
            type: string
      - name: reviewerStatus[]
        in: query
        required: false
        schema:
          type: array
          items:
            type: string
      - name: userId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonOkListResponseApprovalTask'
      summary: Get approval task
      x-summary-source: derived
  /v2/scheduler/tasks/{userId}/approvals:
    put:
      tags:
      - Approval Task Api Service
      summary: Approve or reject the posts on a reviewer's task list
      description: 'Authenticated. Records this reviewer''s approve/reject decision on one or more of the posts waiting for them — one target or many, same contract — and returns a per-post result. The targets may span several brands: each brand is authorized on its own, and the caller must be allowed to approve posts (or hold full planner access) on it. Applied best-effort: a post that is not in the reviewer''s set, is no longer actionable, or sits in a brand the caller may no longer approve on is reported as a failed result, not a 4xx. NOT_FOUND, NOT_ACTIONABLE and FORBIDDEN are terminal; ERROR is transient and retryable. An empty post list, more than 100 posts, a target missing its brand or post id, or a status other than ''approved'' or ''rejected'', is a 400 naming the offending field: a malformed list is rejected rather than partly acted on, so a decision is never applied to only part of what was sent. Repeated posts count once. The note is used only when rejecting.'
      operationId: decideOnApprovalTasks
      parameters:
      - name: userId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApprovalTasksDecisionRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonOkResponseReviewerPostsDecisionResponse'
  /v2/scheduler/tasks/{userId}/counters:
    get:
      tags:
      - Approval Task Api Service
      operationId: getUserOpenedTasksCount
      parameters:
      - name: userId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonOkResponseOpenedTasksCount'
      summary: Get user opened tasks count
      x-summary-source: derived
components:
  schemas:
    TasksCountDetails:
      type: object
    ApprovalTaskDecisionTarget:
      required:
      - blogId
      - postId
      type: object
      properties:
        blogId:
          type: integer
          description: Id of the brand the post belongs to.
          format: int32
          example: 91
        postId:
          type: integer
          description: Id of the post.
          format: int32
          example: 480123
      description: One post to decide on, as it appears on the task list.
    DateTimeInfo:
      required:
      - dateTime
      type: object
      properties:
        dateTime:
          type: string
          description: 'Local Date-time represented with a certain timezone '
        timezone:
          type: string
          description: Timezone applied to the datetime
    ReviewerPostsDecisionResponse:
      type: object
      properties:
        results:
          type: array
          description: One result per requested post, in request order.
          items:
            $ref: '#/components/schemas/ReviewerPostDecisionResult'
      description: Per-post outcomes of a reviewer's approve/reject action, one entry per requested post.
    ReviewerPostDecisionResult:
      type: object
      properties:
        postId:
          type: integer
          description: The post this result refers to.
          format: int32
          example: 1024
        reviewerStatus:
          type: string
          description: This reviewer's new decision on the post.
          example: approved
          enum:
          - approved
          - rejected
        postApprovalStatus:
          type: string
          description: Recomputed post-level approval status after this decision. Informational; normally present on success, absent only if the post was removed or the re-read failed.
          example: approved
        error:
          type: string
          description: Failure reason when the decision was not applied to a post. NOT_FOUND, NOT_ACTIONABLE and FORBIDDEN are terminal; ERROR is transient and retryable.
          example: NOT_FOUND
          enum:
          - NOT_FOUND
          - NOT_ACTIONABLE
          - FORBIDDEN
          - ERROR
      description: Outcome of the reviewer's decision for a single post.
    OpenedTasksCount:
      type: object
      properties:
        total:
          type: integer
          format: int32
        details:
          type: array
          items:
            $ref: '#/components/schemas/TasksCountDetails'
    ApprovalTaskUser:
      type: object
      properties:
        id:
          type: integer
          format: int32
        mail:
          type: string
        fullName:
          type: string
        status:
          type: string
        profilePicture:
          type: string
          description: Public URL of the user's 400x400 profile picture. Absent when they have none, in which case the frontend renders its initials fallback.
    JsonPaging:
      type: object
      properties:
        next:
          type: string
    ApprovalTask:
      type: object
      properties:
        publicationDate:
          $ref: '#/components/schemas/DateTimeInfo'
        postId:
          type: integer
          format: int32
        postUuid:
          type: string
        mediaUrl:
          type: string
        text:
          type: string
        networks:
          type: array
          items:
            type: string
        status:
          type: string
          description: 'On a reviewer task, the reader''s own answer. On an editor task, the state of the post they sent: pending while no answer settles it, whichever approval flavour it stores.'
          enum:
          - pending
          - approved
          - rejected
        blogId:
          type: integer
          format: int32
        blogName:
          type: string
        blogImage:
          type: string
          description: 'Public URL of the brand''s image: its own picture, or the one stored from its connected networks when it has none of its own. Both are stored values — a brand with neither gets no picture resolved from its live connections here, and the field is absent.'
        taskType:
          type: string
        approvalTaskUsers:
          type: array
          items:
            $ref: '#/components/schemas/ApprovalTaskUser'
    JsonOkResponseOpenedTasksCount:
      type: object
      properties:
        metadata:
          type: object
        page:
          $ref: '#/components/schemas/JsonPaging'
        data:
          $ref: '#/components/schemas/OpenedTasksCount'
    JsonOkResponseReviewerPostsDecisionResponse:
      type: object
      properties:
        metadata:
          type: object
        page:
          $ref: '#/components/schemas/JsonPaging'
        data:
          $ref: '#/components/schemas/ReviewerPostsDecisionResponse'
    JsonOkListResponseApprovalTask:
      type: object
      properties:
        metadata:
          type: object
        page:
          $ref: '#/components/schemas/JsonPaging'
        data:
          type: array
          items:
            $ref: '#/components/schemas/ApprovalTask'
    ApprovalTasksDecisionRequest:
      required:
      - posts
      - status
      type: object
      properties:
        posts:
          maxItems: 100
          minItems: 0
          type: array
          description: 'The posts to decide on. One target for a single action, several for bulk. At most 100 targets per call: a longer list is rejected with a 400 rather than truncated, so a decision is never applied to only part of what was sent. A target missing its brand or post id is rejected the same way, for the same reason.'
          items:
            $ref: '#/components/schemas/ApprovalTaskDecisionTarget'
        status:
          minLength: 1
          type: string
          description: The decision, applied to every listed post.
          example: approved
          enum:
          - approved
          - rejected
        note:
          type: string
          description: Optional note; used only when rejecting. Attached as a post note and included in the rejection email to each post's creator.
      description: A reviewer's approve/reject decision applied to one or more of their tasks, possibly across several brands.
    JsonOkResponseInteger:
      type: object
      properties:
        metadata:
          type: object
        page:
          $ref: '#/components/schemas/JsonPaging'
        data:
          type: integer
          format: int32