From 18d5bf6365d1ca1ae87b7ef70c4b8d2f76d31fe1 Mon Sep 17 00:00:00 2001 From: Wyatt Pearsall Date: Fri, 14 Aug 2026 13:50:55 -0700 Subject: [PATCH 1/2] remove narrative field --- ccdb/fields.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ccdb/fields.html b/ccdb/fields.html index cbe2356..981da8b 100644 --- a/ccdb/fields.html +++ b/ccdb/fields.html @@ -54,12 +54,6 @@

Field reference


Not all Issues have corresponding Sub-issues. - - Consumer complaint narrative - Consumer complaint narrative is the consumer-submitted description of "what happened" from the complaint. Consumers must opt-in to share their narrative. We will not publish the narrative unless the consumer consents, and consumers can opt-out at any time. The CFPB takes reasonable steps to scrub personal information from each complaint that could be used to identify the consumer. - plain text - Consumers' descriptions of what happened are included if consumers consent to publishing the description and after we take steps to remove personal information. - Company public response The company's optional, public-facing response to a consumer's complaint. Companies can choose to select a response from a pre-set list of options that will be posted on the public database. For example, "Company believes complaint is the result of an isolated error." From 70708867c861e752f8b6c6d45f4825b6ec5969a0 Mon Sep 17 00:00:00 2001 From: Richard Dinh <1038306+flacoman91@users.noreply.github.com> Date: Wed, 19 Aug 2026 11:19:54 -0700 Subject: [PATCH 2/2] delete CCDB swagger since it lives in CCDB5-API swagger docs --- swagger-config.yaml | 822 -------------------------------------------- 1 file changed, 822 deletions(-) delete mode 100644 swagger-config.yaml diff --git a/swagger-config.yaml b/swagger-config.yaml deleted file mode 100644 index 640736a..0000000 --- a/swagger-config.yaml +++ /dev/null @@ -1,822 +0,0 @@ -openapi: 3.0.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: - name: Report API Issues - url: https://github.com/cfpb/ccdb5-api/issues - license: - name: Creative Commons License CC0 - url: 'https://github.com/cfpb/ccdb5-api/blob/main/LICENSE' -paths: - /: - get: - tags: - - Complaints - summary: Search consumer complaints - description: Search the contents of the consumer complaint database - parameters: - - $ref: '#/components/parameters/search_term' - - $ref: '#/components/parameters/field' - - $ref: '#/components/parameters/from' - - $ref: '#/components/parameters/size' - - $ref: '#/components/parameters/sort' - - $ref: '#/components/parameters/format' - - $ref: '#/components/parameters/no_aggs' - - $ref: '#/components/parameters/no_highlight' - - $ref: '#/components/parameters/company' - - $ref: '#/components/parameters/company_public_response' - - $ref: '#/components/parameters/company_received_max' - - $ref: '#/components/parameters/company_received_min' - - $ref: '#/components/parameters/company_response' - - $ref: '#/components/parameters/consumer_consent_provided' - - $ref: '#/components/parameters/consumer_disputed' - - $ref: '#/components/parameters/date_received_max' - - $ref: '#/components/parameters/date_received_min' - - $ref: '#/components/parameters/has_narrative' - - $ref: '#/components/parameters/issue' - - $ref: '#/components/parameters/product' - - $ref: '#/components/parameters/state' - - $ref: '#/components/parameters/submitted_via' - - $ref: '#/components/parameters/tags' - - $ref: '#/components/parameters/timely' - - $ref: '#/components/parameters/zip_code' - responses: - '200': - description: successful operation - content: - application/json: - schema: - $ref: '#/components/schemas/SearchResult' - text/csv: - schema: - $ref: '#/components/schemas/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: '#/components/parameters/size' - - $ref: '#/components/parameters/suggest_text' - responses: - '200': - description: successful operation - content: - application/json: - schema: - $ref: '#/components/schemas/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: '#/components/parameters/suggest_text' - - $ref: '#/components/parameters/size' - - $ref: '#/components/parameters/company_public_response' - - $ref: '#/components/parameters/company_received_max' - - $ref: '#/components/parameters/company_received_min' - - $ref: '#/components/parameters/company_response' - - $ref: '#/components/parameters/consumer_consent_provided' - - $ref: '#/components/parameters/consumer_disputed' - - $ref: '#/components/parameters/date_received_max' - - $ref: '#/components/parameters/date_received_min' - - $ref: '#/components/parameters/has_narrative' - - $ref: '#/components/parameters/issue' - - $ref: '#/components/parameters/product' - - $ref: '#/components/parameters/state' - - $ref: '#/components/parameters/submitted_via' - - $ref: '#/components/parameters/tags' - - $ref: '#/components/parameters/timely' - - $ref: '#/components/parameters/zip_code' - responses: - '200': - description: successful operation - content: - application/json: - schema: - $ref: '#/components/schemas/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: '#/components/parameters/suggest_text' - - $ref: '#/components/parameters/size' - - $ref: '#/components/parameters/company_public_response' - - $ref: '#/components/parameters/company_received_max' - - $ref: '#/components/parameters/company_received_min' - - $ref: '#/components/parameters/company_response' - - $ref: '#/components/parameters/consumer_consent_provided' - - $ref: '#/components/parameters/consumer_disputed' - - $ref: '#/components/parameters/date_received_max' - - $ref: '#/components/parameters/date_received_min' - - $ref: '#/components/parameters/has_narrative' - - $ref: '#/components/parameters/issue' - - $ref: '#/components/parameters/product' - - $ref: '#/components/parameters/state' - - $ref: '#/components/parameters/submitted_via' - - $ref: '#/components/parameters/tags' - - $ref: '#/components/parameters/timely' - - $ref: '#/components/parameters/zip_code' - responses: - '200': - description: successful operation - content: - application/json: - schema: - $ref: '#/components/schemas/SuggestResult' - '400': - description: Invalid input - '/{complaintId}': - get: - tags: - - Complaints - summary: Find consumer complaint by ID - description: Get complaint details for a specific ID - parameters: - - name: complaintId - in: path - description: ID of the complaint - required: true - schema: - type: integer - format: int64 - minimum: 0 - maximum: 9999999999 - responses: - '200': - description: successful operation - content: - application/json: - schema: - $ref: '#/components/schemas/Complaint' - '400': - description: Invalid ID supplied - '404': - description: Complaint not found - /geo/states: - get: - tags: - - Complaints - summary: Get the state-by-state information - description: Get complaint information broken down by states - parameters: - - $ref: '#/components/parameters/search_term' - - $ref: '#/components/parameters/field' - - $ref: '#/components/parameters/company' - - $ref: '#/components/parameters/company_public_response' - - $ref: '#/components/parameters/company_received_max' - - $ref: '#/components/parameters/company_received_min' - - $ref: '#/components/parameters/company_response' - - $ref: '#/components/parameters/consumer_consent_provided' - - $ref: '#/components/parameters/consumer_disputed' - - $ref: '#/components/parameters/date_received_max' - - $ref: '#/components/parameters/date_received_min' - - $ref: '#/components/parameters/has_narrative' - - $ref: '#/components/parameters/issue' - - $ref: '#/components/parameters/product' - - $ref: '#/components/parameters/state' - - $ref: '#/components/parameters/submitted_via' - - $ref: '#/components/parameters/tags' - - $ref: '#/components/parameters/timely' - - $ref: '#/components/parameters/zip_code' - responses: - '200': - description: successful operation - content: - application/json: - schema: - $ref: '#/components/schemas/StatesResult' - /trends: - get: - tags: - - Trends - summary: "List trends" - description: "Return specific aggregations for a search" - parameters: - - $ref: '#/components/parameters/search_term' - - $ref: '#/components/parameters/field' - - $ref: '#/components/parameters/company' - - $ref: '#/components/parameters/company_public_response' - - $ref: '#/components/parameters/company_received_max' - - $ref: '#/components/parameters/company_received_min' - - $ref: '#/components/parameters/company_response' - - $ref: '#/components/parameters/consumer_consent_provided' - - $ref: '#/components/parameters/consumer_disputed' - - $ref: '#/components/parameters/date_received_max' - - $ref: '#/components/parameters/date_received_min' - - $ref: '#/components/parameters/focus' - - $ref: '#/components/parameters/has_narrative' - - $ref: '#/components/parameters/issue' - - $ref: '#/components/parameters/lens' - - $ref: '#/components/parameters/product' - - $ref: '#/components/parameters/state' - - $ref: '#/components/parameters/submitted_via' - - $ref: '#/components/parameters/sub_lens' - - $ref: '#/components/parameters/sub_lens_depth' - - $ref: '#/components/parameters/tags' - - $ref: '#/components/parameters/timely' - - $ref: '#/components/parameters/trend_depth' - - $ref: '#/components/parameters/trend_interval' - - $ref: '#/components/parameters/zip_code' - responses: - '200': - description: successful operation - content: - application/json: - schema: - $ref: '#/components/schemas/TrendsResult' - text/csv: - schema: - $ref: '#/components/schemas/TrendsResult' - '400': - description: Invalid status value -tags: - - name: Complaints - description: These endpoints provide access to consumer complaints - - name: Trends - description: These endpoints provide access aggregated consumer complaint data - - name: Typeahead - description: These endpoints support the typeahead boxes in the UI -externalDocs: - description: Additional API Information - url: 'https://cfpb.github.io/api/ccdb/' -servers: - - url: 'https://www.consumerfinance.gov/data-research/consumer-complaints/search/api/v1/' -components: - parameters: - company: - name: company - in: query - description: Filter the results to only return these companies - explode: true - schema: - type: array - items: - type: string - company_public_response: - name: company_public_response - in: query - description: Filter the results to only return these types of public response by the company - explode: true - schema: - type: array - items: - type: string - company_received_max: - name: company_received_max - in: query - description: Return results with date < company_received_max (i.e. 2017-03-04) - schema: - 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) - schema: - 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 - explode: true - schema: - type: array - items: - type: string - consumer_consent_provided: - name: consumer_consent_provided - in: query - description: Filter the results to only return these types of consent consumer provided - explode: true - schema: - type: array - items: - type: string - consumer_disputed: - name: consumer_disputed - in: query - description: Filter the results to only return the specified state of consumer disputed, i.e. yes, no - explode: true - schema: - type: array - items: - type: string - date_received_max: - name: date_received_max - in: query - description: Return results with date < date_received_max (i.e. 2017-03-04) - schema: - 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) - schema: - type: string - format: date - field: - name: field - in: query - description: If the parameter "search_term" has a value, use "field" to specify which field is searched. If not specified, "complaint_what_happened" will be searched. - schema: - type: string - enum: - - complaint_what_happened - - company_public_response - - all - default: complaint_what_happened - focus: - name: focus - in: query - description: The name of the product or company on which to focus charts for products and issues - explode: true - schema: - type: array - items: - type: string - 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 - schema: - type: string - enum: - - json - - csv - default: json - from: - name: frm - in: query - description: Return results starting from a specific index, only if format parameter is not specified, ignore otherwise - schema: - type: integer - format: int64 - minimum: 1 - maximum: 100000 - 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 - explode: true - schema: - type: array - items: - type: string - 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 ''•'', Getting a Loan•Can''t qualify for a loan' - explode: true - schema: - type: array - items: - type: string - lens: - name: lens - in: query - required: true - description: The data lens through which to view complaint trends over time. - explode: true - schema: - type: string - items: - type: string - enum: - - overview - - issue - - product - - tags - default: overview - 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. - schema: - 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. - schema: - 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 ''•'', Mortgage•FHA mortgage' - explode: true - schema: - type: array - items: - type: string - search_term: - name: search_term - in: query - description: Return results containing specific term - schema: - type: string - size: - name: size - in: query - description: Limit the size of the results - schema: - type: integer - format: int64 - minimum: 1 - maximum: 100 - default: 10 - sort: - name: sort - in: query - description: Return results sort in a particular order - schema: - 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) - explode: true - schema: - type: array - items: - type: string - sub_lens: - name: sub_lens - in: query - description: The sub-lens through which to view complaint trends over time. - explode: true - schema: - type: string - items: - type: string - enum: - - issue - - product - - sub_product - - sub_issue - - tags - sub_lens_depth: - name: sub_lens_depth - in: query - description: The top X trend sub aggregations will be returned, where X is the supplied sub_lens_depth. - schema: - type: integer - maximum: 10000000 - minimum: 5 - format: int64 - default: 10 - submitted_via: - name: submitted_via - in: query - description: Filter the results to only return these types of way consumers submitted their complaints - explode: true - schema: - type: array - items: - type: string - suggest_text: - name: text - in: query - description: text to use for suggestions - required: true - schema: - type: string - tags: - name: tags - in: query - description: Filter the results to only return these types of tag - explode: true - schema: - type: array - items: - type: string - timely: - name: timely - in: query - description: Filter the results to show whether a response was timely - explode: true - schema: - type: array - items: - type: string - trend_depth: - name: trend_depth - in: query - description: The top X trend aggregations will be returned, where X is the supplied trend_depth. - schema: - type: integer - maximum: 10000000 - minimum: 5 - format: int64 - default: 10 - trend_interval: - name: trend_interval - in: query - description: The interval of time to use for trends aggregations histograms. When using day intervals, we recommend querying for date_received_min / max periods of less than one year. - required: true - schema: - type: string - enum: - - year - - quarter - - month - - week - - day - zip_code: - name: zip_code - in: query - description: Filter the results to only return these zip codes - explode: true - schema: - type: array - items: - type: string - schemas: - 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 ` being aggregated - properties: - buckets: - type: array - items: - $ref: '#/components/schemas/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. - AggregationDate: - type: object - properties: - value_as_string: - type: string - format: date-time - description: ISO-8601 formatted date (yyyy-mm-ddTHH:MM:SSZZ) - value: - type: number - description: Seconds since 1970 (Unix Epoch) - 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: Identifies 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: '#/components/schemas/Complaint' - Hits: - type: object - description: A set of complaints that matched the query - properties: - hits: - type: array - items: - $ref: '#/components/schemas/Hit' - max_score: - type: number - description: The highest score in the results - format: float - total: - type: object - properties: - value: - type: integer - description: "The count of matching hits, accurate in our code even above 10,000 hits" - relation: - type: string - description: "Indicates the accuracy of the default ES response, whether the value is accurate (eq) or a lower bound (gte)" - 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: '#/components/schemas/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: '#/components/schemas/Aggregation' - key: - type: string - SearchResult: - type: object - properties: - _meta: - $ref: '#/components/schemas/Meta' - aggregations: - type: object - properties: - company_public_response: - $ref: '#/components/schemas/Aggregation' - company_response: - $ref: '#/components/schemas/Aggregation' - consumer_consent_provided: - $ref: '#/components/schemas/Aggregation' - consumer_disputed: - $ref: '#/components/schemas/Aggregation' - has_narrative: - $ref: '#/components/schemas/Aggregation' - issue: - $ref: '#/components/schemas/MultiLevelAggregation' - product: - $ref: '#/components/schemas/MultiLevelAggregation' - state: - $ref: '#/components/schemas/Aggregation' - submitted_via: - $ref: '#/components/schemas/Aggregation' - tags: - $ref: '#/components/schemas/Aggregation' - timely: - $ref: '#/components/schemas/Aggregation' - zip_code: - $ref: '#/components/schemas/Aggregation' - hits: - $ref: '#/components/schemas/Hits' - StatesResult: - type: object - properties: - aggregations: - type: object - properties: - issue: - $ref: '#/components/schemas/MultiLevelAggregation' - product: - $ref: '#/components/schemas/MultiLevelAggregation' - state: - $ref: '#/components/schemas/MultiLevelAggregation' - SuggestResult: - type: array - items: - type: string - TrendsResult: - type: object - properties: - aggregations: - type: object - properties: - company: - $ref: '#/components/schemas/MultiLevelAggregation' - issue: - $ref: '#/components/schemas/MultiLevelAggregation' - product: - $ref: '#/components/schemas/MultiLevelAggregation' - sub_issue: - $ref: '#/components/schemas/MultiLevelAggregation' - sub_product: - $ref: '#/components/schemas/MultiLevelAggregation' - tags: - $ref: '#/components/schemas/MultiLevelAggregation' - links: {} - callbacks: {} -security: []