--- title: "fdic" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{fdic} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} library(fdic) no_creds <- no_creds_available() knitr::opts_chunk$set( collapse = TRUE, comment = "#>", message = FALSE, eval = !no_creds ) ``` ```{r eval = no_creds, echo = FALSE, comment = NA} message( "No FDIC API credentials available. Code chunks will not be evaluated." ) ``` Each function in {fdic} accepts the following arguments: - `api_key`: Your FDIC API key - `filters`: One or more filters to apply when requesting data using [Elasticsearch Query String Syntax](https://www.elastic.co/docs/reference/query-languages/query-dsl/query-dsl-query-string-query#query-string-syntax) - `fields`: One or more fields to include in the response - `sort_by`: A field name to sort the response by - `descending`: A flag to specify the direction to `sort_by` (if `sort_by` is specified) - `limit`: The number of records to include in the response (up to a maximum of 10,000) While most of the arguments are relatively straightforward, there are some idiosyncrasies with both the `fields` and `filters` arguments that are worth discussing. ### Available API Fields {fdic} contains eight internal datasets documenting the [current API endpoint definition files](https://api.fdic.gov/banks/docs/) provided by the FDIC. Each dataset corresponds to one of the functions contained in {fdic} and is named by prefixing the endpoint with `fdic_` (e.g., `fdic_institutions` for `get_institutions()`). Each dataset can be accessed directly by name, as demonstrated below. ```{r example-1} # Dropping `description` for example due to length of field head(fdic_locations) |> subset(select = -description) ``` During package development, it was noted that *most* fields returned by the API are documented in these internal datasets. **However, there are several instances where fields are either no longer available or new (undocumented) fields have been added.** {fdic} functions evaluate the values supplied to the `fields` argument and will raise a warning if a field is not returned in the response. However, it can be helpful to call an {fdic} function with no `fields` argument and `limit = 1` to return the current endpoint definition, as demonstrated below: ```{r example-2} # Review current endpoint definition get_locations(limit = 1) |> names() ``` Alternatively, the BankFind Suite offers a [Glossary and Variable Definition](https://banks.data.fdic.gov/bankfind-suite/help?helpTopic=glossary-and-variable-definitions) table which may provide more up-to-date information on API fields. By familiarizing yourself with the available `fields`, you can begin to refine your {fdic} queries by passing `filters` to target the data you are most concerned with. The next section provides a brief primer on the `filters` syntax. ### Filtering Using Elasticsearch Query String Syntax The [FDIC Bank Suite API](https://api.fdic.gov/banks/docs/) uses [Elasticsearch Query String Syntax](https://www.elastic.co/docs/reference/query-languages/query-dsl/query-dsl-query-string-query#query-string-syntax) to filter results. Elasticsearch Query String Syntax is a mini-language that allows for a customized search of the data, using familiar terms and operators to facilitate the filtering. By passing a valid Elasticsearch Query String to the `filters` argument of an {fdic} function, you can conveniently manipulate the data provided in response. The following examples demonstrate several ways to use Elasticsearch Query Strings in {fdic} functions to collect the data of interest. ```{r example-3} # Search for five active institutions in New York # Return all available fields get_institutions( filters = "STALP:NY AND ACTIVE:1", limit = 5 ) ``` ```{r example-4} # Collect location data for five branches of a specific institution # Return all available fields get_locations( filters = "CERT:33124", limit = 5 ) ``` ```{r example-5} # Explore the 2025 Summary of Deposit data for non-community banks in New York # Collect the coordinates for the top five branch locations by total deposits get_sod( filters = "STALP:NY AND !(CB:1) AND YEAR:2025", fields = c("DEPSUM", "NAMEBR", "SIMS_LATITUDE", "SIMS_LONGITUDE", "YEAR"), sort_by = "DEPSUM", descending = TRUE, limit = 5 ) ```