All endpoints accept JSON responses. CORS is enabled — you can call this API from any browser or server.
API Reference
Free, open search API powered by BM25 ranking. No API key required for public use.
Base URL
Authentication
Most endpoints work without authentication. An API key gives you attribution in the query logs and may unlock higher priority as the service grows.
How to include your key
Pass your key using either method:
ls_... format is generated and active immediately -- no approval wait.?key=ls_... or Authorization: Bearer ls_... on any request.401 Unauthorized. Omitting the key entirely works fine — unauthenticated requests are allowed.Drive Auth API
The Drive API uses its own token-based auth flow separate from the main search API keys. Use these endpoints to obtain a Bearer token for Drive operations.
POST /api/drive/signup
Create a new Drive account. Returns a token immediately on success.
Request Body
Response
POST /api/drive/login
Log in with existing credentials. Returns a fresh Bearer token.
Request Body
Response
Using the Bearer token
Once you have a token, pass it as an Authorization header on all Drive API requests:
ls_...) will not work as a Drive Bearer token.Endpoints
Search the index. Results are scored with BM25 + title boost + host name boost. Returns up to 200 results. Automatically detects Base64-encoded queries and decodes them before searching.
Query Parameters
| Name | Type | Description |
|---|---|---|
| q required | string | The search query |
| key optional | string | Your API key (or use Authorization header) |
Code Examples
Example Response
Try it
Returns index statistics. Useful for showing users how large the index is.
Example Request
Example Response
Returns all indexed domains with their page counts, sorted by most pages. Up to 500 domains.
Example Request
Example Response
Returns the URL currently being crawled, or null if the crawler is idle.
Example Response (active)
Example Response (idle)
Search the image index by alt text. Returns up to 100 images with their source URL, alt text, and the page they were found on. Images are crawled from indexed pages and stored in a separate database.
Query Parameters
| Name | Type | Description |
|---|---|---|
| q required | string | Search query — matched against image alt text |
Code Examples
Example Response
Returns the total number of images indexed.
Example Response
Search the video index by title and description. Returns up to 50 videos with thumbnail, duration, channel, and platform. Videos are crawled from YouTube and stored in a separate database.
Parameters
| Name | Type | Description |
|---|---|---|
| q required | string | Search query — matched against title and description |
Example Response
Returns the total number of videos indexed.
Example Response
Request an API key. The key is generated and active immediately -- no manual approval needed.
Request Body (JSON)
| Field | Type | Description |
|---|---|---|
| name required | string | Your name or app name |
| email required | string | Your email address |
| usecase optional | string | What you're building |
Example Request
Example Response
?key=ls_....More Core Search
| Param | Type | Required | Description |
|---|---|---|---|
| url | string | required | Full http(s) URL to check |
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| limit | int | optional | Max stars to sample, default 4000, capped at 8000 |
Example
Response
Example
Response
Example
Response
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| host | string | required | Bare domain, e.g. example.com |
Example
Response
More Auth / Keys
| Param | Type | Required | Description |
|---|---|---|---|
| token | string | required | New token value to store |
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| token | string | optional | Token to verify |
Example
Response
Auth: none (this endpoint issues the admin token)
| Param | Type | Required | Description |
|---|---|---|---|
| username | string | required | Admin username |
| password | string | required | Admin password |
Example
Response
Drive API
Auth: Bearer Drive token
Example
Response
Auth: Bearer Drive token
| Param | Type | Required | Description |
|---|---|---|---|
| folder | string | optional | Folder path, default "/" |
Example
Response
Auth: Bearer Drive token
Example
Response
Auth: Bearer Drive token
Example
Response
Auth: Bearer Drive token
| Param | Type | Required | Description |
|---|---|---|---|
| file | file | required | The file |
| folder | string | optional | Target folder, default "/" |
Example
Response
Auth: Bearer Drive token
| Param | Type | Required | Description |
|---|---|---|---|
| id | string | required | File id |
Example
Response
Auth: Bearer Drive token
| Param | Type | Required | Description |
|---|---|---|---|
| id | string | required | File id |
Example
Response
Auth: Bearer Drive token
| Param | Type | Required | Description |
|---|---|---|---|
| id | string | required | File id |
Example
Response
Auth: Bearer Drive token
Example
Response
Example
Response
Auth: Bearer Drive token (or ?token=)
| Param | Type | Required | Description |
|---|---|---|---|
| token | string | optional | Drive session token, alternative to the Authorization header |
Example
Response
Auth: Bearer Drive token
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| url | string | required | URL to download |
| name | string | optional | Filename to save as |
| token | string | optional | Download-manager token, required if one is configured |
Example
Response
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| token | string | optional | Download-manager token |
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| token | string | optional | Download-manager token |
| name | string | required | Filename to delete |
Example
Response
More Media Search
| Param | Type | Required | Description |
|---|---|---|---|
| q | string | optional | Search query; empty returns latest 50 |
Example
Response
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| q | string | optional | Search text |
| category | string | optional | Filter, e.g. "ipsw" |
| all | 0 or 1 | optional | Include every version, not just the newest |
Example
Response
Example
Response
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| file | file | required | Image file: png/jpg/jpeg/webp/gif, max 8MB |
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| u | string | required | Remote GIF URL |
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| u | string | required | Remote GIF URL |
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| q | string | optional | Search text; empty returns a random set |
Example
Response
AI (Answers, Chat Tools, LuisPaper)
Example
Response
Auth: Bearer Drive token
Example
Response
Auth: Bearer Drive token
| Param | Type | Required | Description |
|---|---|---|---|
| id | string | required | Conversation id |
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| q | string | required | Topic to research |
Example
Response
Auth: LuisPaper account (paper_ API key via Bearer/cookie)
| Param | Type | Required | Description |
|---|---|---|---|
| q | string | required | Report topic |
| length | string | optional | One of the supported PAPER_LENGTHS, default "standard" |
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| job_id | string | required | Job id from /api/paper/start |
| turn | int | optional | Turn index, default latest |
| since | int | optional | Token offset already received |
Example
Response
Auth: LuisPaper account
| Param | Type | Required | Description |
|---|---|---|---|
| job_id | string | required | Job id |
| message | string | required | Follow-up text |
| image_data | string | optional | data: URL of an attached image |
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| job_id | string | required | Job id |
Example
Response
Auth: LuisPaper account
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| username | string | required | 3+ chars, lowercase/digits/underscore |
| password | string | required | 6+ chars |
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| username | string | required | |
| password | string | required |
Example
Response
Auth: LuisPaper account
| Param | Type | Required | Description |
|---|---|---|---|
| current_password | string | required | |
| new_password | string | required | 6+ chars |
Example
Response
Auth: LuisPaper account
Example
Response
Auth: LuisPaper account
Example
Response
Auth: LuisPaper account
| Param | Type | Required | Description |
|---|---|---|---|
| id | string | required | Report id |
Example
Response
Auth: LuisPaper account
| Param | Type | Required | Description |
|---|---|---|---|
| id | string | required | |
| custom_title | string | optional | |
| pinned | bool | optional |
Example
Response
Auth: LuisPaper account
| Param | Type | Required | Description |
|---|---|---|---|
| id | string | required |
Example
Response
Nexus — Auth
| Param | Type | Required | Description |
|---|---|---|---|
| username | string | required | 3+ chars |
| password | string | required | 6+ chars |
| phone | string | optional | Required by Nexus signup flow |
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| username | string | required | |
| password | string | required |
Example
Response
Auth: Bearer session token
Example
Response
Nexus — Messaging
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| channel_id | string | required | |
| content | string | optional | Up to 4000 chars; required unless attachments/forward_of given |
| attachments | array | optional | Up to 4 {type,url} objects |
| reply_to | string | optional | Message id being replied to |
| forward_of | object | optional | {author,content,attachments} of a forwarded message |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| parent | string | optional | Forum root message id, to fetch just its thread |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| message_id | string | required | |
| emoji | string | required |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| id | string | required | Message id |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| channel_id | string | required |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| channel_id | string | required | |
| question | string | required | Up to 300 chars |
| options | array | required | 2-10 strings, each up to 120 chars |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| poll_id | string | required | |
| option_index | int | required |
Example
Response
Nexus — Channels & Servers
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| name | string | required | Up to 60 chars |
| icon | string | optional | Emoji or image URL |
Example
Response
Auth: vn session
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| invite | string | required | Invite code or server id |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| server_id | string | required |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| server_id | string | required | |
| username | string | required |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| server_id | string | required | |
| username | string | required | |
| role | string | required | admin | mod | member |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| server_id | string | required | |
| name | string | required | Lowercased, spaces become dashes |
| type | string | optional | text|image|stream|event|announcement|forum, default text |
| topic | string | optional | Up to 120 chars |
Example
Response
Auth: vn session
Example
Response
Auth: vn session
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| server_id | string | required | |
| icon | string | required | Emoji or image URL, up to 300 chars |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| avatar | string | optional | |
| color | string | optional | |
| bio | string | optional | |
| status | string | optional | |
| pronouns | string | optional | |
| banner_color | string | optional |
Example
Response
Example
Response
Nexus — DMs
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| username | string | required |
Example
Response
Auth: vn session
Example
Response
Nexus — Realtime (WebSocket + long-poll)
| Param | Type | Required | Description |
|---|---|---|---|
| token | string | required | vn session token, passed in the connect URL query string |
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| token | string | required | |
| after | int | optional | Cursor from the previous call; omit/-1 to bootstrap and just get the current cursor |
Example
Response
Nexus — Calls & RTC
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| username | string | required | Callee |
| kind | string | optional | voice|screen, default voice |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| call_id | string | required | |
| accept | bool | required |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| call_id | string | required | |
| data | object | required | Opaque SDP/ICE payload |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| call_id | string | required |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| to | string | required | Target username |
| channel_id | string | optional | |
| kind | string | optional | |
| data | object | optional |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| channel_id | string | required | |
| on | bool | required |
Example
Response
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| room | string | required | Up to 16 chars |
| from | string | required | desktop|phone |
| data | object | optional |
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| room | string | required | |
| role | string | required | desktop|phone |
Example
Response
Nexus — QR / Push / WiFi Sign-in
| Param | Type | Required | Description |
|---|---|---|---|
| short | bool | optional | Use a short 4-char code for the "light" login flow |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| code | string | required |
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| c | string | required | Code |
| m | string | optional | signup|pair|(login) |
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| c | string | required | Code |
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| username | string | required |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| id | string | required | |
| ok | bool | required |
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| id | string | required |
Example
Response
Example
Response
Auth: vn session
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| device_id | string | required |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| device_id | string | required |
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| d | string | required | device_id |
Example
Response
Nexus — Media
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| file | file | required | png/jpg/jpeg/gif/webp, max 12MB |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| audio | file | required | Audio clip, max 25MB |
Example
Response
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| file | file | required | png/jpg/jpeg/gif/webp, max 12MB |
Example
Response
Nexus — Events
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| channel_id | string | required | |
| title | string | required | Up to 120 chars |
| when | string | optional | |
| location | string | optional | |
| description | string | optional |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| event_id | string | required | |
| status | string | required | going|maybe|no |
Example
Response
Auth: vn session
Example
Response
Voidnet (Social Feed)
| Param | Type | Required | Description |
|---|---|---|---|
| offset | int | optional | default 0 |
| limit | int | optional | default 20, max 50 |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| text | string | optional | |
| file0..file3 | file | optional | Up to 4 attachments |
Example
Response
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| id | string | required |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| post_id | string | required | |
| parent_id | string | optional | |
| text | string | required |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| id | string | required | |
| type | string | required | post|comment |
| vote | int | required | 1, -1, or 0 |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| username | string | required | |
| action | string | optional | follow (default) | unfollow |
Example
Response
Auth: vn session
Example
Response
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| bio | string | optional | |
| sysinfo | object | optional | |
| banner | string | optional | |
| banner_img | string | optional | |
| status | string | optional | |
| links | object | optional |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| file | file | required |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| file | file | required |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| to | string | required | |
| text | string | required |
Example
Response
Auth: vn session
Example
Response
Auth: vn session
Example
Response
Auth: vn session
Example
Response
Auth: vn session
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| q | string | required |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| subscription | object | required | Standard PushSubscription JSON |
Example
Response
Auth: vn session
Example
Response
Example
Response
Voidgroups (Group Chats)
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| name | string | required | |
| description | string | optional |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| id | string | required |
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| id | string | required |
Example
Response
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| group_id | string | required | |
| text | string | optional | |
| file0..file3 | file | optional |
Example
Response
Example
Response
LuisWiki
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| slug | string | required |
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| q | string | required |
Example
Response
Code Runner
Auth: vn session
Example
Response
Auth: vn session
| Param | Type | Required | Description |
|---|---|---|---|
| id | string | required |
Example
Response
App Store
Example
Response
| Param | Type | Required | Description |
|---|---|---|---|
| job | string | required | Job/session id from /api/appstore/generate |
Example
Response
Admin (internal, staff-only)
Auth: admin session
| Param | Type | Required | Description |
|---|---|---|---|
| token | string | required | Admin session token |
| id | string | required | Key id |
Example
Response
Auth: admin session
| Param | Type | Required | Description |
|---|---|---|---|
| token | string | required | |
| id | string | required |
Example
Response
Auth: admin session
| Param | Type | Required | Description |
|---|---|---|---|
| token | string | required | |
| id | string | required |
Example
Response
Auth: admin session
| Param | Type | Required | Description |
|---|---|---|---|
| token | string | required |
Example
Response
Auth: admin session
| Param | Type | Required | Description |
|---|---|---|---|
| token | string | required | |
| old_password | string | required | |
| new_password | string | required | 6+ chars |
Example
Response
Auth: admin session
| Param | Type | Required | Description |
|---|---|---|---|
| token | string | required |
Example
Response
Auth: admin session
| Param | Type | Required | Description |
|---|---|---|---|
| token | string | required | |
| id | string | required |
Example
Response
Auth: admin session
| Param | Type | Required | Description |
|---|---|---|---|
| token | string | required | |
| id | string | required |
Example
Response
Auth: admin session
| Param | Type | Required | Description |
|---|---|---|---|
| token | string | required | |
| id | string | required |
Example
Response
Auth: admin session
| Param | Type | Required | Description |
|---|---|---|---|
| token | string | required | |
| id | string | required |
Example
Response
Auth: admin session
| Param | Type | Required | Description |
|---|---|---|---|
| token | string | required |
Example
Response
Auth: admin session
| Param | Type | Required | Description |
|---|---|---|---|
| token | string | required |
Example
Response
Auth: admin session
| Param | Type | Required | Description |
|---|---|---|---|
| token | string | required | Admin session token |
| url | string | optional | Seed URL; omit to crawl from sitemaps |
Example
Response
Example
Response
Response Schema
Each result object in the /api/search response contains these fields:
| Field | Type | Description |
|---|---|---|
| id | integer | Internal page ID in the index |
| url | string | Full URL of the indexed page |
| title | string | Page title from the HTML <title> tag |
| snippet | string | First 300 characters of the page content |
Error Codes
All errors are returned as JSON with an error field. Below is the full reference.
| Status | Meaning | Description |
|---|---|---|
| 400 | Bad Request | Missing or invalid required parameters (e.g. missing q or missing name/email in register) |
| 401 | Unauthorized | Invalid, pending, or missing API key on an authenticated endpoint |
| 404 | Not Found | The endpoint path does not exist |
| 402 | Rate Limited | Too many requests in a short window — check retry_after in the response and wait |
| 500 | Server Error | Internal error (e.g. DB unavailable). |
Example Error Bodies
400 Bad Request
401 Unauthorized
429 Rate Limited
500 Server Error
{"error": "message here"}Rate Limits
Rate limits apply per IP per 60-second window on search endpoints (/api/search, /api/image-search, /api/video-search).
| Tier | Requests / min | How to get |
|---|---|---|
| Anonymous | 20 | No key required |
| Free API Key | 120 | Register below — free |
| Plus | Unlimited | Manually granted |
When the limit is exceeded the API returns 402 with a JSON body:
/api/stats, /api/image-stats, /api/video-stats, /api/hosts) are not rate limited.How it works
<img> tags with meaningful alt text. Images go into a separate images.db and are searchable via /api/image-search. Priority is given to image-rich hosts like Apple, The Verge, and iFixit.Stack: Python · SQLite · BM25 · Cloudflare Pages · Cloudflare Tunnel · Mobile PWA
Changelog
/api/video-search and /api/video-stats — a dedicated video crawler indexes 1,000+ YouTube videos (title, thumbnail, duration, channel) into a separate videos.db. New 🎬 Videos tab on the homepage.POST /api/drive/signup and POST /api/drive/login endpoints for Bearer token flow./api/image-search — a separate image crawler indexes <img> alt text from crawled pages into images.db. 6,900+ images indexed./api/search, /api/stats, /api/hosts, /api/crawl-status.Code Examples
Embed Widget
Add a search box to your own site with a few lines of HTML. Live preview below:
FAQ
/api/info for the current page/site/image/video/download counts, since any number written here would go stale fast.search() computes the real BM25 IDF and term-saturation formulas at query time (not a simplified stand-in), then applies a secondary boost/penalty pass over the top candidates.<img> tag and stores the src, alt text, and source page URL in a separate images.db database. When you click the 🖼 Images tab and search, results are matched against the alt text. See the live count via /api/image-stats or on the homepage.videos.db. Searching the Videos tab matches against title and description. No videos are downloaded; links open YouTube directly.downloads.db. It runs continuously, not as a one-time pass.faster-whisper service running directly on the host (no Docker, no external API call), currently on the medium model for better accuracy. The transcript comes back through /api/nexus/transcribe.