---
title: "Save Connector"
method: POST
path: "/api/v1/export-templates/{template_id}/connectors"
tags: ["exports"]
---

# Save Connector

`POST /api/v1/export-templates/{template_id}/connectors`

## Path parameters

- `template_id` string, uuid, required

## Request body

- SaveConnectorRequest
  - `mapping` ConnectorMapping, required
    - `match` MatchConfig
      - `strategy` 'code_then_name'
      - `name_match` 'normalized_exact'
    - `placements` union[]
      - union
        - FixedCellPlacement
          - `kind` 'fixed_cell'
          - `sheet` string, required
          - `cell` string, required
          - `match_key` MatchKey, required
            - `type` 'code' | 'name', required
            - `value` string, required
          - `uom` 'EA' | 'LF' | 'IN' | 'FT' | 'SF' | 'SY' | 'CF' | 'CY', required
          - `result_type` 'count' | 'total_height' | 'perimeter' | 'surface_area_top_or_bottom' | 'surface_area_top_and_bottom' | 'surface_area_all_sides' | 'surface_area_full' | 'volume' | 'length' | 'segment_count' | 'surface_area_single_side' | 'surface_area_both_sides' | 'surface_area_single_end' | 'surface_area_both_ends' | 'surface_area_all_side_duct' | 'area' | 'grid_length_visible' | 'grid_length_x_visible' | 'grid_length_y_visible' | 'grid_intersection_count' | 'tile_count_average' | 'tile_count_visible' | 'area_counts', nullable
        - ListRegionPlacement
          - `kind` 'list_region'
          - `sheet` string, required
          - `start_row` integer, required
          - `key_column` string, required
          - `key_type` 'code' | 'name', required
          - `columns` object, required
          - `on_unmatched_template_row` 'leave' | 'clear'
          - `on_extra_quantity` 'append' | 'ignore'
        - SectionInsertPlacement — Insert routed takeoff lines into a named section of a blank template. Used to build an estimate from a template whose section line rows are empty stubs rather than the project's actual items. The engine locates the section by ``header_label`` in ``key_column``, inserts a row per routed quantity just before the section's subtotal (the first row matching a ``stop_labels`` term below the header), and keeps the subtotal/total SUM ranges correct. A quantity is routed here when its phase code is in ``codes``; its value lands in the column ``columns`` maps its UOM to.
          - `kind` 'section_insert'
          - `sheet` string, required
          - `header_label` string, required
          - `key_column` string, required
          - `columns` object, required
          - `codes` string[], required
          - `stop_labels` string[]
        - SectionGridPlacement — Fill a section sheet's line-item grid, one row per matched condition. A condition matches when its normalized name OR its normalized phase-code description equals ``match_key.value`` — so a flatwork sheet is filled by a same-named condition (one row) and a member sheet (e.g. Piers) is filled by the many conditions sharing that phase code (one row each). Writes start at ``start_row`` (>= 7, never the C5/D5 formula totals) up to ``max_rows``; the workbook's own formulas recompute everything downstream.
          - `kind` 'section_grid'
          - `sheet` string, required
          - `match_key` MatchKey, required
            - `type` 'code' | 'name', required
            - `value` string, required
          - `family` 'area' | 'area_multiline' | 'area_shifted' | 'linear_curb' | 'count_footing' | 'linear_footing' | 'grade_beam' | 'pier' | 'slab_shifted' | 'wall', required
          - `start_row` integer, required
          - `max_rows` integer, required
          - `columns` GridColumn[]
            - `column` string, required
            - `source` 'derivation' | 'dimension' | 'name' | 'size_string' | 'const', required
            - `uom` 'EA' | 'LF' | 'IN' | 'FT' | 'SF' | 'SY' | 'CF' | 'CY', nullable
            - `result_type` 'count' | 'total_height' | 'perimeter' | 'surface_area_top_or_bottom' | 'surface_area_top_and_bottom' | 'surface_area_all_sides' | 'surface_area_full' | 'volume' | 'length' | 'segment_count' | 'surface_area_single_side' | 'surface_area_both_sides' | 'surface_area_single_end' | 'surface_area_both_ends' | 'surface_area_all_side_duct' | 'area' | 'grid_length_visible' | 'grid_length_x_visible' | 'grid_length_y_visible' | 'grid_intersection_count' | 'tile_count_average' | 'tile_count_visible' | 'area_counts', nullable
            - `dimension` 'width_in' | 'thickness_in' | 'height_in', nullable
            - `unit` 'in' | 'ft'
            - `const_value` number, nullable
  - `notes` string, nullable

## Response `200`

Successful Response

- SavedConnector
  - `id` string, uuid, required
  - `template_id` string, uuid, required
  - `version` integer, required
  - `is_active` boolean, required

## Other responses

- `4XX` — Client Error
- `5XX` — Server Error

---

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