# Clarityflow Developer API

If you're a developer looking to build a custom integration with [Clarityflow](https://clarityflow.com) (formerly known as *ZipMessage*)—the tool for video messaging and asynchronous conversations—this API reference will guide you through what's available with the Clarityflow REST API.

In addition to the [REST API (documented here)](https://api.zipmessage.com/api-reference/conversations), there are other integration options which are easy for anyone to use with little or no code!  Those include:

* [The Clarityflow Zapier integration](https://kb.zipmessage.com/zapier)
* [Embed Clarityflow on your site using iframes](https://kb.zipmessage.com/article/40-embed)
* [Webhooks](https://api.zipmessage.com/webhooks)


# Authentication

## Get your API token

Your API requests are authenticated an API token generated in your Clarityflow account (formerly known as *ZipMessage*). Any request that doesn't include an API token will return an error.

You can generate an API token in your Clarityflow account in **Settings** > **Integrations** > **API tokens**

Clarityflow expects your API token to be included in all API requests in a header that looks like the following:

```
Authorization: clarityflow_api_token
```

Replace `clarityflow_api_token` with the API token found in your account.

## Account Authorization

The Clarityflow API endpoints are made available to accounts that have an active subscription to a plan that allows for API access.  Refer to the Clarityflow [pricing tiers](https://clarityflow.com/pricing) to confirm the plan level required to access.

If a request is made with a valid API token but the associated account is unauthorized for API access, it will return a `403` error:

```
{
    "error": "This account needs to upgrade in order to access the API."
}
```


# Webhooks

Listen for events happening in Clarityflow.

Webhooks enable your app or service to listen for events happening in Clarityflow and get notified via HTTP POST requests.

{% hint style="info" %}
*Tip:* [*webhook.site*](https://webhook.site/) *is a handy utility for testing webhooks and inspecting their payloads.*
{% endhint %}

### Registering Webhooks

Go to Settings > Integrations > **Manage Webhooks**.

Input the Webhook URL.

Select at least 1 Clarityflow event to trigger sending to this webhook URL. &#x20;

<figure><img src="/files/OrLNeIiFLKwQDjEcqTe6" alt=""><figcaption></figcaption></figure>

### Consuming Webhooks

When an event occurs that triggers a webhook, we will send an HTTP POST to the URL you specified, with a JSON-encoded body.

Webhook request bodies include:

```
{
  "type": "conversation_created",
  "id": "862f22c9-b692-4b3f-9d7e-dcf64172719e",
  "occurred_at": "2022-04-01T10:06:53.992-04:00",
  "payload": {
    ...
  }
}
```

### Webhook Events

As of this writing (December 2024), webhooks can be sent when the following events occur in Clarityflow.  Click each to get more information about the data sent with each request:

* [New Conversation](https://api.clarityflow.com/~/changes/JkGQxI2dRe0JHYjcOaL1/webhooks/webhook-event-for-conversation-created)
* [New Message](https://api.clarityflow.com/~/changes/JkGQxI2dRe0JHYjcOaL1/webhooks/webhook-event-for-message-created)
* [A Message was viewed](https://api.clarityflow.com/~/changes/JkGQxI2dRe0JHYjcOaL1/webhooks/webhook-event-for-message-viewed)
* [An appointment was scheduled](https://api.clarityflow.com/~/changes/JkGQxI2dRe0JHYjcOaL1/webhooks/webhook-event-for-appointment-scheduled)
* [A purchase was made](https://api.clarityflow.com/~/changes/JkGQxI2dRe0JHYjcOaL1/webhooks/webhook-event-for-product-purchased)
* [A form was submitted](https://api.clarityflow.com/~/changes/JkGQxI2dRe0JHYjcOaL1/webhooks/webhook-event-for-form-submission)
* A task was completed

You can also add filters on some of the events, for example, specific products purchased or specific forms submitted.


# Webhook Event for Conversation Created

This event occurs when a new Clarityflow conversation is created.  Conversations can be created in any of the following ways:

* You or a teammate clicks "Create Conversation" in your Clarityflow account interface.
* A guest submits a message via any of your intake page(s).  This generates a new Conversation.
* A Conversation can be created via Zapier.
* A Conversation can be created via the API.
* A Conversation can be creating by using our browser extensions.

Here is an example request body:

```
{
  "type": "conversation_created",
  "id": "f6689254-9d5f-43b0-9de1-125a6ca639f1",
  "occurred_at": "2022-04-01T14:23:59.799+00:00",
  "payload": {
    "conversation": {
      "id": 268,
      "created_at": "2022-04-01 14:23:1648823039",
      "title": "April 1st, 2022 Conversation",
      "slug": "april-1st-2022-conversation1",
      "url": "http://awesomecompany.clarityflow.com/c/april-1st-2022-conversation1",
      "embed_url": "http://awesomecompany.clarityflow.com/embeds/conversations/awesomecompany/april-1st-2022-conversation1",
      "public": true,
      "anyone_can_post": true,
      "allow_anonymous_messages": true,
      "allow_search_engines": false,
      "enable_registration_prompt": true,
      "subscriber_emails": [],
      "messages": [],
      "workflow": {}
    }
  }
}
```


# Webhook Event for Message Created

Messages reside in Conversations.  A Message is created when someone has posted a message in a conversation.  A Message can have video, audio, and/or text content.  A message may be sent by an identified person or sent anonymously.

Messages are created in any of these ways:

* A user views a conversation then creates and posts a message in it.
* A user submits a message via your intake page(s).
* A text message can be created via Zapier.
* A text message can be created via the API.

Here is an example request body:

```
{
  "type": "message_created",
  "id": "c6ec4301-8d97-4c53-8dff-06947ff750ca",
  "occurred_at": "2022-04-01T14:24:14.196+00:00",
  "payload": {
    "message": {
      "id": 330,
      "conversation_title": "April 1st, 2022 Conversation",
      "message_type": "text",
      "recorded_duration_seconds": null,
      "message_url": "http://awesomecompany.clarityflow.com/c/april-1st-2022-conversation1#message-330",
      "message_embed_url": "http://awesomecompany.clarityflow.com/embeds/messages/awesomecompany/330?conversation_slug=april-1st-2022-conversation1",
      "text": "<div class=\"trix-content\">\n  <div class=\"trix-content\">\n  <div class=\"trix-content\">\n  <div>asdf</div>\n</div>\n</div>\n</div>",
      "message_created_time": "2022-04-01 14:24:1648823053",
      "author": {
        "first_name": "User",
        "last_name": "Casel",
        "full_name": "User Casel",
        "email": "user@example.com"
      },
      "download_media_url": "https://zipmessage-production-input.s3.amazonaws.com/68u6m2jb5ydijz5oa4tk0ivm07hx?response-content-disposition=attachment%3B%20filename%3D%22recording.webm%22%3B%20filename%2A%3DUTF-8%27%27recording.webm&response-content-type=video%2Fwebm&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA3ARUPDB3HFYUPVYV%2F20220701%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20220701T201029Z&X-Amz-Expires=300&X-Amz-SignedHeaders=host&X-Amz-Signature=b8595e540eaf27dcd8c6e11c78d2e5bf9907e0e2932c6851f02a95e6aea9c4f0",
      "access_media_file": "https://zipmessage.com/330/download_media",
      "workflow": {}
    }
  }
}
```


# Webhook Event for Message Viewed

This event fires when a message's media (video or audio) player has been played back by someone.  The person playing a message can be an identified logged-in user or an anonymous viewer.

This webhook follows the same logic as notifications for when a message is played.  Some notes: &#x20;

* The webhook fires once per user playing a message.
* The webhook fires once per user's session.
* The webhook only fires if the message being played has an author (the message wasn't posted anonymously). &#x20;

Examples:

* If a logged-in user plays a message for the first time, this will fire the webhook.  But if that same user plays the same message a 2nd time, it will not send an additional webhook for the 2nd play.
* A non-logged-in visitor plays a message once, which fires the webhook.  During the same browser session, this user presses play on the same message a 2nd time.  This 2nd play does not fire an additional webhook.

Here is an example request body:

```
{
  "type": "message_played",
  "id": "abfe656b-cb51-4540-af32-a8e8b954221b",
  "occurred_at": "2022-04-01T14:25:48.585+00:00",
  "payload": {
    "message": {
      "id": 283,
      "conversation_title": "Conversation with emma casel",
      "message_type": "screencamera",
      "recorded_duration_seconds": 1,
      "message_url": "http://awesomecompany.clarityflow.com/c/conversation-with-emma-casel#message-283",
      "message_embed_url": "http://awesomecompany.clarityflow.com/embeds/messages/awesomecompany/283?conversation_slug=conversation-with-emma-casel",
      "text": "",
      "message_created_time": "2022-01-08 18:02:1641664979",
      "author": {
        "first_name": "User",
        "last_name": "Casel",
        "full_name": "User Casel",
        "email": "user@example.com"
      },
      "download_media_url": "https://zipmessage-production-input.s3.amazonaws.com/68u6m2jb5ydijz5oa4tk0ivm07hx?response-content-disposition=attachment%3B%20filename%3D%22recording.webm%22%3B%20filename%2A%3DUTF-8%27%27recording.webm&response-content-type=video%2Fwebm&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA3ARUPDB3HFYUPVYV%2F20220701%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20220701T201029Z&X-Amz-Expires=300&X-Amz-SignedHeaders=host&X-Amz-Signature=b8595e540eaf27dcd8c6e11c78d2e5bf9907e0e2932c6851f02a95e6aea9c4f0",
      "access_media_file": "https://zipmessage.com/330/download_media",
      "workflow": {}
    },
    "played_by": "anonymous"
  }
}
```


# Webhook Event for Appointment Scheduled

This event fires when an appointment has been scheduled using the Clarityflow appointment booking feature.

Here is an example request body:

```
{
  "type": "new_appointment",
  "id": "abfe656b-cb51-4540-af32-a8e8b954221b",
  "occurred_at": "2022-04-01T14:25:48.585+00:00",
  "payload": {
    "appointment": {
      "id": 283,
      all appointment data...
    }
  }
}
```


# Webhook Event for Product Purchased

This event fires when a product has been purchased via Clarityflow Commerce.

Here is an example request body:

```
{
  "type": "new_purchase",
  "id": "abfe656b-cb51-4540-af32-a8e8b954221b",
  "occurred_at": "2022-04-01T14:25:48.585+00:00",
  "payload": {
    "purchase": {
      "id": 283,
      all purchase    data...
    }
  }
}
```


# Webhook Event for Form Submission

This event fires when a form has been submitted using Clarityflow's Forms feature.

Here is an example request body:

```
{
  "type": "form_submission",
  "id": "abfe656b-cb51-4540-af32-a8e8b954221b",
  "occurred_at": "2022-04-01T14:25:48.585+00:00",
  "payload": {
    "form_submission": {
      "id": 283,
      all form submission data...
    }
  }
}
```


# Conversations

Conversations in Clarityflow can contain one or several messages exchanged between multiple people.

## Creating a new conversation

## Create conversation.

<mark style="color:green;">`POST`</mark> `https://app.clarityflow.com/api/v1/conversations/create_conversation`

Creates a new conversation.

#### Request Body

| Name                       | Type    | Description                                                                                                                                                                                                                                                                                    |
| -------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| title                      | string  | If title is passed, the new conversation will have the passed value as title.  If title is not passed, then the new conversation will use the default naming convention for new conversatons based in the account settings.                                                                    |
| slug                       | string  | If slug is set, new conversation will be have the passed value as slug.  This cannot contain spaces or special characters except for `_` or `-`.                                                                                                                                               |
| anyone\_can\_post          | boolean | If `true` then the conversation will be visible to anyone who can access it's URL.  If `false` then it will be set to "Private" and only accessible by logged-in users who are members of this conversation.  If not set, it will default to whatever this setting is in the account settings. |
| allow\_anonymous\_messages | boolean | If `true` then when people submit their replies, they will have the option to post their reply messages anonymously.  If `false`, then they will be required to register with their name and email or sign into Clarityflow in order to submit their reply to this conversation.               |
| allow\_search\_engines     | boolean | If `true` then this conversation can be indexed by search engines.  If `false` then robots.txt will instruct search engines not to index this conversation URL.  If not set, then this setting defaults to what this is set to in account settings.                                            |
| primary\_intake\_page      | boolean | <p>If <code>true</code>, it will be as if this conversation was created by submitting the form on your account's primary intake page.<br><br>This is useful if you want to automatically apply the workflow that is set on your primary intake page to the conversation. </p>                  |
| intake\_page\_id           | integer | <p>If set to the ID of a secondary intake page, it will be as if this conversation was created by submitting the form on your that intake page.<br><br>This is useful if you want to automatically apply the workflow that is set on your intake page to the conversation. </p>                |

{% tabs %}
{% tab title="200 Conversation successfully created" %}

```javascript
{
    "id": 1,
    "title": "Test conversation",
    "slug": "096a594dd11759d1f6876d842",
    "public": true,
    "via_primary_intake_page": false,
    "intake_page_id": null,
    "conversation_url": "https://awesomecompany.clarityflow.com/c/096a594dd11759d1f6876d842",
    "conversation_embed_url": "https://awesomecompany.clarityflow.com/embeds/conversations/Your_account/096a594dd11759d1f6876d842",
    "anyone_can_post": true,
    "allow_anonymous_messages": true,
    "allow_search_engines": false,
    "tags": [],
    "users": [
        {
            "id": 1,
            "email": "user@example.com",
            "name": "User"
        }
    ],
    "messages": []
}
```

{% endtab %}

{% tab title="422: Unprocessable Entity Permission denied" %}
The `slug` must validate by containing no spaces or special characters and must not already be in use by another conversation in this account.
{% endtab %}

{% tab title="401: Unauthorized Authentication Failed" %}

```javascript
{
    "error": "Authentication Failed"
}
```

{% endtab %}
{% endtabs %}

## Get a conversation(s)

## Get a single conversation

<mark style="color:blue;">`GET`</mark> `https://app.clarityflow.com/api/v1/conversations/get_conversation`

Retrieves a single conversation the account.  If neither `title` nor `slug` are passed, then this will return the most recently created conversation in the account.

#### Query Parameters

| Name  | Type   | Description                                                                                                                                                                                                                                                                                     |
| ----- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| title | String | <p>If passed, the most recently created conversation with a title that exactly matches this string (case insensitive) will be returned.<br><br>If not passed, or if the title doesn't match any conversatoins, then the most recently created conversation in the account will be returned.</p> |
| slug  | String | <p>If passed, the most recently created conversation with a slug that exactly matches this string (case insensitive) will be returned.<br><br>If not passed, or if the title doesn't match any conversatoins, then the most recently created conversation in the account will be returned.</p>  |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
    "id": 547,
    "title": "January 3rd, 2022 Conversation",
    "slug": "77a41d5a8e71d5f64998348f6",
    "public": false,
    "via_primary_intake_page": false,
    "intake_page_id": null,
    "conversation_url": "https://awesomecompany.clarityflow.com/c/77a41d5a8e71d5f64998348f6",
    "conversation_embed_url": "https://awesomecompany.clarityflow.com/embeds/conversations/Your_account/77a41d5a8e71d5f64998348f6",
    "anyone_can_post": false,
    "allow_anonymous_messages": false,
    "allow_search_engines": false,
    "conversation_created_time": "2022-02-01 17:21:37.455575",
    "conversation_credated_time_nice": "February 2nd, 2022 05:21PM UTC",
    "tags": [],
    "users": [
        {
            "id": 50,
            "email": "user@example.com",
            "name": "User"
        }
    ],
    "messages": [],
    "workflow": {}
}
```

{% endtab %}

{% tab title="401: Unauthorized " %}

```javascript
{
    "error": "Authentication Failed"
}
```

{% endtab %}

{% tab title="404: Not Found " %}

```javascript
{
    "error": "Sorry! No conversations found."
}
```

{% endtab %}
{% endtabs %}

## Get conversations

<mark style="color:blue;">`GET`</mark> `https://app.clarityflow.com/api/v1/conversations/get_conversations`

Returns an array of conversations from the account.

#### Query Parameters

| Name | Type    | Description                                                                                                                                                               |
| ---- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| page | integer | A maximum of 50 conversations will be returned starting from th most recently created conversation. To retrieve conversations further back than 50, pass the page number. |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
    "conversations": [
        {
            "id": 544,
            "title": "Test conversation",
            "slug": "096a594dd11759d1f6876d842",
            "public": true,
            "via_primary_intake_page": false,
            "intake_page_id": null,
            "conversation_url": "https://awesomecompany.clarityflow.com/c/096a594dd11759d1f6876d842",
            "conversation_embed_url": "https://awesomecompany.clarityflow.com/embeds/conversations/oz3jqo57/096a594dd11759d1f6876d842",
            "anyone_can_post": true,
            "allow_anonymous_messages": true,
            "allow_search_engines": false,
            "tags": [],
            "users": [
                {
                    "id": 50,
                    "email": "user@example.com",
                    "name": "User"
                }
            ],
            "messages": [
                {
                    "id": 1206,
                    "conversation_id": 544,
                    "message_type": "text",
                    "recorded_duration_seconds": 0,
                    "author": {
                        "anonymous": true
                    },
                    "message_url": "https://awesomecompany.clarityflow.com/c/096a594dd11759d1f6876d842#message-1206",
                    "embed_message_url": "https://awesomecompany.clarityflow.com/embeds/messages/Your_account/1206&show_author=true",
                    "download_media_url": null,
                    "text": "Create new text message 1"
                },
                {
                    "id": 1207,
                    "conversation_id": 544,
                    "message_type": "text",
                    "recorded_duration_seconds": 0,
                    "author": {
                        "anonymous": true
                    },
                    "message_url": "https://awesomecompany.clarityflow.com/c/096a594dd11759d1f6876d842#message-1207",
                    "embed_message_url": "https://awesomecompany.clarityflow.com/embeds/messages/Your_account/1207&show_author=true",
                    "download_media_url": null,
                    "text": "Create new text message 2"
                }
            ],
            "workflow": {}
        },
        {
            "id": 545,
            "title": "New conversation",
            "slug": "ecf2c8ba4b95724ca54cea439",
            "public": true,
            "via_primary_intake_page": false,
            "intake_page_id": null,
            "conversation_url": "https://awesomecompany.clarityflow.com/c/ecf2c8ba4b95724ca54cea439",
            "conversation_embed_url": "https://awesomecompany.clarityflow.com/embeds/conversations/Your_account/ecf2c8ba4b95724ca54cea439",
            "anyone_can_post": true,
            "allow_anonymous_messages": true,
            "allow_search_engines": false,
            "tags": [],
            "users": [
                {
                    "id": 50,
                    "email": "user@example.com",
                    "name": "User"
                }
            ],
            "messages": [],
            "workflow": {}
        }
  ]
}
```

{% endtab %}

{% tab title="404: Not Found " %}

```javascript
{
    "error": "Sorry! No conversations found."
}
```

{% endtab %}

{% tab title="401: Unauthorized " %}

```javascript
{
    "error": "Authentication Failed"
}
```

{% endtab %}
{% endtabs %}


# Messages

Messages belong to Conversations and can include media (video, audio) and/or text messages.

### Create a message

A text-only message, or a message created from a message template (the template can have video, audio, and/or text).

## Create a text-only message or template-based message

<mark style="color:green;">`POST`</mark> `https://app.clarityflow.com/api/v1/messages/create_message`

#### Query Parameters

| Name                                               | Type    | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| -------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| conversation\_id<mark style="color:red;">\*</mark> | integer | Pass the ID of the Conversation that this message will be added to.                                                                                                                                                                                                                                                                                                                                                                                                 |
| text<mark style="color:red;">\*</mark>             | string  | Pass the text for the content of the message.  It can include HTML.  If a full URL is included in the text, it will be automatically converted to a link.                                                                                                                                                                                                                                                                                                           |
| message\_template\_id                              | integer | <p>Pass the ID of a message template to use as the content for this message.  <br><br>If the message template contains text, then this text would override the value you pass along with the text parameter.<br><br>If the message template does not contain text, then any text you pass in the query parameter will be added to the message underneath the media player.<br><br>The message will be attributed to the user who created this message template.</p> |
| user\_email                                        | String  | <p>Email address of the user that this message should be attributed to.  This user with this email address must be an owner or team member in the account.<br><br>If blank, then the message will be posted anonymously.</p>                                                                                                                                                                                                                                        |
| internal                                           | boolean | If `true`, then this message will be posted as an "internal" message, which is only visible to team members in the account.  Internal messages are not visible to guests and non-logged-in users.                                                                                                                                                                                                                                                                   |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
    "id": 1207,
    "conversation_id": 544,
    "message_type": "text",
    "recorded_duration_seconds": 0,
    "author": {
        "anonymous": true
    },
    "message_url": "https://awesomecompany.clarityflow.com/c/096a594dd11759d1f6876d842#message-1207",
    "embed_message_url": "https://awesomecompany.clarityflow.com/embeds/messages/Your_account/1207&show_author=true",
    "download_media_url": null,
    "text": "<p>New Text Message</p><p>This is the second paragraph with <strong>bold text</strong>.</p><p>This URL will automatically link: https://google.com</p>",
    "message_template": null,
    "message_created_time": "2022-02-01 17:21:37.455575",
    "message_credated_time_nice": "February 2nd, 2022 05:21PM UTC",
}
```

{% endtab %}

{% tab title="400: Bad Request When a conversation ID is missing." %}

```javascript
{
    "error": "Required parameter conversation_id is missing"
}
```

{% endtab %}

{% tab title="404: Not Found When a conversation ID is present but a conversation by that ID doesn't exist." %}

```javascript
{
    "error": "Record not found"
}
```

{% endtab %}

{% tab title="401: Unauthorized " %}

```javascript
{
    "error": "Authentication Failed"
}
```

{% endtab %}
{% endtabs %}

### Get messages

## Get messages

<mark style="color:blue;">`GET`</mark> `https://app.clarityflow.com/api/v1/messages/get_messages`

#### Query Parameters

| Name               | Type       | Description                                                                                                                                                                                       |
| ------------------ | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| conversation\_slug | String     | If the `conversation_slug` is passed, then only messages from this conversation will be returned.  If `conversation_slug` is not present, then messages from all conversationsn will be returned. |
| page               | integer    | A maximum of 50 messages will be returned starting from th most recently created message. To retrieve messages further back than 50, pass the page number.                                        |
| date\_time         | yyyy-mm-dd | If `date_time` is passed, then only messages that were created after this date will be returned.                                                                                                  |
| email              | String     | If `email` is passed, only messages authored by the user who has this email will be returned.                                                                                                     |

{% tabs %}
{% tab title="200: OK `download_media_url` will initially return a media file in `webm` format.  Once the transcoding process finishes (typically a few moments up to 10 minutes after message creation), `download_media_url` will return the mp4 video or mp3 if it was an audio-only message." %}

```javascript
{
    "messages": [
        {
            "id": 1184,
            "conversation_id": 512,
            "message_type": "screen",
            "recorded_duration_seconds": 4,
            "author": {
                "id": 50,
                "email": "user@example.com",
                "name": "User"
            },
            "message_url": "https://awesomecompany.clarityflow.com/c/14c8ec4e530e129b6fe73ca81#message-1184",
            "embed_message_url": "https://awesomecompany.clarityflow.com/embeds/messages/Your_account/1184&show_author=true' id='zm-iframe' style='width:100%;min-height:400px;'></iframe><script src='http://localhost:3000/scripts/embed.js' async></script>",
            "download_media_url": "https://zipmessage.s3.amazonaws.com/14c8ec4e530e129b6fe73ca81?response-content-disposition=attachment%3B%20filename%3D%22recording.webm%22%3B%20filename%2A%3DUTF-8%27%27recording.webm&response-content-type=video%2Fwebm&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA3ARUPDB3HFYUPVYV%2F20220103%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20220103T113838Z&X-Amz-Expires=300&X-Amz-SignedHeaders=host&X-Amz-Signature=4ac76944b0efdf9d4c91b7cb313318f81ce094a13a8e695ca3577d43bef6d739",
            "text": "",
            "message_template": null,
            "message_created_time": "2022-02-01 17:21:37.455575",
            "message_credated_time_nice": "February 2nd, 2022 05:21PM UTC"
        },
        {
            "id": 1183,
            "conversation_id": 512,
            "message_type": "screen",
            "recorded_duration_seconds": 7,
            "author": {
                "id": 50,
                "email": "user@example.com",
                "name": "User"
            },
            "message_url": "https://awesomecompany.clarityflow.com/c/14c8ec4e530e129b6fe73ca81#message-1183",
            "embed_message_url": "https://awesomecompany.clarityflow.com/embeds/messages/Your_account/1183",
            "download_media_url": "https://zipmessage.s3.amazonaws.com/3nn3vc5mhcsvq58fciz0d7usamyd?response-content-disposition=attachment%3B%20filename%3D%22recording.webm%22%3B%20filename%2A%3DUTF-8%27%27recording.webm&response-content-type=video%2Fwebm&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA3ARUPDB3HFYUPVYV%2F20220103%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20220103T113838Z&X-Amz-Expires=300&X-Amz-SignedHeaders=host&X-Amz-Signature=7b32fc5fbf32d642808afa8c6fa20b63af30e639b84a9df0c722e78d01c65899",
            "text": "",
            "message_template": null,
            "message_created_time": "2022-02-01 17:21:37.455575",
            "message_credated_time_nice": "February 2nd, 2022 05:21PM UTC"
        }
    ],
    "pages": 1
}
```

{% endtab %}

{% tab title="404: Not Found If a `conversation_slug` that does not exist is passed, this error will be returned." %}

```javascript
{
    "error": "Sorry! No messages found."
}
```

{% endtab %}
{% endtabs %}


