Every call it makes

The complete list of network calls, what each carries, and the server side endpoints behind them.

The complete list. If a request is not in this table, the app does not make it.

HostCallWhen
opensolr.comGET /app/authorize (browser)Sign-in
opensolr.comPOST /app/tokenSign-in: code and verifier for email, API key and plan limits
opensolr.comget_index_listEvery sync: is the phone's index in the account?
opensolr.comvector_regionsCreating the index: where vector search runs
opensolr.comcreate_indexCreating the index
opensolr.comupload_zip_config_filesA new index, or one without the app's schema
opensolr.comget_core_infoAddress and credentials of the index
opensolr.comget_account_summaryPlan limits and usage, after every sync and on the account screen
opensolr.comnearby_placesOnce 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.comimage_clipOnce per new photo
api.opensolr.combatch_embedOnce per round of up to 20 new photos, on plans with vector search
api.opensolr.comembedOnce per typed search, on plans with vector search
the phone's indexPOST /selectListing ids, searching (with spellcheck), checking the schema, listing the photos with a position for the map
the phone's indexPOST /suggestAutocomplete, as you type
tile.openstreetmap.orgGET map tilesOnly while the map screen is open; cached on the phone
the phone's indexPOST /updateAdding, 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.

01 · image_clip

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:

{"status": true, "text": "dog, beach, sand, ...", "labels": [{"label": "dog", "score": 0.28}, ...], "model": "openai/clip-vit-large-patch14"}

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.

02 · batch_embed and embed

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.

03 · Refusals the app understands
AnswerMeaningWhat the app does
ERROR_AUTHENTICATION_FAILEDThe API key was refusedAsks you to sign in again
429 ERROR_AI_MONTHLY_QUOTA_EXCEEDEDAI requests used upPauses sync, words-only search
429 with Retry-AfterRate limitWaits and retries
VECTOR_NOT_ALLOWEDNo vector search on the planContinues without vectors
NOT_OWNER_ERRORThe index is not in the accountTreated as a missing index
401 from the indexIts password changedReads the new one and retries
403 from the indexOver disk space or bandwidthStops, notification with Upgrade

Opensolr Photos is open source and MIT licensed. Questions about your Opensolr account, index or plan go to opensolr.com/contact; questions about the app itself belong on GitHub.

Opensolr Photos Documentation