SmartBucket
The query endpoints provide advanced AI-driven search, conversation, and summarization capabilities for documents and media stored in SmartBuckets. It enables users and agents to interact naturally with content through conversational chat (DocumentChat), semantic search (RagSearch), and multi-modal queries across text, images, and audio (document_query). The service also supports intelligent summarization of search results (summarize_page) and paginated result navigation. Designed for seamless integration into AI workflows, these endpoints make complex document exploration, PII detection, and knowledge extraction accessible via simple APIs, eliminating the need for custom pipelines or infrastructure.
POST /v1/chunk_search
Chunk Search provides search capabilities that serve as a complete drop-in replacement for traditional RAG pipelines. This system enables AI agents to leverage private data stored in SmartBuckets with zero additional configuration.
Each input query is processed by our AI agent to determine the best way to search the data. The system will then return the most relevant results from the data ranked by relevance on the input query.
Schema Reference
Request Body
input (string) Required
Details
Description
Natural language query or question. Can include complex criteria and relationships. The system will optimize the search strategy based on this input
Example
Find documents about revenue in Q4 2023requestId (string) Required
Details
Description
Client-provided search session identifier. Required for pagination and result tracking. We recommend using a UUID or ULID for this value
Example
<YOUR-REQUEST-ID>bucketLocations (array) Required
Details
Description
The buckets to search. If provided, the search will only return results from these buckets
Example
[ { "bucket": { "name": "my-smartbucket", "version": "01jxanr45haeswhay4n0q8340y", "application_name": "my-app" } }]partition (string(nullable))
Details
Description
Optional partition identifier for multi-tenant data isolation. Defaults to ‘default’ if not specified
Example
tenant-123results (array)
Details
Description
Ordered list of relevant text segments. Each result includes full context and metadata
Example
[ { "chunkSignature": "chunk_123abc", "text": "Sample text", "score": 0.95 }]import Raindrop from '@liquidmetal-ai/lm-raindrop';
const client = new Raindrop();
const response = await client.query.chunkSearch({ bucketLocations: [ { bucket: { name: 'my-smartbucket', version: '01jxanr45haeswhay4n0q8340y', application_name: 'my-app' } }, ], input: 'Find documents about revenue in Q4 2023', requestId: '<YOUR-REQUEST-ID>',});
console.log(response.results);from raindrop import Raindrop
client = Raindrop()response = client.query.chunk_search( bucket_locations=[{ "bucket": { "name": "my-smartbucket", "version": "01jxanr45haeswhay4n0q8340y", "application_name": "my-app", } }], input="Find documents about revenue in Q4 2023", request_id="<YOUR-REQUEST-ID>",)print(response.results)package main
import ( "context" "fmt"
"github.com/LiquidMetal-AI/lm-raindrop-go-sdk" "github.com/LiquidMetal-AI/lm-raindrop-go-sdk/option")
func main() { client := raindrop.NewClient( option.WithAPIKey("My API Key"), ) response, err := client.Query.ChunkSearch(context.TODO(), raindrop.QueryChunkSearchParams{ BucketLocations: []raindrop.BucketLocatorParam{raindrop.BucketLocatorParam{Bucket: raindrop.LiquidmetalV1alpha1BucketNameParam{ApplicationName: "my-app", Name: "my-bucket", Version: "01jtryx2f2f61ryk06vd8mr91p"}}}, Input: "Find documents about revenue in Q4 2023", RequestID: "<YOUR-REQUEST-ID>", }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", response.Results)}package com.raindrop.api.example;
import com.raindrop.api.client.RaindropClient;import com.raindrop.api.client.okhttp.RaindropOkHttpClient;import com.raindrop.api.core.JsonValue;import com.raindrop.api.models.query.QueryChunkSearchParams;import com.raindrop.api.models.query.QueryChunkSearchResponse;import java.util.Map;
public final class Main { private Main() {}
public static void main(String[] args) { RaindropClient client = RaindropOkHttpClient.fromEnv();
QueryChunkSearchParams params = QueryChunkSearchParams.builder() .addBucketLocation(JsonValue.from(Map.of( "bucket", Map.of( "name", "my-smartbucket", "version", "01jxanr45haeswhay4n0q8340y", "application_name", "my-app" ) ))) .input("Find documents about revenue in Q4 2023") .requestId("<YOUR-REQUEST-ID>") .build(); QueryChunkSearchResponse response = client.query().chunkSearch(params); }}# Run a RAG search querynpx raindrop query chunk-search "What is LiquidMetal?" -b my-bucketcurl -X POST "https://api.raindrop.run/v1/chunk_search" \ -H "Authorization: Bearer lm_apikey_..." \ -H "Content-Type: application/json" \ -d '{ "input": "Find documents about revenue in Q4 2023", "request_id": "<YOUR-REQUEST-ID>", "bucket_locations": [ { "bucket": { "name": "my-smartbucket", "version": "01jxanr45haeswhay4n0q8340y", "application_name": "my-app" } } ]}'Response Examples
{ "results": [ { "chunkSignature": "chunk_123abc", "text": "Sample text", "score": 0.95 } ]}POST /v1/document_query
Enables natural conversational interactions with documents stored in SmartBuckets. This endpoint allows users to ask questions, request summaries, and explore document content through an intuitive conversational interface. The system understands context and can handle complex queries about document contents.
The query system maintains conversation context throught the request_id, enabling follow-up questions and deep exploration of document content. It works across all supported file types and automatically handles multi-page documents, making complex file interaction as simple as having a conversation.
The system will:
- Maintain conversation history for context when using the same request_id
- Process questions against file content
- Generate contextual, relevant responses
Document query is supported for all file types, including PDFs, images, and audio files.
Schema Reference
Request Body
bucketLocation (object) Required
Details
Description
The storage bucket containing the target document. Must be a valid, registered Smart Bucket. Used to identify which bucket to query against
Example
{ "bucket": { "name": "my-smartbucket", "version": "01jxanr45haeswhay4n0q8340y", "application_name": "my-app" }}objectId (string) Required
Details
Description
Document identifier within the bucket. Typically matches the storage path or key. Used to identify which document to chat with
Example
document.pdfinput (string) Required
Details
Description
User’s input or question about the document. Can be natural language questions, commands, or requests. The system will process this against the document content
Example
What are the key points in this document?requestId (string) Required
Details
Description
Client-provided conversation session identifier. Required for maintaining context in follow-up questions. We recommend using a UUID or ULID for this value
Example
<YOUR-REQUEST-ID>partition (string(nullable))
Details
Description
Optional partition identifier for multi-tenant data isolation. Defaults to ‘default’ if not specified
Example
tenant-123answer (string)
Details
Description
AI-generated response that may include direct document quotes, content summaries, contextual explanations, references to specific sections, and related content suggestions
Example
Based on the document, the key points are...import Raindrop from '@liquidmetal-ai/lm-raindrop';
const client = new Raindrop();
const response = await client.query.documentQuery({ bucketLocation: { bucket: { name: 'my-smartbucket', version: '01jxanr45haeswhay4n0q8340y', application_name: 'my-app' }, }, input: 'What are the key points in this document?', objectId: 'document.pdf', requestId: '<YOUR-REQUEST-ID>',});
console.log(response.answer);from raindrop import Raindrop
client = Raindrop()response = client.query.document_query( bucket_location={ "bucket": { "name": "my-smartbucket", "version": "01jxanr45haeswhay4n0q8340y", "application_name": "my-app", } }, input="What are the key points in this document?", object_id="document.pdf", request_id="<YOUR-REQUEST-ID>",)print(response.answer)package main
import ( "context" "fmt"
"github.com/LiquidMetal-AI/lm-raindrop-go-sdk" "github.com/LiquidMetal-AI/lm-raindrop-go-sdk/option")
func main() { client := raindrop.NewClient( option.WithAPIKey("My API Key"), ) response, err := client.Query.DocumentQuery(context.TODO(), raindrop.QueryDocumentQueryParams{ BucketLocation: raindrop.BucketLocatorParam{Bucket: raindrop.LiquidmetalV1alpha1BucketNameParam{ApplicationName: "my-app", Name: "my-bucket", Version: "01jtryx2f2f61ryk06vd8mr91p"}}, Input: "What are the key points in this document?", ObjectID: "document.pdf", RequestID: "<YOUR-REQUEST-ID>", }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", response.Answer)}package com.raindrop.api.example;
import com.raindrop.api.client.RaindropClient;import com.raindrop.api.client.okhttp.RaindropOkHttpClient;import com.raindrop.api.core.JsonValue;import com.raindrop.api.models.query.QueryDocumentQueryParams;import com.raindrop.api.models.query.QueryDocumentQueryResponse;import java.util.Map;
public final class Main { private Main() {}
public static void main(String[] args) { RaindropClient client = RaindropOkHttpClient.fromEnv();
QueryDocumentQueryParams params = QueryDocumentQueryParams.builder() .bucketLocation(JsonValue.from(Map.of( "bucket", Map.of( "name", "my-smartbucket", "version", "01jxanr45haeswhay4n0q8340y", "application_name", "my-app" ) ))) .input("What are the key points in this document?") .objectId("document.pdf") .requestId("<YOUR-REQUEST-ID>") .build(); QueryDocumentQueryResponse response = client.query().documentQuery(params); }}# Query a document in a bucketnpx raindrop query document "What are the key points in this document?" \ -b my-bucket \ --object-id document.pdfcurl -X POST "https://api.raindrop.run/v1/document_query" \ -H "Authorization: Bearer lm_apikey_..." \ -H "Content-Type: application/json" \ -d '{ "bucket_location": { "bucket": { "name": "my-smartbucket", "version": "01jxanr45haeswhay4n0q8340y", "application_name": "my-app" } }, "object_id": "document.pdf", "input": "What are the key points in this document?", "request_id": "<YOUR-REQUEST-ID>"}'Response Examples
{ "answer": "Based on the document, the key points are..."}POST /v1/document_status
Get the indexing status of a document by its object key. This endpoint returns the current indexing status of a document including progress through various processing stages.
Schema Reference
Request Body
bucketLocation (object) Required
Details
Description
The storage bucket containing the target document
Example
{ "bucket": { "name": "my-smartbucket", "version": "01jxanr45haeswhay4n0q8340y", "application_name": "my-app" }}objectId (string) Required
Details
Description
Document identifier within the bucket (object key)
Example
document.pdfpartition (string(nullable))
Details
Description
Optional partition identifier for multi-tenant data isolation. Defaults to ‘default’ if not specified
Example
tenant-123status (string)
Details
Description
Overall document status
Example
processingingest (object(nullable))
Details
Description
Ingest stage information
embedding (object(nullable))
Details
Description
Embedding stage information
vectorIndex (object(nullable))
Details
Description
Vector index stage information
pii (object(nullable))
Details
Description
PII detection stage information
relationships (object(nullable))
Details
Description
Relationships stage information
errors (array)
Details
Description
Any errors encountered during indexing
import Raindrop from '@liquidmetal-ai/lm-raindrop';
const client = new Raindrop();
const response = await client.documentStatus.getStatus({ bucketLocation: { bucket: { name: 'my-smartbucket', version: '01jxanr45haeswhay4n0q8340y', application_name: 'my-app' }, }, objectId: 'document.pdf',});
console.log(response.embedding);from raindrop import Raindrop
client = Raindrop()response = client.document_status.get_status( bucket_location={ "bucket": { "name": "my-smartbucket", "version": "01jxanr45haeswhay4n0q8340y", "application_name": "my-app", } }, object_id="document.pdf",)print(response.embedding)package main
import ( "context" "fmt"
"github.com/LiquidMetal-AI/lm-raindrop-go-sdk" "github.com/LiquidMetal-AI/lm-raindrop-go-sdk/option")
func main() { client := raindrop.NewClient( option.WithAPIKey("My API Key"), ) response, err := client.DocumentStatus.GetStatus(context.TODO(), raindrop.DocumentStatusGetStatusParams{ BucketLocation: raindrop.BucketLocatorParam{Bucket: raindrop.LiquidmetalV1alpha1BucketNameParam{ApplicationName: "my-app", Name: "my-bucket", Version: "01jtryx2f2f61ryk06vd8mr91p"}}, ObjectID: "document.pdf", }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", response.Embedding)}package com.raindrop.api.example;
import com.raindrop.api.client.RaindropClient;import com.raindrop.api.client.okhttp.RaindropOkHttpClient;import com.raindrop.api.core.JsonValue;import com.raindrop.api.models.documentstatus.DocumentStatusGetStatusParams;import com.raindrop.api.models.documentstatus.DocumentStatusGetStatusResponse;import java.util.Map;
public final class Main { private Main() {}
public static void main(String[] args) { RaindropClient client = RaindropOkHttpClient.fromEnv();
DocumentStatusGetStatusParams params = DocumentStatusGetStatusParams.builder() .bucketLocation(JsonValue.from(Map.of( "bucket", Map.of( "name", "my-smartbucket", "version", "01jxanr45haeswhay4n0q8340y", "application_name", "my-app" ) ))) .objectId("document.pdf") .build(); DocumentStatusGetStatusResponse response = client.documentStatus().getStatus(params); }}curl -X POST "https://api.raindrop.run/v1/document_status" \ -H "Authorization: Bearer lm_apikey_..." \ -H "Content-Type: application/json" \ -d '{ "bucket_location": { "bucket": { "name": "my-smartbucket", "version": "01jxanr45haeswhay4n0q8340y", "application_name": "my-app" } }, "object_id": "document.pdf"}'Response Examples
{ "status": "processing", "ingest": { "totalChunksCreated": 123, "chunksQueued": 123, "creationComplete": true }, "embedding": { "totalExpected": 123, "itemsRemaining": 123 }, "vectorIndex": { "totalExpected": 123, "itemsRemaining": 123 }, "pii": { "totalExpected": 123, "itemsRemaining": 123 }, "relationships": { "totalExpected": 123, "itemsRemaining": 123 }, "errors": [ "example" ]}POST /v1/document_status_bulk
Get the indexing status for multiple documents in a single request. This is significantly more efficient than making individual GetDocumentStatus calls, as it searches shards once and returns status for all requested documents.
Schema Reference
Request Body
bucketLocation (object) Required
Details
Description
The storage bucket containing the target documents
Example
{ "bucket": { "name": "my-smartbucket", "version": "01jxanr45haeswhay4n0q8340y", "application_name": "my-app" }}objectIds (array) Required
Details
Description
List of document identifiers (object keys) to get status for
Example
[ "document1.pdf", "document2.pdf", "document3.pdf"]partition (string(nullable))
Details
Description
Optional partition identifier for multi-tenant data isolation. Defaults to ‘default’ if not specified
Example
tenant-123documents (array)
Details
Description
Status information for each requested document, keyed by object_id
Example
[ { "object_id": "doc1.pdf", "status": "completed" }, { "object_id": "doc2.pdf", "status": "processing" }]import Raindrop from '@liquidmetal-ai/lm-raindrop';
const client = new Raindrop();
const response = await client.documentStatusBulk.getStatusBulk({ bucketLocation: { bucket: { name: 'my-smartbucket', version: '01jxanr45haeswhay4n0q8340y', application_name: 'my-app' }, }, objectIds: ['document1.pdf', 'document2.pdf', 'document3.pdf'],});
console.log(response.documents);from raindrop import Raindrop
client = Raindrop()response = client.document_status_bulk.get_status_bulk( bucket_location={ "bucket": { "name": "my-smartbucket", "version": "01jxanr45haeswhay4n0q8340y", "application_name": "my-app", } }, object_ids=["document1.pdf", "document2.pdf", "document3.pdf"],)print(response.documents)package main
import ( "context" "fmt"
"github.com/LiquidMetal-AI/lm-raindrop-go-sdk" "github.com/LiquidMetal-AI/lm-raindrop-go-sdk/option")
func main() { client := raindrop.NewClient( option.WithAPIKey("My API Key"), ) response, err := client.DocumentStatusBulk.GetStatusBulk(context.TODO(), raindrop.DocumentStatusBulkGetStatusBulkParams{ BucketLocation: raindrop.BucketLocatorParam{Bucket: raindrop.LiquidmetalV1alpha1BucketNameParam{ApplicationName: "my-app", Name: "my-bucket", Version: "01jtryx2f2f61ryk06vd8mr91p"}}, ObjectIDs: []string{"document1.pdf", "document2.pdf", "document3.pdf"}, }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", response.Documents)}package com.raindrop.api.example;
import com.raindrop.api.client.RaindropClient;import com.raindrop.api.client.okhttp.RaindropOkHttpClient;import com.raindrop.api.core.JsonValue;import com.raindrop.api.models.documentstatusbulk.DocumentStatusBulkGetStatusBulkParams;import com.raindrop.api.models.documentstatusbulk.DocumentStatusBulkGetStatusBulkResponse;import java.util.List;import java.util.Map;
public final class Main { private Main() {}
public static void main(String[] args) { RaindropClient client = RaindropOkHttpClient.fromEnv();
DocumentStatusBulkGetStatusBulkParams params = DocumentStatusBulkGetStatusBulkParams.builder() .bucketLocation(JsonValue.from(Map.of( "bucket", Map.of( "name", "my-smartbucket", "version", "01jxanr45haeswhay4n0q8340y", "application_name", "my-app" ) ))) .objectIds(List.of( "document1.pdf", "document2.pdf", "document3.pdf" )) .build(); DocumentStatusBulkGetStatusBulkResponse response = client.documentStatusBulk().getStatusBulk(params); }}curl -X POST "https://api.raindrop.run/v1/document_status_bulk" \ -H "Authorization: Bearer lm_apikey_..." \ -H "Content-Type: application/json" \ -d '{ "bucket_location": { "bucket": { "name": "my-smartbucket", "version": "01jxanr45haeswhay4n0q8340y", "application_name": "my-app" } }, "object_ids": [ "document1.pdf", "document2.pdf", "document3.pdf" ]}'Response Examples
{ "documents": [ { "object_id": "doc1.pdf", "status": "completed" }, { "object_id": "doc2.pdf", "status": "processing" } ]}POST /v1/list_objects_by_status
List objects filtered by indexing status. Efficiently queries document storage across all shards to find objects matching (or excluding) specified statuses. Useful for identifying objects that need attention (e.g., failed, processing) or tracking indexing progress.
Schema Reference
Request Body
bucketLocation (object) Required
Details
Description
The storage bucket to query
Example
{ "bucket": { "name": "my-smartbucket", "version": "01jxanr45haeswhay4n0q8340y", "application_name": "my-app" }}statuses (array) Required
Details
Description
Status values to filter by (e.g., “completed”, “failed”, “processing”, “ingesting”, “partial”, “uploading”, “not_found”)
Example
[ "failed", "processing"]exclude (boolean(nullable))
Details
Description
If true, returns objects NOT matching the specified statuses (inverts the filter)
Example
trueprefix (string(nullable))
Details
Description
Optional prefix to filter object keys (e.g., “documents/” to only search in documents folder)
Example
documents/partition (string(nullable))
Details
Description
Partition to query (defaults to “default”)
Example
defaultdocuments (array)
Details
Description
Documents matching the status filter with their full status information
Example
[ { "object_id": "doc1.pdf", "status": "failed", "errors": [ "Embedding service timeout" ] }, { "object_id": "doc2.pdf", "status": "processing" }]import Raindrop from '@liquidmetal-ai/lm-raindrop';
const client = new Raindrop();
const response = await client.bucket.byStatus.listObjects({ bucketLocation: { bucket: { name: 'my-smartbucket', version: '01jxanr45haeswhay4n0q8340y', application_name: 'my-app' }, }, statuses: ['failed', 'processing'],});
console.log(response.documents);from raindrop import Raindrop
client = Raindrop()response = client.bucket.by_status.list_objects( bucket_location={ "bucket": { "name": "my-smartbucket", "version": "01jxanr45haeswhay4n0q8340y", "application_name": "my-app", } }, statuses=["failed", "processing"],)print(response.documents)package main
import ( "context" "fmt"
"github.com/LiquidMetal-AI/lm-raindrop-go-sdk" "github.com/LiquidMetal-AI/lm-raindrop-go-sdk/option")
func main() { client := raindrop.NewClient( option.WithAPIKey("My API Key"), ) response, err := client.Bucket.ByStatus.ListObjects(context.TODO(), raindrop.BucketByStatusListObjectsParams{ BucketLocation: raindrop.BucketLocatorParam{Bucket: raindrop.LiquidmetalV1alpha1BucketNameParam{ApplicationName: "my-app", Name: "my-bucket", Version: "01jtryx2f2f61ryk06vd8mr91p"}}, Statuses: []string{"failed", "processing"}, }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", response.Documents)}package com.raindrop.api.example;
import com.raindrop.api.client.RaindropClient;import com.raindrop.api.client.okhttp.RaindropOkHttpClient;import com.raindrop.api.core.JsonValue;import com.raindrop.api.models.bucket.bystatus.ByStatusListObjectsParams;import com.raindrop.api.models.bucket.bystatus.ByStatusListObjectsResponse;import java.util.Map;
public final class Main { private Main() {}
public static void main(String[] args) { RaindropClient client = RaindropOkHttpClient.fromEnv();
ByStatusListObjectsParams params = ByStatusListObjectsParams.builder() .bucketLocation(JsonValue.from(Map.of( "bucket", Map.of( "name", "my-smartbucket", "version", "01jxanr45haeswhay4n0q8340y", "application_name", "my-app" ) ))) .addStatus("failed") .addStatus("processing") .build(); ByStatusListObjectsResponse response = client.bucket().byStatus().listObjects(params); }}curl -X POST "https://api.raindrop.run/v1/list_objects_by_status" \ -H "Authorization: Bearer lm_apikey_..." \ -H "Content-Type: application/json" \ -d '{ "bucket_location": { "bucket": { "name": "my-smartbucket", "version": "01jxanr45haeswhay4n0q8340y", "application_name": "my-app" } }, "statuses": [ "failed", "processing" ]}'Response Examples
{ "documents": [ { "object_id": "doc1.pdf", "status": "failed", "errors": [ "Embedding service timeout" ] }, { "object_id": "doc2.pdf", "status": "processing" } ]}POST /v1/search
Primary search endpoint that provides advanced search capabilities across all document types stored in SmartBuckets.
Supports recursive object search within objects, enabling nested content search like embedded images, text content, and personally identifiable information (PII).
The system supports complex queries like:
- ‘Show me documents containing credit card numbers or social security numbers’
- ‘Find images of landscapes taken during sunset’
- ‘Get documents mentioning revenue forecasts from Q4 2023’
- ‘Find me all PDF documents that contain pictures of a cat’
- ‘Find me all audio files that contain information about the weather in SF in 2024’
Key capabilities:
- Natural language query understanding
- Content-based search across text, images, and audio
- Automatic PII detection
- Multi-modal search (text, images, audio)
Schema Reference
Request Body
input (string) Required
Details
Description
Natural language search query that can include complex criteria. Supports queries like finding documents with specific content types, PII, or semantic meaning
Example
All my filesrequestId (string) Required
Details
Description
Client-provided search session identifier. Required for pagination and result tracking. We recommend using a UUID or ULID for this value
Example
<YOUR-REQUEST-ID>bucketLocations (array) Required
Details
Description
The buckets to search. If provided, the search will only return results from these buckets
Example
[ { "bucket": { "name": "my-smartbucket", "version": "01jxanr45haeswhay4n0q8340y", "application_name": "my-app" } }]partition (string(nullable))
Details
Description
Optional partition identifier for multi-tenant data isolation. Defaults to ‘default’ if not specified
Example
tenant-123results (array)
Details
Description
Matched results with metadata
Example
[ { "chunkSignature": "35a494ab4de3ff1157b3cf23e5e94600e24a5552cbb6db645599547075a8c3ad", "text": "", "source": { "bucket": { "moduleId": "01jxanr4xbf44jj3p62vwzh8j5", "bucketName": "my-smartbucket", "applicationVersionId": "01jxanr45haeswhay4n0q8340y", "applicationName": "my-app" }, "object": "my-file.pdf" } }]pagination (object)
Details
Description
Pagination details for result navigation
Example
{ "total": 100, "page": 1, "pageSize": 10, "totalPages": 10}import Raindrop from '@liquidmetal-ai/lm-raindrop';
const client = new Raindrop();
const response = await client.query.search({ bucketLocations: [ { bucket: { name: 'my-smartbucket', version: '01jxanr45haeswhay4n0q8340y', application_name: 'my-app' } }, ], input: 'All my files', requestId: '<YOUR-REQUEST-ID>',});
console.log(response.pagination);from raindrop import Raindrop
client = Raindrop()response = client.query.search( bucket_locations=[{ "bucket": { "name": "my-smartbucket", "version": "01jxanr45haeswhay4n0q8340y", "application_name": "my-app", } }], input="All my files", request_id="<YOUR-REQUEST-ID>",)print(response.pagination)package main
import ( "context" "fmt"
"github.com/LiquidMetal-AI/lm-raindrop-go-sdk" "github.com/LiquidMetal-AI/lm-raindrop-go-sdk/option")
func main() { client := raindrop.NewClient( option.WithAPIKey("My API Key"), ) response, err := client.Query.Search(context.TODO(), raindrop.QuerySearchParams{ BucketLocations: []raindrop.BucketLocatorParam{raindrop.BucketLocatorParam{Bucket: raindrop.LiquidmetalV1alpha1BucketNameParam{ApplicationName: "my-app", Name: "my-bucket", Version: "01jtryx2f2f61ryk06vd8mr91p"}}}, Input: "All my files", RequestID: "<YOUR-REQUEST-ID>", }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", response.Pagination)}package com.raindrop.api.example;
import com.raindrop.api.client.RaindropClient;import com.raindrop.api.client.okhttp.RaindropOkHttpClient;import com.raindrop.api.core.JsonValue;import com.raindrop.api.models.query.QuerySearchParams;import com.raindrop.api.models.query.QuerySearchResponse;import java.util.Map;
public final class Main { private Main() {}
public static void main(String[] args) { RaindropClient client = RaindropOkHttpClient.fromEnv();
QuerySearchParams params = QuerySearchParams.builder() .addBucketLocation(JsonValue.from(Map.of( "bucket", Map.of( "name", "my-smartbucket", "version", "01jxanr45haeswhay4n0q8340y", "application_name", "my-app" ) ))) .input("All my files") .requestId("<YOUR-REQUEST-ID>") .build(); QuerySearchResponse response = client.query().search(params); }}# Run a new search querynpx raindrop query search "Find documents about revenue in Q4 2023" -b customer-data
# Get paginated results using request IDnpx raindrop query search --requestId 01HNG4V2RJXS5T --page 2curl -X POST "https://api.raindrop.run/v1/search" \ -H "Authorization: Bearer lm_apikey_..." \ -H "Content-Type: application/json" \ -d '{ "input": "All my files", "request_id": "<YOUR-REQUEST-ID>", "bucket_locations": [ { "bucket": { "name": "my-smartbucket", "version": "01jxanr45haeswhay4n0q8340y", "application_name": "my-app" } } ]}'Response Examples
{ "results": [ { "chunkSignature": "35a494ab4de3ff1157b3cf23e5e94600e24a5552cbb6db645599547075a8c3ad", "text": "", "source": { "bucket": { "moduleId": "01jxanr4xbf44jj3p62vwzh8j5", "bucketName": "my-smartbucket", "applicationVersionId": "01jxanr45haeswhay4n0q8340y", "applicationName": "my-app" }, "object": "my-file.pdf" } } ], "pagination": { "total": 100, "page": 1, "pageSize": 10, "totalPages": 10 }}POST /v1/search_get_page
Retrieve additional pages from a previous search. This endpoint enables navigation through large result sets while maintaining search context and result relevance. Retrieving paginated results requires a valid request_id from a previously completed search.
Schema Reference
Request Body
requestId (string) Required
Details
Description
Original search session identifier from the initial search
Example
<YOUR-REQUEST-ID>page (integer(nullable)) Required
Details
Description
Requested page number
Example
1pageSize (integer(nullable)) Required
Details
Description
Results per page
Example
10partition (string(nullable))
Details
Description
Optional partition identifier for multi-tenant data isolation. Defaults to ‘default’ if not specified
Example
tenant-123results (array)
Details
Description
Page results with full metadata
Example
[ { "chunkSignature": "chunk_123abc", "text": "Sample text", "score": 0.95 }]pagination (object)
Details
Description
Updated pagination information
Example
{ "total": 100, "page": 2, "pageSize": 10, "totalPages": 10}import Raindrop from '@liquidmetal-ai/lm-raindrop';
const client = new Raindrop();
// Automatically fetches more pages as needed.for await (const liquidmetalV1alpha1TextResult of client.query.getPaginatedSearch({ page: 1, pageSize: 10, requestId: '<YOUR-REQUEST-ID>',})) { console.log(liquidmetalV1alpha1TextResult.chunkSignature);}from raindrop import Raindrop
client = Raindrop()page = client.query.get_paginated_search( page=1, page_size=10, request_id="<YOUR-REQUEST-ID>",)page = page.results[0]print(page.chunk_signature)package main
import ( "context" "fmt"
"github.com/LiquidMetal-AI/lm-raindrop-go-sdk" "github.com/LiquidMetal-AI/lm-raindrop-go-sdk/option")
func main() { client := raindrop.NewClient( option.WithAPIKey("My API Key"), ) page, err := client.Query.GetPaginatedSearch(context.TODO(), raindrop.QueryGetPaginatedSearchParams{ Page: raindrop.Int(1), PageSize: raindrop.Int(10), RequestID: "<YOUR-REQUEST-ID>", }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", page)}package com.raindrop.api.example;
import com.raindrop.api.client.RaindropClient;import com.raindrop.api.client.okhttp.RaindropOkHttpClient;import com.raindrop.api.models.query.QueryGetPaginatedSearchPage;import com.raindrop.api.models.query.QueryGetPaginatedSearchParams;
public final class Main { private Main() {}
public static void main(String[] args) { RaindropClient client = RaindropOkHttpClient.fromEnv();
QueryGetPaginatedSearchParams params = QueryGetPaginatedSearchParams.builder() .page(1) .pageSize(10) .requestId("<YOUR-REQUEST-ID>") .build(); QueryGetPaginatedSearchPage page = client.query().getPaginatedSearch(params); }}curl -X POST "https://api.raindrop.run/v1/search_get_page" \ -H "Authorization: Bearer lm_apikey_..." \ -H "Content-Type: application/json" \ -d '{ "request_id": "<YOUR-REQUEST-ID>", "page": 1, "page_size": 10}'Response Examples
{ "results": [ { "chunkSignature": "chunk_123abc", "text": "Sample text", "score": 0.95 } ], "pagination": { "total": 100, "page": 2, "pageSize": 10, "totalPages": 10 }}POST /v1/summarize_page
Generates intelligent summaries of search result pages, helping users quickly understand large result sets without reading through every document. The system analyzes the content of all results on a given page and generates a detailed overview.
The summary system:
- Identifies key themes and topics
- Extracts important findings
- Highlights document relationships
- Provides content type distribution
- Summarizes metadata patterns
This is particularly valuable when dealing with:
- Large document collections
- Mixed content types
- Technical documentation
- Research materials
Schema Reference
Request Body
page (integer) Required
Details
Description
Target page number (1-based)
Example
1pageSize (integer) Required
Details
Description
Results per page. Affects summary granularity
Example
10requestId (string) Required
Details
Description
Original search session identifier from the initial search
Example
<YOUR-REQUEST-ID>partition (string(nullable))
Details
Description
Optional partition identifier for multi-tenant data isolation. Defaults to ‘default’ if not specified
Example
tenant-123summary (string)
Details
Description
AI-generated summary including key themes and topics, content type distribution, important findings, and document relationships
Example
The search results contain information about...import Raindrop from '@liquidmetal-ai/lm-raindrop';
const client = new Raindrop();
const response = await client.query.sumarizePage({ page: 1, pageSize: 10, requestId: '<YOUR-REQUEST-ID>' });
console.log(response.summary);from raindrop import Raindrop
client = Raindrop()response = client.query.sumarize_page( page=1, page_size=10, request_id="<YOUR-REQUEST-ID>",)print(response.summary)package main
import ( "context" "fmt"
"github.com/LiquidMetal-AI/lm-raindrop-go-sdk" "github.com/LiquidMetal-AI/lm-raindrop-go-sdk/option")
func main() { client := raindrop.NewClient( option.WithAPIKey("My API Key"), ) response, err := client.Query.SumarizePage(context.TODO(), raindrop.QuerySumarizePageParams{ Page: 1, PageSize: 10, RequestID: "<YOUR-REQUEST-ID>", }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", response.Summary)}package com.raindrop.api.example;
import com.raindrop.api.client.RaindropClient;import com.raindrop.api.client.okhttp.RaindropOkHttpClient;import com.raindrop.api.models.query.QuerySumarizePageParams;import com.raindrop.api.models.query.QuerySumarizePageResponse;
public final class Main { private Main() {}
public static void main(String[] args) { RaindropClient client = RaindropOkHttpClient.fromEnv();
QuerySumarizePageParams params = QuerySumarizePageParams.builder() .page(1) .pageSize(10) .requestId("<YOUR-REQUEST-ID>") .build(); QuerySumarizePageResponse response = client.query().sumarizePage(params); }}# coming soon!curl -X POST "https://api.raindrop.run/v1/summarize_page" \ -H "Authorization: Bearer lm_apikey_..." \ -H "Content-Type: application/json" \ -d '{ "page": 1, "page_size": 10, "request_id": "<YOUR-REQUEST-ID>"}'Response Examples
{ "summary": "The search results contain information about..."}