// Path: src/main/java/com/gocardless/resources/BillingRequestFlow.java
// public class BillingRequestFlow {
//     private BillingRequestFlow() {
//         // blank to prevent instantiation
//     }
// 
//     private String authorisationUrl;
//     private Boolean autoFulfil;
//     private String createdAt;
//     private String exitUri;
//     private String expiresAt;
//     private String id;
//     private Links links;
//     private Boolean lockBankAccount;
//     private Boolean lockCustomerDetails;
//     private String redirectUri;
//     private String sessionToken;
// 
//     /**
//      * URL for a GC-controlled flow which will allow the payer to fulfil the billing request
//      */
//     public String getAuthorisationUrl() {
//         return authorisationUrl;
//     }
// 
//     /**
//      * (Experimental feature) Fulfil the Billing Request on completion of the flow (true by
//      * default). Disabling the auto_fulfil is not allowed currently.
//      */
//     public Boolean getAutoFulfil() {
//         return autoFulfil;
//     }
// 
//     /**
//      * Timestamp when the flow was created
//      */
//     public String getCreatedAt() {
//         return createdAt;
//     }
// 
//     /**
//      * URL that the payer can be taken to if there isn't a way to progress ahead in flow.
//      */
//     public String getExitUri() {
//         return exitUri;
//     }
// 
//     /**
//      * Timestamp when the flow will expire. Each flow currently lasts for 7 days.
//      */
//     public String getExpiresAt() {
//         return expiresAt;
//     }
// 
//     /**
//      * Unique identifier, beginning with "BRF".
//      */
//     public String getId() {
//         return id;
//     }
// 
//     public Links getLinks() {
//         return links;
//     }
// 
//     /**
//      * If true, the payer will not be able to change their bank account within the flow. If the
//      * bank_account details are collected as part of bank_authorisation then GC will set this value
//      * to true mid flow
//      */
//     public Boolean getLockBankAccount() {
//         return lockBankAccount;
//     }
// 
//     /**
//      * If true, the payer will not be able to edit their customer details within the flow. If the
//      * customer details are collected as part of bank_authorisation then GC will set this value to
//      * true mid flow
//      */
//     public Boolean getLockCustomerDetails() {
//         return lockCustomerDetails;
//     }
// 
//     /**
//      * URL that the payer can be redirected to after completing the request flow.
//      */
//     public String getRedirectUri() {
//         return redirectUri;
//     }
// 
//     /**
//      * Session token populated when responding to the initalise action
//      */
//     public String getSessionToken() {
//         return sessionToken;
//     }
// 
//     public static class Links {
//         private Links() {
//             // blank to prevent instantiation
//         }
// 
//         private String billingRequest;
// 
//         /**
//          * ID of the [billing request](#billing-requests-billing-requests) against which this flow
//          * was created.
//          */
//         public String getBillingRequest() {
//             return billingRequest;
//         }
//     }
// }


import com.gocardless.http.*;
import com.gocardless.resources.BillingRequestFlow;
import com.google.common.collect.ImmutableMap;
import java.util.Map;
        }

        /**
         * URL that the payer can be redirected to after completing the request flow.
         */
        public BillingRequestFlowCreateRequest withRedirectUri(String redirectUri) {
            this.redirectUri = redirectUri;
            return this;
        }

        private BillingRequestFlowCreateRequest(HttpClient httpClient) {
            super(httpClient);
        }

        public BillingRequestFlowCreateRequest withHeader(String headerName, String headerValue) {
            this.addHeader(headerName, headerValue);
            return this;
        }

        @Override
        protected String getPathTemplate() {
            return "billing_request_flows";
        }

        @Override
        protected String getEnvelope() {
            return "billing_request_flows";
        }

        @Override
// Path: src/main/java/com/gocardless/resources/BillingRequestFlow.java
// public class BillingRequestFlow {
//     private BillingRequestFlow() {
//         // blank to prevent instantiation
//     }
// 
//     private String authorisationUrl;
//     private Boolean autoFulfil;
//     private String createdAt;
//     private String exitUri;
//     private String expiresAt;
//     private String id;
//     private Links links;
//     private Boolean lockBankAccount;
//     private Boolean lockCustomerDetails;
//     private String redirectUri;
//     private String sessionToken;
// 
//     /**
//      * URL for a GC-controlled flow which will allow the payer to fulfil the billing request
//      */
//     public String getAuthorisationUrl() {
//         return authorisationUrl;
//     }
// 
//     /**
//      * (Experimental feature) Fulfil the Billing Request on completion of the flow (true by
//      * default). Disabling the auto_fulfil is not allowed currently.
//      */
//     public Boolean getAutoFulfil() {
//         return autoFulfil;
//     }
// 
//     /**
//      * Timestamp when the flow was created
//      */
//     public String getCreatedAt() {
//         return createdAt;
//     }
// 
//     /**
//      * URL that the payer can be taken to if there isn't a way to progress ahead in flow.
//      */
//     public String getExitUri() {
//         return exitUri;
//     }
// 
//     /**
//      * Timestamp when the flow will expire. Each flow currently lasts for 7 days.
//      */
//     public String getExpiresAt() {
//         return expiresAt;
//     }
// 
//     /**
//      * Unique identifier, beginning with "BRF".
//      */
//     public String getId() {
//         return id;
//     }
// 
//     public Links getLinks() {
//         return links;
//     }
// 
//     /**
//      * If true, the payer will not be able to change their bank account within the flow. If the
//      * bank_account details are collected as part of bank_authorisation then GC will set this value
//      * to true mid flow
//      */
//     public Boolean getLockBankAccount() {
//         return lockBankAccount;
//     }
// 
//     /**
//      * If true, the payer will not be able to edit their customer details within the flow. If the
//      * customer details are collected as part of bank_authorisation then GC will set this value to
//      * true mid flow
//      */
//     public Boolean getLockCustomerDetails() {
//         return lockCustomerDetails;
//     }
// 
//     /**
//      * URL that the payer can be redirected to after completing the request flow.
//      */
//     public String getRedirectUri() {
//         return redirectUri;
//     }
// 
//     /**
//      * Session token populated when responding to the initalise action
//      */
//     public String getSessionToken() {
//         return sessionToken;
//     }
// 
//     public static class Links {
//         private Links() {
//             // blank to prevent instantiation
//         }
// 
//         private String billingRequest;
// 
//         /**
//          * ID of the [billing request](#billing-requests-billing-requests) against which this flow
//          * was created.
//          */
//         public String getBillingRequest() {
//             return billingRequest;
//         }
//     }
// }


// Path: src/main/java/com/gocardless/services/BillingRequestFlowService.java
import com.gocardless.http.*;
import com.gocardless.resources.BillingRequestFlow;
import com.google.common.collect.ImmutableMap;
import java.util.Map;

        }

        /**
         * URL that the payer can be redirected to after completing the request flow.
         */
        public BillingRequestFlowCreateRequest withRedirectUri(String redirectUri) {
            this.redirectUri = redirectUri;
            return this;
        }

        private BillingRequestFlowCreateRequest(HttpClient httpClient) {
            super(httpClient);
        }

        public BillingRequestFlowCreateRequest withHeader(String headerName, String headerValue) {
            this.addHeader(headerName, headerValue);
            return this;
        }

        @Override
        protected String getPathTemplate() {
            return "billing_request_flows";
        }

        @Override
        protected String getEnvelope() {
            return "billing_request_flows";
        }

        @Override
        protected Class<BillingRequestFlow> getResponseClass() {