Skip to main content

Rate Plans

A rate plan is the commercial condition attached to a price: whether the rate is public or opaque, refundable or not, restricted to an audience, or part of a package. It is reported per room, not per option, so two rooms in the same option can carry different rate plans.

{
"ratePlan": {
"code": "NOREEMBOLSABLE",
"name": "Non-refundable",
"providerCode": "388795977"
}
}
FieldMeaning
codeThe normalized classification, from the catalog below.
nameThe description, when the connection provides one.
providerCodeThe supplier's own rate identifier, exactly as we received it.

Read code, not providerCode

This is the important difference from board codes, where both sides are vocabularies you can enumerate. On the rate plan, only code is a vocabulary. providerCode is an identifier: one connection sends 9-digit contract ids (388795977), another sends opaque tokens (C05, H01, 34*, CG-OPACO 10). There is no supplier-published list of them and there cannot be, because a new commercial agreement creates a new one.

So group, filter and display on code. Treat providerCode as an opaque reference to quote back to the supplier when you need to ask about a specific rate, not as something to interpret.

NOTARIFA appears as a providerCode on almost every connection. It is the sentinel for no rate plan supplied, and it normalizes to PUBLICA.

Catalog

The codes are Spanish, because the normalized vocabulary predates the English API. The Spanish column is included so they are readable, not because the API returns Spanish text.

CodeNameSpanish
PUBLICAPublic rateTarifa pública
OPACAOpaque rateTarifa opaca
OPACANRFOpaque rate, non-refundableOpaca no reembolsable
NOREEMBOLSABLENon-refundableNo reembolsable
PARCIALMREEMBOLSABLEPartially refundableParcialmente reembolsable
MAYORES55Seniors 55 and overMayores de 55
MAYORES60Seniors 60 and overMayores de 60
MAYORES65Seniors 65 and overMayores de 65
RESIDENTEResidentResidente
PKGPackagePaquete
SERVICIOSESENCIALESEssential servicesServicios esenciales
TICKETINGTicketingTicketing
NOMOSTRARNot displayedNo mostrar

A handful of codes reach the catalog before anyone can name them, harvested from a connection we had no mapping for yet: DIS, HNO, LUX, NOR, OPACAPD, PRU, RFE and one chain-specific code. Each is reached from a single connection. Treat them as opaque and read name for display.

It is a classification, not a product catalog

Unlike a board code, which answers one question, code squeezes four unrelated dimensions into one field:

DimensionCodes
VisibilityPUBLICA, OPACA, NOMOSTRAR
RefundabilityNOREEMBOLSABLE, PARCIALMREEMBOLSABLE
AudienceMAYORES55, MAYORES60, MAYORES65, RESIDENTE
PackagingPKG, SERVICIOSESENCIALES, TICKETING

A rate can be opaque and non-refundable, and only one value fits — which is why OPACANRF exists. Two consequences worth planning for:

  • Do not infer refundability from code. A rate that reads OPACA or MAYORES65 may still be non-refundable. The authoritative source is the cancellationPolicy on the option, not the rate plan, and Quote revalidates it before booking.
  • The distribution is heavily skewed. PUBLICA accounts for roughly half of all mappings and reaches every connection, followed by NOREEMBOLSABLE and OPACA. If you branch on rate plan, those three plus a default is realistic; the rest are long tail.

NOMOSTRAR is not a commercial condition but an instruction: a connection uses it to mark rates that should not be shown. It reaches the catalog from two connections only.

Next Steps

  • Board Codes - The meal plan vocabulary
  • Search Hotels - Where rate plans are returned on each room
  • Quote - Revalidates cancellation before booking