---
title: "resolveJourneyExternalValues"
method: POST
path: "/v1/journey/configuration/{id}/external-values"
tags: ["Journeys"]
---

# resolveJourneyExternalValues

`POST /v1/journey/configuration/{id}/external-values`

## Request

- Base URL: `https://journey-config.sls.epilot.io`
- URL: `https://journey-config.sls.epilot.io/v1/journey/configuration/{id}/external-values`
- Auth: HTTP bearer

Resolve the External Values hooks this journey's validation rules compare against.

The journey runtime never calls external-values-api itself. A request names a datasource
id declared by the saved journey config; the app and hook it resolves are read from that
config, so a visitor cannot aim an installed app's integration at an arbitrary hook.

Requires a portal token: a hook call reaches the organization's third-party system, so it
stays behind the identified-customer boundary. Public journeys skip these conditions.

Answers 200 whenever the request itself was valid, including when a hook failed — per
datasource, so one unreachable system never fails the rules that did resolve.

## Path parameters

- `id` string, uuid, required

## Request body

- JourneyExternalValuesRequest
  - `items` object[], required: The External Values datasources to resolve. A datasource is named by the id the journey config declares; the app and hook it points at are read from that config, never from this request.
    - `datasourceId` string, required
    - `context` object, required: Everything the hook reads, as one named map passed to it as `Context`: the validated value under `input`, plus each configured context binding under the name it was bound as.

## Response `200`

Resolution result per requested datasource

- JourneyExternalValuesResponse
  - `items` object[], required
    - `datasourceId` string, required
    - `values` object, required: Successfully extracted and coerced results, keyed by `result_id` and narrowed to the results the journey declares.
    - `errors` ExternalValueError[]
      - `result_id` string: Absent for hook-level failures, when no result was produced.
      - `code` string, required
      - `message` string
    - `policy` object
      - `on_unavailable` 'skip' | 'block'
  - `errors` object[], required: Datasources that produced no result at all.
    - `datasourceId` string, required
    - `code` 'unknown_datasource' | 'resolver_unavailable', required

## Other responses

- `400`: Malformed request body
- `403`: Not an identified portal user, or not permitted to read this journey

## Changes

- **2026-10-05** `c996b269690e`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/epilot/apis/journey-api/changes/v1/journey/configuration/:id/external-values/post.md)

---

[API](https://skmtc.dev/epilot/apis/journey-api.md) - [All operations](https://skmtc.dev/epilot/apis/journey-api/llms.txt) - [OpenAPI document](https://skmtc.dev/epilot/apis/journey-api/revisions/2f11eabb1f37?raw)
