POST /api/cninfo/announcements/search
Price: 1 credit
Search announcements and filings disclosed on CNINFO by companies listed in Shenzhen, Shanghai and Beijing, and by Hong Kong listings, Shenzhen funds and bonds: by title keyword, publication window, board, category and industry. Each row is the announcement's id, title, publication time, company, board and PDF link.
Without a keyword the publication window spans at most three years and defaults to the last three years; with a keyword any window back to 1995 works. A query serves at most 3000 announcements, so split a larger one by publication window. For one company's filings use cninfo/companies/announcements.
access-token string requiredtimeout integer — Max scrapping execution timeout (in seconds) (default: 300; min: 20; max: 1500)count integer required — Max number of announcements to return (min: 1; max: 3000)keyword string nullable — Words to find in announcement titles (examples: "年度报告", "回购"; minLength: 1)published_from integer nullable — Earliest publication day, as unix seconds; day-granular (examples: 1767225600)published_to integer nullable — Latest publication day, as unix seconds; day-granular (examples: 1790812800)market string — Which securities' announcements to search (default: "a_share"; one of: "a_share", "hong_kong", "fund", "bond")kind string — Kind of disclosure (default: "announcements"; one of: "announcements", "investor_relations", "sponsor_supervision")boards array nullable — Exchange boards to keep (one of: "shenzhen", "shenzhen_main", "sme", "chinext", "shanghai", "shanghai_main", "star", "beijing", "hong_kong_main", "hong_kong_gem"; minItems: 1)categories array nullable — Announcement categories to keep, for A-share announcements (one of: "annual_report", "semi_annual_report", "q1_report", "q3_report", "earnings_forecast", "dividend_distribution", "board_of_directors", "supervisory_board", "shareholders_meeting", "daily_operations", "corporate_governance", "intermediary_report", "ipo", "secondary_offering", "equity_incentive", "rights_issue", "lock_up_expiry", "corporate_bond", "convertible_bond", "other_financing", "equity_change", "correction", "clarification", "risk_warning", "special_treatment_delisting", "delisting_arrangement_period"; minItems: 1)fund_categories array nullable — Fund announcement categories to keep (one of: "fund_launch", "prospectus_update", "annual_report", "interim_report", "quarterly_report", "net_asset_value", "portfolio", "subscription_redemption", "fees", "sales_channels", "dividend", "managers", "holders_meeting", "basic_information_change", "other"; minItems: 1)bond_categories array nullable — Bond announcement categories to keep (one of: "issuance_listing", "periodic_report", "interest_payment", "maturity_redemption", "other"; minItems: 1)industries array nullable — Industries (CSRC sectors) of the listed companies to keep (one of: "agriculture", "mining", "manufacturing", "utilities", "construction", "wholesale_retail", "transport_logistics", "hospitality_catering", "information_technology", "finance", "real_estate", "leasing_business_services", "research_technical_services", "environment_public_facilities", "resident_services", "education", "health_social_work", "culture_sports_entertainment", "diversified"; minItems: 1)sort string — Result order (default: "newest"; one of: "newest", "oldest")@type string (default: "CninfoAnnouncement")id string requiredshort_title string nullableurl string nullablepdf_url string nullablepublished_at integer nullablecompany_code string nullablecompany_name string nullableorg_id string nullableboard string nullableboard_code string nullabletype_codes array (default: [])column_codes array (default: [])file_type string nullablefile_size_kb integer nullable422 — A filter that does not belong to the chosen market or kind, or a window over three years without a keyword Check the fields against this schema. A URN with the wrong prefix is the most common cause.408 — The request ran past its time limit Raise `timeout` in the request body, up to the maximum this endpoint documents. Lowering `count` or turning off the `with_*` flags also helps, because less work finishes sooner.412 — The entity was not found, or a precondition failed Retrying will not help: either the entity does not exist, or the input points at a different one.429 — Too many requests: a rate limit or a usage window is exhausted When the response carries an X-Retry-After header, wait that many seconds and retry: the same number is in the body as `detail.retry_after`, and the limit clears once that window passes. The message in the body names the limit that was hit.500 — Something broke on our side Retrying will not help. If it keeps happening, send us the X-Request-ID from the response headers.529 — Rate limit reached, or the endpoint is overloaded Wait at least 30 seconds, then retry.X-Error — Error message text (present only on error)X-Request-ID — Unique request identifierX-Execution-Time — Execution time in secondsX-Result-Count — How many records the body carries. 0 means an empty result, which is a normal answer and not by itself an error. A non-zero count can come back together with X-Error when the failure happened partway through — read this header and X-Error independently.X-Total-Available-Results — How many records exist for this query, when the endpoint can say. On a `dry_run` request this is the answer and the body is empty. It saturates: the endpoint's documented maximum means 'at least that many', any smaller number is exact.X-Warning — Present when the request body carried keys this endpoint does not document. They were ignored, so any filter you meant to apply through them did not apply. Check the spelling against this schema and retry.X-Retry-After — Seconds to wait before retrying. Present only on 429.