Convenience Fees
PT Kereta Api Indonesia is one of the carriers that include a convenience fee as part of the booking. To be sure if any of the carriers you work with have convenience fees please contact your partnership manager.
The convenience fees are included in the prices you get from the /connections/find endpoint, but info about their amount start to be presented in the subsequent endpoints in the flow: /connections/vacancy, /reservations/create, /reservations/confirm, /reservations/{reservation_id} and /bookings/{booking_id}.
It is mandatory to disclose this fee to the users as part of your booking flow, ideally in the check out page.
Convenience Fee Amount
Read the CONV section in the response from /connections/vacancy endpoint. The fee is always presented as an absolut amount in the currency specified in your request.
"included": [
{
"id": "CONV",
"type": "fees",
"attributes": {
"code": "CONV",
"name": "Convenience Fee",
"component": "Distribusion",
"included_in_price": true,
"amount": 750000
}
}
]Showing Convenience Fee and Ticket Price
In your checkout page you must clearly identify the convenience fee.
- Ticket Price =
total_price-convenience_fee - Convenience Fee =
convenience_fee - Booking Fee = (added by you, if any)
- Total Price =
total_price
API Workflow
- Call the /connections/find endpoint and check the prices normally. These already include the convenience fee, but the response doesn't show the fee amount yet.
- In the /connections/vacancy endpoint the prices also include the convenience fee. The section
CONVwill display the amount of the convenience fee that is already included in thetotal_price. - All subsequent API responses in the flow will show the
total_priceincluding the convenience fee. Besides that the convenience fee amount appears in the /reservations/{reservation_id} and /bookings/{booking_id} endpoints as well. - In the checkout page we recommend you display the convenience fee to the user. At this point, by using the
total_priceinfo the fee will be charged from users as part of their payment.
API Examples
Sample Request to /connections/vacancy
https://api.demo.distribusion.com/retailers/v4/connections/vacancy?currency=IDR&marketing_carrier=JUNK&departure_station=IDBDOBBA&arrival_station=IDJARGBA&departure_time=2025-03-15T11%3A05&arrival_time=2025-03-15T14%3A12&passengers[][pax]=1&passengers[][type]=PNOS&fare_class=FARE-14&retailer_partner_number=222222Sample Response from /connections/vacancy
{
"data": {
"id": "JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12",
"type": "vacancies",
"attributes": {
"vacant": true,
"total_price": 20250000,
"original_price": 20250000
},
"relationships": {
"applied_cards": {
"data": []
},
"fees": {
"data": [
{
"id": "CONV",
"type": "fees"
}
]
},
"ancillary_options": {
"data": []
}
}
},
"jsonapi": {
"version": "1.0"
},
"meta": {
"currency": "IDR"
},
"included": [
{
"id": "CONV",
"type": "fees",
"attributes": {
"code": "CONV",
"name": "Convenience fee",
"component": "distribusion",
"included_in_price": true,
"amount": 750000
}
}
]}
}For more samples responses, check the /connections/vacancy endpoint page.
Sample Request to /reservations/{reservation_id}
https://api.demo.distribusion.com/retailers/v4/reservations/RHSHR6SFSample Response from /reservations/{reservation_id}
{
"data": {
"id": "RHSHR6SF",
"type": "reservations",
"attributes": {
"total_price": 35750000,
"original_price": 35750000,
"state": "confirmed",
"created_at": "2025-02-24T07:51",
"confirmed_at": "2025-02-24T07:56",
"cancelled_at": null,
"failed_at": null,
"processing_started_at": "2025-02-24T07:56",
"processing_deadline": null,
"expires_at": "2025-02-24T07:58",
"terms_version": null,
"title": null,
"first_name": null,
"last_name": null,
"email": null,
"phone": null,
"city": null,
"zip_code": null,
"country_code": null,
"street_and_number": null,
"gender": null,
"country_of_birth": null,
"government_id_type": null,
"marketing_carrier_reservation_ids": [
"ZC98DVR-133"
],
"agent_id": null,
"retailer_booking_number": null
},
"relationships": {
"booking": {
"data": {
"id": "5RS9Tj_bwpyCuGfO-kOjHQ",
"type": "bookings"
}
},
"utm_params": {
"data": null
},
"errors": {
"data": []
},
"reservation_passengers": {
"data": [
{
"id": "R-PNOS-1-JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12",
"type": "reservation_passengers"
},
{
"id": "R-PNOS-2-JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12",
"type": "reservation_passengers"
}
]
},
"applied_cards": {
"data": []
},
"ancillaries": {
"data": []
},
"custom_fields": {
"data": []
}
}
},
"jsonapi": {
"version": "1.0"
},
"meta": {
"locale": "en",
"currency": "IDR"
},
"included": [
{
"id": "R-PNOS-1-JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12",
"type": "reservation_passengers",
"attributes": {
"first_name": "test1",
"last_name": "DT",
"serial_code": null,
"government_id_type": "passport_id",
"nationality": null,
"gender": null,
"country_of_birth": null,
"birthdate": "1996-11-02",
"type": "PNOS",
"seat_number": null
}
},
{
"id": "R-PNOS-2-JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12",
"type": "reservation_passengers",
"attributes": {
"first_name": "test2",
"last_name": "DT",
"serial_code": null,
"government_id_type": "passport_id",
"nationality": null,
"gender": null,
"country_of_birth": null,
"birthdate": "1996-11-20",
"type": "PNOS",
"seat_number": null
}
},
{
"id": "5RS9Tj_bwpyCuGfO-kOjHQ",
"type": "bookings",
"attributes": {
"departure_time": "2025-03-15T11:05",
"arrival_time": "2025-03-15T14:12",
"duration": 11220,
"title": "mr",
"first_name": "test1",
"last_name": "DT",
"email": "test@test.com",
"phone": "+0 123 456 78 90",
"city": "Berlin",
"zip_code": "13355",
"street_and_number": "Wattstrasse 10",
"payment_method": "demand_note",
"payment_token": null,
"payer_id": null,
"tax_id": null,
"vat_number": null,
"business_name": null,
"total_price": 35750000,
"original_price": 35750000,
"marketing_carrier_booking_number": "ZC98DVR",
"pax": 2,
"flight_number": null,
"distribusion_booking_number": "IVXC11",
"marketing_carrier_booking_numbers": [
"ZC98DVR"
],
"terms_accepted": true,
"send_customer_email": true,
"retailer_partner_number": "170886",
"connection_reference": null,
"created_at": "2025-02-24T07:56"
},
"relationships": {
"fare_class": {
"data": {
"id": "JUNK-FARE-14",
"type": "fare_classes"
}
},
"outbound_connection": {
"data": {
"id": "JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12",
"type": "connections"
}
},
"inbound_connection": {
"data": null
},
"amended_by": {
"data": null
},
"result_of_amendment": {
"data": null
},
"segments": {
"data": [
{
"id": "JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12-0",
"type": "segments"
}
]
},
"passengers": {
"data": [
{
"id": "PNOS-1-JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12",
"type": "passengers"
},
{
"id": "PNOS-2-JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12",
"type": "passengers"
}
]
},
"fees": {
"data": [
{
"id": "IVXC11-0-CONV",
"type": "fees"
}
]
},
"applied_cards": {
"data": []
}
}
},
{
"id": "JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12-0",
"type": "segments",
"attributes": {
"departure_time": "2025-03-15T11:05",
"arrival_time": "2025-03-15T14:12",
"original_price": null,
"index": 0,
"vehicle_number": "PARAHYANGAN DEV (133)",
"departure_platform": null,
"line": null,
"line_prefix": null
},
"relationships": {
"departure_station": {
"data": {
"id": "IDBDOBBA",
"type": "stations"
}
},
"arrival_station": {
"data": {
"id": "IDJARGBA",
"type": "stations"
}
},
"operating_carrier": {
"data": {
"id": "JUNK",
"type": "operating_carriers"
}
},
"marketing_carrier": {
"data": {
"id": "JUNK",
"type": "marketing_carriers"
}
},
"vehicle": {
"data": {
"id": "TRAIN-JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12-0",
"type": "vehicles"
}
},
"segment_passengers": {
"data": [
{
"id": "PNOS-1-JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12-0",
"type": "segment_passengers"
},
{
"id": "PNOS-2-JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12-0",
"type": "segment_passengers"
}
]
},
"ancillaries": {
"data": []
}
}
},
{
"id": "PNOS-1-JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12-0",
"type": "segment_passengers",
"attributes": {
"seat_number": "EKS-1,4A",
"marketing_carrier_passenger_id": null
},
"relationships": {
"passenger": {
"data": {
"id": "PNOS-1-JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12",
"type": "passengers"
}
},
"ticket": {
"data": null
},
"applied_cards": {
"data": []
},
"ancillaries": {
"data": []
}
}
},
{
"id": "PNOS-2-JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12-0",
"type": "segment_passengers",
"attributes": {
"seat_number": "EKS-1,4B",
"marketing_carrier_passenger_id": null
},
"relationships": {
"passenger": {
"data": {
"id": "PNOS-2-JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12",
"type": "passengers"
}
},
"ticket": {
"data": null
},
"applied_cards": {
"data": []
},
"ancillaries": {
"data": []
}
}
},
{
"id": "PNOS-1-JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12",
"type": "passengers",
"attributes": {
"first_name": "test1",
"last_name": "DT",
"serial_code": "CONNEC8055ZC98DVR1",
"type": "PNOS"
}
},
{
"id": "PNOS-2-JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12",
"type": "passengers",
"attributes": {
"first_name": "test2",
"last_name": "DT",
"serial_code": "CONNEC8055ZC98DVR2",
"type": "PNOS"
}
},
{
"id": "JUNK-FARE-14",
"type": "fare_classes",
"attributes": {
"code": "FARE-14",
"name": "Executive - I",
"iata_category": null,
"journey_type": "single"
},
"relationships": {
"post_booking_condition": {
"data": null
},
"fare_features": {
"data": [
{
"id": "JUNK-ACON",
"type": "fare_features"
},
{
"id": "JUNK-PSOC",
"type": "fare_features"
},
{
"id": "JUNK-ALRO",
"type": "fare_features"
},
{
"id": "JUNK-RARM",
"type": "fare_features"
},
{
"id": "JUNK-MSYS",
"type": "fare_features"
},
{
"id": "JUNK-TOIL",
"type": "fare_features"
},
{
"id": "JUNK-CCTV",
"type": "fare_features"
},
{
"id": "JUNK-TABN",
"type": "fare_features"
},
{
"id": "JUNK-NREF",
"type": "fare_features"
}
]
},
"ticket_validity_rules": {
"data": [
{
"id": "JUNK-FARE-14-TICKET_VALIDITY_RULE-0",
"type": "ticket_validity_rules"
}
]
},
"passenger_group_rules": {
"data": [
{
"id": "JUNK-FARE-14-PASSENGER_GROUP_RULE-0",
"type": "passenger_group_rules"
},
{
"id": "JUNK-FARE-14-PASSENGER_GROUP_RULE-1",
"type": "passenger_group_rules"
},
{
"id": "JUNK-FARE-14-PASSENGER_GROUP_RULE-2",
"type": "passenger_group_rules"
}
]
}
}
},
{
"id": "JUNK-ACON",
"type": "fare_features",
"attributes": {
"code": "ACON",
"name": "Air Conditioning",
"description": "The vehicle has a cooling ventilation system."
}
},
{
"id": "JUNK-PSOC",
"type": "fare_features",
"attributes": {
"code": "PSOC",
"name": "Power Socket",
"description": "Power supply is available at every seat."
}
},
{
"id": "JUNK-ALRO",
"type": "fare_features",
"attributes": {
"code": "ALRO",
"name": "Additional Leg Room",
"description": "The seat has additional leg space."
}
},
{
"id": "JUNK-RARM",
"type": "fare_features",
"attributes": {
"code": "RARM",
"name": "Reclining armchairs",
"description": "Comfortable armchairs are available on board."
}
},
{
"id": "JUNK-MSYS",
"type": "fare_features",
"attributes": {
"code": "MSYS",
"name": "Media System",
"description": "A media system is available on board."
}
},
{
"id": "JUNK-TOIL",
"type": "fare_features",
"attributes": {
"code": "TOIL",
"name": "Toilet",
"description": "A toilet is available on board."
}
},
{
"id": "JUNK-CCTV",
"type": "fare_features",
"attributes": {
"code": "CCTV",
"name": "24/7 monitoring room/ CCTV",
"description": "24/7 monitoring room/ CCTV"
}
},
{
"id": "JUNK-TABN",
"type": "fare_features",
"attributes": {
"code": "TABN",
"name": "Table seat included",
"description": "Table seat included"
}
},
{
"id": "JUNK-NREF",
"type": "fare_features",
"attributes": {
"code": "NREF",
"name": "Non-refundable",
"description": "The ticket cannot be refunded."
}
},
{
"id": "JUNK-FARE-14-TICKET_VALIDITY_RULE-0",
"type": "ticket_validity_rules",
"attributes": {
"rule_type": "outbound",
"reference_time_type": "departure_time",
"use_type": "once",
"offset_type": "minutes",
"duration_type": "minutes",
"offset": 0,
"duration": 0
}
},
{
"id": "JUNK-FARE-14-PASSENGER_GROUP_RULE-0",
"type": "passenger_group_rules",
"attributes": {
"rule_type": "passengers_type_requires_passengers_types",
"description": "1A-1F"
},
"relationships": {
"parameters": {
"data": [
{
"id": "JUNK-FARE-14-PASSENGER_GROUP_RULE-0-PARAMETER-0",
"type": "passenger_group_rule_parameters"
},
{
"id": "JUNK-FARE-14-PASSENGER_GROUP_RULE-0-PARAMETER-1",
"type": "passenger_group_rule_parameters"
}
]
}
}
},
{
"id": "JUNK-FARE-14-PASSENGER_GROUP_RULE-1",
"type": "passenger_group_rules",
"attributes": {
"rule_type": "passengers_type_ratio",
"description": "1A-1F"
},
"relationships": {
"parameters": {
"data": [
{
"id": "JUNK-FARE-14-PASSENGER_GROUP_RULE-1-PARAMETER-0",
"type": "passenger_group_rule_parameters"
},
{
"id": "JUNK-FARE-14-PASSENGER_GROUP_RULE-1-PARAMETER-1",
"type": "passenger_group_rule_parameters"
},
{
"id": "JUNK-FARE-14-PASSENGER_GROUP_RULE-1-PARAMETER-2",
"type": "passenger_group_rule_parameters"
}
]
}
}
},
{
"id": "JUNK-FARE-14-PASSENGER_GROUP_RULE-2",
"type": "passenger_group_rules",
"attributes": {
"rule_type": "max_passengers",
"description": "max_passenger"
},
"relationships": {
"parameters": {
"data": [
{
"id": "JUNK-FARE-14-PASSENGER_GROUP_RULE-2-PARAMETER-0",
"type": "passenger_group_rule_parameters"
}
]
}
}
},
{
"id": "JUNK-FARE-14-PASSENGER_GROUP_RULE-0-PARAMETER-0",
"type": "passenger_group_rule_parameters",
"attributes": {
"name": "dependent_passengers_types",
"value": [
"PINT"
]
}
},
{
"id": "JUNK-FARE-14-PASSENGER_GROUP_RULE-0-PARAMETER-1",
"type": "passenger_group_rule_parameters",
"attributes": {
"name": "required_passengers_types",
"value": [
"PNOS"
]
}
},
{
"id": "JUNK-FARE-14-PASSENGER_GROUP_RULE-1-PARAMETER-0",
"type": "passenger_group_rule_parameters",
"attributes": {
"name": "ratio_from_types",
"value": [
"PINT"
]
}
},
{
"id": "JUNK-FARE-14-PASSENGER_GROUP_RULE-1-PARAMETER-1",
"type": "passenger_group_rule_parameters",
"attributes": {
"name": "ratio_to_types",
"value": [
"PNOS"
]
}
},
{
"id": "JUNK-FARE-14-PASSENGER_GROUP_RULE-1-PARAMETER-2",
"type": "passenger_group_rule_parameters",
"attributes": {
"name": "ratio",
"value": 1
}
},
{
"id": "JUNK-FARE-14-PASSENGER_GROUP_RULE-2-PARAMETER-0",
"type": "passenger_group_rule_parameters",
"attributes": {
"name": "passengers_limit",
"value": 8
}
},
{
"id": "IVXC11-0-CONV",
"type": "fees",
"attributes": {
"code": "CONV",
"name": "Convenience fee",
"component": "distribusion",
"included_in_price": true,
"amount": 750000
}
},
{
"id": "JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12",
"type": "connections",
"attributes": {
"departure_time": "2025-03-15T11:05",
"arrival_time": "2025-03-15T14:12"
},
"relationships": {
"departure_station": {
"data": {
"id": "IDBDOBBA",
"type": "stations"
}
},
"arrival_station": {
"data": {
"id": "IDJARGBA",
"type": "stations"
}
},
"marketing_carrier": {
"data": {
"id": "JUNK",
"type": "marketing_carriers"
}
},
"segments": {
"data": [
{
"id": "JUNK-IDBDOBBA-IDJARGBA-2025-03-15T11:05-2025-03-15T14:12-0",
"type": "segments"
}
]
},
"fees": {
"data": []
}
}
}
]
}For more samples responses, check the /reservations/{reservation_id} endpoint page.
What made this section unhelpful for you?
On this page
- Convenience Fees