---
title: "Edit the content of an infrastructure"
method: POST
path: "/infra/{infra_id}"
tags: ["infra"]
---

# Edit the content of an infrastructure

`POST /infra/{infra_id}`

Takes a batch of operations. An operation is a JSON patch document that will
be applied to the RailJSON description of the appropriate infra object.

The consistency of the patch with the RailJSON schema is checked. If a patch
is erroneous, the whole batch is rejected.

After editing the object, the generated cartographic layers are invalidated and
regenerated. The edition step fails if the regeneration fails.

## Path parameters

- `infra_id` integer, required

## Request body

- Operation[]
  - union
    - object
      - `obj_type` 'TrackSection', required
      - `railjson` TrackSection, required
        - `curves` Curve[], required
          - `begin` number, double, required
          - `end` number, double, required
          - `radius` number, double, required
        - `extensions` TrackSectionExtensions
          - `sncf` TrackSectionSncfExtension
            - `line_code` integer, required
            - `line_name` string, required
            - `track_name` string, required
            - `track_number` integer, required
          - `source` object, nullable
            - `id` string, required
            - `name` string, required
        - `geo` GeoJsonLineString, required
          - `coordinates` GeoJsonPointValue[], required
            - number[]
          - `type` 'LineString', required
        - `id` string, required
        - `length` number, double, required
        - `loading_gauge_limits` LoadingGaugeLimit[]
          - `begin` number, double, required
          - `category` 'G1' | 'G2' | 'GA' | 'GB' | 'GB1' | 'GC' | 'FR3.3' | 'FR3.3/GB/G2' | 'GLOTT', required
          - `end` number, double, required
        - `slopes` Slope[], required
          - `begin` number, double, required
          - `end` number, double, required
          - `gradient` number, double, required
      - `operation_type` 'CREATE', required
    - object
      - `obj_type` 'Signal', required
      - `railjson` Signal, required
        - `direction` 'START_TO_STOP' | 'STOP_TO_START', required
        - `extensions` SignalExtensions
          - `sncf` SignalSncfExtension
            - `kp` string, required
            - `label` string, required
            - `side` 'LEFT' | 'RIGHT' | 'CENTER'
        - `id` string, required
        - `logical_signals` object[]
          - `conditional_parameters` object[], required
            - `on_route` string, required
            - `parameters` object, required
          - `default_parameters` object, required
          - `next_signaling_systems` string[], required
          - `settings` object, required
          - `signaling_system` string, required
        - `position` number, double, required
        - `sight_distance` number, double, required
        - `track` string, required
      - `operation_type` 'CREATE', required
    - object
      - `obj_type` 'NeutralSection', required
      - `railjson` NeutralSection, required — Neutral sections are portions of track where trains aren't allowed to pull power from electrifications. They have to rely on inertia to cross such sections. In practice, neutral sections are delimited by signs. In OSRD, neutral sections are directional to allow accounting for different sign placement depending on the direction. For more details see [the documentation](https://osrd.fr/en/docs/explanation/neutral_sections/).
        - `announcement_track_ranges` DirectionalTrackRange[], required
          - `begin` number, double, required
          - `direction` 'START_TO_STOP' | 'STOP_TO_START', required
          - `end` number, double, required
          - `track` string, required
        - `extensions` NeutralSectionExtensions
          - `neutral_sncf` NeutralSectionNeutralSncfExtension
            - `announcement` Sign[], required
              - …
            - `end` Sign[], required
              - …
            - `exe` Sign, required
              - …
            - `rev` Sign[], required
              - …
        - `id` string, required
        - `lower_pantograph` boolean, required
        - `track_ranges` DirectionalTrackRange[], required
          - `begin` number, double, required
          - `direction` 'START_TO_STOP' | 'STOP_TO_START', required
          - `end` number, double, required
          - `track` string, required
      - `operation_type` 'CREATE', required
    - object
      - `obj_type` 'SpeedSection', required
      - `railjson` SpeedSection, required
        - `extensions` SpeedSectionExtensions
          - `psl_sncf` SpeedSectionPslSncfExtension
            - `announcement` Sign[], required
              - …
            - `r` Sign[], required
              - …
            - `z` Sign, required
              - …
        - `id` string, required
        - `on_routes` string[], nullable
        - `speed_limit` number, double, nullable
        - `speed_limit_by_tag` object, required
        - `track_ranges` ApplicableDirectionsTrackRange[], required
          - `applicable_directions` 'START_TO_STOP' | 'STOP_TO_START' | 'BOTH', required
          - `begin` number, double, required
          - `end` number, double, required
          - `track` string, required
      - `operation_type` 'CREATE', required
    - object
      - `obj_type` 'Switch', required
      - `railjson` Switch, required
        - `extensions` SwitchExtensions
          - `sncf` SwitchSncfExtension
            - `label` string, required
        - `group_change_delay` number, double, required
        - `id` string, required
        - `ports` object, required
        - `switch_type` string, required
      - `operation_type` 'CREATE', required
    - object
      - `obj_type` 'SwitchType', required
      - `railjson` SwitchType, required
        - `groups` object, required
        - `id` string, required
        - `ports` string[], required
      - `operation_type` 'CREATE', required
    - object
      - `obj_type` 'Detector', required
      - `railjson` Detector, required
        - `extensions` DetectorExtension
          - `sncf` DetectorSncfExtension, required
            - `kp` string, required
        - `id` string, required
        - `position` number, double, required
        - `track` string, required
      - `operation_type` 'CREATE', required
    - object
      - `obj_type` 'BufferStop', required
      - `railjson` BufferStop, required
        - `extensions` BufferStopExtension
          - `sncf` BufferStopSncfExtension
            - `kp` string, required
        - `id` string, required
        - `position` number, double, required
        - `track` string, required
      - `operation_type` 'CREATE', required
    - object
      - `obj_type` 'Route', required
      - `railjson` Route, required
        - `entry_point` union, required
          - object
            - `id` string, required
            - `type` 'BufferStop', required
          - object
            - `id` string, required
            - `type` 'Detector', required
        - `entry_point_direction` 'START_TO_STOP' | 'STOP_TO_START', required
        - `exit_point` union, required
          - object
            - `id` string, required
            - `type` 'BufferStop', required
          - object
            - `id` string, required
            - `type` 'Detector', required
        - `id` string, required
        - `release_detectors` string[], required
        - `switches_directions` object, required
      - `operation_type` 'CREATE', required
    - object
      - `obj_type` 'OperationalPoint', required
      - `railjson` OperationalPoint, required
        - `country_code` string, required
        - `id` string, required
        - `is_passenger_station` boolean, required
        - `main_code` string, required
        - `name` string, required
        - `parts` OperationalPointPart[], required
          - `extensions` OperationalPointPartExtension
            - `sncf` OperationalPointPartSncfExtension
              - …
          - `local_track_name` string, required
          - `position` number, double, required — Offset on the track section, in m
          - `track` string, required
        - `plc` string, nullable — Primary Location Code : https://rne.eu/it/products/ccs/crd/
        - `secondary_code` string, nullable
        - `secondary_name` string, nullable
        - `uic` integer, nullable
        - `weight` integer, nullable
      - `operation_type` 'CREATE', required
    - object
      - `obj_type` 'Electrification', required
      - `railjson` Electrification, required
        - `id` string, required
        - `track_ranges` ApplicableDirectionsTrackRange[], required
          - `applicable_directions` 'START_TO_STOP' | 'STOP_TO_START' | 'BOTH', required
          - `begin` number, double, required
          - `end` number, double, required
          - `track` string, required
        - `voltage` string, required
      - `operation_type` 'CREATE', required
    - object
      - `obj_type` 'LevelCrossing', required
      - `railjson` LevelCrossing, required
        - `id` string, required
        - `name` string, required
        - `parts` LevelCrossingPart[], required
          - `pedal_downstream` integer, required — Offset in mm of the downstream pedal from the main position (downstream refers to the START_TO_STOP direction of the track)
          - `pedal_upstream` integer, required — Offset in mm of the upstream pedal from the main position (upstream refers to the START_TO_STOP direction of the track)
          - `position` number, double, required
          - `track` string, required
        - `short_zone_length` integer, required — Short zone length in mm
      - `operation_type` 'CREATE', required
    - object
      - `obj_id` string, required
      - `obj_type` 'TrackSection' | 'Signal' | 'SpeedSection' | 'Detector' | 'NeutralSection' | 'Switch' | 'SwitchType' | 'BufferStop' | 'Route' | 'OperationalPoint' | 'Electrification' | 'LevelCrossing', required
      - `railjson_patch` PatchOperation[], required — Representation of JSON Patch (list of patch operations)
        - union — JSON Patch single patch operation
          - object — 'add' operation
            - `path` string, required — JSON-Pointer value [RFC6901](https://tools.ietf.org/html/rfc6901) that references a location within the target document where the operation is performed.
            - `value` unknown, required
            - `op` 'add', required
          - object — 'remove' operation
            - `path` string, required — JSON-Pointer value [RFC6901](https://tools.ietf.org/html/rfc6901) that references a location within the target document where the operation is performed.
            - `op` 'remove', required
          - object — 'replace' operation
            - `path` string, required — JSON-Pointer value [RFC6901](https://tools.ietf.org/html/rfc6901) that references a location within the target document where the operation is performed.
            - `value` unknown, required
            - `op` 'replace', required
          - object — 'move' operation
            - `from` string, required — JSON-Pointer value [RFC6901](https://tools.ietf.org/html/rfc6901) that references a location to move value from.
            - `path` string, required — JSON-Pointer value [RFC6901](https://tools.ietf.org/html/rfc6901) that references a location within the target document where the operation is performed.
            - `op` 'move', required
          - object — 'copy' operation
            - `from` string, required — JSON-Pointer value [RFC6901](https://tools.ietf.org/html/rfc6901) that references a location to copy value from.
            - `path` string, required — JSON-Pointer value [RFC6901](https://tools.ietf.org/html/rfc6901) that references a location within the target document where the operation is performed.
            - `op` 'copy', required
          - object — 'test' operation
            - `path` string, required — JSON-Pointer value [RFC6901](https://tools.ietf.org/html/rfc6901) that references a location within the target document where the operation is performed.
            - `value` unknown, required
            - `op` 'test', required
      - `operation_type` 'UPDATE', required
    - object — A delete operation. Contains same information as a object ref but has another serialization.
      - `obj_id` string, required
      - `obj_type` 'TrackSection' | 'Signal' | 'SpeedSection' | 'Detector' | 'NeutralSection' | 'Switch' | 'SwitchType' | 'BufferStop' | 'Route' | 'OperationalPoint' | 'Electrification' | 'LevelCrossing', required
      - `operation_type` 'DELETE', required

## Response `200`

The result of the operations

- InfraObject[]
  - union
    - object
      - `obj_type` 'TrackSection', required
      - `railjson` TrackSection, required
        - `curves` Curve[], required
          - `begin` number, double, required
          - `end` number, double, required
          - `radius` number, double, required
        - `extensions` TrackSectionExtensions
          - `sncf` TrackSectionSncfExtension
            - `line_code` integer, required
            - `line_name` string, required
            - `track_name` string, required
            - `track_number` integer, required
          - `source` object, nullable
            - `id` string, required
            - `name` string, required
        - `geo` GeoJsonLineString, required
          - `coordinates` GeoJsonPointValue[], required
            - number[]
          - `type` 'LineString', required
        - `id` string, required
        - `length` number, double, required
        - `loading_gauge_limits` LoadingGaugeLimit[]
          - `begin` number, double, required
          - `category` 'G1' | 'G2' | 'GA' | 'GB' | 'GB1' | 'GC' | 'FR3.3' | 'FR3.3/GB/G2' | 'GLOTT', required
          - `end` number, double, required
        - `slopes` Slope[], required
          - `begin` number, double, required
          - `end` number, double, required
          - `gradient` number, double, required
    - object
      - `obj_type` 'Signal', required
      - `railjson` Signal, required
        - `direction` 'START_TO_STOP' | 'STOP_TO_START', required
        - `extensions` SignalExtensions
          - `sncf` SignalSncfExtension
            - `kp` string, required
            - `label` string, required
            - `side` 'LEFT' | 'RIGHT' | 'CENTER'
        - `id` string, required
        - `logical_signals` object[]
          - `conditional_parameters` object[], required
            - `on_route` string, required
            - `parameters` object, required
          - `default_parameters` object, required
          - `next_signaling_systems` string[], required
          - `settings` object, required
          - `signaling_system` string, required
        - `position` number, double, required
        - `sight_distance` number, double, required
        - `track` string, required
    - object
      - `obj_type` 'NeutralSection', required
      - `railjson` NeutralSection, required — Neutral sections are portions of track where trains aren't allowed to pull power from electrifications. They have to rely on inertia to cross such sections. In practice, neutral sections are delimited by signs. In OSRD, neutral sections are directional to allow accounting for different sign placement depending on the direction. For more details see [the documentation](https://osrd.fr/en/docs/explanation/neutral_sections/).
        - `announcement_track_ranges` DirectionalTrackRange[], required
          - `begin` number, double, required
          - `direction` 'START_TO_STOP' | 'STOP_TO_START', required
          - `end` number, double, required
          - `track` string, required
        - `extensions` NeutralSectionExtensions
          - `neutral_sncf` NeutralSectionNeutralSncfExtension
            - `announcement` Sign[], required
              - …
            - `end` Sign[], required
              - …
            - `exe` Sign, required
              - …
            - `rev` Sign[], required
              - …
        - `id` string, required
        - `lower_pantograph` boolean, required
        - `track_ranges` DirectionalTrackRange[], required
          - `begin` number, double, required
          - `direction` 'START_TO_STOP' | 'STOP_TO_START', required
          - `end` number, double, required
          - `track` string, required
    - object
      - `obj_type` 'SpeedSection', required
      - `railjson` SpeedSection, required
        - `extensions` SpeedSectionExtensions
          - `psl_sncf` SpeedSectionPslSncfExtension
            - `announcement` Sign[], required
              - …
            - `r` Sign[], required
              - …
            - `z` Sign, required
              - …
        - `id` string, required
        - `on_routes` string[], nullable
        - `speed_limit` number, double, nullable
        - `speed_limit_by_tag` object, required
        - `track_ranges` ApplicableDirectionsTrackRange[], required
          - `applicable_directions` 'START_TO_STOP' | 'STOP_TO_START' | 'BOTH', required
          - `begin` number, double, required
          - `end` number, double, required
          - `track` string, required
    - object
      - `obj_type` 'Switch', required
      - `railjson` Switch, required
        - `extensions` SwitchExtensions
          - `sncf` SwitchSncfExtension
            - `label` string, required
        - `group_change_delay` number, double, required
        - `id` string, required
        - `ports` object, required
        - `switch_type` string, required
    - object
      - `obj_type` 'SwitchType', required
      - `railjson` SwitchType, required
        - `groups` object, required
        - `id` string, required
        - `ports` string[], required
    - object
      - `obj_type` 'Detector', required
      - `railjson` Detector, required
        - `extensions` DetectorExtension
          - `sncf` DetectorSncfExtension, required
            - `kp` string, required
        - `id` string, required
        - `position` number, double, required
        - `track` string, required
    - object
      - `obj_type` 'BufferStop', required
      - `railjson` BufferStop, required
        - `extensions` BufferStopExtension
          - `sncf` BufferStopSncfExtension
            - `kp` string, required
        - `id` string, required
        - `position` number, double, required
        - `track` string, required
    - object
      - `obj_type` 'Route', required
      - `railjson` Route, required
        - `entry_point` union, required
          - object
            - `id` string, required
            - `type` 'BufferStop', required
          - object
            - `id` string, required
            - `type` 'Detector', required
        - `entry_point_direction` 'START_TO_STOP' | 'STOP_TO_START', required
        - `exit_point` union, required
          - object
            - `id` string, required
            - `type` 'BufferStop', required
          - object
            - `id` string, required
            - `type` 'Detector', required
        - `id` string, required
        - `release_detectors` string[], required
        - `switches_directions` object, required
    - object
      - `obj_type` 'OperationalPoint', required
      - `railjson` OperationalPoint, required
        - `country_code` string, required
        - `id` string, required
        - `is_passenger_station` boolean, required
        - `main_code` string, required
        - `name` string, required
        - `parts` OperationalPointPart[], required
          - `extensions` OperationalPointPartExtension
            - `sncf` OperationalPointPartSncfExtension
              - …
          - `local_track_name` string, required
          - `position` number, double, required — Offset on the track section, in m
          - `track` string, required
        - `plc` string, nullable — Primary Location Code : https://rne.eu/it/products/ccs/crd/
        - `secondary_code` string, nullable
        - `secondary_name` string, nullable
        - `uic` integer, nullable
        - `weight` integer, nullable
    - object
      - `obj_type` 'Electrification', required
      - `railjson` Electrification, required
        - `id` string, required
        - `track_ranges` ApplicableDirectionsTrackRange[], required
          - `applicable_directions` 'START_TO_STOP' | 'STOP_TO_START' | 'BOTH', required
          - `begin` number, double, required
          - `end` number, double, required
          - `track` string, required
        - `voltage` string, required
    - object
      - `obj_type` 'LevelCrossing', required
      - `railjson` LevelCrossing, required
        - `id` string, required
        - `name` string, required
        - `parts` LevelCrossingPart[], required
          - `pedal_downstream` integer, required — Offset in mm of the downstream pedal from the main position (downstream refers to the START_TO_STOP direction of the track)
          - `pedal_upstream` integer, required — Offset in mm of the upstream pedal from the main position (upstream refers to the START_TO_STOP direction of the track)
          - `position` number, double, required
          - `track` string, required
        - `short_zone_length` integer, required — Short zone length in mm

---

[API](https://skmtc.net/openrailassociation/apis/osrd-editoast.md) · [All operations](https://skmtc.net/openrailassociation/apis/osrd-editoast/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/openrailassociation/osrd-editoast/versions/1840dbbd64ac/schema)
