The complete list. If a request is not in this table, the app does not make it.
| Host | Call | When |
|---|---|---|
| opensolr.com | GET /app/authorize (browser) | Sign-in |
| opensolr.com | POST /app/token | Sign-in: code and verifier for email, API key and plan limits |
| opensolr.com | get_index_list | Every sync: is the phone's index in the account? |
| opensolr.com | vector_regions | Creating the index: where vector search runs |
| opensolr.com | create_index | Creating the index |
| opensolr.com | upload_zip_config_files | A new index, or one without the app's schema |
| opensolr.com | get_core_info | Address and credentials of the index |
| opensolr.com | get_account_summary | Plan limits and usage, after every sync and on the account screen |
| opensolr.com | nearby_places | Once per round of new photos with a GPS position: up to 50 positions at a time, answered with the nearest place of each (city, region, country) |
| api.opensolr.com | image_clip | Once per new photo |
| api.opensolr.com | batch_embed | Once per round of up to 20 new photos, on plans with vector search |
| api.opensolr.com | embed | Once per typed search, on plans with vector search |
| the phone's index | POST /select | Listing ids, searching (with spellcheck), checking the schema, listing the photos with a position for the map |
| the phone's index | POST /suggest | Autocomplete, as you type |
| tile.openstreetmap.org | GET map tiles | Only while the map screen is open; cached on the phone |
| the phone's index | POST /update | Adding, deleting, committing |
The account API calls live under /solr_manager/api/ on their host. Credentials always travel in the request body, never in a URL. The app follows no redirects on these calls, so a credential is never re-sent to a host the app did not name.
A POST with a JSON body: email, api_key, index_name, top_k (12) and image, the base64 of the 640 px JPEG. The server checks the upload by its content, not its name: the byte signature and the image decoder must agree on an allowed format, the declared pixel count is checked before decoding, and the image is decoded with its rotation applied and its metadata dropped. It answers:
It counts as one AI request, only when the model actually ran; the same picture sent again is answered from cache for free. It is the same model and vocabulary as Opensolr's image_to_text, without the text-reading and barcode steps.
batch_embed takes payloads, up to 50 texts, and answers embeddings, one 1024-number vector per text in the same order. embed takes one payload with is_query=1 for a typed search and answers the vector itself. Both require a plan with vector search and answer VECTOR_NOT_ALLOWED otherwise.
| Answer | Meaning | What the app does |
|---|---|---|
ERROR_AUTHENTICATION_FAILED | The API key was refused | Asks you to sign in again |
429 ERROR_AI_MONTHLY_QUOTA_EXCEEDED | AI requests used up | Pauses sync, words-only search |
429 with Retry-After | Rate limit | Waits and retries |
VECTOR_NOT_ALLOWED | No vector search on the plan | Continues without vectors |
NOT_OWNER_ERROR | The index is not in the account | Treated as a missing index |
| 401 from the index | Its password changed | Reads the new one and retries |
| 403 from the index | Over disk space or bandwidth | Stops, notification with Upgrade |