blob: c44387854a332ec330e5701d50a739d7c2343254 [file] [log] [blame]
// API v3 public interface declaration
syntax = "proto3";
package ext.maps.booking.partner.v3;
// +------+------------------------------+----------------------------------+
// | Verb | HTTP Path | Request/Response Body |
// +------+------------------------------+----------------------------------+
// | GET | /v3/HealthCheck | - |
// | | | - |
// +------+------------------------------+----------------------------------+
// | POST | /v3/CheckAvailability | CheckAvailabilityRequest |
// | | | CheckAvailabilityResponse |
// +------+------------------------------+----------------------------------+
// | POST | /v3/CreateBooking | CreateBookingRequest |
// | | | CreateBookingResponse |
// +------+------------------------------+----------------------------------+
// | POST | /v3/UpdateBooking | UpdateBookingRequest |
// | | | UpdateBookingResponse |
// +------+------------------------------+----------------------------------+
// | POST | /v3/GetBookingStatus | GetBookingStatusRequest |
// | | | GetBookingStatusResponse |
// +------+------------------------------+----------------------------------+
// | POST | /v3/ListBookings | ListBookingsRequest |
// | | | ListBookingsResponse |
// +------+------------------------------+----------------------------------+
// | POST | /v3/CheckOrderFulfillability | CheckOrderFulfillabilityRequest |
// | | | CheckOrderFulfillabilityResponse |
// +------+------------------------------+----------------------------------+
// | POST | /v3/CreateOrder | CreateOrderRequest |
// | | | CreateOrderResponse |
// +------+------------------------------+----------------------------------+
// | POST | /v3/ListOrders | ListOrdersRequest |
// | | | ListOrdersResponse |
// +------+------------------------------+----------------------------------+
// CheckAvailability method
// Request to check availability for a Slot.
message CheckAvailabilityRequest {
// The appointment slot that is being checked (required)
Slot slot = 1;
}
// Response for the CheckAvailability RPC with the availability of the
// appointment slot.
message CheckAvailabilityResponse {
// The requested slot. (required)
Slot slot = 1;
// Number of available spots.
// 0 indicates that the appointment slot is not available. (required)
int32 count_available = 2;
// This enum indicates what requirements exist for the user to acknowledge or
// view the requested slots duration/end time.
enum DurationRequirement {
// The handling of the end time is not specified. This is the default.
DURATION_REQUIREMENT_UNSPECIFIED = 0;
// The end time is not shown to the user.
DO_NOT_SHOW_DURATION = 1;
// The end time has to be shown to the user before an appointment can be
// made.
MUST_SHOW_DURATION = 2;
}
// The requirement to show the slots duration and/or endtime. This field will
// be ignored if the slot is unavailable. (optional)
DurationRequirement duration_requirement = 3;
// Optionally, the partner can return additional updated information about the
// availability for this merchant if this information is present when
// responding to the CheckAvailabilityRequest and if there is no negative
// impact on the CheckAvailability request latency.
// For instance an entire day of merchant availability for a superset of
// resources can be returned here.
AvailabilityUpdate availability_update = 4;
}
// An update to one ore more slots indicating that the availability for the
// associated time has potentially changed.
message AvailabilityUpdate {
repeated SlotAvailability slot_availability = 1;
}
// An inventory slot and associated count of open spots.
message SlotAvailability {
Slot slot = 1;
// Number of available spots.
// 0 indicates that the appointment slot is not available. (required)
int32 count_available = 2;
}
// CheckOrderFulfillability method
// Request to check the fulfillability of an order.
message CheckOrderFulfillabilityRequest {
// The merchant that this order is intended for. (required)
string merchant_id = 1;
// The line items in this order. All services requested must belong to the
// specified merchant. (required)
repeated LineItem item = 2;
}
// Response for the CheckOrderfulfillabilityRequest.
message CheckOrderFulfillabilityResponse {
// Fulfillability status of the order, potentially contains updated
// availabilities and prices of the requested line item. (required)
OrderFulfillability fulfillability = 1;
// Total processing fees & taxes that need to be paid for this order.
// (required)
Price fees_and_taxes = 2;
}
// GetBookingStatus method
// Request to get booking status and prepayment status for a Booking.
message GetBookingStatusRequest {
// ID of the existing booking (required)
string booking_id = 1;
}
// Response for the GetBookingStatus RPC with booking status and prepayment
// status.
message GetBookingStatusResponse {
// ID of the booking (required)
string booking_id = 1;
// Status of the booking (required)
BookingStatus booking_status = 2;
// Prepayment status of the booking (required)
PrepaymentStatus prepayment_status = 3;
}
// CreateBooking method
// Request to create a Booking for an inventory slot. Consumes the lease if
// provided.
message CreateBookingRequest {
// The inventory slot that is being requested to make this booking.
// If lease_ref is provided, slot must match the lease; slot is provided for
// the partner to verify the lease information.
// If lease_ref is absent, then create the booking for the slot. (required)
Slot slot = 1;
// The lease that is being confirmed to make this booking.
// If lease_ref is provided, then create the booking using the lease.
// (optional)
LeaseReference lease_ref = 2;
// Personal information of the user making the appointment (required)
UserInformation user_information = 3;
// Information about payments. When payment authorizations are handled by
// Google, if the booking request does not succeed, payment authorizations are
// automatically canceled. (optional)
PaymentInformation payment_information = 4;
// The parameters to be used if the payment is processed by the partner
// (i.e. payment_information.payment_processed_by is equal to
// PROCESSED_BY_PARTNER). (optional)
PaymentProcessingParameters payment_processing_parameters =
5;
// Idempotency token for CreateBooking requests. (required)
string idempotency_token = 6;
// A string from the user which contains any special requests or additional
// information that they would like to notify the merchant about. (optional)
string additional_request = 7;
}
// Response with the created Booking for an inventory slot.
message CreateBookingResponse {
// The created booking (required)
Booking booking = 1;
// The updated user payment option used in this booking.
// If a new payment option was purchased to pay for the booking, this should
// be a newly created user payment option.
// If an already purchased user payment option was used for this booking,
// this should reflect an updated version of that user payment option.
// (optional)
UserPaymentOption user_payment_option = 2;
// If creating a booking fails, this field should reflect the business logic
// error (e.g., slot has become unavailable) and all other fields in the
// CreateBookingResponse message are expected to be unset. (required if
// failure occurs)
BookingFailure booking_failure = 3;
}
// CreateLease method
// Request to create a Lease for a slot in the inventory. The expiration time
// in the returned Lease may be modified by the backend, e.g. if the requested
// lease period is too long.
message CreateLeaseRequest {
// The lease to be created with information about the appointment slot
// (required)
Lease lease = 1;
}
// Response for the CreateLease RPC with the created Lease.
message CreateLeaseResponse {
// The created Lease (required)
Lease lease = 1;
// If creating a lease fails, this field should reflect the business logic
// error (e.g., slot has become unavailable) and lease field is expected to be
// unset. (required if failure occurs)
BookingFailure booking_failure = 2;
}
// Temporary lease for an inventory slot
message Lease {
// ID of the lease.
// Not populated in CreateLeaseRequest. The value is chosen by the partner and
// has to be returned in the response of CreateLease. (required)
string lease_id = 1;
// The appointment slot that the lease is created for. (required)
Slot slot = 2;
// Unique identifier for this lease, chosen by Reserve with Google. Serves as
// an idempotency token for CreateLease requests. (required)
string user_reference = 3;
// Expiration time of the lease in UTC Timestamp (required)
int64 lease_expiration_time_sec = 4;
}
// Reference to a Lease that has been created via CreateLease.
message LeaseReference {
// Lease ID (required)
string lease_id = 1;
}
// CreateOrder method
// Request to create an order.
message CreateOrderRequest {
// The order to create. (required)
Order order = 1;
// The parameters to be used if the payment is processed by the partner
// (i.e. order.payment_information.payment_processed_by is equal to
// PROCESSED_BY_PARTNER). (required if payment is processed by the partner)
PaymentProcessingParameters payment_processing_parameters = 2;
// Idempotency token for CreateOrder requests. (required)
string idempotency_token = 3;
}
// Response for the CreateOrderRequest.
message CreateOrderResponse {
// All line items in an order either fail or succeed together.
// This means that if some of the items cannot be fulfilled, the entire
// order must fail, the booking must not be made for any item, and the user
// must not be charged.
oneof result {
// The order created.
Order order = 1;
// If creating an order fails, this field should reflect the business logic
// error (e.g., slot has become unavailable or price has changed).
OrderFailure order_failure = 2;
}
}
// ListBookings method
// Request to list all bookings for a user
message ListBookingsRequest {
// ID of the user (required)
string user_id = 1;
}
// Response for the ListBookings RPC with all bookings for the requested user.
message ListBookingsResponse {
// All bookings of the user (required)
repeated Booking bookings = 1;
}
// ListOrders method
// Request to list orders.
message ListOrdersRequest {
message OrderIds {
repeated string order_id = 1;
}
// Request of orders either by user ID, or by order ID.
oneof ids {
// If set, return all orders belong to the user.
string user_id = 1;
// If set, return the specified orders.
OrderIds order_ids = 2;
}
}
// Response for the ListOrders RPC.
message ListOrdersResponse {
// All requested orders (required)
repeated Order order = 1;
}
// UpdateBooking method
// Request to update a Booking.
message UpdateBookingRequest {
// The booking to be updated
// The following fields can be set in a booking:
// - status, to cancel a booking.
// - start_time and duration in the slot, to reschedule a booking. (required)
Booking booking = 1;
}
// Response with the updated Booking.
message UpdateBookingResponse {
// The updated booking (required)
Booking booking = 1;
// The updated user payment option originally used to pay for this booking.
// This should be set if the UpdateBookingRequest results in a change to
// the UserPaymentOption.
// For instance, if the booking is canceled, the UserPaymentOption should
// reflect an additional credit to the user. In the case of a multi-use
// payment option, the current_count should be increased by one to
// allow the user to create another booking with this payment option. In the
// case of a single-use payment option, a new single-use user payment option
// should be returned. (required if altered in update)
UserPaymentOption user_payment_option = 2;
// If updating a booking fails, this field should reflect the business logic
// error (e.g., booking is not cancellable) (required if failure occurs)
BookingFailure booking_failure = 3;
}
// Booking specification
// A booking for an inventory slot
message Booking {
// ID of this booking (required)
string booking_id = 1;
// The appointment slot of this booking (required)
Slot slot = 2;
// Personal information of the user making the appointment (required)
UserInformation user_information = 3;
// Status of the booking (required)
BookingStatus status = 4;
// Information about payment transactions that relate to the booking.
// (optional)
PaymentInformation payment_information = 5;
}
// BookingStatus specification
// Status of a booking.
//
// Updating booking status does not change the status of the associated payment.
// Prepayment status updates should be done using the PrepaymentStatus enum.
//
// nextID: 6
enum BookingStatus {
// Not specified.
BOOKING_STATUS_UNSPECIFIED = 0;
// Booking has been confirmed
CONFIRMED = 1;
// Booking is awaiting confirmation by the merchant before it can transition
// into CONFIRMED status
PENDING_MERCHANT_CONFIRMATION = 2;
// Booking has been canceled on behalf of the user.
// The merchant can still trigger a manual refund.
CANCELED = 3;
// User did not show for the appointment
NO_SHOW = 4;
// User did not show for the appointment in violation of the cancellation
// policy.
NO_SHOW_PENALIZED = 5;
}
// BookingFailure specification
// Status data that conveys why (1) creating a lease or (2) creating or updating
// a booking fails.
// BookingFailure is intended to primarily capture business logic errors.
message BookingFailure {
enum Cause {
// Default value: Don't use; amounts to an "unknown error"
CAUSE_UNSPECIFIED = 0;
// The referenced availability slot is not available any longer.
SLOT_UNAVAILABLE = 1;
// The user has already booked an appointment for the referenced
// availability slot.
SLOT_ALREADY_BOOKED_BY_USER = 2;
// The lease (if provided) has expired and cannot be used any longer to
// complete the requested booking.
LEASE_EXPIRED = 3;
// The requested cancellation cannot be performed at the current time due
// to time restrictions in the merchant's cancellation policy.
OUTSIDE_CANCELLATION_WINDOW = 4;
// An error was encountered while processing the payment because the
// provided credit card type was not accepted by the merchant. The credit
// card type must be supplied in rejected_card_type.
PAYMENT_ERROR_CARD_TYPE_REJECTED = 5;
// An error was encountered while processing the payment because the
// provided credit card was declined.
PAYMENT_ERROR_CARD_DECLINED = 6;
// An error was encountered with the pack/membership used to pay for the
// booking. There could be no valid uses left, it could have expired, etc.
PAYMENT_OPTION_NOT_VALID = 7;
// An error was encountered while processing the payment for this booking.
// Use this value to indicate a general payment related error, only if the
// error does not match to a specific payment error above.
PAYMENT_ERROR = 8;
// User cannot use the given payment option (e.g. user trying to use a
// first time price for the second time).
USER_CANNOT_USE_PAYMENT_OPTION = 9;
// A booking that the user tried to cancel has already been cancelled.
BOOKING_ALREADY_CANCELLED = 10;
// A booking that the user tried to cancel is not cancellable.
BOOKING_NOT_CANCELLABLE = 11;
// User has an existing reservation too close to this time.
OVERLAPPING_RESERVATION = 12;
}
// The reason why the booking failed. (required)
Cause cause = 1;
// (required only if cause is PAYMENT_ERROR_CARD_TYPE_REJECTED)
CreditCardType rejected_card_type = 2;
// This optional field is used for the partner to include additional
// information for debugging purpose only. (optional)
string description = 3;
}
// Used when booking/order failure cause is PAYMENT_ERROR_CARD_TYPE_REJECTED to
// indicate the type of credit card that was rejected.
enum CreditCardType {
// Default value. Used if credit card type does not match to one below.
CREDIT_CARD_TYPE_UNSPECIFIED = 0;
VISA = 1;
MASTERCARD = 2;
AMERICAN_EXPRESS = 3;
DISCOVER = 4;
}
// Order specification
// An order for service appointments with a merchant.
message Order {
// ID of this Order, chosen by the booking partner who handles the order
// (required in CreateOrderResponse and ListOrdersResponse, must not be set in
// CreateOrderRequest)
string order_id = 1;
// Personal information of the user making the order (required)
UserInformation user_information = 2;
// Information about payment transactions that relate to the Order.
// (optional)
PaymentInformation payment_information = 3;
// The merchant that all services in this Order belong to.
string merchant_id = 4;
// Line items in this order.
repeated LineItem item = 5;
}
// A single item in an Order--the booking of a single service in a single time
// slot.
message LineItem {
// ID of the merchant Service. (required)
string service_id = 1;
// Start time of the appointment slot in seconds of UTC time since Unix epoch.
// (required)
int64 start_sec = 2;
// Duration of the appointment slot in seconds. (required)
int64 duration_sec = 3;
message OrderedTickets {
string ticket_id = 1;
int32 count = 2;
}
// Number of tickets ordered by Ticket Type.
repeated OrderedTickets tickets = 4;
// In handling CreateOrderRequest and CheckOrderFulfillabilityRequest,
// the total price (excluding taxes) of the item must be verified to guard
// against price changes. In CreateOrderResponse and
// CheckOrderFulfillabilityResponse, the price should be updated to the
// correct value if the value from the request was incorrect or outdated.
// (reqired)
Price price = 5;
// Status of the Line Item. (required in CreateOrderResponse and
// ListOrdersResponse; should not be set in requests)
BookingStatus status = 6;
}
// Status data that conveys why creating an order fails.
// OrderFailure is intended to primarily capture business logic errors.
message OrderFailure {
enum Cause {
// Default value: Don't use; amounts to an "unknown error"
CAUSE_UNSPECIFIED = 0;
// The order is no longer fulfillable.
ORDER_UNFULFILLABLE = 1;
// An error was encountered while processing the payment because the
// provided credit card type was not accepted by the merchant. The credit
// card type must be supplied in rejected_card_type.
PAYMENT_ERROR_CARD_TYPE_REJECTED = 2;
// An error was encountered while processing the payment because the
// provided credit card was declined.
PAYMENT_ERROR_CARD_DECLINED = 3;
// An error was encountered while processing the payment for this order.
// Use this value to indicate a general payment related error, only if the
// error does not match to a specific payment error above.
PAYMENT_ERROR = 4;
}
// The reason why the order failed. (required)
Cause cause = 1;
// (required only if cause is ORDER_UNFULFILLABLE)
OrderFulfillability fulfillability = 2;
// (required only if cause is PAYMENT_ERROR_CARD_TYPE_REJECTED)
CreditCardType rejected_card_type = 3;
// This optional field is used for the partner to include additional
// information for debugging purpose only. (optional)
string description = 4;
}
// OrderFulfillability specification
message OrderFulfillability {
// The result of an order fulfillability check.
enum OrderFulfillabilityResult {
// Default value: Don't use.
ORDER_FULFILLABILITY_RESULT_UNSPECIFIED = 0;
// The order can be fulfilled.
CAN_FULFILL = 1;
// The order cannot be fulfilled due to one or more unfulfillable line
// item(s).
UNFULFILLABLE_LINE_ITEM = 2;
// The combination of the line items requested cannot be fulfilled.
UNFULFILLABLE_SERVICE_COMBINATION = 3;
// The order cannot be fulfilled due to reasons that do not fall into the
// categories above.
ORDER_UNFULFILLABLE_OTHER_REASON = 4;
}
OrderFulfillabilityResult result = 1;
// Fulfillability results of all line items in this order (required).
repeated LineItemFulfillability item_fulfillability = 2;
// Additional description of the reason if the item is unfulfillable.
// (optional)
string unfulfillable_reason = 3;
}
// Fulfillability of a line item.
message LineItemFulfillability {
// The line item of question. (required)
LineItem item = 1;
// The result of a line item fulfillability check.
enum ItemFulfillabilityResult {
// Default value: Don't use.
ITEM_FULFILLABILITY_RESULT_UNSPECIFIED = 0;
// This line item can be fulfilled.
CAN_FULFILL = 1;
// No adequate availability for the slot requested.
SLOT_UNAVAILABLE = 2;
// The combination of ticket types requested cannot be fulfilled.
UNFULFILLABLE_TICKET_COMBINATION = 3;
// The total price of this line item is not correct.
INCORRECT_PRICE = 4;
// The line item cannot be fulfilled for reasons that do not fall into
// the categories above.
ITEM_UNFULFILLABLE_OTHER_REASON = 5;
}
// (required)
ItemFulfillabilityResult result = 2;
// Additional description of the reason if the item is unfulfillable.
// (optional)
string unfulfillable_reason = 3;
// Updated availability for this slot can be piggybacked in
// CheckOrderFulfillabilityResponse.
message UpdatedAvailability {
// Number of available spots for the given slot. 0 indicates no
// availability. (required)
int32 spots_open = 1;
}
// (optional)
UpdatedAvailability availability = 4;
// Updated ticket types can be piggybacked in
// CheckOrderFulfillabilityResponse. If non-empty, all available ticket types
// for this slot with up-to-date prices should be listed without omitting any.
// (optional)
repeated TicketType ticket_type = 5;
}
// TicketType is used to differentiate among tickets (where a ticket can be a
// spot on a raft trip, an admission to a museum, etc.) with different prices
// and/or availabilities due to different user types or different service
// attributes.
message TicketType {
// The ticket id is used to differentiate among different ticket types of the
// same service, and is only expected to be unique within a service.
string ticket_type_id = 1;
// This can be user visible, e.g., “adult”, "child", “veteran”, “Row J”, etc.
string short_description = 2;
// The price of a single ticket of this type, exclusive of any taxes. The tax
// rate of Service is applied to its tickets.
Price price = 3;
}
// Other specifications
// Resource specification that disambiguates an appointment slot
message ResourceIds {
// The staff ID as provided in the feed or empty if not applicable or no staff
// was selected. (optional)
string staff_id = 1;
// The room ID as provided in the feed or empty if not applicable or no room
// was selected. (optional)
string room_id = 2;
// For Dining Reservations only: the number of seats requested in the booking.
// (optional)
int32 party_size = 3;
}
// Payment specification
message PaymentProcessingParameters {
enum PaymentProcessor {
PAYMENT_PROCESSOR_UNSPECIFIED = 0;
PROCESSOR_STRIPE = 1;
PROCESSOR_BRAINTREE = 2;
}
// The payment processor used to process payment for a given booking.
// (required)
//
// Replaced by the payment_processor field.
PaymentProcessor processor = 1 [deprecated = true];
// The token representing the payment method that will be used to pay
// for this booking. This token can be only used once. This token can be
// only used for the merchant associated with this booking.
//
// Each processor may choose its own format for this field.
// An example of Stripe's token is "tok_1C3orL2eZvKYlo2CxReMgS4K".
//
// Replaced by unparsed_payment_method_token, which contains
// payment_method_token as one of its fields.
// For example, for Stripe, unparsed_payment_method_token is a serialized
// JSON object documented at https://stripe.com/docs/api#token_object.
// payment_method_token is the 'id' field parsed out of that.
string payment_method_token = 2 [deprecated = true];
// The full token received from Google Payments. This is typically a
// serialized JSON object. See documentation from Google Payments and your
// payment processor for the JSON format of the token for your processor.
// https://developers.google.com/pay/api/#participating-google-pay-processors
//
// This token can only be used once, and only for the merchant associated with
// this booking.
string unparsed_payment_method_token = 5;
// The payment processor API version that the given payment token is valid
// for.
//
// Each processor may choose its own format for this field.
// Stripe uses a date (e.g. "2017-06-15"). (required)
string version = 3;
// The payment processor whose configuration was used to generate this token.
// (required)
string payment_processor = 4;
}
enum PaymentOptionType {
PAYMENT_OPTION_TYPE_UNSPECIFIED = 0;
PAYMENT_OPTION_SINGLE_USE = 1;
PAYMENT_OPTION_MULTI_USE = 2;
PAYMENT_OPTION_UNLIMITED_USE = 3;
}
// This describes a payment option, such as a pack, membership, or
// single-session pass after it has been purchased by a user. It includes an
// identifier for the user payment option, as well as some information about
// the payment option with which it is associated.
message UserPaymentOption {
// A unique identifier for the user payment option. This Id MUST be unique
// for all UserPaymentOptions across all merchants and users. (required)
string user_payment_option_id = 1;
// The user payment option will be valid (usable) between start_time and
// end_time set in UTC. Attempts to use a user payment option to make a
// booking outside of this interval will fail. (both optional)
int64 valid_start_time_sec = 2;
int64 valid_end_time_sec = 3;
// The type of the payment option associated with this user payment option.
// This can be unlimited for a membership or subscription, multi-use for a
// pack, or single-use. (required)
PaymentOptionType type = 4;
// The original number of uses for this user payment option when it was
// purchased. This value is ignored for unlimited payment options. (required)
int32 original_count = 5;
// The number of uses remaining for this user payment option. If this number
// is 0 for a pack, attempts to use this payment option to make a booking will
// fail. (required)
int32 current_count = 6;
// The id of the payment option that has been used to purchase this user
// payment option. (required)
string payment_option_id = 7;
}
// Payment details that are sent when creating a new booking.
message PaymentInformation {
// Prepayment status of the booking.
// If the prepayment_status is PREPAYMENT_PROVIDED, then
// payment_transaction_id contains the associated unique transaction id for
// the purchase.
// If the prepayment status is PREPAYMENT_REFUNDED, then
// payment_transaction_id contains the associated unique transaction id for
// the refund. (required)
PrepaymentStatus prepayment_status = 1;
// Unique identifier for a payment transaction associated with the booking.
// If the payment is PROCESSED_BY_GOOGLE, this field will be set by Google.
// If the payment is PROCESSED_BY_PARTNER, this field will be left empty in
// Google's CreateBooking or CreateOrder requests to the partner, and it must
// be set by the partner in their responses.
string payment_transaction_id = 2;
// These fields must match the service price (specified in the Services feed)
// or the PaymentOption corresponding with this service.
// They are included in the booking request and response to verify that
// the price indicated in the feed has not changed since the last feed
// update.
//
// The price of the booking or order, exclusive of any taxes.
// Existence of price or taxes does not imply that they have been paid,
// prepayment_state should be used for that purpose. (required)
Price price = 3;
// Taxes that are calculated to be paid for this booking.
// This field can only be absent in one of the following cases:
// (1) the price is exempt from or already inclusive of applicable taxes; or
// (2) the break down between taxes and fees is not available.
// (required when neither of the above holds)
Price tax_amount = 4;
// Who handles payment processing?
// If payment is processed by the partner, CreateBooking request will
// include additional parameters (PaymentProcessingParameters) indicating
// the payment method to be used to process the payment.
enum PaymentProcessedBy {
PAYMENT_PROCESSED_BY_UNSPECIFIED = 0;
PROCESSED_BY_GOOGLE = 1;
PROCESSED_BY_PARTNER = 2;
}
// Whether the partner or Google processed the payment. (required)
PaymentProcessedBy payment_processed_by = 5;
// The id of the payment option or user payment option associated with the
// booking.
// If a payment option is purchased as part of a booking, payment_option_id
// will be set with the id of that payment option.
// If an already purchased user payment option is being used to pay for a
// booking, user_payment_option_id will be set with the id of that user
// payment option.
// When included as part of a response proto, the user_payment_option_id
// should be set and must match the UserPaymentOption that is returned in the
// RPC response (e.g. the user_payment_option returned in
// CreateBookingResponse). (one of these required)
oneof payment_id {
// The id of the payment option associated with this booking. If this field
// is populated, price (and tax_amount, if applicable) must be populated as
// well.
string payment_option_id = 6;
// The id of the user payment option used to pay for this booking.
string user_payment_option_id = 7;
}
// Defines how a deposit may be charged to the user. If there is a deposit,
// this field should be set. (optional)
Deposit deposit = 8;
// Defines a no show fee that may be charged to the user. If the user can be
// charged a no show fee, this field should be set. (optional)
NoShowFee no_show_fee = 9;
// Total processing fees & taxes that the user needs to pay for the order;
// only applicable to partners that handle order based booking (e.g., with
// CreateOrder method). (optional)
Price fees_and_taxes = 10;
}
// Prepayment status of a booking.
// Updating payment status will trigger an update on the payment status of the
// associated booking (if applicable).
// Currently, the only supported transition is from PREPAYMENT_PROVIDED to
// PREPAYMENT_REFUNDED, which will initiate a non-reversible refund on the
// associated payment transaction.
enum PrepaymentStatus {
// Not specified, defaults to PREPAYMENT_NOT_PROVIDED.
PREPAYMENT_STATUS_UNSPECIFIED = 0;
// The fee for the booking has been paid in advance.
PREPAYMENT_PROVIDED = 1;
// The fee for the booking has not been paid in advance.
PREPAYMENT_NOT_PROVIDED = 2;
// The fee was previously PREPAYMENT_PROVIDED but has now been refunded.
PREPAYMENT_REFUNDED = 3;
// The fee was previously PREPAYMENT_PROVIDED but now has been credited
// (user given a UserPaymentOption as a voucher for the booking).
// If this is set, the response should also include the updated
// UserPaymentOption.
PREPAYMENT_CREDITED = 4;
}
// The price of a service or a fee.
message Price {
// The price in micro-units of the currency.
// Fractions of smallest currency unit will be rounded using nearest even
// rounding. (e.g. For USD 2.5 cents rounded to 2 cents, 3.5 cents rounded to
// 4 cents, 0.5 cents rounded to 0 cents, 2.51 cents rounded to 3 cents).
// (required)
int64 price_micros = 1;
// The currency of the price that is defined in ISO 4217. (required)
string currency_code = 2;
// An optional and opaque string that identifies the pricing option that is
// associated with the extended price. (optional)
string pricing_option_tag = 3;
}
// Defines how a total price is determined from an availability.
enum PriceType {
// The price is for a fixed amount. This is the default value if the field is
// not set.
FIXED_RATE_DEFAULT = 0;
// The price specified is per person, and the total price is calculated
// according to the party size specified in Resources as
// price_micros * party_size. A PER_PERSON price must be accompanied by a
// party size in the availability resources. If it is not, a party size of one
// is used.
PER_PERSON = 1;
}
// A fee that a user may be charged if they have made a booking but do not
// show up.
message NoShowFee {
// The amount the user may be charged if they do not show up for their
// reservation.
Price fee = 1;
// Defines how the fee is determined from the availability.
PriceType fee_type = 3;
}
// A deposit that the user may be charged or have a hold on their credit card
// for.
message Deposit {
// Deposit amount.
Price deposit = 1;
// Minimum advance cancellation for the deposit.
int64 min_advance_cancellation_sec = 2;
// Defines how the deposit is determined from the availability.
PriceType deposit_type = 3;
}
// Slot specification
// An inventory slot
message Slot {
// ID of the merchant for the slot (required)
string merchant_id = 1;
// ID of the merchant Service (required)
string service_id = 2;
// Start time of the appointment slot in seconds of UTC time since Unix epoch.
// (required)
int64 start_sec = 3;
// Duration of the appointment slot (required)
int64 duration_sec = 4;
// Opaque tag that identifies the availability slot and matches the value
// provided in the availability feed (optional)
string availability_tag = 5;
// The set of resources that disambiguates the appointment slot, e.g. by
// indicating the staff member and room selected by the user (optional)
ResourceIds resources = 6;
}
// User specification
// Personal information about the person making a booking
message UserInformation {
// Unique ID of the user to the partner, chosen by Reserve with Google.
// (required)
string user_id = 1;
// Given name of the user (maximum 40 characters) (required)
string given_name = 2;
// Family name of the user (maximum 40 characters) (required)
string family_name = 3;
// Address of the user (optional)
PostalAddress address = 4;
// Phone number of the user (required)
string telephone = 5;
// Email address of the user (required)
string email = 6;
}
// The postal address for a merchant.
message PostalAddress {
// The country, e.g. "USA". (required)
string country = 1;
// The locality/city, e.g. "Mountain View". (required)
string locality = 2;
// The region/state/province, e.g. "CA". (required)
string region = 3;
// The postal code, e.g. "94043". (required)
string postal_code = 4;
// The street address, e.g. "1600 Amphitheatre Pkwy". (required)
string street_address = 5;
}