Feed Errors

Feed Error Notifications

Reserve with Google sends automatic notification emails if a feed is uploaded with errors. These are sent to the support/escalation technical contact for a partner and will include error codes from the table below.

The emails that Reserve with Google sends out will contain the error codes and the data from the feed item that is causing the error. If the specified field is not listed in the data, that means that the field was either left out of the feed or had its default value.

Feed Error Codes

  // A list of errors that may be thrown during feed ingestion.
  //
  // Next ID: 45
  enum Error {
    // Unused.
    ERROR_UNSPECIFIED = 0;

    // Timestamp represents either a time too early in the past, or too far in
    // the future to represent a valid value. This error is mainly intended to
    // catch errors with units, like microseconds vs. milliseconds, or seconds.
    TIMESTAMP_OUT_OF_RANGE = 1;

    // Duration is either negative, or too large, or too small to represent a
    // valid duration. This error is mainly intended to catch errors with units,
    // like microseconds vs. milliseconds, or seconds.
    DURATION_OUT_OF_RANGE = 2;

    // Start time is earlier than end time, or the individual timestamps which
    // make-up the timerange are themselves out of valid range.
    INVALID_TIME_RANGE = 3;

    // The price is either too small a fraction to be useful (e.g. one millionth
    // of a dollar), or too large (e.g. one million dollars) to represent a
    // correct price. Note that zero dollars is accepted and means "free".
    // This error is mainly intended to catch errors with units, like
    // microdollars vs. whole dollars.
    PRICE_OUT_OF_RANGE = 4;

    // The currency code is not supported.
    INVALID_CURRENCY_CODE = 5;

    // The tax rate is either too small a fraction to be useful (e.g. one
    // millionth of a percent), or to large to be an correct tax rate
    // (e.g. 1000%). Note that zero is accepted and means no tax. This error is
    // mainly intended to catch errors with units, like micro-percent vs.
    // percent.
    TAX_RATE_OUT_OF_RANGE = 6;

    // A record was sent within a restriction, but does not belong within that
    // restriction. e.g. service_availability restrict between Jan 1st 2017 and
    // Jan 2nd 2017, with an availability slot for Jan 3rd 2017.
    RECORD_OUT_OF_RESTRICTION = 7;

    // The total or open spot count of an availability slot is either negative,
    // or too large to represent a correct spot count (e.g. 1 million spots).
    AVAILABILITY_SPOT_COUNT_OUT_OF_RANGE = 8;

    // Restricts are only useful to remove availability slots, and incremental
    // feeds don’t ever remove slots. Using both together is always a mistake.
    AVAILABILITY_RESTRICT_IN_INCREMENTAL_FEED = 9;

    // The id of a Merchant, Service or PaymentOption is missing.
    MISSING_ID = 10;

    // The name of a Merchant, Service, PaymentOption, or event entity is
    // missing.
    MISSING_NAME = 11;

    // The address of a Merchant or Service-level location is missing.
    MISSING_ADDRESS = 12;

    // The price of a PaymentOption is missing.
    MISSING_PRICE = 13;

    // Multiple payment options with the same payment_option_id are present in
    // the Merchant feed, and are not identical.
    CONFLICTING_PAYMENT_OPTION = 14;

    // Used when schedule exceptions are present but no recurrence.
    MISSING_RECURRENCE = 15;

    // The start of an exception must not exceed the duration of the final
    // slot. The end of an exception must not terminate before the beginning
    // of the first slot.
    SCHEDULE_EXCEPTION_OUT_OF_RECURRENCE = 16;

    // More than one payment option id override was found in an availability
    // slot. Only one is allowed.
    TOO_MANY_PAYMENT_OPTIONS = 17;

    // Used when staff_id or room_id is provided and the corresponding name
    // field is empty.
    MISSING_RESOURCES = 18;

    // The tokenization configuration is malformed.
    TOKENIZATION_CONFIG = 19;

    // Used when a required field is not set.
    MISSING_REQUIRED_FIELD = 20;

    // The provided MerchantMatchingHints message is invalid.
    INVALID_MATCHING_HINTS = 21;

    // The given URL is considered harmful and therefore blacklisted by Google,
    // or it is not allowed to be served on Google domains due to FTC Opt-out
    // regulation.
    BAD_OR_INELIGIBLE_URL = 22;

    // The service attribute provided on the merchant was invalid.
    INVALID_SERVICE_ATTRIBUTE = 23;

    // The scheduling rules provided on the service was invalid.
    INVALID_SCHEDULING_RULES = 24;

    // The waitlist rules message provided on the service was invalid.
    INVALID_WAITLIST_RULES = 25;

    // The provided last_bookable_sec is later than the start_sec.
    LAST_BOOKABLE_SEC_AFTER_START_SEC = 26;

    // The provided first_bookable_sec is later than the start_sec.
    FIRST_BOOKABLE_SEC_AFTER_START_SEC = 29;

    // The supported_resources message on the merchant was invalid.
    INVALID_SUPPORTED_RESOURCES = 27;

    // Recurrences over 24h are not supported.
    RECURRENCE_TOO_LONG = 28;

    // An entity in TicketingVerticalSpecificData is invalid.
    INVALID_ENTITY = 43;

    // An invalid combination of ticketing entity type and event
    // category/entity role.
    INVALID_ENTITY_TYPE_COMBINATION = 30;

    // Indicates the incorrect prepayment type was set for the service's price
    // display type. E.g. Any service that uses PriceInterpretation.STARTS_AT
    // must use PrepaymentType.NOT_SUPPORTED.
    INVALID_PREPAYMENT_TYPE_FOR_PRICE_INTERPRETATION = 31;

    // The type provided on the service is invalid. The aggregator does not have
    // multiple booking transaction flows scheduling capability, and the type is
    // not supported by the aggregator vertical. E.g., An appointment-based
    // service is provided by an order-based aggregator.
    INVALID_SERVICE_TYPE = 32;

    // Indicates the localized text message is empty.
    MISSING_TEXT = 33;

    // Indicates the locale of a localized text is missing.
    MISSING_TEXT_LOCALE = 34;

    // Indicates duplicate locales in a localized text.
    DUPLICATE_TEXT_LOCALE = 40;

    // Indicates the value of a localized text is missing.
    MISSING_TEXT_VALUE = 35;

    // Indicates that a service-level location does not contain enough
    // information. E.g, a service-level location must be supplied at least one
    // of fields below: place_id, geo_coordinates or description.
    MISSING_SERVICE_LOCATION = 36;

    // The type provided for the location is invalid.
    INVALID_LOCATION_TYPE = 37;

    // The location id has duplicates in the same service.
    DUPLICATE_LOCATION_ID = 38;

    // The location id is not valid.
    INVALID_LOCATION_ID = 39;

    // The refund condition provided on the scheduling rule is not valid.
    INVALID_REFUND_CONDITION = 41;

    // MusicBrainz ID provided for an entity is invalid.
    INVALID_MUSICBRAINZ_ID = 42;

    // Rating provided is not valid;
    INVALID_RATING = 44;
  }