Carrier Rate Cards Built

A rate card is one carrier's dated postage price list — a set of weight/zone slabs that says what it costs to send a package through that carrier during a given period.

What a rate card is

Carriers change their postage rates from time to time, and different carriers price by zone as well as by weight. A carrier rate card captures one such price list for one carrier: a name, an effective date range, and a set of slabs — each slab a weight band (optionally scoped to a zone) with a flat charge plus a per-kilogram charge. Because a card is dated, AIR can hold both the current card and a full history of past cards for the same carrier without losing old pricing, and can prepare a future card ahead of the date it takes effect.

Where to find it & who can see it

Open Despatch › Carrier Rate Cards in the left navigation.

Permissions

Viewing the list needs carrier_rate.view (or super administrator). Creating, editing, deleting and duplicating a rate card all need carrier_rate.manage — there is no finer split between them.

Screenshot placeholderThe Carrier Rate Cards list — Carrier, Name, Effective From, Effective To (showing "Ongoing" for an open-ended card), Active icon and Slabs count columns, sorted by Effective From descending, with the Carrier filter open.

Columns

ColumnShows
Carriercarrier.name — the delivery carrier this price list belongs to. Searchable.
nameThe card's own label (e.g. a season or revision name). Searchable, sortable.
Effective Fromeffective_from as a date. Sortable. This is the list's default sort, newest first.
Effective Toeffective_to as a date, or "Ongoing" if the card has no end date. Sortable.
Activeis_active as a boolean icon — see the overlap rule below for what this controls.
SlabsA live count of the card's weight/zone slabs.
created_atDate and time created. Sortable; hidden by default.

Filters

Select Filters to open two filters: Carrier (a select over every delivery carrier) and Active Status (a yes/no/either toggle on is_active). Combine either with the search box, which matches carrier name and card name.

A carrier cannot have two overlapping active cards

Before a card is saved, the console checks every other active card belonging to the same carrier for a date-range clash — a card with no end date is treated as running forever for this check. If the new or edited date range overlaps an existing active card, the save is rejected with an error on the Effective From field: "This date range overlaps an active rate card for this carrier." Switching a card's Active toggle off exempts it from this check, so if you need two candidate cards to coexist temporarily (e.g. while drafting a replacement), keep the one still in draft switched off until its dates are final.

Create or edit a rate card

Select New carrier rate card, or row Edit on an existing one. The form has the card's own fields plus an inline repeater of slabs — there is no separate slabs screen.

  1. Fill in the Rate Card section
    FieldTypeRequiredNotes
    carrier_idSelect (searchable)YesThe delivery carrier this price list belongs to.
    nameTextYesMax 100 characters.
    effective_fromDateYesThe date this card's pricing starts applying.
    effective_toDateNoLeave blank for an open-ended card ("Ongoing" in the list). On edit, the end date cannot be moved before the start date.
    is_activeToggleNoDefaults on. Only active cards are checked for — and can trigger — the overlap rule above.
    notesTextareaNoFree text, full-width.
  2. Add and arrange slabs

    The Add slab repeater builds the card's price table. At least one slab is required; rows can be dragged to reorder, and each row's summary line reads as "zone · min g–max g" as you fill it in.

    FieldTypeRequiredNotes
    zoneTextNoMax 50 characters. Leave blank to mean "all zones."
    min_weight_gramsNumberYesGrams, 2 decimal places. The slab's lower weight bound.
    max_weight_gramsNumberNoGrams, 2 decimal places. Leave blank for no upper limit.
    flat_chargeNumberNo₹, 2 decimal places, defaults to 0. A fixed charge for any package in this slab.
    per_kg_chargeNumberNo₹, 2 decimal places, defaults to 0. Added on top of the flat charge per kilogram of the package's weight.
    sort_orderNumberNoInteger, defaults to 0. Also settable by dragging the row.
  3. Save

    Create or Save submits the card together with its slabs in one go. Both the create and edit forms route through CarrierRateCardService rather than saving directly, so the overlap guard below always runs, and on save the service replaces the card's entire slab set with whatever rows are on the form at that moment — there is no way to update one slab without resubmitting the whole list, and the service silently deletes any slab you removed from the repeater.

Screenshot placeholderThe Carrier Rate Card create/edit form: the "Rate Card" section (Carrier select, Name, Effective From, Effective To, Active toggle, Notes) above the slabs repeater showing several rows with Zone, Min/Max weight, Flat charge, Per-kg charge and drag handles.
A historical card cannot be edited

If a card's effective_to date has already passed, the console still opens its edit form and lets you change fields on screen — but the moment you try to save, the update is refused with "A historical rate card is read-only. Create a new one instead." Nothing about the form visibly warns you beforehand, so if you open an old card expecting to correct it, expect the save to be the point where you're told to use Duplicate or New carrier rate card instead.

Duplicate

Row Duplicate (needs carrier_rate.manage) clones a card's carrier, notes and every slab into a brand-new card on a new date range, without disturbing the source card at all — the fastest way to carry an existing price list forward.

  1. Select Duplicate on the source card

    A small dialog opens asking only for the new card's name (required), effective_from (required) and effective_to (optional).

  2. Confirm

    The new card is created active by default, with the same carrier and notes as the source, and every one of the source's slabs copied across (zone, weight bounds, flat charge, per-kg charge, sort order) exactly as they stood at the moment you duplicated.

  3. If the new range overlaps

    The same overlap guard as create/edit applies — since the duplicate is always created active, a clashing date range against another active card for the same carrier is rejected. A danger notification titled "Cannot duplicate rate card" reports the overlap message and the dialog stays open so you can adjust the dates and try again.

Screenshot placeholderThe Duplicate dialog open on a rate card row, showing the Name, Effective From and Effective To fields, with an example of the "Cannot duplicate rate card" danger notification for an overlapping range.

Deleting a rate card

Row Delete (or the bulk equivalent) needs carrier_rate.manage and removes the card outright — CarrierRateCard does not use soft deletes, so this is permanent. It is not gated by the historical-card lock that applies to edits.

Related pages

See Warehouses & Carriers for the Delivery Carrier master list every rate card belongs to, and Packages for where a package's carrier — and so, indirectly, its applicable rate card — is set.