Demo chat
← All tools

TOOLS / VISUAL COMMERCE

Inspired visual search.

Reads one photograph, cuts every separately purchasable object out of it, and returns retailer links for each — over MCP or HTTP.

Publisher listingPublic information Protected execution
A viewfinder and search icon above coloured blocks separated like objects cut from a photograph.
OverviewYour first readThe MCP endpointLimits, costs and honestyExamples & prompts

Limits, errors and cost

Hard limits

| Limit | Value | | --- | --- | | Objects per read | 6 | | Shopping matches per object | 10 | | Image size | 10 MB | | Image formats | JPG, PNG, WEBP, GIF | | focus length | 160 characters, control characters stripped | | REST trial allowance | 10 requests per key | | REST trial lifetime | 24 hours from issue | | MCP allowance | 10 reads per approved Auth0 user, persistent across sign-ins | | Key mints per address per day | 5 | | Key mints per network per day | 10 | | Key mint rate | 3 per minute | | Concurrent visual searches inside one read | 2 | | Extractions inside one read | strictly one at a time |

A read is minutes, not seconds. One vision call, then one extraction per object run sequentially, with each object's search starting as soon as its extraction lands. Six objects is the slowest case.

How a request is charged

Charged when a read starts, so ten concurrent calls cannot all pass on one remaining request — the guard is in the SQL update, not in application code.

Given back only when the platform itself failed. Not given back for:

  • a photo with nothing clearly enough visible to shop for (that is a successful read that happens to be empty),
  • a malformed request of your own,
  • a read you abandon without collecting.

Polling is free, over HTTP and over MCP. Key status and revocation are free. list_focus_domains requires Auth0 sign-in but spends no allowance; GET /api/v1/domains is public and free.

REST HTTP errors

| Status | code | Means | | --- | --- | --- | | 400 | — | Bad multipart body, or an unknown domain. | | 401 | missing_api_key | No x-api-key and no bearer token. | | 401 | invalid_api_key | The key is not one of ours. | | 401 | revoked_api_key | You or a later mint revoked it. | | 401 | expired_api_key | Past its 24 hours. Mint another. | | 404 | — | No such read, or a read belonging to another key. | | 405 | — | Wrong method. GET /mcp is one of these. | | 413 | — | Over the size ceiling. | | 429 | quota_exhausted | The key's included requests are used up. | | 429 | — | Key minting rate limit. | | 503 | api_not_configured | The deployment has no way to authenticate. | | 503 | — | Search credentials or the durable job store are missing. |

A 404 is deliberately indistinguishable between "no such read" and "not yours": a request id is a UUID and confirming one exists would leak it.

MCP returns 401 with protected-resource metadata for a missing or invalid Auth0 bearer token, 403 for a token without agents, and a tool error with quota_exhausted when the signed-in user's ten reads are used. Its usage store must be available before a read can start; an unavailable store returns 503. MCP jobs can only be collected by the Auth0 user who started them.

Reading an empty result

items: [] with a summary naming the domain is a real answer, not a failure. The reader is instructed to return an empty list rather than invent an object it cannot see, which is the behaviour you want and the one that still costs a request.

What is stored, and for how long

  • The uploaded photograph, each cutout, and the finished result live in Cloudflare R2 for the life of the job.
  • Cutouts are served from /api/inspire/jobs/{id}/assets/piece-N.webp, an unguessable path, cached privately.
  • API keys are stored only as a SHA-256 digest. The plaintext exists in one email and nowhere else.
  • MCP usage is counted under a SHA-256 digest of the verified Auth0 user ID; the raw ID is not stored in the usage table or job owner field.
  • The email address a key was minted against, and the network it was minted from, are stored only as keyed digests — they enforce the daily mint caps and cannot be reversed into a mailing list.
  • Requests made with a key are not attributed to a person beyond that digest.

Status

https://inspired.jetskibay.com/status.json reports the platform's own view of its components in the Jetskibay status feed shape. A report older than five minutes is treated as unknown by the catalogue, and a missing feed never means operational.

Dependencies you are inheriting

OpenAI for reading, Pruna p-image-edit for extraction, SerpAPI's Google Lens in product mode for search, with Google Reverse Image as the fallback when Lens returns too little. An outage or a rate limit at any of them surfaces as a failed read, which is refunded.

Open Markdown source

Published by Inspired.

if you liked this…

Follow the trail.

  1. Read nextArcade Tools CatalogExplore how Arcade makes agent integrations discoverable through searchable categories, action previews, and detailed tool pages.
  2. Use nextwappCreate on-demand WhatsApp assistants, share pairing codes, and manage their activity through MCP.
  3. See nextJetskibayThe bay itself: a home for useful knowledge, reusable tools, and ideas brought to life.