---
title: "Dry-run a dynamic transfer-destination lookup (no persist)"
method: POST
path: "/v1/tools/{tool_id}/revisions/{revision_id}/preview-transfer-destination"
tags: ["tools"]
---

# Dry-run a dynamic transfer-destination lookup (no persist)

`POST /v1/tools/{tool_id}/revisions/{revision_id}/preview-transfer-destination`

## Request

- The document declares no server URL.
- Auth: API key in header `x-api-key`
- TypeScript: <https://skmtc.dev/oneloop-hq/apis/feather-api/docs/v1/tools/:tool_id/revisions/:revision_id/preview-transfer-destination/post.ts> (a function with typed inputs; its response is checked against the schema)

Resolve a transfer target's destination exactly as the voice host would.

Powers the authoring UI's "what number would this resolve to?" preview: the
request's ``input_mapping`` is rendered against sample ``context_vars`` and
executed through the same shared lookup core as a live transfer (same
renderer, same revalidation gates, same extraction), so preview and runtime
cannot drift. Verifies the revision belongs to the caller's org AND to
``tool_id`` (404 otherwise). Persists nothing; API inputs, response bodies,
and the resolved destination are never logged.

## Path parameters

- `tool_id` string, uuid, required
- `revision_id` string, uuid, required

## Request body

- TransferDestinationPreviewRequest: Authoring dry-run of a dynamic transfer-destination lookup. Renders ``input_mapping`` against sample ``context_vars`` and drives the referenced api_call revision through the SAME shared lookup core the voice host uses at transfer time — so the preview and a live transfer cannot drift. Nothing is persisted; API inputs, response bodies, and the resolved destination are never logged.
  - `input_mapping` object
  - `response_path` string, required
  - `context_vars` object

## Response `200`

Successful Response

- TransferDestinationPreviewResponse: Result of a dynamic transfer-destination preview. ``resolved`` is ``True`` iff a dialable destination was extracted from the lookup response. Otherwise ``subcode`` carries the runtime failure reason; ``missing_inputs`` and ``problems`` surface pre-execution (render / shape) failures independently.
  - `resolved` boolean, required
  - `destination` string, nullable
  - `subcode` string, nullable
  - `missing_inputs` string[]
  - `problems` TransferDestinationPreviewProblem[]
    - `kind` string, required
    - `message` string, required

## Other responses

- `400`: Bad request
- `401`: Authentication required
- `404`: Resource not found
- `422`: Validation Error

## Changes

- **2026-08-12** `5a5597ebb2d6`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/oneloop-hq/apis/feather-api/changes/v1/tools/:tool_id/revisions/:revision_id/preview-transfer-destination/post.md)

---

[API](https://skmtc.dev/oneloop-hq/apis/feather-api.md) - [All operations](https://skmtc.dev/oneloop-hq/apis/feather-api/llms.txt) - [OpenAPI document](https://skmtc.dev/oneloop-hq/apis/feather-api/revisions/9cd7291d4228?raw)
