Guides / Errors
Errors
Errors come as an HTTP status code plus error.code in the JSON body. Branch on code. The message is a human-readable English sentence and may change; the tables on this page explain each code.
Response format
http
HTTP/2 403
content-type: application/json
{
"error": {
"code": "PLAN_REQUIRED",
"message": "This endpoint requires the Enterprise plan. Contact: help@alpsoft.io",
"docs": "https://openapi.chickstockfi.com/docs"
}
}code: an upper-case code from the tables below. Use it for program logic.message: an English sentence describing the cause and what to do. Write it to your logs; in your own UI, show your own text chosen by code.docs: a link to related documentation. Some responses omit it.
When a query parameter fails validation (for example, limit out of range), the API returns 400 BAD_REQUEST in the same shape; message names the field and the reason.
Empty-body 400
An unencoded non-ASCII query value (such as Korean text) can be rejected at the edge, before it reaches the API, with an empty-body 400. That response has no
error object. URL-encode query values (curl -G --data-urlencode "account=매출액") or use English codes (account=revenue, period=FY2025).Data API codes
| Status | Code | Meaning | What to do |
|---|---|---|---|
| 400 | BAD_SYMBOL | The symbol format is invalid | Use a 6-digit Korean code (for example 005930). News also accepts alphanumeric tickers of 1–12 characters. Samsung Electronics · 005930 |
| 400 | BAD_ID | The receipt number or article ID format is invalid | Filings take the 14-digit receipt number; articles take the id from a response as is. |
| 400 | BAD_QUERY | The search term is missing | Pass q to the search endpoint. |
| 400 | BAD_DATE | The date is malformed or does not exist | Send a real calendar date in YYYY-MM-DD format. The message identifies the invalid parameter. |
| 400 | BAD_PERIOD | The period is not in a supported format | Financials: FY2025, 2026Q3, 2025H1, latest_quarter. Consensus and guidance: 2026Q3, FY2026, last, next. The message lists the accepted forms. |
| 400 | BAD_REQUEST | A required condition is missing | For example, /clinical-trials needs symbol or sponsor. |
| 400 | UNSUPPORTED_MARKET | The symbol is in an unsupported market | Briefings support KOSPI and KOSDAQ stocks and ETFs only. |
| 400 | BAD_CURSOR | The cursor is malformed or came from different filters | Send next_cursor from the previous response unchanged, with the same filters. After changing filters, start without a cursor. |
| 400 | MARKET_NOT_AVAILABLE | The market is not available yet (Japan, China) | Only Korea (KR) and US data are available today. |
| 401 | UNAUTHORIZED | No key, or the key is not in the Data API format (ck_live_) | Check the header. PRO API keys do not work on the Data API. |
| 401 | INVALID_KEY | The key does not exist or has been revoked | Check your active keys in the console and create a new one if needed. |
| 401 | KEY_EXPIRED | The API docs session key (ck_docs_) has expired | Get a new one in the API docs while logged in, or use your own key. Docs session keys last at most 60 minutes. |
| 403 | PLAN_REQUIRED | The endpoint needs a paid tier (Launch · Business · Scale · Enterprise) or a PoC | The key is a free trial key, or the paid-tier term ended and the account fell back to Free. Check your contract status or contact sales. |
| 403 | MARKET_NOT_ENTITLED | The market is not on your contract | Check markets on GET /key. To add a market, contact help@alpsoft.io. The request is not counted against your limits. |
| 403 | POC_ENDED | The PoC period has ended and the account is stopped | Every key gets the same response. For an extension or a full contract, contact help@alpsoft.io. Once extended, the same keys work again. |
| 403 | READ_ONLY_KEY | An API docs session key was used for a non-GET request | Docs session keys call GET endpoints only. Send POST /query and similar requests with your own key. |
| 403 | FEATURE_DISABLED | The endpoint is discontinued | It stays open only to keys under existing contracts. See the reference for the replacement endpoint. |
| 404 | SYMBOL_NOT_FOUND | Phoenix AI does not know this symbol | The format is valid but it is not a listed symbol. Check the code or ticker. If the company exists but has no data, the code is NOT_FOUND. |
| 404 | NOT_APPLICABLE | This data does not apply to the security type | Fund-type products such as ETFs and ETNs have no company financials, metrics, consensus and so on. News and filings still work. |
| 404 | NOT_FOUND | The company exists but the requested data (account, period …) is not available | Check the code or ID. Do not repeat the same request. |
| 404 | NO_HISTORY | No stored briefing for that date | Past dates return stored briefings only. Leave date empty to get today’s briefing. |
| 429 | RATE_LIMITED | Per-minute limit exceeded | Wait Retry-After seconds, then retry. |
| 429 | QUOTA_EXCEEDED | Daily quota used up | Retry after 00:00 KST. |
| 429 | AI_QUOTA_EXCEEDED | Your tier’s daily AI call limit is used up | Retry after Retry-After (until 00:00 KST). Regular data calls keep working. |
| 429 | AI_MONTHLY_QUOTA_EXCEEDED | The contracted monthly AI call limit is used up | Retry after Retry-After (until the next cycle or the plan end). Regular data calls keep working. |
| 500 | INTERNAL | Internal server error | Retry after a short while. Contact us if it persists. |
| 503 | UNAVAILABLE | Temporarily unable to process the request | Retry after a short while with backoff. |
PRO API codes
| Status | Code | Meaning | What to do |
|---|---|---|---|
| 400 | BAD_REQUEST · BAD_SYMBOL | Invalid parameter or symbol format | Check the format in the reference (14-digit receipt numbers, 6-digit Korean codes or US tickers). |
| 401 | UNAUTHORIZED | No key, or the key is not in the PRO API format (ck_pers_) | Check the header. |
| 401 | WRONG_KEY_SCOPE | A Data API key (ck_live_) or an API docs session key (ck_docs_) was used on the PRO API | Create a PRO API key in the console and use it. MCP also accepts Data API keys, which open only the Data API tools; the error docs link points to the MCP guide (/docs/mcp). |
| 401 | INVALID_KEY | The key does not exist or has been revoked | Check your active keys. |
| 402 | BUDGET_EXCEEDED | The monthly AI spend cap has been reached | Stored summaries remain available. The cap reopens next month; contact us to raise it. |
| 403 | PLAN_REQUIRED | The account has no PRO plan | Retry once a PRO plan is applied to the account. |
| 403 | PLAN_EXPIRED | The plan term has ended | Renew the plan. |
| 403 | PLAN_NOT_STARTED | The plan has not started yet | Call after the start time given in the message. |
| 403 | PLAN_INACTIVE | The plan is suspended or cancelled | Contact us. |
| 400 · 403 | MARKET_NOT_AVAILABLE · MARKET_NOT_ENTITLED | Market not available yet (Japan, China) · market not on your contract | Check markets on /me. MCP tools answer with a tool error carrying the same code. |
| 403 | POC_ENDED | The account’s PoC period has ended | Requests stop even if a PRO API plan is still active. Contact us about an extension or a full contract. |
| 403 | PRODUCT_REQUIRED | The plan lacks the product this endpoint needs (Data or Ask) | Switch to Bundle or to the required product. |
| 403 | PRO_ACCESS_REQUIRED | The account does not have access to questions | Contact us. |
| 404 | NOT_FOUND | No data found | Check the code or receipt number. |
| 409 | ASK_IN_PROGRESS | A question is already being processed (one at a time per account) | Get the result for the running job_id before asking a new question. |
| 429 | RATE_LIMITED | Per-second limit exceeded | Wait Retry-After seconds. |
| 429 | DAILY_QUOTA_EXCEEDED | Daily call quota used up | Reopens at 00:00 KST (Retry-After included). |
| 429 | SUMMARY_DAILY_LIMIT | Today’s AI filing summary generation limit is used up | Stored summaries remain available (generate=false). |
| 429 | ASK_DAILY_LIMIT | Today’s question limit is used up (including web PRO) | Ask again after 00:00 KST. |
| 429 | AI_QUOTA_EXCEEDED | The account’s daily AI call limit is used up | Questions and summary generation reopen at 00:00 KST (Retry-After included). |
| 429 | AI_MONTHLY_QUOTA_EXCEEDED | The account’s monthly AI call limit is used up | Questions and summary generation reopen at the next cycle or the plan end (Retry-After included). |
| 503 | UNAVAILABLE | Temporarily unable to process the request | Retry after a short while. |
When an MCP tool call hits a limit, the error comes back as a tool result with isError set instead of an HTTP error, carrying the same code. See MCP for details.