> For the complete documentation index, see [llms.txt](https://docs.channex.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.channex.io/api-v.1-documentation/rate-plans-collection/get-rate-plan-api.md).

# Get Rate Plan API

## Retrieve a rate plan

> Retrieve a rate plan by its identifier.

````json
{"openapi":"3.1.0","info":{"title":"Channex.io — Public API","version":"0.0.0"},"tags":[{"name":"Rate Plans","description":"Manage Rate Plans — pricing plans of how to sell Room Types: prices per occupancy, rate derivation rules, and per-weekday restriction defaults."}],"servers":[{"url":"https://app.channex.io/api/v1","description":"Production server","variables":{}},{"url":"https://staging.channex.io/api/v1","description":"Staging server","variables":{}}],"security":[{"UserApiKeyAuth":[]}],"components":{"securitySchemes":{"UserApiKeyAuth":{"type":"apiKey","in":"header","name":"user-api-key","description":"API key for programmatic access, sent in the `user-api-key` header."}},"schemas":{"Common.Scalars.id":{"type":"string","format":"uuid"},"RatePlans.RatePlanResource":{"type":"object","required":["type","id","attributes","relationships"],"properties":{"type":{"type":"string","enum":["rate_plan"]},"id":{"$ref":"#/components/schemas/Common.Scalars.id"},"attributes":{"$ref":"#/components/schemas/RatePlans.RatePlan"},"relationships":{"$ref":"#/components/schemas/RatePlans.RatePlanRelationships"}},"description":"A rate plan as returned in responses."},"RatePlans.RatePlan":{"type":"object","required":["id","title","sell_mode","rate_mode","currency","meal_type","tax_set_id","cancellation_policy_id","ui_read_only","meta","inherit_rate","inherit_closed_to_arrival","inherit_closed_to_departure","inherit_stop_sell","inherit_min_stay_arrival","inherit_min_stay_through","inherit_max_stay","inherit_max_availability","inherit_availability_offset","options","auto_rate_settings","children_fee","infant_fee","max_stay","min_stay_arrival","min_stay_through","closed_to_arrival","closed_to_departure","stop_sell"],"properties":{"id":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.id"}],"description":"Unique rate plan identifier."},"title":{"type":"string","minLength":1,"maxLength":255,"description":"Rate plan title, unique within a Room Type (case-sensitive). A title that is blank after trimming whitespace (for example `\"   \"`) is refused with `422` (`details.title: [\"can't be blank\"]`)."},"sell_mode":{"allOf":[{"$ref":"#/components/schemas/RatePlans.SellMode"}],"description":"How the rate plan is sold. Defaults to `per_room`. Cannot be changed after creation: on update a value other than the stored one is refused with `422` (`details.sell_mode: [\"can't be changed\"]`); the stored value is accepted."},"rate_mode":{"allOf":[{"$ref":"#/components/schemas/RatePlans.RateMode"}],"description":"How the rate is calculated. Defaults to `manual`."},"currency":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.currency"}],"description":"Rate plan currency, an ISO 4217 code. Defaults to the currency of the associated Property; a Property can have rate plans in different currencies. On create, an unsupported code is refused with `422` (`details.currency: [\"is invalid\"]`). Cannot be changed after creation: a value sent on update is ignored."},"meal_type":{"anyOf":[{"$ref":"#/components/schemas/RatePlans.MealType"},{"type":"null"}],"description":"Meal plan included in the rate plan. `none` by default; null once cleared."},"tax_set_id":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.id"},{"type":"null"}],"description":"UUID of the Tax Set applied to the rate plan, or null. Defaults to the Property's default Tax Set. The tax set also appears under relationships."},"cancellation_policy_id":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.id"},{"type":"null"}],"description":"UUID of the Cancellation Policy applied to the rate plan, or null."},"ui_read_only":{"type":"boolean","description":"Whether the rate plan is shown as read-only in the Channex interface."},"meta":{"anyOf":[{"type":"object","unevaluatedProperties":{}},{"type":"null"}],"description":"Free-form object stored for the client's own use, or null. The platform neither reads nor writes it: an object sent here comes back unchanged."},"inherit_rate":{"type":"boolean","description":"Whether `rate` follows the Parent Rate Plan: when `true`, the value is derived from the parent on every change and cannot be set on this rate plan directly. Defaults to `false`; `true` requires `parent_rate_plan_id`."},"inherit_closed_to_arrival":{"type":"boolean","description":"Whether `closed_to_arrival` follows the Parent Rate Plan: when `true`, the value is derived from the parent on every change and cannot be set on this rate plan directly. Defaults to `false`; `true` requires `parent_rate_plan_id`."},"inherit_closed_to_departure":{"type":"boolean","description":"Whether `closed_to_departure` follows the Parent Rate Plan: when `true`, the value is derived from the parent on every change and cannot be set on this rate plan directly. Defaults to `false`; `true` requires `parent_rate_plan_id`."},"inherit_stop_sell":{"type":"boolean","description":"Whether `stop_sell` follows the Parent Rate Plan: when `true`, the value is derived from the parent on every change and cannot be set on this rate plan directly. Defaults to `false`; `true` requires `parent_rate_plan_id`."},"inherit_min_stay_arrival":{"type":"boolean","description":"Whether `min_stay_arrival` follows the Parent Rate Plan: when `true`, the value is derived from the parent on every change and cannot be set on this rate plan directly. Defaults to `false`; `true` requires `parent_rate_plan_id`."},"inherit_min_stay_through":{"type":"boolean","description":"Whether `min_stay_through` follows the Parent Rate Plan: when `true`, the value is derived from the parent on every change and cannot be set on this rate plan directly. Defaults to `false`; `true` requires `parent_rate_plan_id`."},"inherit_max_stay":{"type":"boolean","description":"Whether `max_stay` follows the Parent Rate Plan: when `true`, the value is derived from the parent on every change and cannot be set on this rate plan directly. Defaults to `false`; `true` requires `parent_rate_plan_id`."},"inherit_max_availability":{"type":"boolean","description":"Whether `max_availability` follows the Parent Rate Plan: when `true`, the value is derived from the parent on every change and cannot be set on this rate plan directly. Defaults to `false`; `true` requires `parent_rate_plan_id`."},"inherit_availability_offset":{"type":"boolean","description":"Whether `availability_offset` follows the Parent Rate Plan: when `true`, the value is derived from the parent on every change and cannot be set on this rate plan directly. Defaults to `false`; `true` requires `parent_rate_plan_id`."},"options":{"type":"array","items":{"$ref":"#/components/schemas/RatePlans.OccupancyOption"},"description":"Occupancy options — prices for different counts of guests."},"auto_rate_settings":{"anyOf":[{"$ref":"#/components/schemas/RatePlans.AutoRateSettings"},{"type":"null"}],"description":"How rate options are derived from the primary occupancy option. Filled with zero-valued amount settings when `rate_mode` is `auto` and nothing is sent; null otherwise."},"children_fee":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.decimalString"}],"description":"Additional fee added to the normal price for a Children guest (per Hotel Age Policy)."},"infant_fee":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.decimalString"}],"description":"Additional fee added to the normal price for an Infant guest (per Hotel Age Policy)."},"max_stay":{"type":"array","items":{"$ref":"#/components/schemas/Common.Scalars.nonNegativeInt"},"minItems":7,"maxItems":7,"description":"Default Max Stay restriction per weekday (7 values, Monday first). `0` means no limit."},"min_stay_arrival":{"type":"array","items":{"$ref":"#/components/schemas/Common.Scalars.positiveInt"},"minItems":7,"maxItems":7,"description":"Default Min Stay Arrival restriction per weekday (7 values, Monday first)."},"min_stay_through":{"type":"array","items":{"$ref":"#/components/schemas/Common.Scalars.positiveInt"},"minItems":7,"maxItems":7,"description":"Default Min Stay Through restriction per weekday (7 values, Monday first)."},"closed_to_arrival":{"type":"array","items":{"type":"boolean"},"minItems":7,"maxItems":7,"description":"Default Closed To Arrival restriction per weekday (7 values, Monday first)."},"closed_to_departure":{"type":"array","items":{"type":"boolean"},"minItems":7,"maxItems":7,"description":"Default Closed To Departure restriction per weekday (7 values, Monday first)."},"stop_sell":{"type":"array","items":{"type":"boolean"},"minItems":7,"maxItems":7,"description":"Default Stop Sell restriction per weekday (7 values, Monday first)."}},"description":"A rate plan — a pricing plan of how to sell a Room Type, with prices and restriction defaults — as returned in responses: every attribute is present."},"RatePlans.SellMode":{"type":"string","enum":["per_room","per_person"],"description":"How the rate plan is sold. `per_room` — one price regardless of guest count; `per_person` — price depends on guest count."},"RatePlans.RateMode":{"type":"string","enum":["manual","derived","cascade","auto"],"description":"How the rate of the rate plan is calculated.\n`manual` — the price is the one set in `options[].rate`.\n`derived` — the price of the primary occupancy option is derived from the Parent Rate Plan.\n`cascade` — the price of every occupancy option is derived from the Parent Rate Plan; on create, an option is added for each occupancy from 1 to the Room Type's `occ_adults` that the request does not name, each derived from the parent's option of the same occupancy.\n`auto` — the price is calculated from the primary occupancy option's price and `auto_rate_settings`."},"Common.Scalars.currency":{"type":"string","minLength":3,"maxLength":3,"description":"ISO 4217 alphabetic currency code. See the `/currencies` endpoint for supported values."},"RatePlans.MealType":{"type":"string","enum":["none","all_inclusive","breakfast","lunch","dinner","american","bed_and_breakfast","buffet_breakfast","carribean_breakfast","continental_breakfast","english_breakfast","european_plan","family_plan","full_board","full_breakfast","half_board","room_only","self_catering","bermuda","dinner_bed_and_breakfast_plan","family_american","breakfast_and_lunch","lunch_and_dinner"],"description":"Meal plan included in the rate plan."},"RatePlans.OccupancyOption":{"type":"object","required":["id","occupancy","is_primary","inherit_rate","inherit_closed_to_arrival","inherit_closed_to_departure","inherit_stop_sell","inherit_min_stay_arrival","inherit_min_stay_through","inherit_max_stay","inherit_max_availability","inherit_availability_offset","derived_option","rate_category_id","rate"],"properties":{"id":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.id"}],"description":"Unique occupancy option identifier."},"occupancy":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.positiveInt"}],"description":"Count of guests allowed for this occupancy option. At most the Room Type's `occ_adults`; each occupancy appears once, and `2` and `\"2\"` count as the same occupancy."},"is_primary":{"type":"boolean","description":"Marks the main occupancy option — the base point for derived calculations. Exactly one option of a rate plan is primary."},"inherit_rate":{"type":"boolean","description":"Whether the option's `rate` is derived from the Parent Rate Plan."},"inherit_closed_to_arrival":{"type":"boolean","description":"Whether the option's `closed_to_arrival` is derived from the Parent Rate Plan."},"inherit_closed_to_departure":{"type":"boolean","description":"Whether the option's `closed_to_departure` is derived from the Parent Rate Plan."},"inherit_stop_sell":{"type":"boolean","description":"Whether the option's `stop_sell` is derived from the Parent Rate Plan."},"inherit_min_stay_arrival":{"type":"boolean","description":"Whether the option's `min_stay_arrival` is derived from the Parent Rate Plan."},"inherit_min_stay_through":{"type":"boolean","description":"Whether the option's `min_stay_through` is derived from the Parent Rate Plan."},"inherit_max_stay":{"type":"boolean","description":"Whether the option's `max_stay` is derived from the Parent Rate Plan."},"inherit_max_availability":{"type":"boolean","description":"Whether the option's `max_availability` is derived from the Parent Rate Plan."},"inherit_availability_offset":{"type":"boolean","description":"Whether the option's `availability_offset` is derived from the Parent Rate Plan."},"derived_option":{"anyOf":[{"$ref":"#/components/schemas/RatePlans.DerivedOption"},{"type":"null"}],"description":"Rules deriving this option's values from the Parent Rate Plan or the primary occupancy option, keyed by the restriction they modify. `null` when the option is not derived; `{\"rate\": []}`, the default once a parent is set, derives the rate unchanged. Rate values are returned as decimal strings in the currency of the rate plan, for example `\"10.00\"`.\n\nThe object is keyed by the restriction a rule list modifies — `rate`, `min_stay_arrival`, `min_stay_through` or `stop_sell` — and each key holds a list of `[operation, value]` rules. `null` or `[]` in place of the object means no derived option. A key outside these four is refused unless its value is empty.\n\n`rate` takes any number of rules, applied to the original value in order, from left to right:\n\n- `increase_by_amount` — add the amount\n- `increase_by_percent` — increase by the percent\n- `decrease_by_amount` — subtract the amount\n- `decrease_by_percent` — decrease by the percent\n\nThe value is the amount or the percent as a string, for example `\"10\"` or `\"5.00\"`; a decimal comma is accepted. It must not be negative. `decrease_by_percent` must stay below 100 once rounded to two decimals — `\"99.99\"` is accepted, `\"99.995\"` is not; `increase_by_percent` has no upper limit. For an original rate of 100.00:\n\n```json\n{\"rate\": [[\"increase_by_percent\", \"5.00\"], [\"increase_by_amount\", \"12.00\"]]}\n```\n\n100.00 + 5% = 105.00, then 105.00 + 12.00 = 117.00. An empty list, `{\"rate\": []}`, derives the rate unchanged.\n\n`min_stay_arrival` and `min_stay_through` take one rule at most, `[\"set\", <positive integer>]`, and `stop_sell` one rule at most, `[\"set\", <boolean>]`: the restriction takes the given value instead of the original one."},"rate_category_id":{"anyOf":[{"$ref":"#/components/schemas/Common.Scalars.id"},{"type":"null"}],"description":"UUID of the associated rate category, or null."},"rate":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.decimalString"}],"description":"Default rate applied to each date of a new rate plan and to each future date newly opened in state."}},"description":"An occupancy option — the price for a specific count of guests — as returned in responses."},"Common.Scalars.positiveInt":{"type":"integer","format":"int32","minimum":1},"RatePlans.DerivedOption":{"type":"object","properties":{"rate":{"type":"array","items":{"type":"array","prefixItems":[{"type":"string","enum":["increase_by_amount","increase_by_percent","decrease_by_amount","decrease_by_percent"],"description":"A value-modification rule, applied to the original value with the step's argument.\n`increase_by_amount` — add the amount.\n`increase_by_percent` — increase by the percent.\n`decrease_by_amount` — subtract the amount.\n`decrease_by_percent` — decrease by the percent."},{"type":"string"}]},"description":"Modification rules for the rate, applied to the original value in order; empty to derive the rate unchanged. Each rule is `[operation, value]` with the value as a decimal string; the operations are `increase_by_amount`, `increase_by_percent`, `decrease_by_amount` and `decrease_by_percent`."},"min_stay_arrival":{"type":"array","items":{"type":"array","prefixItems":[{"type":"string","enum":["set"],"description":"The rule of `min_stay_arrival`, `min_stay_through` and `stop_sell`: `set` — the restriction takes the rule's value."},{"type":"integer","format":"int32","minimum":1}]},"maxItems":1,"description":"Rule for the minimum stay counted on arrival: at most one, `[\"set\", <positive integer>]`."},"min_stay_through":{"type":"array","items":{"type":"array","prefixItems":[{"type":"string","enum":["set"],"description":"The rule of `min_stay_arrival`, `min_stay_through` and `stop_sell`: `set` — the restriction takes the rule's value."},{"type":"integer","format":"int32","minimum":1}]},"maxItems":1,"description":"Rule for the minimum stay counted through the stay: at most one, `[\"set\", <positive integer>]`."},"stop_sell":{"type":"array","items":{"type":"array","prefixItems":[{"type":"string","enum":["set"],"description":"The rule of `min_stay_arrival`, `min_stay_through` and `stop_sell`: `set` — the restriction takes the rule's value."},{"type":"boolean"}]},"maxItems":1,"description":"Rule for the stop sell flag: at most one, `[\"set\", <boolean>]`."}},"description":"Rules deriving values from the Parent Rate Plan or from the primary occupancy option, keyed by the restriction they modify.\n\nThe object is keyed by the restriction a rule list modifies — `rate`, `min_stay_arrival`, `min_stay_through` or `stop_sell` — and each key holds a list of `[operation, value]` rules. `null` or `[]` in place of the object means no derived option. A key outside these four is refused unless its value is empty.\n\n`rate` takes any number of rules, applied to the original value in order, from left to right:\n\n- `increase_by_amount` — add the amount\n- `increase_by_percent` — increase by the percent\n- `decrease_by_amount` — subtract the amount\n- `decrease_by_percent` — decrease by the percent\n\nThe value is the amount or the percent as a string, for example `\"10\"` or `\"5.00\"`; a decimal comma is accepted. It must not be negative. `decrease_by_percent` must stay below 100 once rounded to two decimals — `\"99.99\"` is accepted, `\"99.995\"` is not; `increase_by_percent` has no upper limit. For an original rate of 100.00:\n\n```json\n{\"rate\": [[\"increase_by_percent\", \"5.00\"], [\"increase_by_amount\", \"12.00\"]]}\n```\n\n100.00 + 5% = 105.00, then 105.00 + 12.00 = 117.00. An empty list, `{\"rate\": []}`, derives the rate unchanged.\n\n`min_stay_arrival` and `min_stay_through` take one rule at most, `[\"set\", <positive integer>]`, and `stop_sell` one rule at most, `[\"set\", <boolean>]`: the restriction takes the given value instead of the original one."},"Common.Scalars.decimalString":{"type":"string","description":"A decimal number as a string, e.g. `100.00`. Every monetary amount the API returns takes this form."},"RatePlans.AutoRateSettings":{"type":"object","required":["increase_mode","decrease_mode","increase_value","decrease_value"],"properties":{"increase_mode":{"allOf":[{"$ref":"#/components/schemas/RatePlans.AutoRateMode"}],"description":"How an increase is expressed."},"decrease_mode":{"allOf":[{"$ref":"#/components/schemas/RatePlans.AutoRateMode"}],"description":"How a decrease is expressed."},"increase_value":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.decimalString"}],"description":"Amount or percent to increase by, as a decimal string."},"decrease_value":{"allOf":[{"$ref":"#/components/schemas/Common.Scalars.decimalString"}],"description":"Amount or percent to decrease by, as a decimal string."}},"description":"How rate options are derived from the primary occupancy option when `rate_mode` is `auto`, as returned in responses."},"RatePlans.AutoRateMode":{"type":"string","enum":["$","%"],"description":"How an automatic rate adjustment is expressed: `$` for an amount, `%` for a percent."},"Common.Scalars.nonNegativeInt":{"type":"integer","format":"int32","minimum":0},"RatePlans.RatePlanRelationships":{"type":"object","required":["room_type","property"],"properties":{"room_type":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/Common.Scalars.id"},"type":{"type":"string","enum":["room_type"]}},"required":["id","type"]}},"required":["data"],"description":"Room type the rate plan sells."},"property":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/Common.Scalars.id"},"type":{"type":"string","enum":["property"]}},"required":["id","type"]}},"required":["data"],"description":"Property the rate plan belongs to."},"tax_set":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/Common.Scalars.id"},"type":{"type":"string","enum":["tax_set"]},"attributes":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/Common.Scalars.id"},"title":{"type":"string"}},"required":["id","title"],"description":"Identifier and title of the tax set."}},"required":["id","type","attributes"]}},"required":["data"],"description":"Tax set applied to the rate plan. Present in the single-record response when the rate plan has a tax set; absent from list, create and update responses."},"parent_rate_plan":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/Common.Scalars.id"},"type":{"type":"string","enum":["rate_plan"]}},"required":["id","type"]}},"required":["data"],"description":"Parent Rate Plan the rate plan derives from. Present only when `parent_rate_plan_id` is set."},"channel":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/Common.Scalars.id"},"type":{"type":"string","enum":["channel"]}},"required":["id","type"]}},"required":["data"],"description":"Channel that created the rate plan for its own mapping. Present only on such rate plans; they are listed by `GET /rate_plans` and skipped by `/options`."}},"description":"Relationships of a rate plan resource."},"Common.Errors.Unauthorized":{"type":"object","required":["errors"],"properties":{"errors":{"type":"object","required":["code","title"],"properties":{"code":{"type":"string","enum":["unauthorized"]},"title":{"type":"string","enum":["Unauthorized"]}},"description":"Shape of a single JSON:API error object: a stable machine code plus a human-readable title."}},"description":"Authentication credentials are missing or invalid."},"Common.Errors.NotFound":{"type":"object","required":["errors"],"properties":{"errors":{"type":"object","required":["code","title"],"properties":{"code":{"type":"string","enum":["resource_not_found"]},"title":{"type":"string","enum":["Resource Not Found"]}},"description":"Shape of a single JSON:API error object: a stable machine code plus a human-readable title."}},"description":"The requested resource does not exist."},"Common.Errors.InvalidArguments":{"type":"object","required":["errors"],"properties":{"errors":{"$ref":"#/components/schemas/Common.Errors.InvalidArgumentsObject"}},"description":"The request has missing or invalid arguments; `details` lists the messages per argument."},"Common.Errors.InvalidArgumentsObject":{"type":"object","required":["code","title","details"],"properties":{"code":{"type":"string","enum":["bad_request"]},"title":{"type":"string","enum":["Bad Request"]},"details":{"type":"object","unevaluatedProperties":{"type":"array","items":{"type":"string"}},"description":"Maps each invalid argument to the list of validation messages for that argument."}},"description":"Error object for invalid request arguments, adding per-argument messages."}}},"paths":{"/rate_plans/{id}":{"get":{"operationId":"RatePlans_read","summary":"Retrieve a rate plan","description":"Retrieve a rate plan by its identifier.","parameters":[{"name":"id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Common.Scalars.id"}}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/RatePlans.RatePlanResource"}},"description":"JSON:API document wrapping a single resource."}}}},"401":{"description":"Authentication credentials are missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Common.Errors.Unauthorized"}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Common.Errors.NotFound"}}}},"422":{"description":"The request has missing or invalid arguments; `details` lists the messages per argument.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Common.Errors.InvalidArguments"}}}}},"tags":["Rate Plans"]}}}}
````
