> For the complete documentation index, see [llms.txt](https://docs.guestlogix.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.guestlogix.io/traveler/mobile-sdks/stripe-payment-sdk/booking-form.md).

# Booking Form

Generally, [bookable products](/traveler/payments.md#payment-strategies) require some information about the user and or the individuals attending. Once the user has selected all the passes they are interested in, you must fetch a  `BookingForm` and provide an interface for the user to complete this form.

Note that the `Pass`es in the arguments is a flattened array of `Pass`es. For example if the user requires two of a single pass (i.e. two adult passes) then the array holds two of the same `Pass` type.

{% tabs %}
{% tab title="iOS" %}

```swift
Traveler.fetchBookingForm(product: catalogItemDetails,
                           passes: selectedPasses) { (form, error) in

}
```

Alternatively you can use the delegate pattern

```swift
Traveler.fetchBookingForm(product: catalogItemDetails,
                           passes: selectedPasses,
                         delegate: self)
```

```swift
extension MyViewController: BookingFormFetchDelegate {
    func bookingFormFetchDidFailWith(_ error: Error) {
    
    }
    
    func bookingFormFetchDidSucceedWith(_ bookingForm: BookingForm) {
    
    }
}
```

{% endtab %}

{% tab title="Android" %}

```java
Traveler.fetchBookingForm(catalogItemDetail, passes, new FetchBookingFormCallback() {
    @Override
    void onBookingFormFetchSuccess(BookingForm bookingForm) {
    
    }
    
    @Override
    void onBookingFormFetchError(Error error) {
    
    }
});
```

{% endtab %}
{% endtabs %}
