New draft list from this one (spec 12.6): date shift, ISTAT, adjustments, rounding. dry_run returns the preview with the matrix diff; otherwise the draft is created (pricing.configure)
curl --request POST \ --url https://example.com/api/admin/v1/marinas/example/price-lists/example/renewal \ --header 'Content-Type: application/json' \ --header 'X-CSRF-Token: <X-CSRF-Token>' \ --cookie porto_session=<porto_session> \ --data '{ "dry_run": true, "code": "example", "name": { "it": "example", "en": "example" }, "shift_years": 1, "istat_bp": 1, "adjustments": [ { "scope": "all", "item_id": "example", "category": "example", "percent_bp": 1, "amount_cents": 1 } ], "amount_rounding": "none", "valid_from": "2026-04-15", "valid_to": "2026-04-15", "matrix": { "contract_types": [ "annual" ], "channel": "desk", "customer_category": "member" } }'Authorizations
Sezione intitolata “Authorizations”Parameters
Sezione intitolata “Parameters”Path Parameters
Sezione intitolata “Path Parameters”Header Parameters
Sezione intitolata “Header Parameters”8 to 128 characters of [A-Za-z0-9_-:.]; the response is replayed for 24 hours, 7 days for offline operations (x-porto-offline).
Request Bodyrequired
Sezione intitolata “Request Bodyrequired”object
object
object
Calendar date YYYY-MM-DD in the marina timezone
Calendar date YYYY-MM-DD in the marina timezone
object
Responses
Sezione intitolata “Responses”Dry run preview
object
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)
object
object
Calendar date YYYY-MM-DD in the marina timezone
object
object
Rate period code, or year / season
Calendar date YYYY-MM-DD in the marina timezone
Calendar date YYYY-MM-DD in the marina timezone
object
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)
Error code when the probe has no price, e.g. no_price:no_rule
Stay to price. Nights are [arrival, departure). vessel_id or vessel, resource or category with berth dimensions, customer_id or customer_category; explicit fields override the resolved ones. Matrix probes use this shape with explicit dimensions, price_list_id and quoted_on.
object
Calendar date YYYY-MM-DD in the marina timezone
Calendar date YYYY-MM-DD in the marina timezone
object
object
Calendar date YYYY-MM-DD in the marina timezone
object
Percent of the total or a fixed amount capped at the total (at most one)
object
object
Calendar date YYYY-MM-DD in the marina timezone
object
object
Rate period code, or year / season
Calendar date YYYY-MM-DD in the marina timezone
Calendar date YYYY-MM-DD in the marina timezone
object
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)
Error code when the probe has no price, e.g. no_price:no_rule
Stay to price. Nights are [arrival, departure). vessel_id or vessel, resource or category with berth dimensions, customer_id or customer_category; explicit fields override the resolved ones. Matrix probes use this shape with explicit dimensions, price_list_id and quoted_on.
object
Calendar date YYYY-MM-DD in the marina timezone
Calendar date YYYY-MM-DD in the marina timezone
object
object
Calendar date YYYY-MM-DD in the marina timezone
object
Percent of the total or a fixed amount capped at the total (at most one)
object
object
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" ] } } ] }, "diffs": [ { "contract_type": "annual", "before": { "contract_type": "annual", "rows": [ { "kind": "band" } ], "cells": [ { "unit": "night", "probe": { "contract_type": "annual", "vessel": { "hull_type": "monohull_motor" }, "resource": { "type": "berth" }, "customer_category": "member", "channel": "desk" } } ] }, "after": { "contract_type": "annual", "rows": [ { "kind": "band" } ], "cells": [ { "unit": "night", "probe": { "contract_type": "annual", "vessel": { "hull_type": "monohull_motor" }, "resource": { "type": "berth" }, "customer_category": "member", "channel": "desk" } } ] } } ]}Draft created
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
Example
{ "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" } } ]}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" } } ]}No price for the input (no_price, with details), promo code not applicable (promo_not_applicable), the list breaks a blocking validation rule (price_list_invalid, with price_list_issues), or an idempotency key was reused
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.