Metricool Users Api Service API

The Users Api Service API from Metricool — 10 operation(s) for users api service.

Operations 17

GET /v2/settings/users Get user info #
HEAD /v2/settings/users Exists user with email #
PATCH /v2/settings/users Update recovery credentials #
GET /v2/settings/users/saved-texts Get saved texts #
POST /v2/settings/users/saved-texts Create saved text #
GET /v2/settings/users/saved-texts/tags Get tags from saved texts #
PUT /v2/settings/users/saved-texts/{savedTextId} Update saved text #
DELETE /v2/settings/users/saved-texts/{savedTextId} Delete scheduled post note #
GET /v2/settings/users/{id} Get user 1 #
DELETE /v2/settings/users/{id} Delete account #
PATCH /v2/settings/users/{id} Update user settings #
PATCH /v2/settings/users/{id}/credentials Update user credentials 1 #
PUT /v2/settings/users/{id}/profile-picture Sets or replaces the user's profile picture #
DELETE /v2/settings/users/{id}/profile-picture Removes the user's profile picture #
GET /v2/settings/users/{userId}/api-usage-stats Get user statistics for period #
GET /v2/settings/users/{userId}/linkedin-trial/eligibility Get eligibility for linkedin trial #
GET /v2/settings/users/{userId}/linkedin-trial/info Get information for linkedin trial #

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-users-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-users-api-service-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Metricool Users 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: Users Api Service
paths:
  /v2/settings/users:
    get:
      tags:
      - Users Api Service
      operationId: getUserInfo
      parameters:
      - name: authorization
        in: header
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonOkResponseUser'
      summary: Get user info
      x-summary-source: derived
    head:
      tags:
      - Users Api Service
      operationId: existsUserWithEmail
      parameters:
      - name: email
        in: query
        required: true
        schema:
          type: string
          format: email
      responses:
        '200':
          description: OK
      summary: Exists user with email
      x-summary-source: derived
    patch:
      tags:
      - Users Api Service
      operationId: updateRecoveryCredentials
      parameters:
      - name: authorization
        in: header
        required: true
        schema:
          type: string
      - name: fields
        in: query
        required: true
        schema:
          type: array
          items:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RecoveryChangeRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonOkResponseBoolean'
      summary: Update recovery credentials
      x-summary-source: derived
  /v2/settings/users/saved-texts:
    get:
      tags:
      - Users Api Service
      operationId: getSavedTexts
      parameters:
      - name: savedTextType
        in: query
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonOkListResponseSavedTextWithPermissions'
      summary: Get saved texts
      x-summary-source: derived
    post:
      tags:
      - Users Api Service
      operationId: createSavedText
      parameters:
      - name: savedTextType
        in: query
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SavedTextRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonOkResponseSavedText'
      summary: Create saved text
      x-summary-source: derived
  /v2/settings/users/saved-texts/tags:
    get:
      tags:
      - Users Api Service
      operationId: getTagsFromSavedTexts
      parameters:
      - name: savedTextType
        in: query
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonOkListResponseStTagCount'
      summary: Get tags from saved texts
      x-summary-source: derived
  /v2/settings/users/saved-texts/{savedTextId}:
    put:
      tags:
      - Users Api Service
      operationId: updateSavedText
      parameters:
      - name: savedTextType
        in: query
        required: true
        schema:
          type: string
      - name: savedTextId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SavedTextRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonOkResponseSavedText'
      summary: Update saved text
      x-summary-source: derived
    delete:
      tags:
      - Users Api Service
      operationId: deleteScheduledPostNote
      parameters:
      - name: savedTextType
        in: query
        required: true
        schema:
          type: string
      - name: savedTextId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonOkResponseBoolean'
      summary: Delete scheduled post note
      x-summary-source: derived
  /v2/settings/users/{id}:
    get:
      tags:
      - Users Api Service
      operationId: getUser_1
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonOkResponseUser'
      summary: Get user 1
      x-summary-source: derived
    delete:
      tags:
      - Users Api Service
      operationId: deleteAccount
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
          format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeleteUserRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonOkResponseBoolean'
      summary: Delete account
      x-summary-source: derived
    patch:
      tags:
      - Users Api Service
      operationId: updateUserSettings
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
          format: int32
      - name: fields
        in: query
        required: true
        schema:
          type: array
          items:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateUserRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonOkResponseUser'
      summary: Update user settings
      x-summary-source: derived
  /v2/settings/users/{id}/credentials:
    patch:
      tags:
      - Users Api Service
      operationId: updateUserCredentials_1
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
          format: int32
      - name: fields
        in: query
        required: true
        schema:
          type: array
          items:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateUserCredentialsRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonOkResponseUserCredentials'
      summary: Update user credentials 1
      x-summary-source: derived
  /v2/settings/users/{id}/profile-picture:
    put:
      tags:
      - Users Api Service
      summary: Sets or replaces the user's profile picture
      description: The request is multipart/form-data with a single file part named 'picture' — the same contract as POST /v2/media. The image is validated and normalised server-side to a 400x400 PNG, centre-cropped; there is no manual crop. The change is applied immediately and the previous picture is deleted, so it cannot be recovered. Accepted formats PNG, JPEG and WebP, decided from the actual bytes. Maximum upload size 1 MB, and neither side of the source image may exceed 2000 pixels — both are rejections, not automatic downscales.
      operationId: setProfilePicture_1
      parameters:
      - name: id
        in: path
        description: Id of the user whose profile picture is being set
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: The updated user, including the new profile picture URL
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonOkResponseUser'
        '400':
          description: Missing 'picture' file part, not an image, unsupported format, over 1 MB, a side over 2000 px, or the target user is not the caller's own (NotAllowedOperationException, which this resource maps to 400 rather than 403 — same as GET /v2/settings/users/{id})
        '401':
          description: Not authenticated
        '403':
          description: Agency user
        '415':
          description: Declared content type is not multipart/form-data
    delete:
      tags:
      - Users Api Service
      summary: Removes the user's profile picture
      description: 'Idempotent: removing a picture from a user who has none succeeds and does nothing, so the immediate-apply UI can double-submit safely. The frontend renders its initials fallback whenever no picture is present — the backend never returns a generated placeholder URL.'
      operationId: deleteProfilePicture_1
      parameters:
      - name: id
        in: path
        description: Id of the user whose profile picture is being removed
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: The updated user, with no profile picture
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonOkResponseUser'
        '400':
          description: The target user is not the caller's own (NotAllowedOperationException, which this resource maps to 400 rather than 403 — same as GET /v2/settings/users/{id})
        '401':
          description: Not authenticated
        '403':
          description: Agency user
  /v2/settings/users/{userId}/api-usage-stats:
    get:
      tags:
      - Users Api Service
      operationId: getUserStatisticsForPeriod
      parameters:
      - name: userId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      - name: from
        in: query
        required: true
        schema:
          type: string
      - name: to
        in: query
        required: true
        schema:
          type: string
      - name: aggregation
        in: query
        required: true
        schema:
          type: string
      - name: includeEndpoints
        in: query
        required: false
        schema:
          type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonOkListResponseApiConsumptionData'
      summary: Get user statistics for period
      x-summary-source: derived
  /v2/settings/users/{userId}/linkedin-trial/eligibility:
    get:
      tags:
      - Users Api Service
      summary: Get eligibility for linkedin trial
      operationId: checkTrialEligibility
      parameters:
      - name: userId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonOkResponseTrialEligibilityResponse'
  /v2/settings/users/{userId}/linkedin-trial/info:
    get:
      tags:
      - Users Api Service
      summary: Get information for linkedin trial
      operationId: getTrialInformation
      parameters:
      - name: userId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonOkResponseTrialInfoResponse'
components:
  schemas:
    UpdateUserCredentialsRequest:
      type: object
      properties:
        userName:
          type: string
        oldPassword:
          type: string
        password:
          type: string
        recoveryToken:
          type: string
    TaxData:
      type: object
      properties:
        vatRate:
          type: number
          format: double
        company:
          type: string
        country:
          type: string
        state:
          type: string
        address:
          type: string
        vatNumber:
          type: string
        addOn:
          type: string
    JsonOkResponseSavedText:
      type: object
      properties:
        metadata:
          type: object
        page:
          $ref: '#/components/schemas/JsonPaging'
        data:
          $ref: '#/components/schemas/SavedText'
    UserAgencyData:
      type: object
      properties:
        agencyId:
          type: integer
          description: Unique identifier of the agency
          format: int32
        isOwner:
          type: boolean
          description: Indicates if the user is the owner of the agency
        teamMemberRoleId:
          type: integer
          description: Unique identifier of the team member role assigned to the user
          format: int64
        agencyOwnerUserId:
          type: integer
          description: Unique identifier of the agency owner user
          format: int32
    JsonOkListResponseStTagCount:
      type: object
      properties:
        metadata:
          type: object
        page:
          $ref: '#/components/schemas/JsonPaging'
        data:
          type: array
          items:
            $ref: '#/components/schemas/StTagCount'
    SavedTextWithPermissions:
      required:
      - id
      - text
      - title
      type: object
      properties:
        id:
          type: integer
          format: int32
        blogId:
          type: integer
          format: int32
        userId:
          type: integer
          format: int32
        title:
          minLength: 1
          type: string
        text:
          minLength: 1
          type: string
        deleted:
          type: boolean
        tags:
          type: array
          items:
            type: string
        scope:
          type: string
        canDelete:
          type: boolean
        canEdit:
          type: boolean
    VendastaData:
      type: object
      properties:
        accountId:
          type: string
        productNavBarDataUrl:
          type: string
    TrialEligibilityResponse:
      type: object
      properties:
        eligible:
          type: boolean
    SavedText:
      required:
      - id
      - text
      - title
      type: object
      properties:
        id:
          type: integer
          format: int32
        blogId:
          type: integer
          format: int32
        userId:
          type: integer
          format: int32
        title:
          minLength: 1
          type: string
        text:
          minLength: 1
          type: string
        deleted:
          type: boolean
        tags:
          type: array
          items:
            type: string
        scope:
          type: string
    JsonOkListResponseSavedTextWithPermissions:
      type: object
      properties:
        metadata:
          type: object
        page:
          $ref: '#/components/schemas/JsonPaging'
        data:
          type: array
          items:
            $ref: '#/components/schemas/SavedTextWithPermissions'
    JsonOkResponseBoolean:
      type: object
      properties:
        metadata:
          type: object
        page:
          $ref: '#/components/schemas/JsonPaging'
        data:
          type: boolean
    JsonPaging:
      type: object
      properties:
        next:
          type: string
    StTagCount:
      type: object
      properties:
        tag:
          type: string
        tagCount:
          type: integer
          format: int32
    JsonOkResponseUserCredentials:
      type: object
      properties:
        metadata:
          type: object
        page:
          $ref: '#/components/schemas/JsonPaging'
        data:
          $ref: '#/components/schemas/UserCredentials'
    JsonOkResponseTrialEligibilityResponse:
      type: object
      properties:
        metadata:
          type: object
        page:
          $ref: '#/components/schemas/JsonPaging'
        data:
          $ref: '#/components/schemas/TrialEligibilityResponse'
    FeatureSegmentAssigned:
      required:
      - name
      - segmentAssigned
      type: object
      properties:
        name:
          type: string
          description: Feature name
          example: new_dashboard
        segmentAssigned:
          type: integer
          description: Segment assigned to the user
          format: int32
          example: 1
      description: Feature segment assigned
    DeleteUserRequest:
      required:
      - reasonMessage
      type: object
      properties:
        reasonMessage:
          minLength: 1
          type: string
    UserCredentials:
      type: object
      properties:
        userName:
          type: string
    JsonOkResponseUser:
      type: object
      properties:
        metadata:
          type: object
        page:
          $ref: '#/components/schemas/JsonPaging'
        data:
          $ref: '#/components/schemas/User'
    TrialInfoResponse:
      type: object
      properties:
        userId:
          type: integer
          format: int32
        startDate:
          $ref: '#/components/schemas/DateTimeInfo'
        endDate:
          $ref: '#/components/schemas/DateTimeInfo'
        pageId:
          type: string
        pageName:
          type: string
        isActive:
          type: boolean
    JsonOkResponseTrialInfoResponse:
      type: object
      properties:
        metadata:
          type: object
        page:
          $ref: '#/components/schemas/JsonPaging'
        data:
          $ref: '#/components/schemas/TrialInfoResponse'
    User:
      type: object
      properties:
        id:
          type: integer
          format: int32
        userName:
          type: string
        role:
          type: string
        enabled:
          type: boolean
        name:
          type: string
        lastName:
          type: string
        mail:
          type: string
        phone:
          type: string
        language:
          type: string
        timezone:
          type: string
        accountLogo:
          type: string
        headerLogo:
          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.
        btCustomerId:
          type: string
        stripeCustomerId:
          type: string
        taxData:
          $ref: '#/components/schemas/TaxData'
        affiliated:
          type: boolean
        whiteLabel:
          type: boolean
        academic:
          type: boolean
        beta:
          type: boolean
        sendToAlternativeEmail:
          type: boolean
        alternativeEmail:
          type: string
        billEmails:
          type: array
          items:
            type: string
        marketingNotifications:
          type: boolean
        token:
          type: string
        created:
          $ref: '#/components/schemas/DateTimeInfo'
        deleted:
          $ref: '#/components/schemas/DateTimeInfo'
        isDeleted:
          type: boolean
        locked:
          type: boolean
        changePasswordRequired:
          type: boolean
        onboarding:
          $ref: '#/components/schemas/OnboardingData'
        activeBrands:
          type: integer
          format: int32
        registeredFromTkAppCenter:
          type: boolean
        firstDayOfTheWeek:
          type: integer
          format: int32
        whiteLabelIntegrator:
          type: boolean
        requiresEmailAddress:
          type: boolean
        vendastaSettings:
          $ref: '#/components/schemas/VendastaData'
        crispWorkspaceId:
          type: string
        crispTokenId:
          type: string
          description: Opaque token identifying this user to Crisp for chat history preservation across login.
        agencyCKId:
          type: integer
          format: int32
        integratedIn:
          type: string
        accountManagerMail:
          type: string
        passwordExpirationDate:
          $ref: '#/components/schemas/DateTimeInfo'
        blogId:
          type: integer
          format: int32
        customBrandMail:
          type: string
        brandLabel:
          type: string
        userAgencyData:
          $ref: '#/components/schemas/UserAgencyData'
        featureSegmentAssigned:
          type: array
          items:
            $ref: '#/components/schemas/FeatureSegmentAssigned'
        internalTag:
          type: string
        newsletters:
          type: boolean
          description: True when the user accepts commercial communications. Absent when the flag does not apply to the requesting surface; for an account's own info it is always present, and an account with no stored choice reads as true.
    SavedTextRequest:
      required:
      - scope
      - text
      - title
      type: object
      properties:
        title:
          minLength: 1
          type: string
        text:
          minLength: 1
          type: string
        tags:
          type: array
          items:
            type: string
        scope:
          minLength: 1
          type: string
    ApiConsumptionData:
      type: object
      properties:
        userId:
          type: integer
          format: int64
        endpoint:
          type: string
        calls:
          type: integer
          format: int64
        timeBucket:
          $ref: '#/components/schemas/DateTimeInfo'
    OnboardingData:
      type: object
      properties:
        required:
          type: boolean
        finished:
          type: boolean
        buyerPersona:
          type: string
        size:
          type: string
        goal:
          type: array
          items:
            type: string
        networks:
          type: array
          items:
            type: string
        phone:
          type: string
        partnersOnboardings:
          type: array
          items:
            type: object
            additionalProperties:
              type: object
    UpdateUserRequest:
      type: object
      properties:
        name:
          type: string
        lastName:
          type: string
        language:
          type: string
        timezone:
          type: string
        accountLogo:
          type: string
        headerLogo:
          type: string
        company:
          type: string
        country:
          type: string
        state:
          type: string
        address:
          type: string
        vatNumber:
          type: string
        sendToAlternativeEmail:
          type: boolean
        alternativeEmail:
          type: string
        marketingNotifications:
          type: boolean
        billEmails:
          type: array
          items:
            type: string
        beta:
          type: boolean
        locked:
          type: boolean
        enabled:
          type: boolean
        onboarding:
          $ref: '#/components/schemas/OnboardingData'
        firstDayOfTheWeek:
          type: string
        whiteLabelIntegrator:
          type: boolean
    RecoveryChangeRequest:
      type: object
      properties:
        enabled:
          type: boolean
        password:
          type: string
    JsonOkListResponseApiConsumptionData:
      type: object
      properties:
        metadata:
          type: object
        page:
          $ref: '#/components/schemas/JsonPaging'
        data:
          type: array
          items:
            $ref: '#/components/schemas/ApiConsumptionData'
    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