Pagination and result limits
How asicapi paginates ASIC search results and document lists with cursors, the 100-name cap on online company name searches, and document list date windows.
Lists in asicapi are paginated with an opaque cursor. You ask for a page with limit, read hasMore, and pass nextCursor back to get the next page. The same shape is used for name search results, office holders, members, documents, register browses and weekly summaries. Two ASIC-specific rules sit on top of this: online company name searches are capped by ASIC at 100 names, and company document lists can be windowed by years or by a date range.
The list shape
{
"object": "list",
"data": [
{ "object": "document", "documentNumber": "0E5123456", "formCode": "484", "formDescription": "Change to company details", "subForms": [], "receivedAt": "2024-05-01", "processedAt": "2024-05-03", "effectiveAt": "2024-04-30", "qualifier": null, "pageCount": 4, "imaged": true, "underRequisition": false, "xbrlAvailable": false, "xbrlDocumentNumber": null, "status": null, "priced": true }
],
"hasMore": true,
"nextCursor": "eyJvZmZzZXQiOjUwLCJ0b2tlbiI6IjAwMDExNDc0NyJ9",
"totalCount": 412,
"meta": { "billable": false, "product": null, "requestId": "req_01J8ZKC2D7E1F5" }
}| Field | Type | Description |
|---|---|---|
data | array | The items on this page, in the order ASIC returns them |
hasMore | boolean | true when more items exist beyond this page |
nextCursor | string or null | Opaque token for the next page. null when hasMore is false |
totalCount | integer or null | Total items matching the request when ASIC reports one (name searches, people searches, document lists). null where ASIC does not supply a count |
extract | object | Present only on lists served from a purchased extract (office holders, members and the other section endpoints). Identifies the extract being paged; see requests and responses |
Query parameters
Prop
Type
curl "https://api.asicapi.dev/v1/companies/004085616/documents?limit=100&cursor=eyJvZmZzZXQiOjUwLCJ0b2tlbiI6IjAwMDExNDc0NyJ9" \
-H "Authorization: Bearer $ASICAPI_KEY"Cursors encode the position in the result set and are valid for 30 minutes. Changing any filter while paginating returns 400 validation_error with param set to cursor; start a new list instead. Paging is never billable: free lookups are free on every page, and section endpoints page over the extract you already hold.
Section endpoints page over the extract you hold
Office holders, addresses, share capital, members, charges, a person's roles and the other section endpoints do not query ASIC when you page through them. They paginate over the most recent extract you purchased, or the one you name with the extract query parameter, and every page carries the same extract reference and meta.billable: false. Because the extract is a fixed snapshot, a cursor over it is stable: the list cannot change under you between pages. To page over newer data, purchase a new extract and start again. If you hold no suitable extract the first page returns 402 extract_required; see free lookups, extracts and orders.
Order of results
Ordering is ASIC's, not alphabetical. Office holders are grouped by role in ASIC's sequence, then current before ceased, with ceased records newest first. Documents are newest first by received date. Name search results are ordered by score, then name. Pass sortBy=name to a name search if you prefer alphabetical results.
The 100-name cap on company name searches
ASIC's online names index will return at most 100 names for one search. The cap applies at the point where ASIC selects names, before scoring and before your limit, so a broad search on a common word will not paginate past 100 even though the register holds far more matches. Two things can happen when a search is too broad:
- ASIC finds more than 100 names at the exact match level, or finds no exact match and more than 100 at the primary key level. asicapi returns
422 too_many_matcheswithdetails.countsshowing how many exact and total matches ASIC found. - ASIC finds fewer than 100 names, but all are rejected by your criteria (for example every match scored below
minScore) while more than 100 exist on other keys. asicapi returns404 no_matcheswithdetails.countswherereturnedis 0 andfoundis non-zero.
{
"error": {
"type": "invalid_request_error",
"code": "too_many_matches",
"message": "ASIC found 0 exact and 1874 primary key matches for \"PACIFIC\". Add words to the name, set exact=true or narrow the scope, or use the offline search.",
"param": "q",
"asicCode": "ON52",
"requestId": "req_01J8ZKD3E8F2G6",
"details": { "counts": { "returned": 0, "found": 1874 } },
"docUrl": "https://asicapi.dev/docs/errors#too_many_matches"
}
}Ways to stay under the cap:
| Technique | Effect |
|---|---|
exact=true | Only the single name that matches exactly is returned |
More words in q | Reduces the candidate set at the primary key level |
scope=registered-companies | Excludes business names, reservations and deregistered organisations |
types[]=APTY | Restrict to one organisation type |
includeDeregistered=false | Drop deregistered companies |
minScore=90 | Drop weak matches (applied after selection, so this alone will not lift the cap) |
Offline search for the rest
When you need every match, use the offline name search. POST /v1/companies/search/offline accepts the same search parameters, returns 202 Accepted with an offlineSearch object, and ASIC runs the search against the full index as a batch job. The complete result set is delivered to the email address or webhook you nominate, with no 100-name cap.
curl -X POST https://api.asicapi.dev/v1/companies/search/offline \
-H "Authorization: Bearer $ASICAPI_KEY" \
-H "Content-Type: application/json" \
-d '{ "q": "PACIFIC", "scope": "registered-companies", "delivery": { "method": "email", "email": "searches@example.com.au" } }'{
"object": "offlineSearch",
"id": "ofs_01J8ZKE4F9G3H7",
"status": "pending",
"q": "PACIFIC",
"scope": "registered-companies",
"deliveredTo": "searches@example.com.au",
"createdAt": "2026-09-04T01:20:44Z",
"meta": { "billable": true, "product": "name_search", "requestId": "req_01J8ZKE4G0H4J8" }
}The offline_search.ready webhook fires when the results are available.
People search limits
People searches return up to 100 matches as well. When ASIC's index holds more than 100 candidates it returns only a fuzzy count of how many names would match, and asicapi responds with 422 too_many_matches. Narrow with a second given name (givenName2) or a date of birth range (birthDateFrom, birthDateTo).
Document list windows
A company's document list can hold thousands of forms going back to 1991. GET /v1/companies/{id}/documents lets you window the list before paginating.
Prop
Type
Supplying both years and a date range returns 400 document_period_conflict. A from without a to, or a from later than to, returns 400 document_date_range_invalid. With no window at all, every document is selected and paginated newest first.
Further documents lodged
ASIC's document list is sent in a fixed window and, when a company has lodged more documents than that window holds, ASIC marks the last document with a notice that there are further documents lodged by this company. asicapi turns this into ordinary pagination: hasMore is true, nextCursor is set, and requesting the next page asks ASIC for the next window. totalCount reflects ASIC's count of documents in the selected period, so you can show "showing 50 of 412" without fetching everything.
A purchased company extract also embeds a document list, sized by the optional documents object on POST /v1/companies/{id}/extracts ({ "years": 5, "limit": 200 }). The extract holds that window only, with documents.hasMore: true when the company has lodged more. The embedded list is a snapshot as at the purchase and is not paginated; use the free GET /v1/companies/{id}/documents endpoint to page through the full, live document list.
Register browses
GET /v1/registers/{register}/entries browses ASIC's professional and banned registers by family name prefix. ASIC returns entries in name order from the browse key onward and asicapi paginates them with the same cursor mechanism. totalCount is null for register browses because ASIC does not report a total.
Related
Requests and responses
Learn the asicapi request headers, JSON conventions for ASIC data, the extract reference on section reads, the meta billing object and the versioning policy.
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.