Hootsuite REST API

The Hootsuite platform REST API — 48 operations covering OAuth 2.0 authentication, the authenticated member, media upload, message scheduling and the prescreen approval workflow, comments, social profiles, members, organizations, teams, and SCIM 2.0 user and group provisioning. Responses use a data/errors envelope; errors carry a 97-code numeric registry Hootsuite publishes inside the specification itself.

Documentation

Specifications

Other Resources

OpenAPI Specification

hootsuite-rest-api-openapi.yml Raw ↑
x-provenance:
  generated: '2026-08-13'
  method: searched
  source: https://apidocs.hootsuite.com/docs/api/swagger.yaml
  note: >-
    First-party Hootsuite REST API contract. Discovered from the ReDoc loader at
    https://platform.hootsuite.com/docs/api/index.html (spec-url ./swagger.yaml) and confirmed as
    the canonical service-desc link in Hootsuite's RFC 9727 API catalog at
    https://www.hootsuite.com/.well-known/api-catalog. Published as Swagger 2.0; converted to
    OpenAPI 3.0 with swagger2openapi 7 for this working copy. The verbatim Swagger 2.0 source is
    kept at openapi/_original/hootsuite-rest-api-swagger.yaml.
  ownership: >-
    host platform.hootsuite.com, info.title "Hootsuite REST API", contact dev.support@hootsuite.com
    - the contract identifies itself as Hootsuite's.
openapi: 3.0.0
info:
  description: >
    [![Run in
    Postman](https://run.pstmn.io/button.svg)](https://app.getpostman.com/run-collection/eeda0fcdf55ea26bd0ec#?env%5BHootsuite%5D=W3sidHlwZSI6InRleHQiLCJlbmFibGVkIjp0cnVlLCJrZXkiOiJ1cmwiLCJ2YWx1ZSI6Imh0dHBzOi8vcGxhdGZvcm0uaG9vdHN1aXRlLmNvbSJ9LHsidHlwZSI6InRleHQiLCJlbmFibGVkIjp0cnVlLCJrZXkiOiJhdXRob3JpemF0aW9uX3VybCIsInZhbHVlIjoiaHR0cHM6Ly9wbGF0Zm9ybS5ob290c3VpdGUuY29tL29hdXRoMi9hdXRoIn0seyJ0eXBlIjoidGV4dCIsImVuYWJsZWQiOnRydWUsImtleSI6InRva2VuX3VybCIsInZhbHVlIjoiaHR0cHM6Ly9wbGF0Zm9ybS5ob290c3VpdGUuY29tL29hdXRoMi90b2tlbiJ9LHsidHlwZSI6InRleHQiLCJlbmFibGVkIjp0cnVlLCJrZXkiOiJjbGllbnRfaWQiLCJ2YWx1ZSI6IiJ9LHsidHlwZSI6InRleHQiLCJlbmFibGVkIjp0cnVlLCJrZXkiOiJjbGllbnRfc2VjcmV0IiwidmFsdWUiOiIifV0=)

    # Introduction

    The Hootsuite API is built on REST principles and uses JSON as a data interchange format.

    ### Base URL

    All URLs referenced in this document use the following base: https://platform.hootsuite.com. The Hootsuite API is served over HTTPS to ensure data privacy.

    ### Request Format

    The Hootsuite API supports the following HTTP verbs:

    | Verb       | Description  |

    |--------|------|

    | GET    | GET requests retrieve resources. GET requests with query parameters should be [URL encoded](https://en.wikipedia.org/wiki/Percent-encoding).  |

    | POST   | POST requests create or update resources. POST requests can partially update a resource by passing a subset of the fields that should be updated. To remove a single field set it to null. POST requests should always set content-type and character encoding to: application/json;charset=utf-8. |

    | DELETE | DELETE requests delete resources. Delete requests return a 200 OK with an empty data envelope if the request was successful.|

    ### Response Format

    All responses are returned in JSON. The response is wrapped in a top level data envelope which is an object or array depending on whether a single item or a collection is returned. If a single item is returned the data field will be an object. If a collection is returned the field will be an array.

    If the response was unsuccessful an errors array will be returned. Responses that partially fail will return both a data and errors object.

    A single item response:

    ```

    {
      "data": {},
      "errors": [{},{},{}]
    }

    ```

    A collection response:

    ```

    {
      "data": [{},{},{}],
      "errors": [{},{},{}]
      "metadata": {}
    }

    ```

    ### HTTP Response Codes

    The Hootsuite API uses HTTP status codes to indicate the status of your request.

    |Code |Description |

    |---|---|

    |200 OK|Resource was successfully created, updated, deleted or retrieved.|

    |400 Bad Request|Invalid request, possibly due to missing parameters|

    |401 Unauthorized|Missing or invalid authentication|

    |403 Forbidden|Access denied|

    |404 Not Found|Requested resource does not exist|

    |429 Too Many Requests|Rate Limit Exceeded. Please contact dev.support@hootsuite.com for assistance|

    |500 Server Error|Unexpected error occurred on the server|

    ### API Error Handling

    Error responses are returned with the following fields. Note, the schema for OAuth2 error responses are different and comply with the RFC. Please refer to the Authorization endpoint documentation for details.

    |Field|Description|

    |---|---|

    |code|Unique number indicating type of error|

    |message|Description of error|

    |id|Unique id for tracing purposes|

    |resource|(optional) type and id are used to point to the field(s) that caused the error|

    ```

    {
      "errors": [
        {
          "code" : 1234,
          "message": "Could not create message for social profile",
          "id" : "f7d32670-4e6a-48c0-a2a7-87803536a712",
          "resource": {
            "type":"socialProfile",
            "id":"7534653235"
          }
        }
      ]
    }

    ```

    ### Error Codes

    Here is a list of error codes and descriptions returned by our APIs:

    |Code|Description|

    |---|---|

    |1000|Missing or duplicate access token|

    |1001|Invalid access token|

    |1002|Invalid API key|

    |1003|Account plan limit exceeded|

    |1004|API plan limit exceeded|

    |1005|Token could not be retrieved|

    |1006|Token removal failed|

    |1007|The client could not be authenticated due to missing or invalid client credentials|

    |1008|Resource Owner authentication failed|

    |1009|Invalid grant_type|

    |1010|Invalid OAuth request|

    |1011|Duplicate OAuth parameters|

    |1012|Invalid authorization code|

    |1013|Must be confidential client|

    |1014|Unauthorized JWT user|

    |1015|Client registration could not be deleted|

    |1016|Client info could not be retrieved|

    |1017|Client info could not be updated|

    |1018|Client could not be registered|

    |1019|A registration type must be selected|

    |1020|Client key could not be deleted|

    |1021|The id_token values could not be retrieved|

    |1022|id_token could not be registered|

    |1023|id_token could not be removed therefore user logout could not be executed|

    |1024|Token could not be revoked|

    |1025|Token could not be registered|

    |1026|Non-valid parameter list for this operation|

    |1027|Missing authorization code|

    |1028|Authorization code could not be validated|

    |1029|id_token could not be validated|

    |1030|The client is not authorized to execute a status check|

    |1031|Invalid oauth parameters|

    |1032|Token could not be validated|

    |1033|The requested scope is not valid|

    |1034|The session is not valid|

    |1035|Missing oauth_token parameter|

    |1036|oauth_token invalid or expired|

    |1037|The required scope to access this endpoint was not granted by the user|

    |1038|token_type_hint is not supported|

    |1039|Client not authorized to revoke token|

    |1040|oauth_consumer_key invalid or expired|

    |1041|The token may not have been revoked due to an unknown error|

    |1042|Missing oauth_signature|

    |1043|Too many requests|

    |1044|Invalid oauth_signature_method|

    |1100|Invalid JSON schema|

    |1201|Not authorized to make changes to organization|

    |2000|Invalid member password|

    |2001|Invalid member email|

    |2002|Invalid member name (please enter name between 2 and 100 chars in length)|

    |2003|Invalid member default timezone|

    |2004|Invalid initials|

    |2005|Missing member name|

    |2006|Missing member email|

    |2007|Missing member password|

    |2008|No more available seats in organization|

    |2303|Invalid organization ID|

    |2304|Invalid member ID|

    |2305|Missing member ID|

    |2306|Missing social profile ID|

    |3002|Team name has to be between 2-200 characters|

    |3003|Unable to find an organization with that ID|

    |3004|Missing team ID|

    |3005|Invalid team ID|

    |3006|Team name has to be unique in the organization|

    |3008|Member is not seated in the organization|

    |3010|Email is already in use|

    |3020|Invalid cursor format|

    |3021|Invalid social network type|

    |3301|Payment member can’t be removed from the organization|

    |4000|Schema validation failed|

    |4001|Resource not found|

    |4002|Insufficient permissions to view organization members|

    |4003|Insufficient permissions to view member permissions|

    |4004|Insufficient permissions to view member organizations|

    |4005|Insufficient permissions to view team members|

    |4006|Insufficient permissions to view team|

    |4007|Insufficient permissions to create team|

    |4008|Insufficient permissions to view team social profile|

    |4009|Insufficient organization permissions|

    |4010|Insufficient permissions to view organization teams|

    |4303|Member does not exist in organization|

    |5000|An unknown error occurred|

    |5001|HTTP method not permitted|

    |5002|Unsupported operation|

    |9000|An internal error occurred|

    |40001|Social profile isn’t owned by organization (required for posting messages with tags)|

    |40003|You have attempted to delete a message that cannot be deleted in its current state|

    |40004|Only attachments from http://static.ow.ly or http://ow.ly/i/ are currently allowed|

    |40005|Insufficient permission to create new message tags|

    |40019|Message state filter not supported|

    |40020|Specified date range is too large|

    |40021|Uploaded media is not yet ready to be used (further processing required)|

    |40022|Invalid boolean for includeUnscheduledReviewMsgs flag|

    |40023|Twitter only allows 1 network per message|

    |40024|Posting to Facebook Groups is no longer supported|

    |40025|Scheduled message limit reached|
  version: "1.0"
  title: Hootsuite REST API
  contact:
    email: dev.support@hootsuite.com
  license:
    name: Hootsuite Developer Terms and API License Agreement
    url: https://hootsuite.com/legal/dev-api-terms
tags:
  - name: Authentication
    description: Hootsuite uses OAuth2 to authenticate end users. Members
      authenticated with the Hootsuite API are subject to the same permissions
      configured as when using the Hootsuite Web Dashboard. Learn more about
      managing permissions at the [Hootsuite Help
      Center](https://help.hootsuite.com/hc/en-us/articles/204598170-About-organizations-teams-and-permissions).
  - name: Me
    description: The Me API returns information about the user that has
      authenticated with the API.
  - name: Media
  - name: Members
  - name: Messages
  - name: Comments
  - name: Organizations
  - name: SCIM 2.0
  - name: Social Profiles
    description: A social profile is a publishing channel on a social network account.
  - name: Teams
security:
  - OAuth2: []
paths:
  /oauth2/auth:
    get:
      tags:
        - Authentication
      operationId: oauth2Authorize
      summary: OAuth2 Authorize
      description: "[OAuth2
        Authorize](https://tools.ietf.org/html/rfc6749#section-3.1) endpoint."
      security: []
      parameters:
        - in: query
          name: response_type
          description: The response type requested.
          required: true
          schema:
            type: string
            enum:
              - code
        - in: query
          name: client_id
          required: true
          description: Your client ID found in the Hootsuite Developer Portal.
          schema:
            type: string
        - in: query
          name: scope
          required: false
          description: The required token scopes. Include "offline" if you need a refresh
            token or "analytics:read" for analytics API access. Multiple scopes
            must be separated by spaces.
          schema:
            type: string
            enum:
              - offline
              - analytics:read
        - in: query
          name: redirect_uri
          required: true
          description: The URI to redirect to after authentication.
          schema:
            type: string
        - in: query
          name: state
          required: true
          description: >
            An opaque value used by the client to maintain state between the
            request and callback. See
            [rfc6749#section-4.1.1](https://tools.ietf.org/html/rfc6749#section-4.1.1)
            for more context.


            Note: this param is required and must be at least 8 characters long.
          schema:
            type: string
      responses:
        "200":
          description: Success
  /oauth2/token:
    post:
      tags:
        - Authentication
      operationId: oauth2Token
      summary: OAuth2 Token
      description: >
        [OAuth2 Token](https://tools.ietf.org/html/rfc6749#section-3.2)
        endpoint. The required parameters depend on the grant type requested:


        |Required Parameter|Grant Type|

        |---|---|

        |code|authorization_code|

        |redirect_uri|authorization_code|

        |member_id|member_app|

        |organization_id|organization_app|

        |refresh_token|refresh_token|


        This endpoint requires that you pass in your client credentials using the HTTP Basic authentication scheme as per outlined in the [spec](https://tools.ietf.org/html/rfc6749#section-2.3.1).

        Including your client credentials in the request-body is not supported.


        **Note**: The specific authorization code provided for the `code` parameter must only be used successfully once. If an authorization code is used a second time, all tokens granted with the first `/oauth2/token` call will be revoked.
      security:
        - Basic_Auth: []
      parameters:
        - in: header
          name: Authorization
          description: A base64-encoded client_id:client_secret string used for
            authentication.
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                grant_type:
                  description: The OAuth2 grant_type used.
                  type: string
                  enum:
                    - authorization_code
                    - client_credentials
                    - member_app
                    - organization_app
                    - refresh_token
                code:
                  description: "The authorization code granted by the /oauth2/auth endpoint.
                    Required for grant type: authorization_code"
                  type: string
                redirect_uri:
                  description: "The URI to redirect to after authentication. Required for grant
                    type: authorization_code"
                  type: string
                member_id:
                  description: "The member id of the user to grant a token for. Required for grant
                    type: member_app"
                  type: string
                organization_id:
                  description: "The organization id to grant a token for. Required for grant type:
                    organization_app"
                  type: string
                refresh_token:
                  description: "The refresh token code previously granted. Required for grant
                    type: refresh_token"
                  type: string
              required:
                - grant_type
        required: true
      responses:
        "200":
          description: Success
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/OAuth2BearerToken"
        "400":
          description: Bad Request
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/OAuthError"
        "401":
          description: Unauthorized
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/OAuthError"
  /v1/messages:
    post:
      tags:
        - Messages
      operationId: scheduleMessage
      summary: Schedule messages
      description: Schedules a message to send on one or more social profiles (except
        Pinterest). Returns an array of uniquely identifiable messages (one per
        social profile requested).<br/><br/>Scheduling a message to Pinterest
        can not be bundled with any other social profiles.
      parameters:
        - $ref: "#/components/parameters/bearerToken"
      requestBody:
        content:
          application/json;charset=utf-8:
            schema:
              $ref: "#/components/schemas/Message"
        required: true
      responses:
        "200":
          description: Success
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/SocialProfileMessagesResponseEnvelope"
        "400":
          description: Bad Request
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/ErrorsResponseEnvelope"
    get:
      tags:
        - Messages
      operationId: retrieveMessages
      summary: Retrieve outbound messages
      description: >
        Outbound messages are messages that are scheduled or were previously
        sent. This endpoint returns outbound messages sorted by increasing
        scheduled send time. Messages pending approval, including those created
        by and/or actionable by the given user, will also be returned via this
        API.


        Messages returned can be filtered by social profile or the current state of the message. If more than 50 results are returned a cursor will be automatically created to paginate the results.


        Query Parameters must be [URL encoded](https://en.wikipedia.org/wiki/Percent-encoding). For example:


        ```

        ?startTime=2020-01-01T00%3A00%3A00Z

        &endTime=2020-01-15T17%3A55%3A01Z

        &socialProfileIds=1234

        &state=SCHEDULED

        &limit=5

        ```


        To specify multiple social profiles, use the following [syntax](http://stackoverflow.com/questions/6243051/how-to-pass-an-array-within-a-query-string):


        ```

        ?socialProfileIds=1234&socialProfileIds=5678

        ```
      parameters:
        - $ref: "#/components/parameters/bearerToken"
        - name: startTime
          in: query
          description: The start date range of messages to be returned. In
            [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601) format.
          required: true
          example: 2020-01-01T00:00:00Z
          schema:
            type: string
        - name: endTime
          in: query
          description: The end date range of messages to be returned. In
            [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601) format. Must not
            be later than 4 weeks from startTime.
          required: true
          example: 2020-01-15T17:55:01Z
          schema:
            type: string
        - name: state
          in: query
          description: A filter to return messages with in the matching state. Allowed
            values are PENDING_APPROVAL, REJECTED, SENT, SCHEDULED and
            SEND_FAILED_PERMANENTLY.
          required: false
          example: SCHEDULED
          schema:
            type: string
        - name: socialProfileIds
          in: query
          description: A filter to return messages for certain social profiles.
          required: false
          example: "115185509"
          schema:
            type: integer
        - name: limit
          in: query
          description: Maximum number of messages to be returned in the response. Defaults
            to 50 if not specified. Maximum allowable limit is 100.
          required: false
          schema:
            type: integer
        - name: cursor
          in: query
          description: Cursor to a specific page in the result set. Defaults to the first
            page.
          required: false
          schema:
            type: string
        - name: includeUnscheduledReviewMsgs
          in: query
          description: Flag to retrieve unscheduled (Send Now) review messages on top of
            scheduled ones retrieved from time range query.
          required: false
          schema:
            type: boolean
      responses:
        "200":
          description: Success
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/SocialProfileMessagesResponseEnvelope"
        "400":
          description: Bad Request
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/ErrorsResponseEnvelope"
  "/v1/messages/{messageId}":
    get:
      tags:
        - Messages
      operationId: retrieveMessage
      summary: Retrieve message
      description: >
        Retrieves a message. A message is always associated with a single social
        profile. Messages might be unavailable for a brief time during upload to
        social networks.
      parameters:
        - $ref: "#/components/parameters/bearerToken"
        - name: messageId
          in: path
          description: The message ID.
          required: true
          example: 4138476039
          schema:
            type: string
      responses:
        "200":
          description: Success
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/SocialProfileMessageResponseEnvelope"
        "400":
          description: Bad Request
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/ErrorsResponseEnvelope"
    delete:
      tags:
        - Messages
      operationId: deleteMessage
      summary: Delete message
      description: Deletes a message. A message is always associated with a single
        social profile.
      parameters:
        - $ref: "#/components/parameters/bearerToken"
        - name: messageId
          in: path
          description: The message ID.
          required: true
          example: 4138476039
          schema:
            type: string
      responses:
        "200":
          description: Success
        "400":
          description: Bad Request
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/ErrorsResponseEnvelope"
  "/v1/messages/{messageId}/approve":
    post:
      tags:
        - Messages
      operationId: approveMessage
      summary: Approve message
      description: Approve a message.
      parameters:
        - $ref: "#/components/parameters/bearerToken"
        - name: messageId
          in: path
          description: The message ID.
          required: true
          example: 4138476039
          schema:
            type: string
      requestBody:
        content:
          application/json;charset=utf-8:
            schema:
              $ref: "#/components/schemas/ApproveMessageRequest"
        required: true
      responses:
        "200":
          description: Success
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/EmptyDataEnvelope"
        "400":
          description: Bad Request
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/ErrorsResponseEnvelope"
  "/v1/messages/{messageId}/reject":
    post:
      tags:
        - Messages
      operationId: rejectMessage
      summary: Reject message
      description: Reject a message.
      parameters:
        - $ref: "#/components/parameters/bearerToken"
        - name: messageId
          in: path
          description: The message ID.
          required: true
          example: 4138476039
          schema:
            type: string
      requestBody:
        content:
          application/json;charset=utf-8:
            schema:
              $ref: "#/components/schemas/RejectMessageRequest"
        required: true
      responses:
        "200":
          description: Success
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/EmptyDataEnvelope"
        "400":
          description: Bad Request
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/ErrorsResponseEnvelope"
  "/v1/messages/{messageId}/history":
    get:
      tags:
        - Messages
      operationId: getMessageHistory
      summary: Get message review history
      description: Gets a message's prescreening review history.
      parameters:
        - $ref: "#/components/parameters/bearerToken"
        - name: messageId
          in: path
          description: The message ID.
          required: true
          example: 4138476039
          schema:
            type: string
      responses:
        "200":
          description: Success
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/MessageReviewResponseEnvelope"
        "400":
          description: Bad Request
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/ErrorsResponseEnvelope"
        "404":
          description: Not Found
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/ErrorsResponseEnvelope"
  "/v1/comments/{commentId}":
    get:
      tags:
        - Comments
      operationId: retrieveComment
      summary: Retrieve comment
      description: |
        Retrieves a comment if it's been through the approvals workflow.
      parameters:
        - $ref: "#/components/parameters/bearerToken"
        - name: commentId
          in: path
          description: The comment ID.
          required: true
          example: 4138476039
          schema:
            type: string
      responses:
        "200":
          description: Success
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/SocialProfileCommentResponseEnvelope"
        "400":
          description: Bad Request
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/ErrorsResponseEnvelope"
  "/v1/comments/{commentId}/approve":
    post:
      tags:
        - Comments
      operationId: approveComment
      summary: Approve comment
      description: Approve a comment.
      parameters:
        - $ref: "#/components/parameters/bearerToken"
        - name: commentId
          in: path
          description: The comment ID.
          required: true
          example: 4138476039
          schema:
            type: string
      requestBody:
        content:
          application/json;charset=utf-8:
            schema:
              $ref: "#/components/schemas/ApproveCommentRequest"
        required: true
      responses:
        "200":
          description: Success
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/EmptyDataEnvelope"
        "400":
          description: Bad Request
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/ErrorsResponseEnvelope"
  "/v1/comments/{commentId}/reject":
    post:
      tags:
        - Comments
      operationId: rejectComment
      summary: Reject comment
      description: Reject a comment.
      parameters:
        - $ref: "#/components/parameters/bearerToken"
        - name: commentId
          in: path
          description: The comment ID.
          required: true
          example: 4138476039
          schema:
            type: string
      requestBody:
        content:
          application/json;charset=utf-8:
            schema:
              $ref: "#/components/schemas/RejectCommentRequest"
        required: true
      responses:
        "200":
          description: Success
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/EmptyDataEnvelope"
        "400":
          description: Bad Request
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/ErrorsResponseEnvelope"
  /v1/media:
    post:
      tags:
        - Media
      operationId: createMedia
      summary: Create media upload url
      description: >
        Creates an Amazon S3 upload URL that can be used to transfer media to
        Hootsuite which ensures the media is available when a scheduled message
        is sent to the social network.

        Hootsuite will generate thumbnails and key frames and return a unique media identifier that can be passed when creating a message.

        Subsequent uploads to an upload URL will be accepted by Amazon but immediately deleted by Hootsuite and only the first valid media file uploaded will be used.

        The MIME type and size provided in this call must match the MIME type and size of the media uploaded.


        After requesting an upload URL, make a `PUT` request to the `uploadUrl` returned, an example cURL request would look like the following, replace the fields as appropriate:


        ```

        curl --location --request PUT 'https://hootsuite-video.s3.amazonaws.com/production/12255244_01942650-3d42-42b8-a191-aa84eb45d105.mp4?AWSAccessKeyId=REDACTED_AWS_ACCESS_KEY_ID&Expires=1471978770&Signature=b%2B196oEHxySdmE%2FC34ZRL6pXSAI%3D' \
          --header 'Content-Type: video/mp4' \
          --header 'Content-Length: 383631' \
          --data 'SOURCE-MEDIA-LOCATION'
        ```


        Hootsuite will remove uploaded media 90 days after using the media in a message.
      parameters:
        - $ref: "#/components/parameters/bearerToken"
      requestBody:
        content:
          application/json;charset=utf-8:
            schema:
              $ref: "#/components/schemas/MediaUploadUrlRequest"
        required: true
      responses:
        "200":
          description: Success
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/MediaUploadUrlResponseEnvelope"
        "400":
          description: Bad Request
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/ErrorsResponseEnvelope"
  "/v1/media/{mediaId}":
    get:
      tags:
        - Media
      operationId: getMedia
      summary: Retrieve media upload status
      description: Retrieves the status of a media upload to Hootsuite.
      parameters:
        - $ref: "#/components/parameters/bearerToken"
        - name: mediaId
          in: path
          description: The Media ID to retrieve
          required: true
          example: aHR0cHM6Ly9ob290c3VpdGUtdmlkZW8uczMuYW1hem9uYXdzLmNvbS9wcm9kdWN0aW9uLzEyMjU1MjQ0XzgyOTVmZjllLWFkOWYtNGNlNy1iOGE3LTgwNzI0NDAwYTBhZS5tcDQ=
          schema:
            type: string
      responses:
        "200":
          description: Success
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/MediaDownloadUrlResponseEnvelope"
        "400":
          description: Bad Request
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/ErrorsResponseEnvelope"
  /v1/socialProfiles:
    get:
      tags:
        - Social Profiles
      operationId: getSocialProfiles
      summary: Retrieve social profiles
      description: Retrieves the social profiles that the authenticated user has access to.
      parameters:
        - $ref: "#/components/parameters/bearerToken"
      responses:
        "200":
          description: Success
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/SocialProfilesResponseEnvelope"
        "400":
          description: Bad Request
          content:
            application/json;charset=utf-8:
              schema:
                $ref: "#/components/schemas/ErrorsResponseEnvelope"
  "/v1/socialProfiles/{socialProfileId}":
    get:
      tags:
        - Social Profiles
      operationId: getSocialProfile
      summary: Retrieve social profile
      description: Retrieve a

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