Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.0.0
paths:
/api/search/v1/catalog:
get:
description: Provides information about the site and its catalog of organized resources and collections.
operationId: CatalogController_getSiteCatalog_api/search/v1
parameters:
- name: token
required: false
in: query
description: ArcGIS token to use when accessing the underlying ArcGIS Item that represents the
site.
schema:
type: string
responses:
'200':
description: A data object describing the site and its catalog.
content:
application/json:
schema:
$ref: '#/components/schemas/Catalog'
summary: ''
tags:
- Catalog
/api/search/v1/collections:
get:
description: Lists the collections described in the site's catalog.
operationId: CollectionController_getSiteCollections_api/search/v1
parameters:
- name: token
required: false
in: query
description: ArcGIS token to use when accessing the underlying ArcGIS Item that represents the
site.
schema:
type: string
responses:
'200':
description: A data object containing a list of site catalog collections.
content:
application/json:
schema:
$ref: '#/components/schemas/CollectionsResponseDto'
summary: ''
tags:
- Collection
/api/search/v1/collections/{collectionId}:
get:
description: Retrieves the collection from a site's catalog with a provided id/key
operationId: CollectionController_getSiteCollectionFromId_api/search/v1
parameters:
- name: collectionId
required: true
in: path
description: Key/id for the desired collection.
schema:
example: dataset
type: string
- name: token
required: false
in: query
description: ArcGIS token to use when accessing the underlying ArcGIS Item that represents the
site.
schema:
type: string
responses:
'200':
description: A data object describing a site collection.
content:
application/json:
schema:
$ref: '#/components/schemas/CollectionWithLinksDto'
summary: ''
tags:
- Collection
/api/search/v1/collections/{collectionId}/queryables:
get:
description: Lists the minimal item properties expected to be returned when searching items in the
specified collection.
operationId: QueryableController_getSiteCollectionQueryables_api/search/v1
parameters:
- name: collectionId
required: true
in: path
description: Key/id of the collection for which queryables should be obtained.
schema:
example: dataset
type: string
- name: token
required: false
in: query
description: ArcGIS token to use when accessing the underlying ArcGIS Item that represents the
site.
schema:
type: string
responses:
'200':
description: A data object describing the core queryable fields of a site catalog collection.
content:
application/json:
schema:
$ref: '#/components/schemas/OgcQueryablesResponseDto'
summary: ''
tags:
- Queryable
/api/search/v1/collections/{collectionId}/items:
get:
description: Returns items from the specified site catalog collection that match specified filters
operationId: OgcItemController_getSiteCollectionItems_api/search/v1
parameters:
- name: collectionId
required: true
in: path
description: Key/id of the collection for which item should be filtered and returned.
schema:
example: dataset
type: string
- name: q
required: false
in: query
description: A general text search filter.
schema:
title: q
type: string
- name: bbox
required: false
in: query
description: A bbox filter, must be 4 comma-separated coordinates
schema:
title: bbox
type: string
- name: filter
required: false
in: query
description: query parameter that represents a parse-able string of filter expressions, structured
according to the <a href="https://portal.ogc.org/files/96288">Common Query Language Specification
of the OGC Features API</a>. If filter values must include whitespace, try wrapping the value
in single quotes.
schema:
title: filter
type: string
examples:
equals:
summary: Equals
value: type='Feature Service'
greaterThan:
summary: Greater Than
value: created > 1670531235
greaterThanOrEquals:
summary: Greater Than Or Equals
value: created >= 1670531235
LessThan:
summary: Less Than
value: created < 1670531235
lessThanOrEquals:
summary: Less Than Or Equals
value: created <= 1670531235
in:
summary: IN
value: tags IN (tag1, 'tag2', tag3)
notIn:
summary: NOT IN
value: tags NOT IN (tag1, 'tag2', tag3)
betweenAnd:
summary: BETWEEN AND
value: created BETWEEN 1670531235 AND 1770531235
notBetweenAnd:
summary: NOT BETWEEN AND
value: created NOT BETWEEN 1670531235 AND 1770531235
like:
summary: LIKE
value: description LIKE 'moby*'
'null':
summary: IS NULL
value: source IS NULL
notNull:
summary: IS NOT NULL
value: owner IS NOT NULL
and:
summary: AND
value: tags NOT IN (tag1, 'tag2', tag3) AND owner IS NOT NULL
or:
summary: OR
value: tags NOT IN (tag1, 'tag2', tag3) OR owner IS NOT NULL
not:
summary: NOT
value: tags NOT IN (tag1, 'tag2', tag3) NOT owner IS NULL
subExpressions:
summary: Subexpressions
value: ((type='Feature Service' AND access=public) OR (type='Web Mapping Application' AND
access=shared))
- name: limit
required: false
in: query
description: The number of results to return.
schema:
title: limit
type: integer
minimum: 0
maximum: 100
- name: startindex
required: false
in: query
description: The initial index of the results to return, starting at 1.
schema:
title: startindex
type: integer
minimum: 1
- name: type
required: false
in: query
description: The type of resource.
schema:
title: type
type: string
description: the type of the underlying resource
- name: title
required: false
in: query
description: The title of resource to return.
schema:
title: title
type: string
description: the title of the underlying resource
- name: recordId
required: false
in: query
description: The recordId of resource to return. recordId could be itemId or itemId_layerId
schema:
title: recordId
type: string
description: id of the record
- name: sortBy
required: false
in: query
description: Sort results by specific fields. Prefixed by either "+" for ascending or "-" for
descending. If no prefix is provided, "+" is assumed.
schema:
title: sortBy
type: string
- name: tags
required: false
in: query
description: Tags for items search
schema:
example: 'true'
type: string
- name: token
required: false
in: query
description: Token to use when accessing the underlying ArcGIS Item that represents the site.
schema:
title: token
type: string
- name: openData
required: false
in: query
description: Boolean flag to get items that are shared to Opendata group
schema:
example: 'true'
type: string
responses:
'200':
description: A FeatureCollection object describing items (in GeoJSON) returned when searching
the provided collection
content:
application/json:
schema:
$ref: '#/components/schemas/OgcItemResponseDto'
summary: ''
tags:
- OgcItem
/api/search/v1/collections/{collectionId}/items/{itemId}:
get:
operationId: OgcItemController_getSiteCollectionItemById_api/search/v1
parameters:
- name: collectionId
required: true
in: path
schema:
example: dataset
type: string
- name: itemId
required: true
in: path
schema:
type: string
- name: token
required: false
in: query
description: token for use in authentication/authorization
schema:
title: token
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/OgcItemDto'
tags:
- OgcItem
/api/search/v1/collections/{collectionId}/items/{recordId}/related:
get:
description: Returns related items to recordId from the specified site catalog collection that match
specified filters
operationId: OgcItemController_getRelatedOgcItemsById_api/search/v1
parameters:
- name: collectionId
required: true
in: path
description: Key/id of the collection for which item should be filtered and returned.
schema:
example: dataset
type: string
- name: q
required: false
in: query
description: A general text search filter.
schema:
title: q
type: string
- name: bbox
required: false
in: query
description: A bbox filter, must be 4 comma-separated coordinates
schema:
title: bbox
type: string
- name: filter
required: false
in: query
description: query parameter that represents a parse-able string of filter expressions, structured
according to the <a href="https://portal.ogc.org/files/96288">Common Query Language Specification
of the OGC Features API</a>. If filter values must include whitespace, try wrapping the value
in single quotes.
schema:
title: filter
type: string
examples:
equals:
summary: Equals
value: type='Feature Service'
greaterThan:
summary: Greater Than
value: created > 1670531235
greaterThanOrEquals:
summary: Greater Than Or Equals
value: created >= 1670531235
LessThan:
summary: Less Than
value: created < 1670531235
lessThanOrEquals:
summary: Less Than Or Equals
value: created <= 1670531235
in:
summary: IN
value: tags IN (tag1, 'tag2', tag3)
notIn:
summary: NOT IN
value: tags NOT IN (tag1, 'tag2', tag3)
betweenAnd:
summary: BETWEEN AND
value: created BETWEEN 1670531235 AND 1770531235
notBetweenAnd:
summary: NOT BETWEEN AND
value: created NOT BETWEEN 1670531235 AND 1770531235
like:
summary: LIKE
value: description LIKE 'moby*'
'null':
summary: IS NULL
value: source IS NULL
notNull:
summary: IS NOT NULL
value: owner IS NOT NULL
and:
summary: AND
value: tags NOT IN (tag1, 'tag2', tag3) AND owner IS NOT NULL
or:
summary: OR
value: tags NOT IN (tag1, 'tag2', tag3) OR owner IS NOT NULL
not:
summary: NOT
value: tags NOT IN (tag1, 'tag2', tag3) NOT owner IS NULL
subExpressions:
summary: Subexpressions
value: ((type='Feature Service' AND access=public) OR (type='Web Mapping Application' AND
access=shared))
- name: limit
required: false
in: query
description: The number of results to return.
schema:
title: limit
type: integer
minimum: 0
maximum: 100
- name: startindex
required: false
in: query
description: The initial index of the results to return, starting at 1.
schema:
title: startindex
type: integer
minimum: 1
- name: type
required: false
in: query
description: The type of resource.
schema:
title: type
type: string
description: the type of the underlying resource
- name: title
required: false
in: query
description: The title of resource to return.
schema:
title: title
type: string
description: the title of the underlying resource
- name: recordId
required: false
in: query
description: The recordId of resource to return. recordId could be itemId or itemId_layerId
schema:
title: recordId
type: string
description: id of the record
- name: sortBy
required: false
in: query
description: Sort results by specific fields. Prefixed by either "+" for ascending or "-" for
descending. If no prefix is provided, "+" is assumed.
schema:
title: sortBy
type: string
- name: tags
required: false
in: query
description: Tags for items search
schema:
example: 'true'
type: string
- name: token
required: false
in: query
description: Token to use when accessing the underlying ArcGIS Item that represents the site.
schema:
title: token
type: string
- name: openData
required: false
in: query
description: Boolean flag to get items that are shared to Opendata group
schema:
example: 'true'
type: string
responses:
'200':
description: A FeatureCollection object describing related items to recordId (in GeoJSON) returned
when searching the provided collection
content:
application/json:
schema:
$ref: '#/components/schemas/OgcItemResponseDto'
summary: ''
tags:
- OgcItem
/api/search/v1/collections/{collectionId}/items/{recordId}/connected:
get:
description: Returns connected items to recordId from the specified site catalog collection that
match specified filters
operationId: OgcItemController_getConnectedOgcItemsById_api/search/v1
parameters:
- name: collectionId
required: true
in: path
description: Key/id of the collection for which item should be filtered and returned.
schema:
example: dataset
type: string
- name: q
required: false
in: query
description: A general text search filter.
schema:
title: q
type: string
- name: bbox
required: false
in: query
description: A bbox filter, must be 4 comma-separated coordinates
schema:
title: bbox
type: string
- name: filter
required: false
in: query
description: query parameter that represents a parse-able string of filter expressions, structured
according to the <a href="https://portal.ogc.org/files/96288">Common Query Language Specification
of the OGC Features API</a>. If filter values must include whitespace, try wrapping the value
in single quotes.
schema:
title: filter
type: string
examples:
equals:
summary: Equals
value: type='Feature Service'
greaterThan:
summary: Greater Than
value: created > 1670531235
greaterThanOrEquals:
summary: Greater Than Or Equals
value: created >= 1670531235
LessThan:
summary: Less Than
value: created < 1670531235
lessThanOrEquals:
summary: Less Than Or Equals
value: created <= 1670531235
in:
summary: IN
value: tags IN (tag1, 'tag2', tag3)
notIn:
summary: NOT IN
value: tags NOT IN (tag1, 'tag2', tag3)
betweenAnd:
summary: BETWEEN AND
value: created BETWEEN 1670531235 AND 1770531235
notBetweenAnd:
summary: NOT BETWEEN AND
value: created NOT BETWEEN 1670531235 AND 1770531235
like:
summary: LIKE
value: description LIKE 'moby*'
'null':
summary: IS NULL
value: source IS NULL
notNull:
summary: IS NOT NULL
value: owner IS NOT NULL
and:
summary: AND
value: tags NOT IN (tag1, 'tag2', tag3) AND owner IS NOT NULL
or:
summary: OR
value: tags NOT IN (tag1, 'tag2', tag3) OR owner IS NOT NULL
not:
summary: NOT
value: tags NOT IN (tag1, 'tag2', tag3) NOT owner IS NULL
subExpressions:
summary: Subexpressions
value: ((type='Feature Service' AND access=public) OR (type='Web Mapping Application' AND
access=shared))
- name: limit
required: false
in: query
description: The number of results to return.
schema:
title: limit
type: integer
minimum: 0
maximum: 100
- name: startindex
required: false
in: query
description: The initial index of the results to return, starting at 1.
schema:
title: startindex
type: integer
minimum: 1
- name: type
required: false
in: query
description: The type of resource.
schema:
title: type
type: string
description: the type of the underlying resource
- name: title
required: false
in: query
description: The title of resource to return.
schema:
title: title
type: string
description: the title of the underlying resource
- name: recordId
required: false
in: query
description: The recordId of resource to return. recordId could be itemId or itemId_layerId
schema:
title: recordId
type: string
description: id of the record
- name: sortBy
required: false
in: query
description: Sort results by specific fields. Prefixed by either "+" for ascending or "-" for
descending. If no prefix is provided, "+" is assumed.
schema:
title: sortBy
type: string
- name: tags
required: false
in: query
description: Tags for items search
schema:
example: 'true'
type: string
- name: token
required: false
in: query
description: Token to use when accessing the underlying ArcGIS Item that represents the site.
schema:
title: token
type: string
- name: openData
required: false
in: query
description: Boolean flag to get items that are shared to Opendata group
schema:
example: 'true'
type: string
responses:
'200':
description: A FeatureCollection object describing connected items to recordId (in GeoJSON)
returned when searching the provided collection
content:
application/json:
schema:
$ref: '#/components/schemas/OgcItemResponseDto'
summary: ''
tags:
- OgcItem
/api/search/v1/collections/{collectionId}/aggregations:
get:
description: Returns requested aggregations from the specified site catalog collection
operationId: OgcItemAggregationController_getAggregations_api/search/v1
parameters:
- name: collectionId
required: true
in: path
description: Key/id of the collection for which item should be filtered and returned.
schema:
example: dataset
type: string
- name: exampleAggregationName
required: false
in: query
description: <b>This is an EXAMPLE aggregation expression</b>. More aggregation expressions can
be specified by adding additional query parameters, where the name of the parameter is an arbitrary
alphabetic aggregation name
examples:
terms:
summary: Terms
value: terms(fields=(access,tags,source))
description: An aggregation that analyzes matching items by the unique values of the specified
fields. Returns buckets by field and unique value. The mandatory "fields" parameter is a
comma-separated list of field names to aggregate on.
max:
summary: Max
value: max(fields=(totalReplies, totalReactions))
description: An aggregation that calculates the maximum value of one or more fields across
all matching items. The mandatory "fields" parameter is a comma-separated list of field
names to aggregate on.
min:
summary: Min
value: min(fields=(totalReplies, totalReactions))
description: An aggregation that calculates the minimum value of one or more fields across
all matching items. The mandatory "fields" parameter is a comma-separated list of field
names to aggregate on.
avg:
summary: Avg
value: avg(fields=(totalReactions, totalReplies))
description: An aggregation that calculates the averages value of one or more fields across
all matching items. The mandatory "fields" parameter is a comma-separated list of field
names to aggregate on.
histogram:
summary: Histogram
value: histogram(fields=(totalReplies,totalReactions), interval=5)
description: An aggregation that groups items into buckets based on a numeric field. The mandatory
"fields" parameter are the numeric fields to aggregate on. The mandatory "interval" parameter
is the interval to use for bucketing, and has a minimum value of 0.1.
date_histogram:
summary: Date Histogram
value: date_histogram(fields=(createdAt, updatedAt),interval=month,bycreator=terms(fields=(creator,editor)))
description: 'An aggregation that groups items into buckets based on a date field. The mandatory
"fields" parameter are the date fields to aggregate on. The mandatory "interval" parameter
is the time interval to use for bucketing. Valid intervals are: "year", "month", "week",
and "day". You can also specify a number of days from 1-99 inclusive, e.g. "14d" for fourteen
days. Finally, sub-aggregations can provided that summate discussion post data on a per-bucket
basis. This example aggregates posts based on the createdAt and updatedAt fields and, for
each, further sub-aggregating by creator, and editor.'
geohash:
summary: Geohash
value: geohash(fields=(geometry), precision=6, byCreator=terms(fields=(creator)), byCreatedDate=date_histogram(fields=(createdAt),
interval=month), avgSentiment=avg(fields=(sentiment)))
description: An aggregation that groups items into buckets based on a geohash on a geospatial
field. The mandatory "fields" parameter are the geospatial fields for which to aggregate
on. "Precision" can be optionally provided (defaults to 5) to allow for hashing with various
geospatial precisions (https://en.wikipedia.org/wiki/Geohash#Digits_and_precision_in_km).
Finally, sub-aggregations can provided that summate discussion post data on a per-geohash
basis. This example geohashes posts based on the geometry field, further sub-aggregating
by creator, post creation date, and average sentiment.
schema:
type: string
- name: filter
required: false
in: query
description: CQL filter expression that can be used to refine the aggregation search
schema:
title: filter
type: string
readOnly: true
examples:
equals:
summary: Equals
value: type='Feature Service'
greaterThan:
summary: Greater Than
value: created > 1670531235
greaterThanOrEquals:
summary: Greater Than Or Equals
value: created >= 1670531235
LessThan:
summary: Less Than
value: created < 1670531235
lessThanOrEquals:
summary: Less Than Or Equals
value: created <= 1670531235
in:
summary: IN
value: tags IN (tag1, 'tag2', tag3)
notIn:
summary: NOT IN
value: tags NOT IN (tag1, 'tag2', tag3)
betweenAnd:
summary: BETWEEN AND
value: created BETWEEN 1670531235 AND 1770531235
notBetweenAnd:
summary: NOT BETWEEN AND
value: created NOT BETWEEN 1670531235 AND 1770531235
like:
summary: LIKE
value: description LIKE 'moby*'
'null':
summary: IS NULL
value: source IS NULL
notNull:
summary: IS NOT NULL
value: owner IS NOT NULL
and:
summary: AND
value: tags NOT IN (tag1, 'tag2', tag3) AND owner IS NOT NULL
or:
summary: OR
value: tags NOT IN (tag1, 'tag2', tag3) OR owner IS NOT NULL
not:
summary: NOT
value: tags NOT IN (tag1, 'tag2', tag3) NOT owner IS NULL
subExpressions:
summary: Subexpressions
value: ((type='Feature Service' AND access=public) OR (type='Web Mapping Application' AND
access=shared))
- name: limit
required: false
in: query
description: Limit the number of results returned for "bucket"-based aggregations
schema:
title: limit
type: integer
readOnly: true
- name: token
required: false
in: query
description: Token to use when accessing the underlying ArcGIS Item that represents the site.
schema:
title: token
type: string
responses:
'200':
description: A response describing requested collection aggregations
content:
application/json:
schema:
$ref: '#/components/schemas/OgcItemAggregationResponseDto'
summary: ''
tags:
- OgcItemAggregation
/api/search/v1:
get:
description: Provides links to the API definition, the Conformance statements and the metadata about
the coverage data in this dataset.
operationId: OgcRootController_getSiteRoot_api/search/v1
parameters:
- name: token
required: false
in: query
description: ArcGIS token to use when accessing the underlying ArcGIS Item that represents the
site.
schema:
type: string
responses:
'200':
description: A data object describing the site and its API.
content:
application/json:
schema:
$ref: '#/components/schemas/OgcApiLandingPageDto'
summary: ''
tags:
- OgcRoot
/api/search/v1/conformance:
get:
description: Returns the conformance specifications the API meets
operationId: OgcRootConformanceController_getApiConformance_api/search/v1
parameters:
- name: token
required: false
in: query
description: ArcGIS token to use when accessing the underlying ArcGIS Item that represents the
site.
schema:
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/OgcApiConformancePageDto'
summary: ''
tags:
- OgcRootConformance
/api/search/v1/rest/info:
get:
operationId: GeoserviceController_restInfo_api/search/v1
parameters: []
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/RestInfoDto'
tags:
- Geoservice-Beta
/api/search/v1/rest/services/collections/{collectionId}/geoservice/FeatureServer:
get:
operationId: GeoserviceController_featureServer_api/search/v1
parameters:
- name: collectionId
required: true
in: path
description: Key/id of the collection for which item should be filtered and returned.
schema:
example: dataset
type: string
- name: q
required: false
in: query
description: A general text search filter.
schema:
title: q
type: string
- name: bbox
required: false
in: query
description: A bbox filter, must be 4 comma-separated coordinates
schema:
title: bbox
type: string
- name: filter
required: false
in: query
description: query parameter that represents a parse-able string of filter expressions, structured
according to the <a href="https://portal.ogc.org/files/96288">Common Query Language Specification
of the OGC Features API</a>. If filter values must include whitespace, try wrapping the value
in single quotes.
schema:
title: filter
type: string
examples:
equals:
summary: Equals
value: type='Feature Service'
greaterThan:
summary: Greater Than
value: created > 1670531235
greaterThanOrEquals:
summary: Greater Than Or Equals
value: created >= 1670531235
LessThan:
summary: Less Than
value: created < 1670531235
lessThanOrEquals:
summary: Less Than Or Equals
value: created <= 1670531235
in:
summary: IN
value: tags IN (tag1, 'tag2', tag3)
notIn:
summary: NOT IN
value: tags NOT IN (tag1, 'tag2', tag3)
betweenAnd:
summary: BETWEEN AND
value: created BETWEEN 1670531235 AND 1770531235
notBetweenAnd:
summary: NOT BETWEEN AND
value: created NOT BETWEEN 1670531235 AND 1770531235
like:
summary: LIKE
value: description LIKE 'moby*'
'null':
summary: IS NULL
value: source IS NULL
notNull:
summary: IS NOT NULL
value: owner IS NOT NULL
and:
summary: AND
value: tags NOT IN (tag1, 'tag2', tag3) AND owner IS NOT NULL
or:
summary: OR
value: tags NOT IN (tag1, 'tag2', tag3) OR owner IS NOT NULL
not:
summary: NOT
value: tags NOT IN (tag1, 'tag2', tag3) NOT o
# --- truncated at 32 KB (127 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/bonneville-power-administration/refs/heads/main/openapi/bonneville-power-administration-data-search-api-openapi.yml