Outcomes

Phone-system outcomes define what an agent can apply during or after a call. They are the public configuration surface for call results, Smart List movement, and outcome webhooks.

Outcome Model

Every outcome has:

FieldPurpose
outcome_nameThe label shown to agents and sent in webhook payloads.
outcome_typeaction for in-call use, or disposition for post-call classification.
orderDisplay order. Lower numbers appear first.
destination_typenone, smart_list, or remove_from_smart_list.
webhook_urlHTTP or HTTPS endpoint Sailor calls for action outcomes.

List Outcomes

$curl https://api.sailorhq.io/phone-system/outcomes \
> -H "Authorization: Bearer $SAILOR_API_TOKEN"

Example response:

1{
2 "ok": true,
3 "outcomes": [
4 {
5 "outcome_id": "00000000-0000-4000-8000-000000000001",
6 "outcome_name": "Interested",
7 "outcome_type": "action",
8 "order": 10,
9 "destination_type": "smart_list",
10 "destination": {
11 "destination_type": "smart_list",
12 "destination_id": "00000000-0000-4000-8000-000000000002",
13 "destination_name": "Follow up"
14 },
15 "webhook_url": "https://example.com/sailor/outcomes",
16 "created_at": "2026-06-25T00:00:00.000Z",
17 "updated_at": "2026-06-25T00:00:00.000Z"
18 }
19 ],
20 "disposition_popup_enabled": false
21}

Create An Action Outcome

Action outcomes are selected during a live call. They require a webhook URL.

$curl https://api.sailorhq.io/phone-system/outcomes \
> -X POST \
> -H "Authorization: Bearer $SAILOR_API_TOKEN" \
> -H "Idempotency-Key: $SAILOR_REQUEST_KEY" \
> -H "Content-Type: application/json" \
> -d '{
> "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"
> }'

Create A Post-Call Disposition

Disposition outcomes are shown after a call. If at least one disposition exists, Sailor reports disposition_popup_enabled: true.

$curl https://api.sailorhq.io/phone-system/outcomes \
> -X POST \
> -H "Authorization: Bearer $SAILOR_API_TOKEN" \
> -H "Idempotency-Key: $SAILOR_REQUEST_KEY" \
> -H "Content-Type: application/json" \
> -d '{
> "outcome_name": "Not Qualified",
> "outcome_type": "disposition",
> "order": 20,
> "destination_type": "none"
> }'

Destination Recipes

No movement

Use destination_type: "none" when the outcome should only record the result and optionally send a webhook.

Add to a list

Use destination_type: "smart_list" with destination_id to add the contacted person to one Smart List.

Remove from lists

Use destination_type: "remove_from_smart_list" with remove_from_smart_lists to clean up membership.

Remove From Smart Lists

Use remove_from_smart_list when an outcome should clean up list membership.

$curl https://api.sailorhq.io/phone-system/outcomes \
> -X POST \
> -H "Authorization: Bearer $SAILOR_API_TOKEN" \
> -H "Idempotency-Key: $SAILOR_REQUEST_KEY" \
> -H "Content-Type: application/json" \
> -d '{
> "outcome_name": "Remove from active lists",
> "outcome_type": "action",
> "order": 30,
> "destination_type": "remove_from_smart_list",
> "remove_from_smart_lists": {
> "all": true
> },
> "webhook_url": "https://example.com/sailor/outcomes"
> }'

To remove from selected lists, send list_ids instead of all.

1{
2 "remove_from_smart_lists": {
3 "list_ids": [
4 "00000000-0000-4000-8000-000000000010",
5 "00000000-0000-4000-8000-000000000011"
6 ]
7 }
8}

Update An Outcome

PATCH replaces the outcome configuration with the submitted fields. Send the full intended configuration, not only the one field you changed.

$curl https://api.sailorhq.io/phone-system/outcomes/00000000-0000-4000-8000-000000000001 \
> -X PATCH \
> -H "Authorization: Bearer $SAILOR_API_TOKEN" \
> -H "Idempotency-Key: $SAILOR_REQUEST_KEY" \
> -H "Content-Type: application/json" \
> -d '{
> "outcome_name": "Interested - Follow Up",
> "outcome_type": "action",
> "order": 10,
> "destination_type": "smart_list",
> "destination_id": "00000000-0000-4000-8000-000000000002",
> "webhook_url": "https://example.com/sailor/outcomes"
> }'

Delete An Outcome

$curl https://api.sailorhq.io/phone-system/outcomes/00000000-0000-4000-8000-000000000001 \
> -X DELETE \
> -H "Authorization: Bearer $SAILOR_API_TOKEN"

Validation Rules

RuleError to expect
outcome_name must be 1-120 characters.invalid_outcome
action outcomes require webhook_url.invalid_outcome
destination_type: smart_list requires destination_id.invalid_outcome
destination_id is only allowed with smart_list.invalid_outcome
remove_from_smart_lists is only allowed with remove_from_smart_list.invalid_outcome
remove_from_smart_lists must choose either all or list_ids, not both.invalid_outcome
The target Smart List must exist in the workspace.destination_not_found

Use the API Reference for exact field constraints.