-
Notifications
You must be signed in to change notification settings - Fork 17
API Specification
Jeff Farley edited this page Nov 29, 2017
·
13 revisions
swagger: "2.0"
info:
version: "1.0.0"
title: "Consumer Complaint Database API"
description: "The API for searching the Consumer Complaint Database"
termsOfService: "https://cfpb.github.io/source-code-policy/"
contact:
email: "[email protected]"
license:
name: "CC0"
url: "https://github.com/cfpb/ccdb5-api/blob/master/LICENSE"
host: "www.consumerfinance.gov"
basePath: "/data-research/consumer-complaints/search/api/v1/"
schemes:
- http
- https
produces:
- "application/json"
paths:
/:
get:
tags:
- Complaints
summary: "Search consumer complaints"
description: "Search through everything in consumer complaints"
produces:
- "application/json"
- "text/csv"
- "application/vnd.ms-excel"
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
parameters:
- $ref: "#/parameters/search_term"
- $ref: "#/parameters/field"
- $ref: "#/parameters/from"
- $ref: "#/parameters/size"
- $ref: "#/parameters/sort"
- $ref: "#/parameters/format"
- $ref: "#/parameters/no_aggs"
- $ref: "#/parameters/no_highlight"
- $ref: "#/parameters/company"
- $ref: "#/parameters/company_public_response"
- $ref: "#/parameters/company_received_max"
- $ref: "#/parameters/company_received_min"
- $ref: "#/parameters/company_response"
- $ref: "#/parameters/consumer_consent_provided"
- $ref: "#/parameters/consumer_disputed"
- $ref: "#/parameters/date_received_max"
- $ref: "#/parameters/date_received_min"
- $ref: "#/parameters/has_narrative"
- $ref: "#/parameters/issue"
- $ref: "#/parameters/product"
- $ref: "#/parameters/state"
- $ref: "#/parameters/submitted_via"
- $ref: "#/parameters/tag"
responses:
200:
description: "successful operation"
schema:
type: array
items:
$ref: '#/definitions/SearchResult'
400:
description: "Invalid status value"
/_suggest:
get:
tags:
- Typeahead
summary: "Suggest possible searches"
description: "The endpoint for the main search box in the UI"
parameters:
- $ref: "#/parameters/size"
- $ref: "#/parameters/suggest_text"
responses:
200:
description: "successful operation"
schema:
$ref: "#/definitions/SuggestResult"
400:
description: "Invalid input"
/_suggest_company:
get:
tags:
- Typeahead
summary: "Suggest possible companies"
description: "Provide a list of companies that match the input text"
parameters:
- $ref: "#/parameters/suggest_text"
- $ref: "#/parameters/size"
- $ref: "#/parameters/company_public_response"
- $ref: "#/parameters/company_received_max"
- $ref: "#/parameters/company_received_min"
- $ref: "#/parameters/company_response"
- $ref: "#/parameters/consumer_consent_provided"
- $ref: "#/parameters/consumer_disputed"
- $ref: "#/parameters/date_received_max"
- $ref: "#/parameters/date_received_min"
- $ref: "#/parameters/has_narrative"
- $ref: "#/parameters/issue"
- $ref: "#/parameters/product"
- $ref: "#/parameters/state"
- $ref: "#/parameters/submitted_via"
- $ref: "#/parameters/tag"
responses:
200:
description: "successful operation"
schema:
$ref: "#/definitions/SuggestResult"
400:
description: "Invalid input"
/_suggest_zip:
get:
tags:
- Typeahead
summary: "Suggest possible zip codes"
description: "Provide a list of zip codes that match the input text"
parameters:
- $ref: "#/parameters/suggest_text"
- $ref: "#/parameters/size"
- $ref: "#/parameters/company_public_response"
- $ref: "#/parameters/company_received_max"
- $ref: "#/parameters/company_received_min"
- $ref: "#/parameters/company_response"
- $ref: "#/parameters/consumer_consent_provided"
- $ref: "#/parameters/consumer_disputed"
- $ref: "#/parameters/date_received_max"
- $ref: "#/parameters/date_received_min"
- $ref: "#/parameters/has_narrative"
- $ref: "#/parameters/issue"
- $ref: "#/parameters/product"
- $ref: "#/parameters/state"
- $ref: "#/parameters/submitted_via"
- $ref: "#/parameters/tag"
responses:
200:
description: "successful operation"
schema:
$ref: "#/definitions/SuggestResult"
400:
description: "Invalid input"
/{complaintId}:
get:
tags:
- Complaints
summary: "Find comsumer complaint by ID"
description: "Get complaint details for a specific ID"
parameters:
- name: complaintId
in: path
description: ID of the complaint
required: true
type: integer
maximum: 9999999999
minimum: 0
format: int64
responses:
200:
description: "successful operation"
schema:
$ref: "#/definitions/Complaint"
400:
description: "Invalid ID supplied"
404:
description: "Complaint not found"
definitions:
Aggregation:
type: object
description: "An Elasticsearch aggregation"
properties:
doc_count:
type: integer
description: "The total number of complaints covered in this aggregation"
"<field>":
type: object
description: "The name of the field being aggregated"
properties:
buckets:
type: array
items:
$ref: "#/definitions/Bucket"
doc_count_error_upper_bound:
type: integer
description: "The number of possible errors that occurred when searching the shards"
sum_other_doc_count:
type: integer
description: "The number of complaints that were not included in this aggregation."
Bucket:
type: object
properties:
doc_count:
type: integer
description: "The number of complaints that match this key"
key:
type: string
Complaint:
type: object
externalDocs:
description: "Official documentation"
url: "https://cfpb.github.io/api/ccdb/fields.html"
properties:
company:
type: string
description: "The complaint is about this company"
company_public_response:
type: string
description: "The company's optional, public-facing response to a consumer's complaint"
company_response:
type: string
description: "The response from the company about this complaint"
complaint_id:
type: integer
description: "The unique identification number for a complaint"
complaint_what_happened:
type: string
description: "A description of the complaint provided by the consumer"
consumer_consent_provided:
type: string
description: "dentifies whether the consumer opted in to publish their complaint narrative"
consumer_disputed:
type: string
description: "Whether the consumer disputed the company’s response"
date_received:
type: string
format: date
description: "The date the CFPB received the complaint"
date_sent_to_company:
type: string
description: "The date the CFPB sent the complaint to the company"
has_narrative:
type: boolean
description: "Indicates this complaint has a narrative"
issue:
type: string
description: "The issue the consumer identified in the complaint"
product:
type: string
description: "The type of product the consumer identified in the complaint"
state:
type: string
description: "The state of the mailing address provided by the consumer"
sub_issue:
type: string
description: "The sub-issue the consumer identified in the complaint"
sub_product:
type: string
description: "The type of sub-product the consumer identified in the complaint"
submitted_via:
type: string
description: "How the complaint was submitted to the CFPB"
tags:
type: string
description: "Data that supports easier searching and sorting of complaints"
timely:
type: string
description: "Indicates whether the company gave a timely response or not"
zip_code:
type: string
description: "The mailing ZIP code provided by the consumer"
Hit:
type: object
description: "A single Elasticsearch result"
properties:
_source:
$ref: "#/definitions/Complaint"
Hits:
type: object
description: "A set of complaints that matched the query"
properties:
hits:
type: array
items:
$ref: "#/definitions/Hit"
max_score:
type: number
description: "The highest score in the results"
format: float
total:
type: integer
description: "The totol number of complaints that matched the query"
Meta:
type: object
properties:
has_data_issue:
type: boolean
description: "Indicates there has been an issue with the most recent data load"
is_data_stale:
type: boolean
description: "Indicates the most recent data is over 5 business days old"
is_narrative_stale:
type: boolean
description: "Indicates the most recent narratives are over 5 busines days old"
last_indexed:
type: string
description: "The timestamp of the most recently indexed complaint"
format: dateTime
last_updated:
type: string
description: "The timestamp of the most recent complaint"
format: dateTime
license:
type: string
description: "The open source license under which the API operates"
total_record_count:
type: integer
description: "The total number of complaints currently indexed"
MultiLevelAggregation:
properties:
doc_count:
type: integer
description: "The total number of complaints covered in this aggregation"
"<field>":
type: object
description: "The name of the field being aggregated"
properties:
buckets:
type: array
items:
$ref: "#/definitions/MultiLevelBucket"
doc_count_error_upper_bound:
type: integer
description: "The number of possible errors that occurred when searching the shards"
sum_other_doc_count:
type: integer
description: "The number of complaints that were not included in this aggregation."
MultiLevelBucket:
type: object
properties:
doc_count:
type: integer
description: "The number of complaints that match this key"
"<field.raw>":
type: object
description: "The next level of aggregations"
properties:
buckets:
type: array
items:
$ref: "#/definitions/Aggregation"
key:
type: string
SearchResult:
type: object
properties:
_meta:
$ref: "#/definitions/Meta"
aggregations:
type: object
properties:
company_public_response:
$ref: "#/definitions/Aggregation"
company_response:
$ref: "#/definitions/Aggregation"
consumer_consent_provided:
$ref: "#/definitions/Aggregation"
consumer_disputed:
$ref: "#/definitions/Aggregation"
has_narrative:
$ref: "#/definitions/Aggregation"
issue:
$ref: "#/definitions/MultiLevelAggregation"
product:
$ref: "#/definitions/MultiLevelAggregation"
state:
$ref: "#/definitions/Aggregation"
submitted_via:
$ref: "#/definitions/Aggregation"
tags:
$ref: "#/definitions/Aggregation"
timely:
$ref: "#/definitions/Aggregation"
zip_code:
$ref: "#/definitions/Aggregation"
hits:
$ref: "#/definitions/Hits"
SuggestResult:
type: array
items:
type: string
parameters:
company:
name: company
in: query
description: Filter the results to only return these companies
type: array
items:
type: string
collectionFormat: multi
company_public_response:
name: company_public_response
in: query
description: Filter the results to only return these types of public response by the company
type: array
items:
type: string
collectionFormat: multi
company_received_max:
name: company_received_max
in: query
description: Return results with date < company_received_max (i.e. 2017-03-04)
type: string
format: date
company_received_min:
name: company_received_min
in: query
description: Return results with date >= company_received_min (i.e. 2017-03-04)
type: string
format: date
company_response:
name: company_response
in: query
description: Filter the results to only return these types of response by the company
type: array
items:
type: string
collectionFormat: multi
consumer_consent_provided:
name: consumer_consent_provided
in: query
description: Filter the results to only return these types of consent consumer provided
type: array
items:
type: string
collectionFormat: multi
consumer_disputed:
name: consumer_disputed
in: query
description: Filter the results to only return the specified state of consumer disputed, i.e. yes, no
type: array
items:
type: string
collectionFormat: multi
date_received_max:
name: date_received_max
in: query
description: Return results with date < date_received_max (i.e. 2017-03-04)
type: string
format: date
date_received_min:
name: date_received_min
in: query
description: Return results with date >= date_received_min (i.e. 2017-03-04)
type: string
format: date
field:
name: "field"
in: "query"
description: "Search by particular field"
type: string
enum:
- "complaint_what_happened"
- "company_public_response"
- "all"
default: "complaint_what_happened"
format:
name: "format"
in: "query"
description: "Format to be returned, if this parameter is not specified, frm/size parameters can be used properly, but if a format is specified for exporting, frm/size will be ignored"
type: "string"
enum:
- "json"
- "csv"
- "xls"
- "xlsx"
default: "json"
from:
name: frm
in: "query"
description: "Return results starting from a specific index, only if format parameter is not specified, ignore otherwise"
type: "integer"
maximum: 100000
minimum: 1
format: "int64"
default: 0
has_narrative:
name: has_narrative
in: query
description: Filter the results to only return the specified state of whether it has narrative in the complaint or not, i.e. yes, no
type: array
items:
type: string
collectionFormat: multi
issue:
name: issue
in: query
description: "Filter the results to only return these types of issue and subissue, i.e. product-only: Getting a Loan, subproduct needs to include product, separated by '•', U+2022: Getting a Loan•Can't qualify for a loan"
type: array
items:
type: string
collectionFormat: multi
no_aggs:
name: no_aggs
in: query
description: Include aggregations in result or not, True means no aggregations will be included, False means aggregations will be included.
type: boolean
default: False
no_highlight:
name: no_highlight
in: query
description: Include highlight of search term in result or not, True means no highlighting will be included, False means highlighting will be included.
type: boolean
default: False
product:
name: product
in: query
description: "Filter the results to only return these types of product and subproduct, i.e. product-only: Mortgage, subproduct needs to include product, separated by '•', U+2022: Mortgage•FHA mortgage"
type: array
items:
type: string
collectionFormat: multi
search_term:
name: "search_term"
in: "query"
description: "Return results containing specific term"
type: "string"
size:
name: "size"
in: "query"
description: "Limit the size of the results"
type: "integer"
maximum: 100000
minimum: 1
format: "int64"
default: 10
sort:
name: "sort"
in: "query"
description: "Return results sort in a particular order"
type: "string"
enum:
- "relevance_desc"
- "relevance_asc"
- "created_date_desc"
- "created_date_asc"
default: "relevance_desc"
state:
name: state
in: query
description: Filter the results to only return these states (use abbreviation, i.e. CA, VA)
type: array
items:
type: string
collectionFormat: multi
submitted_via:
name: submitted_via
in: query
description: Filter the results to only return these types of way consumers submitted their complaints
type: array
items:
type: string
collectionFormat: multi
suggest_text:
name: text
in: query
description: "text to use for suggestions"
required: true
type: string
tag:
name: tag
in: query
description: Filter the results to only return these types of tag
type: array
items:
type: string
collectionFormat: multi
tags:
- name: Complaints
description: These endpoints provide access to consumer complaints
- name: Typeahead
description: These endpoints support the typeahead boxes in the UI
externalDocs:
description: "Full documentation for the API"
url: "https://cfpb.github.io/api/ccdb/"