> ## Documentation Index
> Fetch the complete documentation index at: https://docs.archal.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Unipile

> LinkedIn and email messaging, accounts, and chats.

Unipile is included in Archal's environment catalog. Use it in a sandbox for LinkedIn and email messaging, accounts, and chats.

| | |
| - | - |
| Environment ID | `unipile` |
| Transport | REST |
| State | JSON |
| Contract | `archal.environment-state.unipile` version `1` |
| Channel | Public |
| Curated samples | 5 |

Public means the environment is released and startable. It still describes a bounded provider surface, not a promise that every upstream operation exists.

## Compatibility boundary

**Local catalog validation:** All five published samples passed. Checks cover the state contract, relationships, artifact hash, secret scan, and size limit.

> [!NOTE]
>
> Local catalog validation is not hosted proof. Archal checks current certification, reset, and isolation evidence before admitting new sandboxes. Use the authenticated environment catalog for live availability.

* Only the account/chat/message read tranche projects loaded state; broader Unipile reads remain recording-backed.
* No general account, calendar, provider, or chat-timeline mutation guarantee.

## Curated starting states

List the five samples with `archal sample list unipile`. Each sample is a versioned starting state with a representative read, mutation, expected diff, reset expectation, and verified artifact hash.

> [accordion] Unipile WhatsApp chat baseline
>
> Read one provider-shaped WhatsApp chat from loaded state, then send a message into that exact conversation.
>
> **Sample ID:** `unipile.whatsapp-chat-baseline.v1`
>
> **Category:** `minimal`
>
> **Starting state:** 2 records across `accounts`: 1, `chats`: 1
>
> **Supported surface:** State-backed account, chat, and message reads plus one stateful WhatsApp chat-message send.
>
> **Required capabilities:** `state.read`, `state.load`, `state.reset`, `rest.accounts`, `rest.chats`, `rest.messages`, `rest.whatsapp-send`
>
> **First read:** `GET /api/v1/chats`. Expected result: HTTP 200.
>
> **Representative mutation:** `POST /api/v1/chats/sample-whatsapp-chat/messages`. Expected result: HTTP 200, 201, 204.
>
> **Mutation input**
>
> ```json theme={null}
> {
>   "text": "Maintenance is approved for 02:00 UTC. I’ll send the runbook before the handoff."
> }
> ```
>
> **Expected diff:** changes include `messages`. Exact match required: no. Hosted promotion must observe every listed path after the provider-native mutation; dynamic provider ids and timestamps are excluded from exact matching.
>
> **Expected reset:** restores loaded sample.
>
> **Known limits**
>
> * Only the account/chat/message read tranche projects loaded state; broader Unipile reads remain recording-backed.
> * No general account, calendar, provider, or chat-timeline mutation guarantee.
>
> **Start this sample**
>
> ```bash theme={null}
> archal sample show unipile.whatsapp-chat-baseline.v1 --raw > archal-unipile-whatsapp-chat-baseline.json
> archal state validate unipile archal-unipile-whatsapp-chat-baseline.json
> archal session create unipile \
>   --state unipile=archal-unipile-whatsapp-chat-baseline.json
> ```
>
> **Inspect the raw state**
>
> ```bash theme={null}
> archal sample show unipile.whatsapp-chat-baseline.v1 --raw
> ```
>
> The packaged JSON artifact is `samples/states/unipile/whatsapp-chat-baseline/state.json` and is 645 bytes. The CLI verifies SHA-256 `7ccf8c9c4a4e2ddefb4b5237aca709d74357262d9acac2ae43f22a716ca57df9` before printing it.
>
> Catalog validation: **Passed**. Hosted availability is determined by Archal's live certification and admission system, not this static page.

> [accordion] Unipile messaging team
>
> Exercise two accounts, four related chats, and a short provider-visible message history before a WhatsApp send.
>
> **Sample ID:** `unipile.messaging-team.v1`
>
> **Category:** `small-team`
>
> **Starting state:** 14 records across `accounts`: 2, `chats`: 4, `messages`: 8
>
> **Supported surface:** State-backed account, chat, and message reads plus one stateful WhatsApp chat-message send.
>
> **Required capabilities:** `state.read`, `state.load`, `state.reset`, `rest.accounts`, `rest.chats`, `rest.messages`, `rest.whatsapp-send`
>
> **First read:** `GET /api/v1/messages?limit=8`. Expected result: HTTP 200.
>
> **Representative mutation:** `POST /api/v1/chats/sample-whatsapp-chat/messages`. Expected result: HTTP 200, 201, 204.
>
> **Mutation input**
>
> ```json theme={null}
> {
>   "text": "Maintenance is approved for 02:00 UTC. I’ll send the runbook before the handoff."
> }
> ```
>
> **Expected diff:** changes include `messages`. Exact match required: no. Hosted promotion must observe every listed path after the provider-native mutation; dynamic provider ids and timestamps are excluded from exact matching.
>
> **Expected reset:** restores loaded sample.
>
> **Known limits**
>
> * Only the account/chat/message read tranche projects loaded state; broader Unipile reads remain recording-backed.
> * No general account, calendar, provider, or chat-timeline mutation guarantee.
>
> **Start this sample**
>
> ```bash theme={null}
> archal sample show unipile.messaging-team.v1 --raw > archal-unipile-messaging-team.json
> archal state validate unipile archal-unipile-messaging-team.json
> archal session create unipile \
>   --state unipile=archal-unipile-messaging-team.json
> ```
>
> **Inspect the raw state**
>
> ```bash theme={null}
> archal sample show unipile.messaging-team.v1 --raw
> ```
>
> The packaged JSON artifact is `samples/states/unipile/messaging-team/state.json` and is 4,442 bytes. The CLI verifies SHA-256 `9b21e66a4acb714a3a564f28dd61bf6626e834ad3d273ca63bf8b710c0ff974c` before printing it.
>
> Catalog validation: **Passed**. Hosted availability is determined by Archal's live certification and admission system, not this static page.

> [accordion] Unipile populated chat history
>
> Exercise four accounts, twelve related chats, and forty provider-visible messages for pagination, reset, and WhatsApp-send evaluation.
>
> **Sample ID:** `unipile.chat-history-corpus.v1`
>
> **Category:** `populated`
>
> **Starting state:** 56 records across `accounts`: 4, `chats`: 12, `messages`: 40
>
> **Supported surface:** State-backed account, chat, and message reads plus one stateful WhatsApp chat-message send.
>
> **Required capabilities:** `state.read`, `state.load`, `state.reset`, `rest.accounts`, `rest.chats`, `rest.messages`, `rest.whatsapp-send`
>
> **First read:** `GET /api/v1/messages?limit=10`. Expected result: HTTP 200.
>
> **Representative mutation:** `POST /api/v1/chats/sample-whatsapp-chat/messages`. Expected result: HTTP 200, 201, 204.
>
> **Mutation input**
>
> ```json theme={null}
> {
>   "text": "Maintenance is approved for 02:00 UTC. I’ll send the runbook before the handoff."
> }
> ```
>
> **Expected diff:** changes include `messages`. Exact match required: no. Hosted promotion must observe every listed path after the provider-native mutation; dynamic provider ids and timestamps are excluded from exact matching.
>
> **Expected reset:** restores loaded sample.
>
> **Known limits**
>
> * Only the account/chat/message read tranche projects loaded state; broader Unipile reads remain recording-backed.
> * No general account, calendar, provider, or chat-timeline mutation guarantee.
>
> **Start this sample**
>
> ```bash theme={null}
> archal sample show unipile.chat-history-corpus.v1 --raw > archal-unipile-chat-history-corpus.json
> archal state validate unipile archal-unipile-chat-history-corpus.json
> archal session create unipile \
>   --state unipile=archal-unipile-chat-history-corpus.json
> ```
>
> **Inspect the raw state**
>
> ```bash theme={null}
> archal sample show unipile.chat-history-corpus.v1 --raw
> ```
>
> The packaged JSON artifact is `samples/states/unipile/chat-history-corpus/state.json` and is 18,346 bytes. The CLI verifies SHA-256 `88fced2c758d1890bd48c7bba121c169dc537bb9e4218ad022008abc5f268a1f` before printing it.
>
> Catalog validation: **Passed**. Hosted availability is determined by Archal's live certification and admission system, not this static page.

> [accordion] Unipile multilingual Unicode message
>
> Seed a delivered WhatsApp message containing mixed scripts, emoji, and skin-tone modifiers, then verify a new send preserves it.
>
> **Sample ID:** `unipile.unicode-message.v1`
>
> **Category:** `edge-case`
>
> **Starting state:** 3 records across `accounts`: 1, `chats`: 1, `messages`: 1
>
> **Supported surface:** State-backed account, chat, and message reads plus one stateful WhatsApp chat-message send.
>
> **Required capabilities:** `state.read`, `state.load`, `state.reset`, `rest.accounts`, `rest.chats`, `rest.messages`, `rest.whatsapp-send`
>
> **First read:** `GET /api/v1/messages/sample-message-unicode`. Expected result: HTTP 200.
>
> **Representative mutation:** `POST /api/v1/chats/sample-whatsapp-chat/messages`. Expected result: HTTP 200, 201, 204.
>
> **Mutation input**
>
> ```json theme={null}
> {
>   "text": "Maintenance is approved for 02:00 UTC. I’ll send the runbook before the handoff."
> }
> ```
>
> **Expected diff:** changes include `messages`. Exact match required: no. Hosted promotion must observe every listed path after the provider-native mutation; dynamic provider ids and timestamps are excluded from exact matching.
>
> **Expected reset:** restores loaded sample.
>
> **Known limits**
>
> * Only the account/chat/message read tranche projects loaded state; broader Unipile reads remain recording-backed.
> * No general account, calendar, provider, or chat-timeline mutation guarantee.
>
> **Start this sample**
>
> ```bash theme={null}
> archal sample show unipile.unicode-message.v1 --raw > archal-unipile-unicode-message.json
> archal state validate unipile archal-unipile-unicode-message.json
> archal session create unipile \
>   --state unipile=archal-unipile-unicode-message.json
> ```
>
> **Inspect the raw state**
>
> ```bash theme={null}
> archal sample show unipile.unicode-message.v1 --raw
> ```
>
> The packaged JSON artifact is `samples/states/unipile/unicode-message/state.json` and is 983 bytes. The CLI verifies SHA-256 `2ec15514f5cc5fc5ad2c27e014d2f758be3c4cf54314f7df73b4d25d71fa52ee` before printing it.
>
> Catalog validation: **Passed**. Hosted availability is determined by Archal's live certification and admission system, not this static page.

> [accordion] Unipile WhatsApp send workflow
>
> Seed a maintenance handoff conversation, send exactly one new message, and verify the state diff, reset, and isolation.
>
> **Sample ID:** `unipile.whatsapp-send-workflow.v1`
>
> **Category:** `workflow`
>
> **Starting state:** 7 records across `accounts`: 1, `chats`: 1, `messages`: 5
>
> **Supported surface:** State-backed account, chat, and message reads plus one stateful WhatsApp chat-message send.
>
> **Required capabilities:** `state.read`, `state.load`, `state.reset`, `rest.accounts`, `rest.chats`, `rest.messages`, `rest.whatsapp-send`
>
> **First read:** `GET /api/v1/chats/sample-whatsapp-chat/messages`. Expected result: HTTP 200.
>
> **Representative mutation:** `POST /api/v1/chats/sample-whatsapp-chat/messages`. Expected result: HTTP 200, 201, 204.
>
> **Mutation input**
>
> ```json theme={null}
> {
>   "text": "Maintenance is approved for 02:00 UTC. I’ll send the runbook before the handoff."
> }
> ```
>
> **Expected diff:** changes include `messages`. Exact match required: no. Hosted promotion must observe every listed path after the provider-native mutation; dynamic provider ids and timestamps are excluded from exact matching.
>
> **Expected reset:** restores loaded sample.
>
> **Known limits**
>
> * Only the account/chat/message read tranche projects loaded state; broader Unipile reads remain recording-backed.
> * No general account, calendar, provider, or chat-timeline mutation guarantee.
>
> **Start this sample**
>
> ```bash theme={null}
> archal sample show unipile.whatsapp-send-workflow.v1 --raw > archal-unipile-whatsapp-send-workflow.json
> archal state validate unipile archal-unipile-whatsapp-send-workflow.json
> archal session create unipile \
>   --state unipile=archal-unipile-whatsapp-send-workflow.json
> ```
>
> **Inspect the raw state**
>
> ```bash theme={null}
> archal sample show unipile.whatsapp-send-workflow.v1 --raw
> ```
>
> The packaged JSON artifact is `samples/states/unipile/whatsapp-send-workflow/state.json` and is 2,389 bytes. The CLI verifies SHA-256 `b680e9b78e4b0bb79fe49274e633b21ff19d0ea00f43f4bc050464e4092af162` before printing it.
>
> Catalog validation: **Passed**. Hosted availability is determined by Archal's live certification and admission system, not this static page.

## Use custom state

Start from a sample when possible. For custom state, inspect the contract with `archal environment describe unipile`, then validate the file before creating a sandbox:

```bash theme={null}
archal state validate unipile state.json
```

Loading state replaces the current collections and establishes a new reset baseline. See [Starting state](https://docs.archal.ai/sandboxes/starting-state.md) before replacing state in an existing sandbox.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.