diff --git a/packages/google-cloud-bigquery-datatransfer/README.md b/packages/google-cloud-bigquery-datatransfer/README.md
index fb25eb68213..152e4a1a6c2 100644
--- a/packages/google-cloud-bigquery-datatransfer/README.md
+++ b/packages/google-cloud-bigquery-datatransfer/README.md
@@ -44,7 +44,7 @@ Google APIs Client Libraries, in [Client Libraries Explained][explained].
 1.  [Select or create a Cloud Platform project][projects].
 1.  [Enable billing for your project][billing].
 1.  [Enable the Google BigQuery Data Transfer Service API][enable_api].
-1.  [Set up authentication with a service account][auth] so you can access the
+1.  [Set up authentication][auth] so you can access the
     API from your local workstation.
 
 ### Installing the client library
@@ -189,4 +189,4 @@ See [LICENSE](https://github.com/googleapis/google-cloud-node/blob/main/LICENSE)
 [projects]: https://console.cloud.google.com/project
 [billing]: https://support.google.com/cloud/answer/6293499#enable-billing
 [enable_api]: https://console.cloud.google.com/flows/enableapi?apiid=bigquerydatatransfer.googleapis.com
-[auth]: https://cloud.google.com/docs/authentication/getting-started
+[auth]: https://cloud.google.com/docs/authentication/external/set-up-adc-local
diff --git a/packages/google-cloud-bigquery-datatransfer/protos/google/cloud/bigquery/datatransfer/v1/transfer.proto b/packages/google-cloud-bigquery-datatransfer/protos/google/cloud/bigquery/datatransfer/v1/transfer.proto
index 2c31515d7ff..519ac8e6792 100644
--- a/packages/google-cloud-bigquery-datatransfer/protos/google/cloud/bigquery/datatransfer/v1/transfer.proto
+++ b/packages/google-cloud-bigquery-datatransfer/protos/google/cloud/bigquery/datatransfer/v1/transfer.proto
@@ -98,6 +98,70 @@ message ScheduleOptions {
   google.protobuf.Timestamp end_time = 2;
 }
 
+// V2 options customizing different types of data transfer schedule.
+// This field supports existing time-based and manual transfer schedule. Also
+// supports Event-Driven transfer schedule. ScheduleOptionsV2 cannot be used
+// together with ScheduleOptions/Schedule.
+message ScheduleOptionsV2 {
+  // Data transfer schedules.
+  oneof schedule {
+    // Time based transfer schedule options. This is the default schedule
+    // option.
+    TimeBasedSchedule time_based_schedule = 1;
+
+    // Manual transfer schedule. If set, the transfer run will not be
+    // auto-scheduled by the system, unless the client invokes
+    // StartManualTransferRuns.  This is equivalent to
+    // disable_auto_scheduling = true.
+    ManualSchedule manual_schedule = 2;
+
+    // Event driven transfer schedule options. If set, the transfer will be
+    // scheduled upon events arrial.
+    EventDrivenSchedule event_driven_schedule = 3;
+  }
+}
+
+// Options customizing the time based transfer schedule.
+// Options are migrated from the original ScheduleOptions message.
+message TimeBasedSchedule {
+  // Data transfer schedule.
+  // If the data source does not support a custom schedule, this should be
+  // empty. If it is empty, the default value for the data source will be used.
+  // The specified times are in UTC.
+  // Examples of valid format:
+  // `1st,3rd monday of month 15:30`,
+  // `every wed,fri of jan,jun 13:15`, and
+  // `first sunday of quarter 00:00`.
+  // See more explanation about the format here:
+  // https://cloud.google.com/appengine/docs/flexible/python/scheduling-jobs-with-cron-yaml#the_schedule_format
+  //
+  // NOTE: The minimum interval time between recurring transfers depends on the
+  // data source; refer to the documentation for your data source.
+  string schedule = 1;
+
+  // Specifies time to start scheduling transfer runs. The first run will be
+  // scheduled at or after the start time according to a recurrence pattern
+  // defined in the schedule string. The start time can be changed at any
+  // moment.
+  google.protobuf.Timestamp start_time = 2;
+
+  // Defines time to stop scheduling transfer runs. A transfer run cannot be
+  // scheduled at or after the end time. The end time can be changed at any
+  // moment.
+  google.protobuf.Timestamp end_time = 3;
+}
+
+// Options customizing manual transfers schedule.
+message ManualSchedule {}
+
+// Options customizing EventDriven transfers schedule.
+message EventDrivenSchedule {
+  // Pub/Sub subscription name used to receive events.
+  // Only Google Cloud Storage data source support this option.
+  // Format: projects/{project}/subscriptions/{subscription}
+  string pubsub_subscription = 1;
+}
+
 // Information about a user.
 message UserInfo {
   // E-mail address of the user.
@@ -164,6 +228,11 @@ message TransferConfig {
   // Options customizing the data transfer schedule.
   ScheduleOptions schedule_options = 24;
 
+  // Options customizing different types of data transfer schedule.
+  // This field replaces "schedule" and "schedule_options" fields.
+  // ScheduleOptionsV2 cannot be used together with ScheduleOptions/Schedule.
+  ScheduleOptionsV2 schedule_options_v2 = 31;
+
   // The number of days to look back to automatically refresh the data.
   // For example, if `data_refresh_window_days = 10`, then every day
   // BigQuery reingests data for [today-10, today-1], rather than ingesting data
@@ -215,6 +284,10 @@ message TransferConfig {
   // applied in effect. Write methods will apply the key if it is present, or
   // otherwise try to apply project default keys if it is absent.
   EncryptionConfiguration encryption_configuration = 28;
+
+  // Output only. Error code with detailed information about reason of the
+  // latest config failure.
+  google.rpc.Status error = 32 [(google.api.field_behavior) = OUTPUT_ONLY];
 }
 
 // Represents the encryption configuration for a transfer.
diff --git a/packages/google-cloud-bigquery-datatransfer/protos/protos.d.ts b/packages/google-cloud-bigquery-datatransfer/protos/protos.d.ts
index 16da2f3b476..45ef7932efb 100644
--- a/packages/google-cloud-bigquery-datatransfer/protos/protos.d.ts
+++ b/packages/google-cloud-bigquery-datatransfer/protos/protos.d.ts
@@ -3560,6 +3560,415 @@ export namespace google {
                         public static getTypeUrl(typeUrlPrefix?: string): string;
                     }
 
+                    /** Properties of a ScheduleOptionsV2. */
+                    interface IScheduleOptionsV2 {
+
+                        /** ScheduleOptionsV2 timeBasedSchedule */
+                        timeBasedSchedule?: (google.cloud.bigquery.datatransfer.v1.ITimeBasedSchedule|null);
+
+                        /** ScheduleOptionsV2 manualSchedule */
+                        manualSchedule?: (google.cloud.bigquery.datatransfer.v1.IManualSchedule|null);
+
+                        /** ScheduleOptionsV2 eventDrivenSchedule */
+                        eventDrivenSchedule?: (google.cloud.bigquery.datatransfer.v1.IEventDrivenSchedule|null);
+                    }
+
+                    /** Represents a ScheduleOptionsV2. */
+                    class ScheduleOptionsV2 implements IScheduleOptionsV2 {
+
+                        /**
+                         * Constructs a new ScheduleOptionsV2.
+                         * @param [properties] Properties to set
+                         */
+                        constructor(properties?: google.cloud.bigquery.datatransfer.v1.IScheduleOptionsV2);
+
+                        /** ScheduleOptionsV2 timeBasedSchedule. */
+                        public timeBasedSchedule?: (google.cloud.bigquery.datatransfer.v1.ITimeBasedSchedule|null);
+
+                        /** ScheduleOptionsV2 manualSchedule. */
+                        public manualSchedule?: (google.cloud.bigquery.datatransfer.v1.IManualSchedule|null);
+
+                        /** ScheduleOptionsV2 eventDrivenSchedule. */
+                        public eventDrivenSchedule?: (google.cloud.bigquery.datatransfer.v1.IEventDrivenSchedule|null);
+
+                        /** ScheduleOptionsV2 schedule. */
+                        public schedule?: ("timeBasedSchedule"|"manualSchedule"|"eventDrivenSchedule");
+
+                        /**
+                         * Creates a new ScheduleOptionsV2 instance using the specified properties.
+                         * @param [properties] Properties to set
+                         * @returns ScheduleOptionsV2 instance
+                         */
+                        public static create(properties?: google.cloud.bigquery.datatransfer.v1.IScheduleOptionsV2): google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2;
+
+                        /**
+                         * Encodes the specified ScheduleOptionsV2 message. Does not implicitly {@link google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2.verify|verify} messages.
+                         * @param message ScheduleOptionsV2 message or plain object to encode
+                         * @param [writer] Writer to encode to
+                         * @returns Writer
+                         */
+                        public static encode(message: google.cloud.bigquery.datatransfer.v1.IScheduleOptionsV2, writer?: $protobuf.Writer): $protobuf.Writer;
+
+                        /**
+                         * Encodes the specified ScheduleOptionsV2 message, length delimited. Does not implicitly {@link google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2.verify|verify} messages.
+                         * @param message ScheduleOptionsV2 message or plain object to encode
+                         * @param [writer] Writer to encode to
+                         * @returns Writer
+                         */
+                        public static encodeDelimited(message: google.cloud.bigquery.datatransfer.v1.IScheduleOptionsV2, writer?: $protobuf.Writer): $protobuf.Writer;
+
+                        /**
+                         * Decodes a ScheduleOptionsV2 message from the specified reader or buffer.
+                         * @param reader Reader or buffer to decode from
+                         * @param [length] Message length if known beforehand
+                         * @returns ScheduleOptionsV2
+                         * @throws {Error} If the payload is not a reader or valid buffer
+                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                         */
+                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2;
+
+                        /**
+                         * Decodes a ScheduleOptionsV2 message from the specified reader or buffer, length delimited.
+                         * @param reader Reader or buffer to decode from
+                         * @returns ScheduleOptionsV2
+                         * @throws {Error} If the payload is not a reader or valid buffer
+                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                         */
+                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2;
+
+                        /**
+                         * Verifies a ScheduleOptionsV2 message.
+                         * @param message Plain object to verify
+                         * @returns `null` if valid, otherwise the reason why it is not
+                         */
+                        public static verify(message: { [k: string]: any }): (string|null);
+
+                        /**
+                         * Creates a ScheduleOptionsV2 message from a plain object. Also converts values to their respective internal types.
+                         * @param object Plain object
+                         * @returns ScheduleOptionsV2
+                         */
+                        public static fromObject(object: { [k: string]: any }): google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2;
+
+                        /**
+                         * Creates a plain object from a ScheduleOptionsV2 message. Also converts values to other types if specified.
+                         * @param message ScheduleOptionsV2
+                         * @param [options] Conversion options
+                         * @returns Plain object
+                         */
+                        public static toObject(message: google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+                        /**
+                         * Converts this ScheduleOptionsV2 to JSON.
+                         * @returns JSON object
+                         */
+                        public toJSON(): { [k: string]: any };
+
+                        /**
+                         * Gets the default type url for ScheduleOptionsV2
+                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                         * @returns The default type url
+                         */
+                        public static getTypeUrl(typeUrlPrefix?: string): string;
+                    }
+
+                    /** Properties of a TimeBasedSchedule. */
+                    interface ITimeBasedSchedule {
+
+                        /** TimeBasedSchedule schedule */
+                        schedule?: (string|null);
+
+                        /** TimeBasedSchedule startTime */
+                        startTime?: (google.protobuf.ITimestamp|null);
+
+                        /** TimeBasedSchedule endTime */
+                        endTime?: (google.protobuf.ITimestamp|null);
+                    }
+
+                    /** Represents a TimeBasedSchedule. */
+                    class TimeBasedSchedule implements ITimeBasedSchedule {
+
+                        /**
+                         * Constructs a new TimeBasedSchedule.
+                         * @param [properties] Properties to set
+                         */
+                        constructor(properties?: google.cloud.bigquery.datatransfer.v1.ITimeBasedSchedule);
+
+                        /** TimeBasedSchedule schedule. */
+                        public schedule: string;
+
+                        /** TimeBasedSchedule startTime. */
+                        public startTime?: (google.protobuf.ITimestamp|null);
+
+                        /** TimeBasedSchedule endTime. */
+                        public endTime?: (google.protobuf.ITimestamp|null);
+
+                        /**
+                         * Creates a new TimeBasedSchedule instance using the specified properties.
+                         * @param [properties] Properties to set
+                         * @returns TimeBasedSchedule instance
+                         */
+                        public static create(properties?: google.cloud.bigquery.datatransfer.v1.ITimeBasedSchedule): google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule;
+
+                        /**
+                         * Encodes the specified TimeBasedSchedule message. Does not implicitly {@link google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule.verify|verify} messages.
+                         * @param message TimeBasedSchedule message or plain object to encode
+                         * @param [writer] Writer to encode to
+                         * @returns Writer
+                         */
+                        public static encode(message: google.cloud.bigquery.datatransfer.v1.ITimeBasedSchedule, writer?: $protobuf.Writer): $protobuf.Writer;
+
+                        /**
+                         * Encodes the specified TimeBasedSchedule message, length delimited. Does not implicitly {@link google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule.verify|verify} messages.
+                         * @param message TimeBasedSchedule message or plain object to encode
+                         * @param [writer] Writer to encode to
+                         * @returns Writer
+                         */
+                        public static encodeDelimited(message: google.cloud.bigquery.datatransfer.v1.ITimeBasedSchedule, writer?: $protobuf.Writer): $protobuf.Writer;
+
+                        /**
+                         * Decodes a TimeBasedSchedule message from the specified reader or buffer.
+                         * @param reader Reader or buffer to decode from
+                         * @param [length] Message length if known beforehand
+                         * @returns TimeBasedSchedule
+                         * @throws {Error} If the payload is not a reader or valid buffer
+                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                         */
+                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule;
+
+                        /**
+                         * Decodes a TimeBasedSchedule message from the specified reader or buffer, length delimited.
+                         * @param reader Reader or buffer to decode from
+                         * @returns TimeBasedSchedule
+                         * @throws {Error} If the payload is not a reader or valid buffer
+                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                         */
+                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule;
+
+                        /**
+                         * Verifies a TimeBasedSchedule message.
+                         * @param message Plain object to verify
+                         * @returns `null` if valid, otherwise the reason why it is not
+                         */
+                        public static verify(message: { [k: string]: any }): (string|null);
+
+                        /**
+                         * Creates a TimeBasedSchedule message from a plain object. Also converts values to their respective internal types.
+                         * @param object Plain object
+                         * @returns TimeBasedSchedule
+                         */
+                        public static fromObject(object: { [k: string]: any }): google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule;
+
+                        /**
+                         * Creates a plain object from a TimeBasedSchedule message. Also converts values to other types if specified.
+                         * @param message TimeBasedSchedule
+                         * @param [options] Conversion options
+                         * @returns Plain object
+                         */
+                        public static toObject(message: google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+                        /**
+                         * Converts this TimeBasedSchedule to JSON.
+                         * @returns JSON object
+                         */
+                        public toJSON(): { [k: string]: any };
+
+                        /**
+                         * Gets the default type url for TimeBasedSchedule
+                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                         * @returns The default type url
+                         */
+                        public static getTypeUrl(typeUrlPrefix?: string): string;
+                    }
+
+                    /** Properties of a ManualSchedule. */
+                    interface IManualSchedule {
+                    }
+
+                    /** Represents a ManualSchedule. */
+                    class ManualSchedule implements IManualSchedule {
+
+                        /**
+                         * Constructs a new ManualSchedule.
+                         * @param [properties] Properties to set
+                         */
+                        constructor(properties?: google.cloud.bigquery.datatransfer.v1.IManualSchedule);
+
+                        /**
+                         * Creates a new ManualSchedule instance using the specified properties.
+                         * @param [properties] Properties to set
+                         * @returns ManualSchedule instance
+                         */
+                        public static create(properties?: google.cloud.bigquery.datatransfer.v1.IManualSchedule): google.cloud.bigquery.datatransfer.v1.ManualSchedule;
+
+                        /**
+                         * Encodes the specified ManualSchedule message. Does not implicitly {@link google.cloud.bigquery.datatransfer.v1.ManualSchedule.verify|verify} messages.
+                         * @param message ManualSchedule message or plain object to encode
+                         * @param [writer] Writer to encode to
+                         * @returns Writer
+                         */
+                        public static encode(message: google.cloud.bigquery.datatransfer.v1.IManualSchedule, writer?: $protobuf.Writer): $protobuf.Writer;
+
+                        /**
+                         * Encodes the specified ManualSchedule message, length delimited. Does not implicitly {@link google.cloud.bigquery.datatransfer.v1.ManualSchedule.verify|verify} messages.
+                         * @param message ManualSchedule message or plain object to encode
+                         * @param [writer] Writer to encode to
+                         * @returns Writer
+                         */
+                        public static encodeDelimited(message: google.cloud.bigquery.datatransfer.v1.IManualSchedule, writer?: $protobuf.Writer): $protobuf.Writer;
+
+                        /**
+                         * Decodes a ManualSchedule message from the specified reader or buffer.
+                         * @param reader Reader or buffer to decode from
+                         * @param [length] Message length if known beforehand
+                         * @returns ManualSchedule
+                         * @throws {Error} If the payload is not a reader or valid buffer
+                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                         */
+                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.bigquery.datatransfer.v1.ManualSchedule;
+
+                        /**
+                         * Decodes a ManualSchedule message from the specified reader or buffer, length delimited.
+                         * @param reader Reader or buffer to decode from
+                         * @returns ManualSchedule
+                         * @throws {Error} If the payload is not a reader or valid buffer
+                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                         */
+                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.bigquery.datatransfer.v1.ManualSchedule;
+
+                        /**
+                         * Verifies a ManualSchedule message.
+                         * @param message Plain object to verify
+                         * @returns `null` if valid, otherwise the reason why it is not
+                         */
+                        public static verify(message: { [k: string]: any }): (string|null);
+
+                        /**
+                         * Creates a ManualSchedule message from a plain object. Also converts values to their respective internal types.
+                         * @param object Plain object
+                         * @returns ManualSchedule
+                         */
+                        public static fromObject(object: { [k: string]: any }): google.cloud.bigquery.datatransfer.v1.ManualSchedule;
+
+                        /**
+                         * Creates a plain object from a ManualSchedule message. Also converts values to other types if specified.
+                         * @param message ManualSchedule
+                         * @param [options] Conversion options
+                         * @returns Plain object
+                         */
+                        public static toObject(message: google.cloud.bigquery.datatransfer.v1.ManualSchedule, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+                        /**
+                         * Converts this ManualSchedule to JSON.
+                         * @returns JSON object
+                         */
+                        public toJSON(): { [k: string]: any };
+
+                        /**
+                         * Gets the default type url for ManualSchedule
+                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                         * @returns The default type url
+                         */
+                        public static getTypeUrl(typeUrlPrefix?: string): string;
+                    }
+
+                    /** Properties of an EventDrivenSchedule. */
+                    interface IEventDrivenSchedule {
+
+                        /** EventDrivenSchedule pubsubSubscription */
+                        pubsubSubscription?: (string|null);
+                    }
+
+                    /** Represents an EventDrivenSchedule. */
+                    class EventDrivenSchedule implements IEventDrivenSchedule {
+
+                        /**
+                         * Constructs a new EventDrivenSchedule.
+                         * @param [properties] Properties to set
+                         */
+                        constructor(properties?: google.cloud.bigquery.datatransfer.v1.IEventDrivenSchedule);
+
+                        /** EventDrivenSchedule pubsubSubscription. */
+                        public pubsubSubscription: string;
+
+                        /**
+                         * Creates a new EventDrivenSchedule instance using the specified properties.
+                         * @param [properties] Properties to set
+                         * @returns EventDrivenSchedule instance
+                         */
+                        public static create(properties?: google.cloud.bigquery.datatransfer.v1.IEventDrivenSchedule): google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule;
+
+                        /**
+                         * Encodes the specified EventDrivenSchedule message. Does not implicitly {@link google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule.verify|verify} messages.
+                         * @param message EventDrivenSchedule message or plain object to encode
+                         * @param [writer] Writer to encode to
+                         * @returns Writer
+                         */
+                        public static encode(message: google.cloud.bigquery.datatransfer.v1.IEventDrivenSchedule, writer?: $protobuf.Writer): $protobuf.Writer;
+
+                        /**
+                         * Encodes the specified EventDrivenSchedule message, length delimited. Does not implicitly {@link google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule.verify|verify} messages.
+                         * @param message EventDrivenSchedule message or plain object to encode
+                         * @param [writer] Writer to encode to
+                         * @returns Writer
+                         */
+                        public static encodeDelimited(message: google.cloud.bigquery.datatransfer.v1.IEventDrivenSchedule, writer?: $protobuf.Writer): $protobuf.Writer;
+
+                        /**
+                         * Decodes an EventDrivenSchedule message from the specified reader or buffer.
+                         * @param reader Reader or buffer to decode from
+                         * @param [length] Message length if known beforehand
+                         * @returns EventDrivenSchedule
+                         * @throws {Error} If the payload is not a reader or valid buffer
+                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                         */
+                        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule;
+
+                        /**
+                         * Decodes an EventDrivenSchedule message from the specified reader or buffer, length delimited.
+                         * @param reader Reader or buffer to decode from
+                         * @returns EventDrivenSchedule
+                         * @throws {Error} If the payload is not a reader or valid buffer
+                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                         */
+                        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule;
+
+                        /**
+                         * Verifies an EventDrivenSchedule message.
+                         * @param message Plain object to verify
+                         * @returns `null` if valid, otherwise the reason why it is not
+                         */
+                        public static verify(message: { [k: string]: any }): (string|null);
+
+                        /**
+                         * Creates an EventDrivenSchedule message from a plain object. Also converts values to their respective internal types.
+                         * @param object Plain object
+                         * @returns EventDrivenSchedule
+                         */
+                        public static fromObject(object: { [k: string]: any }): google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule;
+
+                        /**
+                         * Creates a plain object from an EventDrivenSchedule message. Also converts values to other types if specified.
+                         * @param message EventDrivenSchedule
+                         * @param [options] Conversion options
+                         * @returns Plain object
+                         */
+                        public static toObject(message: google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+                        /**
+                         * Converts this EventDrivenSchedule to JSON.
+                         * @returns JSON object
+                         */
+                        public toJSON(): { [k: string]: any };
+
+                        /**
+                         * Gets the default type url for EventDrivenSchedule
+                         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                         * @returns The default type url
+                         */
+                        public static getTypeUrl(typeUrlPrefix?: string): string;
+                    }
+
                     /** Properties of a UserInfo. */
                     interface IUserInfo {
 
@@ -3684,6 +4093,9 @@ export namespace google {
                         /** TransferConfig scheduleOptions */
                         scheduleOptions?: (google.cloud.bigquery.datatransfer.v1.IScheduleOptions|null);
 
+                        /** TransferConfig scheduleOptionsV2 */
+                        scheduleOptionsV2?: (google.cloud.bigquery.datatransfer.v1.IScheduleOptionsV2|null);
+
                         /** TransferConfig dataRefreshWindowDays */
                         dataRefreshWindowDays?: (number|null);
 
@@ -3716,6 +4128,9 @@ export namespace google {
 
                         /** TransferConfig encryptionConfiguration */
                         encryptionConfiguration?: (google.cloud.bigquery.datatransfer.v1.IEncryptionConfiguration|null);
+
+                        /** TransferConfig error */
+                        error?: (google.rpc.IStatus|null);
                     }
 
                     /** Represents a TransferConfig. */
@@ -3748,6 +4163,9 @@ export namespace google {
                         /** TransferConfig scheduleOptions. */
                         public scheduleOptions?: (google.cloud.bigquery.datatransfer.v1.IScheduleOptions|null);
 
+                        /** TransferConfig scheduleOptionsV2. */
+                        public scheduleOptionsV2?: (google.cloud.bigquery.datatransfer.v1.IScheduleOptionsV2|null);
+
                         /** TransferConfig dataRefreshWindowDays. */
                         public dataRefreshWindowDays: number;
 
@@ -3781,6 +4199,9 @@ export namespace google {
                         /** TransferConfig encryptionConfiguration. */
                         public encryptionConfiguration?: (google.cloud.bigquery.datatransfer.v1.IEncryptionConfiguration|null);
 
+                        /** TransferConfig error. */
+                        public error?: (google.rpc.IStatus|null);
+
                         /** TransferConfig destination. */
                         public destination?: "destinationDatasetId";
 
diff --git a/packages/google-cloud-bigquery-datatransfer/protos/protos.js b/packages/google-cloud-bigquery-datatransfer/protos/protos.js
index f31853f4d19..10616ce47b0 100644
--- a/packages/google-cloud-bigquery-datatransfer/protos/protos.js
+++ b/packages/google-cloud-bigquery-datatransfer/protos/protos.js
@@ -8559,6 +8559,941 @@
                             return ScheduleOptions;
                         })();
     
+                        v1.ScheduleOptionsV2 = (function() {
+    
+                            /**
+                             * Properties of a ScheduleOptionsV2.
+                             * @memberof google.cloud.bigquery.datatransfer.v1
+                             * @interface IScheduleOptionsV2
+                             * @property {google.cloud.bigquery.datatransfer.v1.ITimeBasedSchedule|null} [timeBasedSchedule] ScheduleOptionsV2 timeBasedSchedule
+                             * @property {google.cloud.bigquery.datatransfer.v1.IManualSchedule|null} [manualSchedule] ScheduleOptionsV2 manualSchedule
+                             * @property {google.cloud.bigquery.datatransfer.v1.IEventDrivenSchedule|null} [eventDrivenSchedule] ScheduleOptionsV2 eventDrivenSchedule
+                             */
+    
+                            /**
+                             * Constructs a new ScheduleOptionsV2.
+                             * @memberof google.cloud.bigquery.datatransfer.v1
+                             * @classdesc Represents a ScheduleOptionsV2.
+                             * @implements IScheduleOptionsV2
+                             * @constructor
+                             * @param {google.cloud.bigquery.datatransfer.v1.IScheduleOptionsV2=} [properties] Properties to set
+                             */
+                            function ScheduleOptionsV2(properties) {
+                                if (properties)
+                                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                                        if (properties[keys[i]] != null)
+                                            this[keys[i]] = properties[keys[i]];
+                            }
+    
+                            /**
+                             * ScheduleOptionsV2 timeBasedSchedule.
+                             * @member {google.cloud.bigquery.datatransfer.v1.ITimeBasedSchedule|null|undefined} timeBasedSchedule
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2
+                             * @instance
+                             */
+                            ScheduleOptionsV2.prototype.timeBasedSchedule = null;
+    
+                            /**
+                             * ScheduleOptionsV2 manualSchedule.
+                             * @member {google.cloud.bigquery.datatransfer.v1.IManualSchedule|null|undefined} manualSchedule
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2
+                             * @instance
+                             */
+                            ScheduleOptionsV2.prototype.manualSchedule = null;
+    
+                            /**
+                             * ScheduleOptionsV2 eventDrivenSchedule.
+                             * @member {google.cloud.bigquery.datatransfer.v1.IEventDrivenSchedule|null|undefined} eventDrivenSchedule
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2
+                             * @instance
+                             */
+                            ScheduleOptionsV2.prototype.eventDrivenSchedule = null;
+    
+                            // OneOf field names bound to virtual getters and setters
+                            var $oneOfFields;
+    
+                            /**
+                             * ScheduleOptionsV2 schedule.
+                             * @member {"timeBasedSchedule"|"manualSchedule"|"eventDrivenSchedule"|undefined} schedule
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2
+                             * @instance
+                             */
+                            Object.defineProperty(ScheduleOptionsV2.prototype, "schedule", {
+                                get: $util.oneOfGetter($oneOfFields = ["timeBasedSchedule", "manualSchedule", "eventDrivenSchedule"]),
+                                set: $util.oneOfSetter($oneOfFields)
+                            });
+    
+                            /**
+                             * Creates a new ScheduleOptionsV2 instance using the specified properties.
+                             * @function create
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2
+                             * @static
+                             * @param {google.cloud.bigquery.datatransfer.v1.IScheduleOptionsV2=} [properties] Properties to set
+                             * @returns {google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2} ScheduleOptionsV2 instance
+                             */
+                            ScheduleOptionsV2.create = function create(properties) {
+                                return new ScheduleOptionsV2(properties);
+                            };
+    
+                            /**
+                             * Encodes the specified ScheduleOptionsV2 message. Does not implicitly {@link google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2.verify|verify} messages.
+                             * @function encode
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2
+                             * @static
+                             * @param {google.cloud.bigquery.datatransfer.v1.IScheduleOptionsV2} message ScheduleOptionsV2 message or plain object to encode
+                             * @param {$protobuf.Writer} [writer] Writer to encode to
+                             * @returns {$protobuf.Writer} Writer
+                             */
+                            ScheduleOptionsV2.encode = function encode(message, writer) {
+                                if (!writer)
+                                    writer = $Writer.create();
+                                if (message.timeBasedSchedule != null && Object.hasOwnProperty.call(message, "timeBasedSchedule"))
+                                    $root.google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule.encode(message.timeBasedSchedule, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+                                if (message.manualSchedule != null && Object.hasOwnProperty.call(message, "manualSchedule"))
+                                    $root.google.cloud.bigquery.datatransfer.v1.ManualSchedule.encode(message.manualSchedule, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+                                if (message.eventDrivenSchedule != null && Object.hasOwnProperty.call(message, "eventDrivenSchedule"))
+                                    $root.google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule.encode(message.eventDrivenSchedule, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
+                                return writer;
+                            };
+    
+                            /**
+                             * Encodes the specified ScheduleOptionsV2 message, length delimited. Does not implicitly {@link google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2.verify|verify} messages.
+                             * @function encodeDelimited
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2
+                             * @static
+                             * @param {google.cloud.bigquery.datatransfer.v1.IScheduleOptionsV2} message ScheduleOptionsV2 message or plain object to encode
+                             * @param {$protobuf.Writer} [writer] Writer to encode to
+                             * @returns {$protobuf.Writer} Writer
+                             */
+                            ScheduleOptionsV2.encodeDelimited = function encodeDelimited(message, writer) {
+                                return this.encode(message, writer).ldelim();
+                            };
+    
+                            /**
+                             * Decodes a ScheduleOptionsV2 message from the specified reader or buffer.
+                             * @function decode
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2
+                             * @static
+                             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                             * @param {number} [length] Message length if known beforehand
+                             * @returns {google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2} ScheduleOptionsV2
+                             * @throws {Error} If the payload is not a reader or valid buffer
+                             * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                             */
+                            ScheduleOptionsV2.decode = function decode(reader, length) {
+                                if (!(reader instanceof $Reader))
+                                    reader = $Reader.create(reader);
+                                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2();
+                                while (reader.pos < end) {
+                                    var tag = reader.uint32();
+                                    switch (tag >>> 3) {
+                                    case 1: {
+                                            message.timeBasedSchedule = $root.google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule.decode(reader, reader.uint32());
+                                            break;
+                                        }
+                                    case 2: {
+                                            message.manualSchedule = $root.google.cloud.bigquery.datatransfer.v1.ManualSchedule.decode(reader, reader.uint32());
+                                            break;
+                                        }
+                                    case 3: {
+                                            message.eventDrivenSchedule = $root.google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule.decode(reader, reader.uint32());
+                                            break;
+                                        }
+                                    default:
+                                        reader.skipType(tag & 7);
+                                        break;
+                                    }
+                                }
+                                return message;
+                            };
+    
+                            /**
+                             * Decodes a ScheduleOptionsV2 message from the specified reader or buffer, length delimited.
+                             * @function decodeDelimited
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2
+                             * @static
+                             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                             * @returns {google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2} ScheduleOptionsV2
+                             * @throws {Error} If the payload is not a reader or valid buffer
+                             * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                             */
+                            ScheduleOptionsV2.decodeDelimited = function decodeDelimited(reader) {
+                                if (!(reader instanceof $Reader))
+                                    reader = new $Reader(reader);
+                                return this.decode(reader, reader.uint32());
+                            };
+    
+                            /**
+                             * Verifies a ScheduleOptionsV2 message.
+                             * @function verify
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2
+                             * @static
+                             * @param {Object.<string,*>} message Plain object to verify
+                             * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                             */
+                            ScheduleOptionsV2.verify = function verify(message) {
+                                if (typeof message !== "object" || message === null)
+                                    return "object expected";
+                                var properties = {};
+                                if (message.timeBasedSchedule != null && message.hasOwnProperty("timeBasedSchedule")) {
+                                    properties.schedule = 1;
+                                    {
+                                        var error = $root.google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule.verify(message.timeBasedSchedule);
+                                        if (error)
+                                            return "timeBasedSchedule." + error;
+                                    }
+                                }
+                                if (message.manualSchedule != null && message.hasOwnProperty("manualSchedule")) {
+                                    if (properties.schedule === 1)
+                                        return "schedule: multiple values";
+                                    properties.schedule = 1;
+                                    {
+                                        var error = $root.google.cloud.bigquery.datatransfer.v1.ManualSchedule.verify(message.manualSchedule);
+                                        if (error)
+                                            return "manualSchedule." + error;
+                                    }
+                                }
+                                if (message.eventDrivenSchedule != null && message.hasOwnProperty("eventDrivenSchedule")) {
+                                    if (properties.schedule === 1)
+                                        return "schedule: multiple values";
+                                    properties.schedule = 1;
+                                    {
+                                        var error = $root.google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule.verify(message.eventDrivenSchedule);
+                                        if (error)
+                                            return "eventDrivenSchedule." + error;
+                                    }
+                                }
+                                return null;
+                            };
+    
+                            /**
+                             * Creates a ScheduleOptionsV2 message from a plain object. Also converts values to their respective internal types.
+                             * @function fromObject
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2
+                             * @static
+                             * @param {Object.<string,*>} object Plain object
+                             * @returns {google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2} ScheduleOptionsV2
+                             */
+                            ScheduleOptionsV2.fromObject = function fromObject(object) {
+                                if (object instanceof $root.google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2)
+                                    return object;
+                                var message = new $root.google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2();
+                                if (object.timeBasedSchedule != null) {
+                                    if (typeof object.timeBasedSchedule !== "object")
+                                        throw TypeError(".google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2.timeBasedSchedule: object expected");
+                                    message.timeBasedSchedule = $root.google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule.fromObject(object.timeBasedSchedule);
+                                }
+                                if (object.manualSchedule != null) {
+                                    if (typeof object.manualSchedule !== "object")
+                                        throw TypeError(".google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2.manualSchedule: object expected");
+                                    message.manualSchedule = $root.google.cloud.bigquery.datatransfer.v1.ManualSchedule.fromObject(object.manualSchedule);
+                                }
+                                if (object.eventDrivenSchedule != null) {
+                                    if (typeof object.eventDrivenSchedule !== "object")
+                                        throw TypeError(".google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2.eventDrivenSchedule: object expected");
+                                    message.eventDrivenSchedule = $root.google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule.fromObject(object.eventDrivenSchedule);
+                                }
+                                return message;
+                            };
+    
+                            /**
+                             * Creates a plain object from a ScheduleOptionsV2 message. Also converts values to other types if specified.
+                             * @function toObject
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2
+                             * @static
+                             * @param {google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2} message ScheduleOptionsV2
+                             * @param {$protobuf.IConversionOptions} [options] Conversion options
+                             * @returns {Object.<string,*>} Plain object
+                             */
+                            ScheduleOptionsV2.toObject = function toObject(message, options) {
+                                if (!options)
+                                    options = {};
+                                var object = {};
+                                if (message.timeBasedSchedule != null && message.hasOwnProperty("timeBasedSchedule")) {
+                                    object.timeBasedSchedule = $root.google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule.toObject(message.timeBasedSchedule, options);
+                                    if (options.oneofs)
+                                        object.schedule = "timeBasedSchedule";
+                                }
+                                if (message.manualSchedule != null && message.hasOwnProperty("manualSchedule")) {
+                                    object.manualSchedule = $root.google.cloud.bigquery.datatransfer.v1.ManualSchedule.toObject(message.manualSchedule, options);
+                                    if (options.oneofs)
+                                        object.schedule = "manualSchedule";
+                                }
+                                if (message.eventDrivenSchedule != null && message.hasOwnProperty("eventDrivenSchedule")) {
+                                    object.eventDrivenSchedule = $root.google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule.toObject(message.eventDrivenSchedule, options);
+                                    if (options.oneofs)
+                                        object.schedule = "eventDrivenSchedule";
+                                }
+                                return object;
+                            };
+    
+                            /**
+                             * Converts this ScheduleOptionsV2 to JSON.
+                             * @function toJSON
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2
+                             * @instance
+                             * @returns {Object.<string,*>} JSON object
+                             */
+                            ScheduleOptionsV2.prototype.toJSON = function toJSON() {
+                                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                            };
+    
+                            /**
+                             * Gets the default type url for ScheduleOptionsV2
+                             * @function getTypeUrl
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2
+                             * @static
+                             * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                             * @returns {string} The default type url
+                             */
+                            ScheduleOptionsV2.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                                if (typeUrlPrefix === undefined) {
+                                    typeUrlPrefix = "type.googleapis.com";
+                                }
+                                return typeUrlPrefix + "/google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2";
+                            };
+    
+                            return ScheduleOptionsV2;
+                        })();
+    
+                        v1.TimeBasedSchedule = (function() {
+    
+                            /**
+                             * Properties of a TimeBasedSchedule.
+                             * @memberof google.cloud.bigquery.datatransfer.v1
+                             * @interface ITimeBasedSchedule
+                             * @property {string|null} [schedule] TimeBasedSchedule schedule
+                             * @property {google.protobuf.ITimestamp|null} [startTime] TimeBasedSchedule startTime
+                             * @property {google.protobuf.ITimestamp|null} [endTime] TimeBasedSchedule endTime
+                             */
+    
+                            /**
+                             * Constructs a new TimeBasedSchedule.
+                             * @memberof google.cloud.bigquery.datatransfer.v1
+                             * @classdesc Represents a TimeBasedSchedule.
+                             * @implements ITimeBasedSchedule
+                             * @constructor
+                             * @param {google.cloud.bigquery.datatransfer.v1.ITimeBasedSchedule=} [properties] Properties to set
+                             */
+                            function TimeBasedSchedule(properties) {
+                                if (properties)
+                                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                                        if (properties[keys[i]] != null)
+                                            this[keys[i]] = properties[keys[i]];
+                            }
+    
+                            /**
+                             * TimeBasedSchedule schedule.
+                             * @member {string} schedule
+                             * @memberof google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule
+                             * @instance
+                             */
+                            TimeBasedSchedule.prototype.schedule = "";
+    
+                            /**
+                             * TimeBasedSchedule startTime.
+                             * @member {google.protobuf.ITimestamp|null|undefined} startTime
+                             * @memberof google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule
+                             * @instance
+                             */
+                            TimeBasedSchedule.prototype.startTime = null;
+    
+                            /**
+                             * TimeBasedSchedule endTime.
+                             * @member {google.protobuf.ITimestamp|null|undefined} endTime
+                             * @memberof google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule
+                             * @instance
+                             */
+                            TimeBasedSchedule.prototype.endTime = null;
+    
+                            /**
+                             * Creates a new TimeBasedSchedule instance using the specified properties.
+                             * @function create
+                             * @memberof google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule
+                             * @static
+                             * @param {google.cloud.bigquery.datatransfer.v1.ITimeBasedSchedule=} [properties] Properties to set
+                             * @returns {google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule} TimeBasedSchedule instance
+                             */
+                            TimeBasedSchedule.create = function create(properties) {
+                                return new TimeBasedSchedule(properties);
+                            };
+    
+                            /**
+                             * Encodes the specified TimeBasedSchedule message. Does not implicitly {@link google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule.verify|verify} messages.
+                             * @function encode
+                             * @memberof google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule
+                             * @static
+                             * @param {google.cloud.bigquery.datatransfer.v1.ITimeBasedSchedule} message TimeBasedSchedule message or plain object to encode
+                             * @param {$protobuf.Writer} [writer] Writer to encode to
+                             * @returns {$protobuf.Writer} Writer
+                             */
+                            TimeBasedSchedule.encode = function encode(message, writer) {
+                                if (!writer)
+                                    writer = $Writer.create();
+                                if (message.schedule != null && Object.hasOwnProperty.call(message, "schedule"))
+                                    writer.uint32(/* id 1, wireType 2 =*/10).string(message.schedule);
+                                if (message.startTime != null && Object.hasOwnProperty.call(message, "startTime"))
+                                    $root.google.protobuf.Timestamp.encode(message.startTime, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+                                if (message.endTime != null && Object.hasOwnProperty.call(message, "endTime"))
+                                    $root.google.protobuf.Timestamp.encode(message.endTime, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
+                                return writer;
+                            };
+    
+                            /**
+                             * Encodes the specified TimeBasedSchedule message, length delimited. Does not implicitly {@link google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule.verify|verify} messages.
+                             * @function encodeDelimited
+                             * @memberof google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule
+                             * @static
+                             * @param {google.cloud.bigquery.datatransfer.v1.ITimeBasedSchedule} message TimeBasedSchedule message or plain object to encode
+                             * @param {$protobuf.Writer} [writer] Writer to encode to
+                             * @returns {$protobuf.Writer} Writer
+                             */
+                            TimeBasedSchedule.encodeDelimited = function encodeDelimited(message, writer) {
+                                return this.encode(message, writer).ldelim();
+                            };
+    
+                            /**
+                             * Decodes a TimeBasedSchedule message from the specified reader or buffer.
+                             * @function decode
+                             * @memberof google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule
+                             * @static
+                             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                             * @param {number} [length] Message length if known beforehand
+                             * @returns {google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule} TimeBasedSchedule
+                             * @throws {Error} If the payload is not a reader or valid buffer
+                             * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                             */
+                            TimeBasedSchedule.decode = function decode(reader, length) {
+                                if (!(reader instanceof $Reader))
+                                    reader = $Reader.create(reader);
+                                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule();
+                                while (reader.pos < end) {
+                                    var tag = reader.uint32();
+                                    switch (tag >>> 3) {
+                                    case 1: {
+                                            message.schedule = reader.string();
+                                            break;
+                                        }
+                                    case 2: {
+                                            message.startTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            break;
+                                        }
+                                    case 3: {
+                                            message.endTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32());
+                                            break;
+                                        }
+                                    default:
+                                        reader.skipType(tag & 7);
+                                        break;
+                                    }
+                                }
+                                return message;
+                            };
+    
+                            /**
+                             * Decodes a TimeBasedSchedule message from the specified reader or buffer, length delimited.
+                             * @function decodeDelimited
+                             * @memberof google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule
+                             * @static
+                             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                             * @returns {google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule} TimeBasedSchedule
+                             * @throws {Error} If the payload is not a reader or valid buffer
+                             * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                             */
+                            TimeBasedSchedule.decodeDelimited = function decodeDelimited(reader) {
+                                if (!(reader instanceof $Reader))
+                                    reader = new $Reader(reader);
+                                return this.decode(reader, reader.uint32());
+                            };
+    
+                            /**
+                             * Verifies a TimeBasedSchedule message.
+                             * @function verify
+                             * @memberof google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule
+                             * @static
+                             * @param {Object.<string,*>} message Plain object to verify
+                             * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                             */
+                            TimeBasedSchedule.verify = function verify(message) {
+                                if (typeof message !== "object" || message === null)
+                                    return "object expected";
+                                if (message.schedule != null && message.hasOwnProperty("schedule"))
+                                    if (!$util.isString(message.schedule))
+                                        return "schedule: string expected";
+                                if (message.startTime != null && message.hasOwnProperty("startTime")) {
+                                    var error = $root.google.protobuf.Timestamp.verify(message.startTime);
+                                    if (error)
+                                        return "startTime." + error;
+                                }
+                                if (message.endTime != null && message.hasOwnProperty("endTime")) {
+                                    var error = $root.google.protobuf.Timestamp.verify(message.endTime);
+                                    if (error)
+                                        return "endTime." + error;
+                                }
+                                return null;
+                            };
+    
+                            /**
+                             * Creates a TimeBasedSchedule message from a plain object. Also converts values to their respective internal types.
+                             * @function fromObject
+                             * @memberof google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule
+                             * @static
+                             * @param {Object.<string,*>} object Plain object
+                             * @returns {google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule} TimeBasedSchedule
+                             */
+                            TimeBasedSchedule.fromObject = function fromObject(object) {
+                                if (object instanceof $root.google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule)
+                                    return object;
+                                var message = new $root.google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule();
+                                if (object.schedule != null)
+                                    message.schedule = String(object.schedule);
+                                if (object.startTime != null) {
+                                    if (typeof object.startTime !== "object")
+                                        throw TypeError(".google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule.startTime: object expected");
+                                    message.startTime = $root.google.protobuf.Timestamp.fromObject(object.startTime);
+                                }
+                                if (object.endTime != null) {
+                                    if (typeof object.endTime !== "object")
+                                        throw TypeError(".google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule.endTime: object expected");
+                                    message.endTime = $root.google.protobuf.Timestamp.fromObject(object.endTime);
+                                }
+                                return message;
+                            };
+    
+                            /**
+                             * Creates a plain object from a TimeBasedSchedule message. Also converts values to other types if specified.
+                             * @function toObject
+                             * @memberof google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule
+                             * @static
+                             * @param {google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule} message TimeBasedSchedule
+                             * @param {$protobuf.IConversionOptions} [options] Conversion options
+                             * @returns {Object.<string,*>} Plain object
+                             */
+                            TimeBasedSchedule.toObject = function toObject(message, options) {
+                                if (!options)
+                                    options = {};
+                                var object = {};
+                                if (options.defaults) {
+                                    object.schedule = "";
+                                    object.startTime = null;
+                                    object.endTime = null;
+                                }
+                                if (message.schedule != null && message.hasOwnProperty("schedule"))
+                                    object.schedule = message.schedule;
+                                if (message.startTime != null && message.hasOwnProperty("startTime"))
+                                    object.startTime = $root.google.protobuf.Timestamp.toObject(message.startTime, options);
+                                if (message.endTime != null && message.hasOwnProperty("endTime"))
+                                    object.endTime = $root.google.protobuf.Timestamp.toObject(message.endTime, options);
+                                return object;
+                            };
+    
+                            /**
+                             * Converts this TimeBasedSchedule to JSON.
+                             * @function toJSON
+                             * @memberof google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule
+                             * @instance
+                             * @returns {Object.<string,*>} JSON object
+                             */
+                            TimeBasedSchedule.prototype.toJSON = function toJSON() {
+                                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                            };
+    
+                            /**
+                             * Gets the default type url for TimeBasedSchedule
+                             * @function getTypeUrl
+                             * @memberof google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule
+                             * @static
+                             * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                             * @returns {string} The default type url
+                             */
+                            TimeBasedSchedule.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                                if (typeUrlPrefix === undefined) {
+                                    typeUrlPrefix = "type.googleapis.com";
+                                }
+                                return typeUrlPrefix + "/google.cloud.bigquery.datatransfer.v1.TimeBasedSchedule";
+                            };
+    
+                            return TimeBasedSchedule;
+                        })();
+    
+                        v1.ManualSchedule = (function() {
+    
+                            /**
+                             * Properties of a ManualSchedule.
+                             * @memberof google.cloud.bigquery.datatransfer.v1
+                             * @interface IManualSchedule
+                             */
+    
+                            /**
+                             * Constructs a new ManualSchedule.
+                             * @memberof google.cloud.bigquery.datatransfer.v1
+                             * @classdesc Represents a ManualSchedule.
+                             * @implements IManualSchedule
+                             * @constructor
+                             * @param {google.cloud.bigquery.datatransfer.v1.IManualSchedule=} [properties] Properties to set
+                             */
+                            function ManualSchedule(properties) {
+                                if (properties)
+                                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                                        if (properties[keys[i]] != null)
+                                            this[keys[i]] = properties[keys[i]];
+                            }
+    
+                            /**
+                             * Creates a new ManualSchedule instance using the specified properties.
+                             * @function create
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ManualSchedule
+                             * @static
+                             * @param {google.cloud.bigquery.datatransfer.v1.IManualSchedule=} [properties] Properties to set
+                             * @returns {google.cloud.bigquery.datatransfer.v1.ManualSchedule} ManualSchedule instance
+                             */
+                            ManualSchedule.create = function create(properties) {
+                                return new ManualSchedule(properties);
+                            };
+    
+                            /**
+                             * Encodes the specified ManualSchedule message. Does not implicitly {@link google.cloud.bigquery.datatransfer.v1.ManualSchedule.verify|verify} messages.
+                             * @function encode
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ManualSchedule
+                             * @static
+                             * @param {google.cloud.bigquery.datatransfer.v1.IManualSchedule} message ManualSchedule message or plain object to encode
+                             * @param {$protobuf.Writer} [writer] Writer to encode to
+                             * @returns {$protobuf.Writer} Writer
+                             */
+                            ManualSchedule.encode = function encode(message, writer) {
+                                if (!writer)
+                                    writer = $Writer.create();
+                                return writer;
+                            };
+    
+                            /**
+                             * Encodes the specified ManualSchedule message, length delimited. Does not implicitly {@link google.cloud.bigquery.datatransfer.v1.ManualSchedule.verify|verify} messages.
+                             * @function encodeDelimited
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ManualSchedule
+                             * @static
+                             * @param {google.cloud.bigquery.datatransfer.v1.IManualSchedule} message ManualSchedule message or plain object to encode
+                             * @param {$protobuf.Writer} [writer] Writer to encode to
+                             * @returns {$protobuf.Writer} Writer
+                             */
+                            ManualSchedule.encodeDelimited = function encodeDelimited(message, writer) {
+                                return this.encode(message, writer).ldelim();
+                            };
+    
+                            /**
+                             * Decodes a ManualSchedule message from the specified reader or buffer.
+                             * @function decode
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ManualSchedule
+                             * @static
+                             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                             * @param {number} [length] Message length if known beforehand
+                             * @returns {google.cloud.bigquery.datatransfer.v1.ManualSchedule} ManualSchedule
+                             * @throws {Error} If the payload is not a reader or valid buffer
+                             * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                             */
+                            ManualSchedule.decode = function decode(reader, length) {
+                                if (!(reader instanceof $Reader))
+                                    reader = $Reader.create(reader);
+                                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.bigquery.datatransfer.v1.ManualSchedule();
+                                while (reader.pos < end) {
+                                    var tag = reader.uint32();
+                                    switch (tag >>> 3) {
+                                    default:
+                                        reader.skipType(tag & 7);
+                                        break;
+                                    }
+                                }
+                                return message;
+                            };
+    
+                            /**
+                             * Decodes a ManualSchedule message from the specified reader or buffer, length delimited.
+                             * @function decodeDelimited
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ManualSchedule
+                             * @static
+                             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                             * @returns {google.cloud.bigquery.datatransfer.v1.ManualSchedule} ManualSchedule
+                             * @throws {Error} If the payload is not a reader or valid buffer
+                             * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                             */
+                            ManualSchedule.decodeDelimited = function decodeDelimited(reader) {
+                                if (!(reader instanceof $Reader))
+                                    reader = new $Reader(reader);
+                                return this.decode(reader, reader.uint32());
+                            };
+    
+                            /**
+                             * Verifies a ManualSchedule message.
+                             * @function verify
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ManualSchedule
+                             * @static
+                             * @param {Object.<string,*>} message Plain object to verify
+                             * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                             */
+                            ManualSchedule.verify = function verify(message) {
+                                if (typeof message !== "object" || message === null)
+                                    return "object expected";
+                                return null;
+                            };
+    
+                            /**
+                             * Creates a ManualSchedule message from a plain object. Also converts values to their respective internal types.
+                             * @function fromObject
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ManualSchedule
+                             * @static
+                             * @param {Object.<string,*>} object Plain object
+                             * @returns {google.cloud.bigquery.datatransfer.v1.ManualSchedule} ManualSchedule
+                             */
+                            ManualSchedule.fromObject = function fromObject(object) {
+                                if (object instanceof $root.google.cloud.bigquery.datatransfer.v1.ManualSchedule)
+                                    return object;
+                                return new $root.google.cloud.bigquery.datatransfer.v1.ManualSchedule();
+                            };
+    
+                            /**
+                             * Creates a plain object from a ManualSchedule message. Also converts values to other types if specified.
+                             * @function toObject
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ManualSchedule
+                             * @static
+                             * @param {google.cloud.bigquery.datatransfer.v1.ManualSchedule} message ManualSchedule
+                             * @param {$protobuf.IConversionOptions} [options] Conversion options
+                             * @returns {Object.<string,*>} Plain object
+                             */
+                            ManualSchedule.toObject = function toObject() {
+                                return {};
+                            };
+    
+                            /**
+                             * Converts this ManualSchedule to JSON.
+                             * @function toJSON
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ManualSchedule
+                             * @instance
+                             * @returns {Object.<string,*>} JSON object
+                             */
+                            ManualSchedule.prototype.toJSON = function toJSON() {
+                                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                            };
+    
+                            /**
+                             * Gets the default type url for ManualSchedule
+                             * @function getTypeUrl
+                             * @memberof google.cloud.bigquery.datatransfer.v1.ManualSchedule
+                             * @static
+                             * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                             * @returns {string} The default type url
+                             */
+                            ManualSchedule.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                                if (typeUrlPrefix === undefined) {
+                                    typeUrlPrefix = "type.googleapis.com";
+                                }
+                                return typeUrlPrefix + "/google.cloud.bigquery.datatransfer.v1.ManualSchedule";
+                            };
+    
+                            return ManualSchedule;
+                        })();
+    
+                        v1.EventDrivenSchedule = (function() {
+    
+                            /**
+                             * Properties of an EventDrivenSchedule.
+                             * @memberof google.cloud.bigquery.datatransfer.v1
+                             * @interface IEventDrivenSchedule
+                             * @property {string|null} [pubsubSubscription] EventDrivenSchedule pubsubSubscription
+                             */
+    
+                            /**
+                             * Constructs a new EventDrivenSchedule.
+                             * @memberof google.cloud.bigquery.datatransfer.v1
+                             * @classdesc Represents an EventDrivenSchedule.
+                             * @implements IEventDrivenSchedule
+                             * @constructor
+                             * @param {google.cloud.bigquery.datatransfer.v1.IEventDrivenSchedule=} [properties] Properties to set
+                             */
+                            function EventDrivenSchedule(properties) {
+                                if (properties)
+                                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                                        if (properties[keys[i]] != null)
+                                            this[keys[i]] = properties[keys[i]];
+                            }
+    
+                            /**
+                             * EventDrivenSchedule pubsubSubscription.
+                             * @member {string} pubsubSubscription
+                             * @memberof google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule
+                             * @instance
+                             */
+                            EventDrivenSchedule.prototype.pubsubSubscription = "";
+    
+                            /**
+                             * Creates a new EventDrivenSchedule instance using the specified properties.
+                             * @function create
+                             * @memberof google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule
+                             * @static
+                             * @param {google.cloud.bigquery.datatransfer.v1.IEventDrivenSchedule=} [properties] Properties to set
+                             * @returns {google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule} EventDrivenSchedule instance
+                             */
+                            EventDrivenSchedule.create = function create(properties) {
+                                return new EventDrivenSchedule(properties);
+                            };
+    
+                            /**
+                             * Encodes the specified EventDrivenSchedule message. Does not implicitly {@link google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule.verify|verify} messages.
+                             * @function encode
+                             * @memberof google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule
+                             * @static
+                             * @param {google.cloud.bigquery.datatransfer.v1.IEventDrivenSchedule} message EventDrivenSchedule message or plain object to encode
+                             * @param {$protobuf.Writer} [writer] Writer to encode to
+                             * @returns {$protobuf.Writer} Writer
+                             */
+                            EventDrivenSchedule.encode = function encode(message, writer) {
+                                if (!writer)
+                                    writer = $Writer.create();
+                                if (message.pubsubSubscription != null && Object.hasOwnProperty.call(message, "pubsubSubscription"))
+                                    writer.uint32(/* id 1, wireType 2 =*/10).string(message.pubsubSubscription);
+                                return writer;
+                            };
+    
+                            /**
+                             * Encodes the specified EventDrivenSchedule message, length delimited. Does not implicitly {@link google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule.verify|verify} messages.
+                             * @function encodeDelimited
+                             * @memberof google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule
+                             * @static
+                             * @param {google.cloud.bigquery.datatransfer.v1.IEventDrivenSchedule} message EventDrivenSchedule message or plain object to encode
+                             * @param {$protobuf.Writer} [writer] Writer to encode to
+                             * @returns {$protobuf.Writer} Writer
+                             */
+                            EventDrivenSchedule.encodeDelimited = function encodeDelimited(message, writer) {
+                                return this.encode(message, writer).ldelim();
+                            };
+    
+                            /**
+                             * Decodes an EventDrivenSchedule message from the specified reader or buffer.
+                             * @function decode
+                             * @memberof google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule
+                             * @static
+                             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                             * @param {number} [length] Message length if known beforehand
+                             * @returns {google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule} EventDrivenSchedule
+                             * @throws {Error} If the payload is not a reader or valid buffer
+                             * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                             */
+                            EventDrivenSchedule.decode = function decode(reader, length) {
+                                if (!(reader instanceof $Reader))
+                                    reader = $Reader.create(reader);
+                                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule();
+                                while (reader.pos < end) {
+                                    var tag = reader.uint32();
+                                    switch (tag >>> 3) {
+                                    case 1: {
+                                            message.pubsubSubscription = reader.string();
+                                            break;
+                                        }
+                                    default:
+                                        reader.skipType(tag & 7);
+                                        break;
+                                    }
+                                }
+                                return message;
+                            };
+    
+                            /**
+                             * Decodes an EventDrivenSchedule message from the specified reader or buffer, length delimited.
+                             * @function decodeDelimited
+                             * @memberof google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule
+                             * @static
+                             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                             * @returns {google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule} EventDrivenSchedule
+                             * @throws {Error} If the payload is not a reader or valid buffer
+                             * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                             */
+                            EventDrivenSchedule.decodeDelimited = function decodeDelimited(reader) {
+                                if (!(reader instanceof $Reader))
+                                    reader = new $Reader(reader);
+                                return this.decode(reader, reader.uint32());
+                            };
+    
+                            /**
+                             * Verifies an EventDrivenSchedule message.
+                             * @function verify
+                             * @memberof google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule
+                             * @static
+                             * @param {Object.<string,*>} message Plain object to verify
+                             * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                             */
+                            EventDrivenSchedule.verify = function verify(message) {
+                                if (typeof message !== "object" || message === null)
+                                    return "object expected";
+                                if (message.pubsubSubscription != null && message.hasOwnProperty("pubsubSubscription"))
+                                    if (!$util.isString(message.pubsubSubscription))
+                                        return "pubsubSubscription: string expected";
+                                return null;
+                            };
+    
+                            /**
+                             * Creates an EventDrivenSchedule message from a plain object. Also converts values to their respective internal types.
+                             * @function fromObject
+                             * @memberof google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule
+                             * @static
+                             * @param {Object.<string,*>} object Plain object
+                             * @returns {google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule} EventDrivenSchedule
+                             */
+                            EventDrivenSchedule.fromObject = function fromObject(object) {
+                                if (object instanceof $root.google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule)
+                                    return object;
+                                var message = new $root.google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule();
+                                if (object.pubsubSubscription != null)
+                                    message.pubsubSubscription = String(object.pubsubSubscription);
+                                return message;
+                            };
+    
+                            /**
+                             * Creates a plain object from an EventDrivenSchedule message. Also converts values to other types if specified.
+                             * @function toObject
+                             * @memberof google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule
+                             * @static
+                             * @param {google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule} message EventDrivenSchedule
+                             * @param {$protobuf.IConversionOptions} [options] Conversion options
+                             * @returns {Object.<string,*>} Plain object
+                             */
+                            EventDrivenSchedule.toObject = function toObject(message, options) {
+                                if (!options)
+                                    options = {};
+                                var object = {};
+                                if (options.defaults)
+                                    object.pubsubSubscription = "";
+                                if (message.pubsubSubscription != null && message.hasOwnProperty("pubsubSubscription"))
+                                    object.pubsubSubscription = message.pubsubSubscription;
+                                return object;
+                            };
+    
+                            /**
+                             * Converts this EventDrivenSchedule to JSON.
+                             * @function toJSON
+                             * @memberof google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule
+                             * @instance
+                             * @returns {Object.<string,*>} JSON object
+                             */
+                            EventDrivenSchedule.prototype.toJSON = function toJSON() {
+                                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                            };
+    
+                            /**
+                             * Gets the default type url for EventDrivenSchedule
+                             * @function getTypeUrl
+                             * @memberof google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule
+                             * @static
+                             * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                             * @returns {string} The default type url
+                             */
+                            EventDrivenSchedule.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                                if (typeUrlPrefix === undefined) {
+                                    typeUrlPrefix = "type.googleapis.com";
+                                }
+                                return typeUrlPrefix + "/google.cloud.bigquery.datatransfer.v1.EventDrivenSchedule";
+                            };
+    
+                            return EventDrivenSchedule;
+                        })();
+    
                         v1.UserInfo = (function() {
     
                             /**
@@ -8793,6 +9728,7 @@
                              * @property {google.protobuf.IStruct|null} [params] TransferConfig params
                              * @property {string|null} [schedule] TransferConfig schedule
                              * @property {google.cloud.bigquery.datatransfer.v1.IScheduleOptions|null} [scheduleOptions] TransferConfig scheduleOptions
+                             * @property {google.cloud.bigquery.datatransfer.v1.IScheduleOptionsV2|null} [scheduleOptionsV2] TransferConfig scheduleOptionsV2
                              * @property {number|null} [dataRefreshWindowDays] TransferConfig dataRefreshWindowDays
                              * @property {boolean|null} [disabled] TransferConfig disabled
                              * @property {google.protobuf.ITimestamp|null} [updateTime] TransferConfig updateTime
@@ -8804,6 +9740,7 @@
                              * @property {google.cloud.bigquery.datatransfer.v1.IEmailPreferences|null} [emailPreferences] TransferConfig emailPreferences
                              * @property {google.cloud.bigquery.datatransfer.v1.IUserInfo|null} [ownerInfo] TransferConfig ownerInfo
                              * @property {google.cloud.bigquery.datatransfer.v1.IEncryptionConfiguration|null} [encryptionConfiguration] TransferConfig encryptionConfiguration
+                             * @property {google.rpc.IStatus|null} [error] TransferConfig error
                              */
     
                             /**
@@ -8877,6 +9814,14 @@
                              */
                             TransferConfig.prototype.scheduleOptions = null;
     
+                            /**
+                             * TransferConfig scheduleOptionsV2.
+                             * @member {google.cloud.bigquery.datatransfer.v1.IScheduleOptionsV2|null|undefined} scheduleOptionsV2
+                             * @memberof google.cloud.bigquery.datatransfer.v1.TransferConfig
+                             * @instance
+                             */
+                            TransferConfig.prototype.scheduleOptionsV2 = null;
+    
                             /**
                              * TransferConfig dataRefreshWindowDays.
                              * @member {number} dataRefreshWindowDays
@@ -8965,6 +9910,14 @@
                              */
                             TransferConfig.prototype.encryptionConfiguration = null;
     
+                            /**
+                             * TransferConfig error.
+                             * @member {google.rpc.IStatus|null|undefined} error
+                             * @memberof google.cloud.bigquery.datatransfer.v1.TransferConfig
+                             * @instance
+                             */
+                            TransferConfig.prototype.error = null;
+    
                             // OneOf field names bound to virtual getters and setters
                             var $oneOfFields;
     
@@ -9050,6 +10003,10 @@
                                     $root.google.cloud.bigquery.datatransfer.v1.UserInfo.encode(message.ownerInfo, writer.uint32(/* id 27, wireType 2 =*/218).fork()).ldelim();
                                 if (message.encryptionConfiguration != null && Object.hasOwnProperty.call(message, "encryptionConfiguration"))
                                     $root.google.cloud.bigquery.datatransfer.v1.EncryptionConfiguration.encode(message.encryptionConfiguration, writer.uint32(/* id 28, wireType 2 =*/226).fork()).ldelim();
+                                if (message.scheduleOptionsV2 != null && Object.hasOwnProperty.call(message, "scheduleOptionsV2"))
+                                    $root.google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2.encode(message.scheduleOptionsV2, writer.uint32(/* id 31, wireType 2 =*/250).fork()).ldelim();
+                                if (message.error != null && Object.hasOwnProperty.call(message, "error"))
+                                    $root.google.rpc.Status.encode(message.error, writer.uint32(/* id 32, wireType 2 =*/258).fork()).ldelim();
                                 return writer;
                             };
     
@@ -9112,6 +10069,10 @@
                                             message.scheduleOptions = $root.google.cloud.bigquery.datatransfer.v1.ScheduleOptions.decode(reader, reader.uint32());
                                             break;
                                         }
+                                    case 31: {
+                                            message.scheduleOptionsV2 = $root.google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2.decode(reader, reader.uint32());
+                                            break;
+                                        }
                                     case 12: {
                                             message.dataRefreshWindowDays = reader.int32();
                                             break;
@@ -9156,6 +10117,10 @@
                                             message.encryptionConfiguration = $root.google.cloud.bigquery.datatransfer.v1.EncryptionConfiguration.decode(reader, reader.uint32());
                                             break;
                                         }
+                                    case 32: {
+                                            message.error = $root.google.rpc.Status.decode(reader, reader.uint32());
+                                            break;
+                                        }
                                     default:
                                         reader.skipType(tag & 7);
                                         break;
@@ -9219,6 +10184,11 @@
                                     if (error)
                                         return "scheduleOptions." + error;
                                 }
+                                if (message.scheduleOptionsV2 != null && message.hasOwnProperty("scheduleOptionsV2")) {
+                                    var error = $root.google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2.verify(message.scheduleOptionsV2);
+                                    if (error)
+                                        return "scheduleOptionsV2." + error;
+                                }
                                 if (message.dataRefreshWindowDays != null && message.hasOwnProperty("dataRefreshWindowDays"))
                                     if (!$util.isInteger(message.dataRefreshWindowDays))
                                         return "dataRefreshWindowDays: integer expected";
@@ -9274,6 +10244,11 @@
                                     if (error)
                                         return "encryptionConfiguration." + error;
                                 }
+                                if (message.error != null && message.hasOwnProperty("error")) {
+                                    var error = $root.google.rpc.Status.verify(message.error);
+                                    if (error)
+                                        return "error." + error;
+                                }
                                 return null;
                             };
     
@@ -9309,6 +10284,11 @@
                                         throw TypeError(".google.cloud.bigquery.datatransfer.v1.TransferConfig.scheduleOptions: object expected");
                                     message.scheduleOptions = $root.google.cloud.bigquery.datatransfer.v1.ScheduleOptions.fromObject(object.scheduleOptions);
                                 }
+                                if (object.scheduleOptionsV2 != null) {
+                                    if (typeof object.scheduleOptionsV2 !== "object")
+                                        throw TypeError(".google.cloud.bigquery.datatransfer.v1.TransferConfig.scheduleOptionsV2: object expected");
+                                    message.scheduleOptionsV2 = $root.google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2.fromObject(object.scheduleOptionsV2);
+                                }
                                 if (object.dataRefreshWindowDays != null)
                                     message.dataRefreshWindowDays = object.dataRefreshWindowDays | 0;
                                 if (object.disabled != null)
@@ -9383,6 +10363,11 @@
                                         throw TypeError(".google.cloud.bigquery.datatransfer.v1.TransferConfig.encryptionConfiguration: object expected");
                                     message.encryptionConfiguration = $root.google.cloud.bigquery.datatransfer.v1.EncryptionConfiguration.fromObject(object.encryptionConfiguration);
                                 }
+                                if (object.error != null) {
+                                    if (typeof object.error !== "object")
+                                        throw TypeError(".google.cloud.bigquery.datatransfer.v1.TransferConfig.error: object expected");
+                                    message.error = $root.google.rpc.Status.fromObject(object.error);
+                                }
                                 return message;
                             };
     
@@ -9420,6 +10405,8 @@
                                     object.emailPreferences = null;
                                     object.scheduleOptions = null;
                                     object.encryptionConfiguration = null;
+                                    object.scheduleOptionsV2 = null;
+                                    object.error = null;
                                 }
                                 if (message.name != null && message.hasOwnProperty("name"))
                                     object.name = message.name;
@@ -9466,6 +10453,10 @@
                                 }
                                 if (message.encryptionConfiguration != null && message.hasOwnProperty("encryptionConfiguration"))
                                     object.encryptionConfiguration = $root.google.cloud.bigquery.datatransfer.v1.EncryptionConfiguration.toObject(message.encryptionConfiguration, options);
+                                if (message.scheduleOptionsV2 != null && message.hasOwnProperty("scheduleOptionsV2"))
+                                    object.scheduleOptionsV2 = $root.google.cloud.bigquery.datatransfer.v1.ScheduleOptionsV2.toObject(message.scheduleOptionsV2, options);
+                                if (message.error != null && message.hasOwnProperty("error"))
+                                    object.error = $root.google.rpc.Status.toObject(message.error, options);
                                 return object;
                             };
     
diff --git a/packages/google-cloud-bigquery-datatransfer/protos/protos.json b/packages/google-cloud-bigquery-datatransfer/protos/protos.json
index 6dd8cd51e08..b623a8a04a8 100644
--- a/packages/google-cloud-bigquery-datatransfer/protos/protos.json
+++ b/packages/google-cloud-bigquery-datatransfer/protos/protos.json
@@ -1,4 +1,7 @@
 {
+  "options": {
+    "syntax": "proto3"
+  },
   "nested": {
     "google": {
       "nested": {
@@ -1075,6 +1078,58 @@
                             }
                           }
                         },
+                        "ScheduleOptionsV2": {
+                          "oneofs": {
+                            "schedule": {
+                              "oneof": [
+                                "timeBasedSchedule",
+                                "manualSchedule",
+                                "eventDrivenSchedule"
+                              ]
+                            }
+                          },
+                          "fields": {
+                            "timeBasedSchedule": {
+                              "type": "TimeBasedSchedule",
+                              "id": 1
+                            },
+                            "manualSchedule": {
+                              "type": "ManualSchedule",
+                              "id": 2
+                            },
+                            "eventDrivenSchedule": {
+                              "type": "EventDrivenSchedule",
+                              "id": 3
+                            }
+                          }
+                        },
+                        "TimeBasedSchedule": {
+                          "fields": {
+                            "schedule": {
+                              "type": "string",
+                              "id": 1
+                            },
+                            "startTime": {
+                              "type": "google.protobuf.Timestamp",
+                              "id": 2
+                            },
+                            "endTime": {
+                              "type": "google.protobuf.Timestamp",
+                              "id": 3
+                            }
+                          }
+                        },
+                        "ManualSchedule": {
+                          "fields": {}
+                        },
+                        "EventDrivenSchedule": {
+                          "fields": {
+                            "pubsubSubscription": {
+                              "type": "string",
+                              "id": 1
+                            }
+                          }
+                        },
                         "UserInfo": {
                           "oneofs": {
                             "_email": {
@@ -1142,6 +1197,10 @@
                               "type": "ScheduleOptions",
                               "id": 24
                             },
+                            "scheduleOptionsV2": {
+                              "type": "ScheduleOptionsV2",
+                              "id": 31
+                            },
                             "dataRefreshWindowDays": {
                               "type": "int32",
                               "id": 12
@@ -1201,6 +1260,13 @@
                             "encryptionConfiguration": {
                               "type": "EncryptionConfiguration",
                               "id": 28
+                            },
+                            "error": {
+                              "type": "google.rpc.Status",
+                              "id": 32,
+                              "options": {
+                                "(google.api.field_behavior)": "OUTPUT_ONLY"
+                              }
                             }
                           }
                         },