From cae5d74448fe37509777ba937d2dbd41fd0a7fde Mon Sep 17 00:00:00 2001 From: Arne Luenser Date: Wed, 7 Jan 2026 17:07:39 +0100 Subject: [PATCH 1/2] feat: document search result set limits --- .../search/identity-search-api.mdx | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/docs/kratos/manage-identities/search/identity-search-api.mdx b/docs/kratos/manage-identities/search/identity-search-api.mdx index 7bf7dae9c5..488e5c0ac5 100644 --- a/docs/kratos/manage-identities/search/identity-search-api.mdx +++ b/docs/kratos/manage-identities/search/identity-search-api.mdx @@ -29,9 +29,9 @@ import Help from '@site/docs/_common/need-help.mdx' ## Getting started -We recommend using the [Typesense SDKs](https://typesense.org/docs/29.0/api/api-clients.html) for your preferred language to -interact with the advanced identity search API. Pass your [Ory Network API key](/concepts/personal-access-token) where you would -normally pass the Typesense API key, use the following base URL: +Ory exposes an advanced Identity Search API that is compatible with the Typesense search protocol. You can use existing Typesense +SDKs to interact with it. Pass your [Ory Network API key](/concepts/personal-access-token) where you would normally pass the +Typesense API key, and use the following base URL: ```shell https://{your-ory-slug}.projects.oryapis.com/admin/preview/search/v0beta1 @@ -105,6 +105,13 @@ possible. ::: +## Search result set limit + +The identity search API does not support pagination (unlike the List Identities API) and will return a maximum of 1,000 results +per request. If you are frequently hitting this limit, consider refining your search queries to reduce the number of results +returned. To paginate through _all_ your identities, use the +[List Identities API](/reference/api#tag/identity/operation/listIdentities). + ## Consistency and availability The search index powering advanced identity search is eventually consistent with the main identity store. This means that there From dee9284bc078006e6d4f41dcaa38c1f4d0b414ca Mon Sep 17 00:00:00 2001 From: Arne Luenser Date: Wed, 14 Jan 2026 18:04:08 +0100 Subject: [PATCH 2/2] feat: update typesense collection name in identity search --- code-examples/curl/search/advanced-result.json | 2 +- code-examples/curl/search/advanced.sh | 3 +-- code-examples/curl/search/basic.sh | 5 ++--- code-examples/sdk/go/search/search.go | 7 +++---- code-examples/sdk/java/search/App.java | 3 +-- .../manage-identities/search/identity-search-api.mdx | 2 +- 6 files changed, 9 insertions(+), 13 deletions(-) diff --git a/code-examples/curl/search/advanced-result.json b/code-examples/curl/search/advanced-result.json index 4b57ebe741..0475af00a0 100644 --- a/code-examples/curl/search/advanced-result.json +++ b/code-examples/curl/search/advanced-result.json @@ -96,7 +96,7 @@ ], "page": 1, "request_params": { - "collection_name": "identities-f59802a6-eb63-44cc-a3ac-d90db3d3abc2", + "collection_name": "identities", "first_q": "*", "per_page": 20, "q": "*" diff --git a/code-examples/curl/search/advanced.sh b/code-examples/curl/search/advanced.sh index d7e297e4cf..d86c6d02bb 100644 --- a/code-examples/curl/search/advanced.sh +++ b/code-examples/curl/search/advanced.sh @@ -1,5 +1,4 @@ export ORY_API_KEY="ory_pat_XXXXXXXXXXXXXXXX" -export COLLECTION="identities-d7c52eed-e45c-4483-af3b-4aaa5782bff7" # replace with your project ID export ORY_SLUG="upbeat-lalande-zu8omm6wwp" # replace with your Ory slug # list identities which do not have two-factor authentication enabled, @@ -7,7 +6,7 @@ export ORY_SLUG="upbeat-lalande-zu8omm6wwp" # replace with your Ory slug # ordered by creation date (newest first), # and limited to 20 per page curl -H "Authorization: Bearer $ORY_API_KEY" \ - "https://$ORY_SLUG.projects.oryapis.com/admin/preview/search/v0beta1/collections/$COLLECTION/documents/search" \ + "https://$ORY_SLUG.projects.oryapis.com/admin/preview/search/v0beta1/collections/identities/documents/search" \ --url-query 'q=*' \ --url-query 'filter_by=available_aal:!=aal2' \ --url-query 'facet_by=organization_id' \ diff --git a/code-examples/curl/search/basic.sh b/code-examples/curl/search/basic.sh index 328f2fe539..b2e761df85 100644 --- a/code-examples/curl/search/basic.sh +++ b/code-examples/curl/search/basic.sh @@ -1,11 +1,10 @@ export ORY_API_KEY="ory_pat_XXXXXXXXXXXXXXXX" -export COLLECTION="identities-d7c52eed-e45c-4483-af3b-4aaa5782bff7" # replace with your project ID export ORY_SLUG="upbeat-lalande-zu8omm6wwp" # replace with your Ory slug # List identities via Search API curl -H "Authorization: Bearer $ORY_API_KEY" \ - "https://$ORY_SLUG.projects.oryapis.com/admin/preview/search/v0beta1/collections/$COLLECTION/documents/search?q=*" + "https://$ORY_SLUG.projects.oryapis.com/admin/preview/search/v0beta1/collections/identities/documents/search?q=*" # Search for "foo" in the email trait curl -H "Authorization: Bearer $ORY_API_KEY" \ - "https://$ORY_SLUG.projects.oryapis.com/admin/preview/search/v0beta1/collections/$COLLECTION/documents/search?q=foo&query_by=traits.email" + "https://$ORY_SLUG.projects.oryapis.com/admin/preview/search/v0beta1/collections/identities/documents/search?q=foo&query_by=traits.email" diff --git a/code-examples/sdk/go/search/search.go b/code-examples/sdk/go/search/search.go index 3ee3615095..f1b0f72db2 100644 --- a/code-examples/sdk/go/search/search.go +++ b/code-examples/sdk/go/search/search.go @@ -13,11 +13,10 @@ import ( var ( ORY_PROJECT_URL = os.Getenv("ORY_PROJECT_URL") ORY_API_KEY = os.Getenv("ORY_API_KEY") - Collection = "identities-" + os.Getenv("ORY_PROJECT_ID") ) func main() { - ctx := context.WithValue(context.Background(), ory.ContextAccessToken, os.Getenv("ORY_API_KEY")) + ctx := context.WithValue(context.Background(), ory.ContextAccessToken, ORY_API_KEY) // Initialize Ory client cfg := ory.NewConfiguration() @@ -34,7 +33,7 @@ func main() { // highlight-start // List identities via Search API - list, err := searchClient.Collection(Collection).Documents().Search(ctx, &typesenseapi.SearchCollectionParams{ + list, err := searchClient.Collection("identities").Documents().Search(ctx, &typesenseapi.SearchCollectionParams{ Q: ptr("*"), }) // highlight-end @@ -49,7 +48,7 @@ func main() { // highlight-start // Search identities via Search API - search, err := searchClient.Collection(Collection).Documents().Search(ctx, &typesenseapi.SearchCollectionParams{ + search, err := searchClient.Collection("identities").Documents().Search(ctx, &typesenseapi.SearchCollectionParams{ Q: ptr("foo"), QueryBy: ptr("traits"), }) diff --git a/code-examples/sdk/java/search/App.java b/code-examples/sdk/java/search/App.java index 0af90bca1e..2b0230f2dc 100644 --- a/code-examples/sdk/java/search/App.java +++ b/code-examples/sdk/java/search/App.java @@ -16,8 +16,7 @@ public static void main(String[] args) { Client searchClient = initializeSearchClient(); // highlight-start // Search identities via Search API - String collection = "identities-" + System.getenv("ORY_PROJECT_ID"); // Set the collection name - SearchResult searchResult = searchClient.collections(collection).documents() + SearchResult searchResult = searchClient.collections("identities").documents() .search(new SearchParameters().q("test@example.com").queryBy("traits.email")); // highlight-end diff --git a/docs/kratos/manage-identities/search/identity-search-api.mdx b/docs/kratos/manage-identities/search/identity-search-api.mdx index 488e5c0ac5..b82dcd524c 100644 --- a/docs/kratos/manage-identities/search/identity-search-api.mdx +++ b/docs/kratos/manage-identities/search/identity-search-api.mdx @@ -37,7 +37,7 @@ Typesense API key, and use the following base URL: https://{your-ory-slug}.projects.oryapis.com/admin/preview/search/v0beta1 ``` -and set the collection name to `identities-{your-project-id}`. +and query the collection named `identities`. See the following examples for how to configure and use the Typesense SDKs to search for identities.