---
title: "Get Routing Graph"
method: GET
path: "/api/v1/routing-environment/graph"
tags: ["Routing Environment"]
---

# Get Routing Graph

`GET /api/v1/routing-environment/graph`

The environment plus every transfer edge derived from live config.

Returns null when no environment exists yet (same contract as GET /).

## Query parameters

- `channel` 'voice' | 'text'

## Response `200`

Successful Response

- RoutingGraphRead
  - `environment` RoutingEnvironmentRead, required
    - `id` string, uuid, required
    - `name` string, required
    - `channel` 'voice' | 'text', required
    - `nodes` RoutingNode[], required
      - `id` string, uuid
      - `kind` 'voice_agent' | 'human_agent' | 'external_line' | 'property' | 'destination' | 'fallback' | 'actions' | 'text_agent' | 'text_specialist' | 'human', required
      - `label` string, required
      - `voice_agent_id` string, uuid, nullable
      - `human_agent_id` string, uuid, nullable
      - `phone_number` string, nullable
      - `property_id` string, uuid, nullable
      - `routing_destination_id` string, uuid, nullable
      - `report_agent_id` string, uuid, nullable
      - `text_agent_id` string, uuid, nullable
      - `parent_id` string, uuid, nullable
      - `position` RoutingNodePosition
        - `x` number
        - `y` number
      - `size` RoutingNodeSize — Manual node dimensions (px), set by dragging the node's resize handles. Any node kind may carry one. ``None`` means "size yourself": a ``property`` container auto-fits its children, every other kind sizes to its content. A saved size is a floor-adjusted override on the map — for containers it is never allowed to clip the children it holds.
        - `width` number, required
        - `height` number, required
      - `pre_pickup_size` RoutingNodeSize — Manual node dimensions (px), set by dragging the node's resize handles. Any node kind may carry one. ``None`` means "size yourself": a ``property`` container auto-fits its children, every other kind sizes to its content. A saved size is a floor-adjusted override on the map — for containers it is never allowed to clip the children it holds.
        - `width` number, required
        - `height` number, required
      - `pre_pickup_offset` RoutingNodePosition
        - `x` number
        - `y` number
      - `notes` string, nullable
    - `tenant_id` string, uuid, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `nodes` RoutingGraphNode[], required
    - `id` string, uuid
    - `kind` 'voice_agent' | 'human_agent' | 'external_line' | 'property' | 'destination' | 'fallback' | 'actions' | 'text_agent' | 'text_specialist' | 'human', required
    - `label` string, required
    - `voice_agent_id` string, uuid, nullable
    - `human_agent_id` string, uuid, nullable
    - `phone_number` string, nullable
    - `property_id` string, uuid, nullable
    - `routing_destination_id` string, uuid, nullable
    - `report_agent_id` string, uuid, nullable
    - `text_agent_id` string, uuid, nullable
    - `parent_id` string, uuid, nullable
    - `position` RoutingNodePosition
      - `x` number
      - `y` number
    - `size` RoutingNodeSize — Manual node dimensions (px), set by dragging the node's resize handles. Any node kind may carry one. ``None`` means "size yourself": a ``property`` container auto-fits its children, every other kind sizes to its content. A saved size is a floor-adjusted override on the map — for containers it is never allowed to clip the children it holds.
      - `width` number, required
      - `height` number, required
    - `pre_pickup_size` RoutingNodeSize — Manual node dimensions (px), set by dragging the node's resize handles. Any node kind may carry one. ``None`` means "size yourself": a ``property`` container auto-fits its children, every other kind sizes to its content. A saved size is a floor-adjusted override on the map — for containers it is never allowed to clip the children it holds.
      - `width` number, required
      - `height` number, required
    - `pre_pickup_offset` RoutingNodePosition
      - `x` number
      - `y` number
    - `notes` string, nullable
    - `entity` RoutingGraphNodeEntity — Display enrichment resolved from the referenced entity at read time.
      - `name` string, nullable
      - `department` string, nullable
      - `dial_identifier` string, nullable
      - `active` boolean, nullable
      - `external_id` string, nullable
      - `inbound_numbers` RoutingInboundNumber[]
        - `number` string, required
        - `intent_context` string, nullable
        - `is_dialed_by_callers` boolean
        - `phone_number_id` string, uuid, nullable
      - `voice_agent_group_id` string, uuid, nullable
      - `group_agent_count` integer, nullable
      - `city` string, nullable
      - `country_code` string, nullable
      - `destination_key` string, nullable
      - `numbers` string[]
      - `business_hours_only` boolean, nullable
      - `languages` string[]
      - `hunt_size` integer, nullable
      - `fallback_channels` string[]
      - `action_count` integer, nullable
      - `publishable_key` string, nullable
      - `production_origins` string[]
      - `text_widget_group_id` string, uuid, nullable
      - `first_message` string, nullable
      - `voice_config` RoutingVoiceConfig — Unvalidated voice chip for the map. Graph projection must not 500 on incomplete metadata, so this is a display-only subset of Assistant.voice_config — no provider registry check, no required voice_id.
        - `provider` string, nullable
        - `voice_id` string, nullable
      - `transcriber_language` string, nullable
      - `pre_pickup_enabled` boolean, nullable
      - `pre_pickup_mode` string, nullable
      - `pre_pickup_text` string, nullable
      - `pre_pickup_language` string, nullable
      - `pre_pickup_variants` RoutingPrePickupVariant[]
        - `language` string, required
        - `text` string, nullable
        - `dtmf_digit` string, nullable
        - `greeting` string, nullable
      - `pre_pickup_menu_grace_seconds` number, nullable
  - `edges` RoutingGraphEdge[], required
    - `source_node_id` string, uuid, required
    - `target_node_id` string, uuid, required
    - `mechanism` 'cold' | 'warm' | 'sibling' | 'dispatch' | 'escalation' | 'fallback' | 'automation', required
    - `scenario_name` string, nullable
    - `group_id` string, uuid, nullable
    - `condition` string, nullable
    - `pre_instruction` string, nullable
    - `post_instruction` string, nullable
    - `business_hours_only` boolean
    - `fallback_numbers_count` integer
    - `fallback_targets` FallbackTarget[]
      - `number` string, required
      - `human_agent_id` string, uuid, nullable
      - `name` string, nullable
      - `resolved` boolean
    - `randomize_hunt_order` boolean
    - `hunt_group_name` string, nullable
    - `after_hours_action_type` string, nullable
    - `currently_open` boolean
    - `matches_all` boolean
    - `destination_number` string, nullable
    - `transfer_announcement` string, nullable
  - `unresolved` UnresolvedRoute[], required
    - `source_node_id` string, uuid, required
    - `mechanism` 'cold' | 'warm' | 'sibling' | 'dispatch' | 'escalation' | 'fallback' | 'automation', required
    - `scenario_name` string, nullable
    - `condition` string, nullable
    - `destination_label` string, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/getanana/apis/cleon-api.md) · [All operations](https://skmtc.dev/getanana/apis/cleon-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/getanana/cleon-api/revisions/c0f54348e251/schema)
