Replace the draft document (settings, periods, bands, rules) in one transaction; new rows carry a key, saved ones their id. Saved even with validation errors (pricing.configure)
curl --request PUT \ --url https://example.com/api/admin/v1/marinas/example/price-lists/example \ --header 'Content-Type: application/json' \ --header 'X-CSRF-Token: <X-CSRF-Token>' \ --cookie porto_session=<porto_session> \ --data '{ "code": "example", "name": { "it": "example", "en": "example" }, "valid_from": "2026-04-15", "valid_to": "2026-04-15", "contract_types": [ "annual" ], "settings": { "dimension_source": "vessel", "length_rounding": { "step_cm": 1, "mode": "up" }, "min_beam_ratio": { "num": 1, "den": 1 }, "split": { "additionalProperty": "pro_rata_daily" }, "rounding": { "additionalProperty": "none" }, "deposits": { "additionalProperty": { "percent_bp": 1, "amount_cents": 1 } }, "season_window": { "from": "2026-04-15", "to": "2026-04-15" }, "primary_items": { "additionalProperty": "example" }, "publish_matrix": true }, "periods": [ { "id": "example", "key": "example", "code": "example", "name": { "it": "example", "en": "example" }, "kind": "season", "color": "chart-1", "ranges": [ { "from": "2026-04-15", "to": "2026-04-15" } ] } ], "bands": [ { "id": "example", "key": "example", "code": "example", "max_cm": 1, "category": "example" } ], "rules": [ { "id": "example", "key": "example", "stage": "base", "name": "example", "active": true, "priority": 1, "stackable": true, "item_id": "example", "basis": "per_berth", "unit": "night", "amount_cents": 1, "unit_cents": 1, "amounts": { "additionalProperty": 1 }, "includes": [ { "item_id": "example", "qty_milli": 1 } ], "target_item_ids": [ "example" ], "target_item_types": [ "berth_fee" ], "conditions": { "hull_types": [ "monohull_motor" ], "overhang_min_cm": 1, "min_nights": 1, "max_nights": 1, "lead_min_days": 1, "lead_max_days": 1 }, "effect": { "percent_bp": 1, "amount_cents": 1 }, "discount_kind": "customer", "promo_code": "example", "scope": { "contract_types": [ "annual" ], "categories": [ "example" ], "group_ids": [ "example" ], "channels": [ "desk" ], "customer_categories": [ "member" ], "periods": [ "example" ], "time_bands": [ "example" ] } } ] }'Authorizations
Sezione intitolata “Authorizations”Parameters
Sezione intitolata “Parameters”Path Parameters
Sezione intitolata “Path Parameters”Header Parameters
Sezione intitolata “Header Parameters”The ETag of the version being changed. Missing is 428, stale is 412.
Request Bodyrequired
Sezione intitolata “Request Bodyrequired”The whole editable document of a draft; periods, bands and rules are replaced by the diff.
object
object
Calendar date YYYY-MM-DD in the marina timezone
Calendar date YYYY-MM-DD in the marina timezone
Engine settings (m2-plan §2.3). Map keys are contract types or “*” for the others.
object
object
object
object
object
Percent of the total or a fixed amount capped at the total (at most one)
object
Item id of the berth fee per contract type
object
Stored for the public transit matrix (M8); unused in M2
A season or an event of a price list. Saved rows carry id; new rows in a save carry key.
object
Client key of a new row of a price list document, unique in the request
object
Inclusive range of nights
object
Calendar date YYYY-MM-DD in the marina timezone
Calendar date YYYY-MM-DD in the marina timezone
Length band inclusive up to max_cm (absent = open, last band only); order is the array order.
object
Client key of a new row of a price list document, unique in the request
A base rule, modifier or discount (field set by stage, m2-plan §2.2): base rules use item_id, basis, unit, amount_cents/unit_cents/amounts and includes; modifiers and discounts use target_item_ids/types, conditions and effect; discounts also discount_kind and promo_code. seq is assigned by the server.
object
Client key of a new row of a price list document, unique in the request
Hour, half_day and day (and week) are accepted only on flat base rules of items with revenue class rental (M11, priced by RentalQuote, ignored by the mooring engine)
Length_band band code → cents; per_berth category → cents
object
object
object
Exactly one of the two
object
Empty or absent list = any value
object
Rate period codes
Rental half-day band codes (M11, honoured by the rental quote only)
Responses
Sezione intitolata “Responses”OK
object
object
object
Calendar date YYYY-MM-DD in the marina timezone
Calendar date YYYY-MM-DD in the marina timezone
Engine settings (m2-plan §2.3). Map keys are contract types or “*” for the others.
object
object
object
object
object
Percent of the total or a fixed amount capped at the total (at most one)
object
Item id of the berth fee per contract type
object
Stored for the public transit matrix (M8); unused in M2
A season or an event of a price list. Saved rows carry id; new rows in a save carry key.
object
Client key of a new row of a price list document, unique in the request
object
Inclusive range of nights
object
Calendar date YYYY-MM-DD in the marina timezone
Calendar date YYYY-MM-DD in the marina timezone
Length band inclusive up to max_cm (absent = open, last band only); order is the array order.
object
Client key of a new row of a price list document, unique in the request
A base rule, modifier or discount (field set by stage, m2-plan §2.2): base rules use item_id, basis, unit, amount_cents/unit_cents/amounts and includes; modifiers and discounts use target_item_ids/types, conditions and effect; discounts also discount_kind and promo_code. seq is assigned by the server.
object
Client key of a new row of a price list document, unique in the request
Hour, half_day and day (and week) are accepted only on flat base rules of items with revenue class rental (M11, priced by RentalQuote, ignored by the mooring engine)
Length_band band code → cents; per_berth category → cents
object
object
object
Exactly one of the two
object
Empty or absent list = any value
object
Rate period codes
Rental half-day band codes (M11, honoured by the rental quote only)
object
Pricing.Validate issue code (m2-plan §4.8), e.g. period_overlap
object
Id of the row, or the client key of an unsaved one
Codes and integers as strings; never personal data
object
Row key of the request → new id
object
object
Pricing.Validate issue code (m2-plan §4.8), e.g. period_overlap
object
Id of the row, or the client key of an unsaved one
Codes and integers as strings; never personal data
object
Example
{ "document": { "contract_types": [ "annual" ], "settings": { "dimension_source": "vessel", "length_rounding": { "step_cm": 1, "mode": "up" }, "split": { "additionalProperty": "pro_rata_daily" }, "rounding": { "additionalProperty": "none" } }, "periods": [ { "kind": "season", "color": "chart-1" } ], "rules": [ { "stage": "base", "basis": "per_berth", "unit": "night", "target_item_types": [ "berth_fee" ], "conditions": { "hull_types": [ "monohull_motor" ] }, "discount_kind": "customer", "scope": { "contract_types": [ "annual" ], "channels": [ "desk" ], "customer_categories": [ "member" ] } } ], "status": "draft", "issues": [ { "severity": "error", "ref": { "kind": "list" } } ] }, "issues": [ { "severity": "error", "ref": { "kind": "list" } } ]}Headers
Sezione intitolata “Headers”Version of the resource, quoted (“3”)
Malformed request or validation failure
object
object
Map validation issues (map_invalid)
object
ValidateMap rule (m1-plan §2.3), e.g. berth_overlap
Numbers only (cm, counts)
object
Price list validation issues (price_list_invalid)
object
Pricing.Validate issue code (m2-plan §4.8), e.g. period_overlap
object
Id of the row, or the client key of an unsaved one
Codes and integers as strings; never personal data
object
Machine-readable details: no_price {item_id, contract_type, night, unit, category, band, reason}; price_list_overlap {conflicts: [{id, code, valid_from, valid_to}]}; in_use {references}; resource_taken ConflictDetail; fit_blocked FitResult; placement_invalid {reason, allocation_id?}; invalid_transition {from, action}; closure_active {closure_id, from_date, to_date}; release_invalid {reason}; allocation_changed {current_resource_id, current_resource_code} (null when the allocation is gone); remote_pin_mismatch {expected_fingerprint, presented_fingerprint}; scenario_conflicts {conflicts: [StorageScenarioConflict]}; maintenance_conflicts {conflicts: [MaintenanceConflict]}; storage_no_space {area_id, from, to}. Ids, codes, dates and integers only.
object
Example
{ "type": "bad_request", "issues": [ { "severity": "error" } ], "price_list_issues": [ { "severity": "error", "ref": { "kind": "list" } } ]}Not authenticated, or invalid credentials
object
object
Map validation issues (map_invalid)
object
ValidateMap rule (m1-plan §2.3), e.g. berth_overlap
Numbers only (cm, counts)
object
Price list validation issues (price_list_invalid)
object
Pricing.Validate issue code (m2-plan §4.8), e.g. period_overlap
object
Id of the row, or the client key of an unsaved one
Codes and integers as strings; never personal data
object
Machine-readable details: no_price {item_id, contract_type, night, unit, category, band, reason}; price_list_overlap {conflicts: [{id, code, valid_from, valid_to}]}; in_use {references}; resource_taken ConflictDetail; fit_blocked FitResult; placement_invalid {reason, allocation_id?}; invalid_transition {from, action}; closure_active {closure_id, from_date, to_date}; release_invalid {reason}; allocation_changed {current_resource_id, current_resource_code} (null when the allocation is gone); remote_pin_mismatch {expected_fingerprint, presented_fingerprint}; scenario_conflicts {conflicts: [StorageScenarioConflict]}; maintenance_conflicts {conflicts: [MaintenanceConflict]}; storage_no_space {area_id, from, to}. Ids, codes, dates and integers only.
object
Example
{ "type": "bad_request", "issues": [ { "severity": "error" } ], "price_list_issues": [ { "severity": "error", "ref": { "kind": "list" } } ]}Authenticated but not allowed
object
object
Map validation issues (map_invalid)
object
ValidateMap rule (m1-plan §2.3), e.g. berth_overlap
Numbers only (cm, counts)
object
Price list validation issues (price_list_invalid)
object
Pricing.Validate issue code (m2-plan §4.8), e.g. period_overlap
object
Id of the row, or the client key of an unsaved one
Codes and integers as strings; never personal data
object
Machine-readable details: no_price {item_id, contract_type, night, unit, category, band, reason}; price_list_overlap {conflicts: [{id, code, valid_from, valid_to}]}; in_use {references}; resource_taken ConflictDetail; fit_blocked FitResult; placement_invalid {reason, allocation_id?}; invalid_transition {from, action}; closure_active {closure_id, from_date, to_date}; release_invalid {reason}; allocation_changed {current_resource_id, current_resource_code} (null when the allocation is gone); remote_pin_mismatch {expected_fingerprint, presented_fingerprint}; scenario_conflicts {conflicts: [StorageScenarioConflict]}; maintenance_conflicts {conflicts: [MaintenanceConflict]}; storage_no_space {area_id, from, to}. Ids, codes, dates and integers only.
object
Example
{ "type": "bad_request", "issues": [ { "severity": "error" } ], "price_list_issues": [ { "severity": "error", "ref": { "kind": "list" } } ]}Not found (or not visible to the principal)
object
object
Map validation issues (map_invalid)
object
ValidateMap rule (m1-plan §2.3), e.g. berth_overlap
Numbers only (cm, counts)
object
Price list validation issues (price_list_invalid)
object
Pricing.Validate issue code (m2-plan §4.8), e.g. period_overlap
object
Id of the row, or the client key of an unsaved one
Codes and integers as strings; never personal data
object
Machine-readable details: no_price {item_id, contract_type, night, unit, category, band, reason}; price_list_overlap {conflicts: [{id, code, valid_from, valid_to}]}; in_use {references}; resource_taken ConflictDetail; fit_blocked FitResult; placement_invalid {reason, allocation_id?}; invalid_transition {from, action}; closure_active {closure_id, from_date, to_date}; release_invalid {reason}; allocation_changed {current_resource_id, current_resource_code} (null when the allocation is gone); remote_pin_mismatch {expected_fingerprint, presented_fingerprint}; scenario_conflicts {conflicts: [StorageScenarioConflict]}; maintenance_conflicts {conflicts: [MaintenanceConflict]}; storage_no_space {area_id, from, to}. Ids, codes, dates and integers only.
object
Example
{ "type": "bad_request", "issues": [ { "severity": "error" } ], "price_list_issues": [ { "severity": "error", "ref": { "kind": "list" } } ]}Conflict with the current state
object
object
Map validation issues (map_invalid)
object
ValidateMap rule (m1-plan §2.3), e.g. berth_overlap
Numbers only (cm, counts)
object
Price list validation issues (price_list_invalid)
object
Pricing.Validate issue code (m2-plan §4.8), e.g. period_overlap
object
Id of the row, or the client key of an unsaved one
Codes and integers as strings; never personal data
object
Machine-readable details: no_price {item_id, contract_type, night, unit, category, band, reason}; price_list_overlap {conflicts: [{id, code, valid_from, valid_to}]}; in_use {references}; resource_taken ConflictDetail; fit_blocked FitResult; placement_invalid {reason, allocation_id?}; invalid_transition {from, action}; closure_active {closure_id, from_date, to_date}; release_invalid {reason}; allocation_changed {current_resource_id, current_resource_code} (null when the allocation is gone); remote_pin_mismatch {expected_fingerprint, presented_fingerprint}; scenario_conflicts {conflicts: [StorageScenarioConflict]}; maintenance_conflicts {conflicts: [MaintenanceConflict]}; storage_no_space {area_id, from, to}. Ids, codes, dates and integers only.
object
Example
{ "type": "bad_request", "issues": [ { "severity": "error" } ], "price_list_issues": [ { "severity": "error", "ref": { "kind": "list" } } ]}If-Match does not match the current version
object
object
Map validation issues (map_invalid)
object
ValidateMap rule (m1-plan §2.3), e.g. berth_overlap
Numbers only (cm, counts)
object
Price list validation issues (price_list_invalid)
object
Pricing.Validate issue code (m2-plan §4.8), e.g. period_overlap
object
Id of the row, or the client key of an unsaved one
Codes and integers as strings; never personal data
object
Machine-readable details: no_price {item_id, contract_type, night, unit, category, band, reason}; price_list_overlap {conflicts: [{id, code, valid_from, valid_to}]}; in_use {references}; resource_taken ConflictDetail; fit_blocked FitResult; placement_invalid {reason, allocation_id?}; invalid_transition {from, action}; closure_active {closure_id, from_date, to_date}; release_invalid {reason}; allocation_changed {current_resource_id, current_resource_code} (null when the allocation is gone); remote_pin_mismatch {expected_fingerprint, presented_fingerprint}; scenario_conflicts {conflicts: [StorageScenarioConflict]}; maintenance_conflicts {conflicts: [MaintenanceConflict]}; storage_no_space {area_id, from, to}. Ids, codes, dates and integers only.
object
Example
{ "type": "bad_request", "issues": [ { "severity": "error" } ], "price_list_issues": [ { "severity": "error", "ref": { "kind": "list" } } ]}Request body above the operation’s limit, or file above 15 MiB (file_too_large)
object
object
Map validation issues (map_invalid)
object
ValidateMap rule (m1-plan §2.3), e.g. berth_overlap
Numbers only (cm, counts)
object
Price list validation issues (price_list_invalid)
object
Pricing.Validate issue code (m2-plan §4.8), e.g. period_overlap
object
Id of the row, or the client key of an unsaved one
Codes and integers as strings; never personal data
object
Machine-readable details: no_price {item_id, contract_type, night, unit, category, band, reason}; price_list_overlap {conflicts: [{id, code, valid_from, valid_to}]}; in_use {references}; resource_taken ConflictDetail; fit_blocked FitResult; placement_invalid {reason, allocation_id?}; invalid_transition {from, action}; closure_active {closure_id, from_date, to_date}; release_invalid {reason}; allocation_changed {current_resource_id, current_resource_code} (null when the allocation is gone); remote_pin_mismatch {expected_fingerprint, presented_fingerprint}; scenario_conflicts {conflicts: [StorageScenarioConflict]}; maintenance_conflicts {conflicts: [MaintenanceConflict]}; storage_no_space {area_id, from, to}. Ids, codes, dates and integers only.
object
Example
{ "type": "bad_request", "issues": [ { "severity": "error" } ], "price_list_issues": [ { "severity": "error", "ref": { "kind": "list" } } ]}If-Match is required
object
object
Map validation issues (map_invalid)
object
ValidateMap rule (m1-plan §2.3), e.g. berth_overlap
Numbers only (cm, counts)
object
Price list validation issues (price_list_invalid)
object
Pricing.Validate issue code (m2-plan §4.8), e.g. period_overlap
object
Id of the row, or the client key of an unsaved one
Codes and integers as strings; never personal data
object
Machine-readable details: no_price {item_id, contract_type, night, unit, category, band, reason}; price_list_overlap {conflicts: [{id, code, valid_from, valid_to}]}; in_use {references}; resource_taken ConflictDetail; fit_blocked FitResult; placement_invalid {reason, allocation_id?}; invalid_transition {from, action}; closure_active {closure_id, from_date, to_date}; release_invalid {reason}; allocation_changed {current_resource_id, current_resource_code} (null when the allocation is gone); remote_pin_mismatch {expected_fingerprint, presented_fingerprint}; scenario_conflicts {conflicts: [StorageScenarioConflict]}; maintenance_conflicts {conflicts: [MaintenanceConflict]}; storage_no_space {area_id, from, to}. Ids, codes, dates and integers only.
object
Example
{ "type": "bad_request", "issues": [ { "severity": "error" } ], "price_list_issues": [ { "severity": "error", "ref": { "kind": "list" } } ]}Porto è sviluppato da Coste360 SRL. Codice sorgente disponibile con licenza BSL 1.1; il marchio Porto è escluso dalla licenza.