> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.sailorhq.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.sailorhq.io/_mcp/server.

# Core concepts

> Understand outcomes, destinations, webhooks, and workspace scope.

Sailor outcomes are the bridge between call work and downstream operations. They let an agent say what happened, let Sailor move the contacted person between Smart Lists, and let your backend receive a structured event.

There are two outcome moments: actions happen during a live call, and dispositions capture the required final classification after the call.

## Workspace Scope

Every request acts on the workspace attached to the API token. The public API does not accept a workspace ID in the path or body.

> **Note**
>
> If Sailor returns `no_subaccount`, the token could not resolve a workspace scope. Confirm the token belongs to the workspace you expect.

## Outcome Types

| Type          | When agents use it | Typical use                                                                       |
| ------------- | ------------------ | --------------------------------------------------------------------------------- |
| `action`      | During a live call | Mark interest, trigger an external workflow, move the person to a follow-up list. |
| `disposition` | After the call     | Require final call classification before the agent returns to open-slot dialing.  |

Action outcomes require a public HTTPS `webhook_url`. Disposition outcomes are what enable the required post-call disposition workflow.

## Destination Types

| Destination              | Request fields            | Result                                                                              |
| ------------------------ | ------------------------- | ----------------------------------------------------------------------------------- |
| `none`                   | No destination fields.    | Sailor records the outcome without moving the person between lists.                 |
| `smart_list`             | `destination_id`          | Sailor adds the contacted person to the target Smart List.                          |
| `remove_from_smart_list` | `remove_from_smart_lists` | Sailor removes the contacted person from all Smart Lists or from selected list IDs. |

Use `remove_from_smart_lists: { "all": true }` to remove from every Smart List. Use `remove_from_smart_lists: { "list_ids": [...] }` to remove from selected lists.

## Outcome Shape

```json
{
  "outcome_name": "Interested",
  "outcome_type": "action",
  "order": 10,
  "destination_type": "smart_list",
  "destination_id": "00000000-0000-4000-8000-000000000000",
  "webhook_url": "https://example.com/sailor/outcomes"
}
```

Think of this as one instruction Sailor shows and runs:

* Show `Interested` during a call.
* Place it before lower-priority outcomes.
* Move the contacted person to the target Smart List.
* Send your backend the outcome webhook.

## Ordering

The `order` field controls outcome display order. Lower numbers appear earlier. Use gaps such as `10`, `20`, and `30` so you can insert new outcomes later without reordering every item.

## Idempotency

Create and update operations are safe to retry only when you use the right request shape:

* `POST` and `PATCH` require an `Idempotency-Key` header.
* Reuse the same key for retries of the same logical operation.
* Use a new key when you intentionally want a new operation.

## Webhook acknowledgement

When Sailor sends an outcome webhook, your endpoint should return any `2xx` status after it accepts the event. Do slow work asynchronously so the webhook response stays fast.

## Supported API Surface

Build against the endpoints and payloads documented in the API Reference. Undocumented paths can change without notice.

## Naming Outcomes

Outcome names are shown to agents and sent in webhook payloads. Use names that are short enough to scan during a call and clear enough to become downstream audit text.

| Good shape                 | Why it works                                      |
| -------------------------- | ------------------------------------------------- |
| `Interested`               | Fast to read during a live call.                  |
| `Not Qualified`            | Clear post-call classification.                   |
| `Remove from Active Lists` | Describes the list operation the action performs. |