asicapidocs

Error codes reference

Complete reference of asicapi error codes with HTTP statuses, the ASIC rejection codes they map to, what each one means and how to fix it in your integration.

asicapi uses one error envelope for every failure, from a malformed ACN to an ASIC outage. Each error has a stable code you can branch on, an HTTP status that follows the usual REST meaning, a human-readable message, and where the failure originated at ASIC the original ASIC rejection code so you can cross-reference ASIC's own documentation. Every code on this page can be linked directly as https://asicapi.dev/docs/errors#code, which is exactly what the docUrl field in the error points at.

The error object

Response (400 Bad Request)
{
  "error": {
    "type": "invalid_request_error",
    "code": "acn_invalid",
    "message": "The ACN 004085617 fails the ASIC check digit test.",
    "param": "id",
    "asicCode": "CE01",
    "requestId": "req_01J8ZK3V7Q0M2X",
    "docUrl": "https://asicapi.dev/docs/errors#acn_invalid"
  }
}
FieldTypeDescription
typestringBroad category, one of the types below. Useful for generic handling (retry, re-authenticate, fix the request)
codestringSpecific, stable error code. Branch on this
messagestringPlain-English explanation intended for developers. Wording may change; do not parse it
paramstring or nullThe path, query or body parameter the error relates to, when there is one
asicCodestring or nullThe ASIC rejection code that caused the error, when the request was rejected by ASIC. Codes ending 01 to 49 are request validation failures; 50 to 99 relate to the availability of ASIC data
requestIdstringSame value as the X-Request-Id header. Quote it to support
detailsobjectPresent on some errors with structured extra information, for example counts on no_matches and too_many_matches, or purchase on extract_required
docUrlstringLink to the matching row on this page

Error types and HTTP statuses

TypeHTTP statusMeaningRetry?
invalid_request_error400, 410, 422The request is malformed, refers to something that no longer exists, or asks ASIC for something it cannot supply for this recordNo, fix the request
authentication_error401Missing, malformed or revoked API keyNo
extract_required_error402A section endpoint was called for data that only exists in an extract you do not hold. details.purchase is the request that would buy itAfter purchasing the extract
permission_error403The key is valid but not allowed to do this: product not enabled, wrong jurisdiction, or a resource owned by another accountNo
not_found_error404The company, person, document, order or register entry does not exist, or a search found nothingNo
conflict_error409An idempotency key was reused with a different bodyNo
rate_limit_error429Too many requests or too many concurrent requestsYes, after Retry-After
asic_unavailable_error503ASIC's database is unavailable or in a maintenance windowYes, with backoff
api_error500, 502asicapi or ASIC application failureYes, once, then contact support

Universal errors

Returned by any endpoint that talks to ASIC.

CodeHTTPASIC rejection code(s)MeaningWhat to do
product_unavailable_in_jurisdiction403ZZ01ASIC does not offer this product for the requested jurisdiction. Victorian business names are the common caseUse jurisdiction ASIC or a jurisdiction that offers the product
product_not_enabled403ZZ02Your account has not enabled this product, or has not enabled it for the requested jurisdictionEnable the product or jurisdiction in the dashboard
asic_unavailable503ZZ51ASIC's database is not available. Typically a scheduled maintenance windowRetry with exponential backoff; honour Retry-After. See rate limits
asic_application_error502ZZ53ASIC's application rejected the request with an internal errorRetry once. If it persists, contact support with the requestId
sandbox_product_unavailable403ZZ54A test key asked for a product ASIC's sample client does not serve (weekly summaries)Use a live key for this product

Company errors

CodeHTTPASIC rejection code(s)MeaningWhat to do
acn_invalid400CE01, CD01, CR01, CC01The ACN, ARBN or ARSN is not nine digits or fails the check digit testValidate with GET /v1/identifiers/{value} before calling
company_not_found404CE03, CD07, CR03No organisation with this ACN, ARBN, ARSN or ASIC identifier exists on the registerConfirm the number with a name search
abn_and_acn_supplied400CE04Both an ABN and an ACN were supplied for one lookupSend one identifier
abn_invalid400CE10The 11-digit ABN fails the ABN check digit testCheck the ABN
abn_not_acn_based400CE11The ABN is valid but does not embed an ACN, so it belongs to a sole trader, partnership or trust rather than a companySearch by name, or look the entity up on the ABR
abn_not_found404CE12, CE13The company matching the ACN has no ABN recorded, or no company matches the ACN contained in the ABNLook up by ACN instead
extract_unavailable_for_type422CE51, CR51, CC51The organisation type has no extract product. Company extracts exist for proprietary and public companies, registered bodies, foreign companies and managed investment schemes; a purchase for a business name, name reservation or other organisation type is refusedLook the organisation up with the free endpoints instead; nothing is charged
no_relational_data404CR02The company holds no roles, licences or shareholdings in other organisationsTreat as an empty result
document_period_conflict400CD02Both years and a from/to date range were suppliedSend one or the other
document_date_range_invalid400CD03, CD04from was given without to, or from is later than toFix the range
identifier_conflict400CD05, CD06More than one of ABN, organisation number or jurisdiction/state number was supplied, or a state number was supplied without a jurisdictionSend one identifier; add jurisdiction for state registration numbers
business_name_not_found404CD08, CD09The business registration number does not exist in this jurisdiction, or ASIC has no details for itCheck the number and jurisdiction from the search result
document_list_unavailable422CD51ASIC does not hold a document list for this organisation (business names and name reservations)Not applicable to this organisation type
no_charges404CC52No charges match the request for this companyTreat as an empty result
charge_not_found404CH01The charge number is invalid or does not existTake charge numbers from the company's charges list

Search errors

CodeHTTPASIC rejection code(s)MeaningWhat to do
search_scope_invalid400ON02The scope value is not one of the documented scopesUse a value from the name search scope table
no_matches404ON51, PN51, RP51, RR51, RB51, RQ51, RS51, RC51The search found nothing, or found names that were all rejected by your criteria. details.counts says whichBroaden the search or lower minScore. If found is non-zero there are matches you filtered out
too_many_matches422ON52, PN52More than 100 names matched at the exact or primary key level, or ASIC's people index returned only a fuzzy countAdd words, set exact=true, narrow scope, add a date of birth range, or use the offline search. See pagination
name_required400PN01, PN02familyName or givenName is missing from a people searchSupply both
name_invalid_characters400PN03A name contains digits, full stops, commas or other characters outside letters, hyphens, apostrophes and spacesStrip punctuation and numerals
birth_date_range_invalid400PN05, PN06, PN07birthDateFrom without birthDateTo, a start date in the future, or a start date after the end dateFix the range

Example: no_matches with counts

Response (404 Not Found)
{
  "error": {
    "type": "not_found_error",
    "code": "no_matches",
    "message": "No names matched \"ACME WIDGETS\" with minScore=95. ASIC found 37 candidate names that were excluded by your criteria.",
    "param": "q",
    "asicCode": "ON51",
    "requestId": "req_01J8ZKF5G0H4J8",
    "details": {
      "counts": { "returned": 0, "found": 37 }
    },
    "docUrl": "https://asicapi.dev/docs/errors#no_matches"
  }
}

counts.returned is the number of names ASIC would have returned and counts.found is the total ASIC located before applying your criteria. Both are zero when nothing at all matched.

Extract errors

Raised by the section endpoints that read from a purchased extract, by GET /v1/extracts/{id}, and by the extract query parameter. The buy-then-read sequence is explained on free lookups, extracts and orders. asicCode is null on all of them because the extract store is asicapi's, not ASIC's.

CodeHTTPASIC rejection code(s)MeaningWhat to do
extract_required402noneYou hold no extract that contains the requested section, or you hold a current extract but asked for ceased records, charges, annual returns or financial reports, which need a historical one. details.purchase is the exact request that would satisfy the callMake the purchase in details.purchase (POST /v1/companies/{id}/extracts, POST /v1/people/extracts or the register equivalent) and retry
extract_not_found404noneNo extract with this id existsCheck the id; list what you hold with GET /v1/extracts
extract_expired410noneThe extract is older than 12 months and is no longer storedPurchase a new extract
extract_owner_mismatch403noneThe extract belongs to a different account or environment. Sandbox and live extracts are not interchangeableUse your own extract ids
extract_type_invalid400RS02type on a purchase is not current, historical or relational, history is not a boolean, or the extract query parameter names an extract of a different kind than the endpoint serves (for example a person extract on a company section)Fix the body or pass an extract of the right kind

Example: extract_required with the purchase to make

Response (402 Payment Required)
{
  "error": {
    "type": "extract_required_error",
    "code": "extract_required",
    "message": "Office holders are part of a company extract. Purchase one with POST /v1/companies/004085616/extracts.",
    "param": null,
    "asicCode": null,
    "requestId": "req_01J9AB3K7Q2XM4",
    "docUrl": "https://asicapi.dev/docs/errors#extract_required",
    "details": {
      "purchase": {
        "method": "POST",
        "path": "/v1/companies/004085616/extracts",
        "body": { "type": "current" },
        "product": "company_extract_current"
      }
    }
  }
}

details.purchase.body is { "type": "historical" } when the request needs a historical extract, and details.purchase.product names the scope the purchase will consume so you can check it against your key before spending. A 402 never incurs a fee.

People errors

CodeHTTPASIC rejection code(s)MeaningWhat to do
search_expired410PE01, PD01The searchId or person id refers to a people search older than 30 days, which ASIC no longer retainsRun the search again and use the new ids
search_owner_mismatch403PE02, PD02The person id was produced by a search from a different account or environmentUse ids from your own searches; test and live ids are not interchangeable
person_not_found404PE03, PD03The person id does not exist in the referenced searchCheck the id against the search results
person_too_many_roles422PE51The person has more than 999 roles and ASIC will not produce the extract onlineContact support; ASIC handles these extracts by arrangement

Document errors

CodeHTTPASIC rejection code(s)MeaningWhat to do
document_number_invalid400DD01, DI01The document number is not nine characters starting with a digitTake document numbers from a document list
duplicate_document_number400DD02, DI07The same document number appears twice in one requestDeduplicate numbers[]
document_not_found404DD51, DI51No document with this number existsCheck the number
document_not_imaged422DD52, DI52The document exists but is not in ASIC's imaging system, so no image can be ordered. imaged is false on the documentNothing can be ordered online
page_range_invalid400DI02, DI08, DI53pages.to is less than pages.from, only one of them was given, or the document does not contain the requested pagesCheck pageCount on the document
delivery_invalid400DI03, DI04, DI05, DI06, CC03, CC04, CC05, CC06delivery.method is not web, email or post, or the instructions for that method are incomplete (missing email, missing postal details)Fix the delivery object
document_too_large_for_delivery422DI54, DI55, DI56, DI57, CC53, CC54, CC55, CC56The document exceeds the size limit for the chosen method: 50 pages for email, 500 pages for web. Over 500 pages must be postedChoose web for up to 500 pages or post beyond that

Register errors

CodeHTTPASIC rejection code(s)MeaningWhat to do
register_invalid400RP01, RQ01, RR01, RS01, RB01, RC01The {register} path segment is not a valid register codeUse a code from GET /v1/registers
browse_key_too_short400RP02, RR02, RB02The name browse key is shorter than two charactersSupply at least two characters of the family name

An invalid history value on POST /v1/registers/{register}/entries/{number}/extracts returns extract_type_invalid.

Weekly summary errors

CodeHTTPASIC rejection code(s)MeaningWhat to do
summary_type_invalid400WS01The {type} path segment is not one of the six summary slugsUse new-registrations, name-changes, external-administrations, licences-granted, disqualified-directors or new-schemes
week_start_invalid400WS02weekStarting is not a Monday, is not a completed week, or is more than a year agoSend the Monday of a completed week within the last 12 months
summary_unavailable404WS51ASIC has not produced the summary for that weekTry the previous week or retry later in the week
summary_empty200WS52No occurrences for that week and type. This is not an error: you receive an empty list with totalCount: 0Nothing to do

Order errors

CodeHTTPASIC rejection code(s)MeaningWhat to do
order_not_found404RO51No order with this id exists, or the continuation token behind it has expiredCheck the id; list orders with GET /v1/orders
order_owner_mismatch403RO01The order belongs to a different account or environmentUse your own order ids
order_not_ready409noneThe download was requested before the order reached readyPoll GET /v1/orders/{id} or wait for the order.ready webhook
order_download_expired410noneThe download link is older than 7 daysPlace a new image order

Platform errors

Raised by asicapi itself before or after talking to ASIC. asicCode is null.

CodeHTTPASIC rejection code(s)MeaningWhat to do
unauthorized401noneMissing, malformed, revoked or expired API keySend a valid key. See authentication
rate_limited429noneMore than 600 requests in a minute or more than 20 concurrent requests on this keyWait for Retry-After seconds. See rate limits
validation_error422noneA parameter failed validation in a way not covered by a specific code. param names itRead message and fix the parameter
idempotency_conflict409noneAn Idempotency-Key was reused within 24 hours with a different request bodyUse a new key for a new request

Handling errors in code

Branch on type for generic behaviour and on code for anything specific:

TypeScript
const res = await fetch(url, { headers: { Authorization: `Bearer ${key}` } });
if (!res.ok) {
  const { error } = await res.json();
  switch (error.type) {
    case 'rate_limit_error':
    case 'asic_unavailable_error':
      return retryLater(Number(res.headers.get('Retry-After') ?? 5));
    case 'authentication_error':
      throw new Error('API key rejected, rotate it');
    case 'extract_required_error':
      return purchaseThenRetry(error.details.purchase);
    default:
      if (error.code === 'no_matches') return [];
      throw new AsicApiError(error);
  }
}

On this page