API Reference Stay organized with collections Save and categorize content based on your preferences.
Below contains an overview of the specifications for the Bundle Builder API, including TypeScript definitions & detailed descriptions.
BundleDocument Interface
The specification for a single document within the configured collection:
typeBundleDocument={// A list of document IDs to serve in the bundle.docs?:Array<string>;// A map containing individual named queries and their definitions.queries?:Map<string,QueryDefinition[]>;// A map of parameters and their definitions, which can be provided to a query definition.params?:Map<string,ParamDefinition>;// Specifies how long to keep the bundle in the client's cache, in seconds. If not defined, client-side cache is disabled.clientCache?:string;// Only used in combination with Firebase Hosting. Specifies how long to keep the bundle in Firebase Hosting CDN cache, in seconds.serverCache:string;// Specifies how long (in seconds) to keep the bundle in a Cloud Storage bucket, in seconds. If not defined, Cloud Storage bucket is not accessed.fileCache?:string;// If a 'File Cache' is specified, bundles created before this timestamp will not be file cached.notBefore?:Timestamp;};ParamDefinition Interface
The specification of a single parameter defined in aBundleDocument.
typeParamDefinition={// Whether this parameter is required. If not provided as a query string, an error will be thrown.required:boolean;// The type of value which will be parsed, defaults to 'string'.type?:|"string"|"integer"|"float"|"boolean"|"string-array"|"integer-array"|"float-array";};For example, given the follow parameter:
params:{name:{required:true,type:'string',}}When making a request to the bundle HTTP endpoint, the parameter can be provided via a query parameter, e.g.?name=david. The parameter can be used within aQueryDefinition (see below) value ($name) to dynamically create bundles.
QueryDefinition Interface
A query definition is used to create named queries on the bundle. Each object within thequeries map will create a new named query, using the object key as the name. Each query must specify a collection, and optionally a list of query conditions to perform.
typeQueryDefinition={// The collection to perform the query on.collection:string;// An optional list of conditions to perform on the specified collection.conditions?:QueryCondition[];};Theconditions parameter can contain an array ofQueryCondition interfaces. Each item in the array must only include a single condition.
typeQueryCondition={// Performs a `where` filter on the collection on a given FieldPath, operator and value.where?:[string,(|"<"|"<="|"=="|">="|">"|"!="|"array-contains"|"in"|"not-in"|"array-contains-any"),any];orderBy?:[string,("asc"|"desc")?];limit?:number;limitToLast?:number;offset?:number;startAt?:string;startAfter?:string;endAt?:string;endBefore?:string;};For example, to create a query named "products" on aproducts collection with a where and limit condition, the data structure output should match the following:
queries:{products:{collection:'products',conditions:[{where:['type','==','featured']},{limit:10},],}}When providing array values toin,not-in, orarray-contains-any filters, you must provide a comma separated value as the value as nested array values are not supported in Firestore. For example:
{where:['category','in','womens,shorts']},// ['womens', 'shorts']Any number value will be parsed as a number, however if a string number value is required it should be wrapped in parentheses:
{where:['price','in','1,2.5']},// [1, 2.5]{where:['price','in','"1","2.5"']},// ['1', '2.5']Conditions can also be used alongside parameters. For example, if a parametertype is defined (see above), this can be provided to a condition value to provide dynamic data bundles via the$ syntax:
// ?type=featuredconditions:[{where:['type','==','$type']},Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2026-02-04 UTC.