The Muovi /v1 API is a read-only HTTP interface to
Muovi's verified Argentine service professionals, their reviews,
and the service / city catalogs. It's intended for LLM
connectors (ChatGPT search, Perplexity, Claude, MCP-aware
agents) and traditional clients that need structured data
instead of HTML scraping.
https://muovi.com.ar/api/v1
The full machine-readable spec is served verbatim at
https://muovi.com.ar/openapi.yaml. The reference documentation below renders that spec live —
no snapshot — so any change to the contract shows up here on
the next page load.
No authentication is required for read access.
Every endpoint in this spec is public and unauthenticated.
Connectors are encouraged (but not required) to send an
X-API-Key header to qualify for higher per-minute
rate-limit tiers. Without a key, requests are rate-limited per
source IP. Contact
api@muovi.com.ar to
request a key.
Connectors should also send the
X-Muovi-Connector: <name> header (e.g.
X-Muovi-Connector: chatgpt-search) so we can
attribute traffic and surface integration-specific issues.
Rate limits are enforced per source IP and (when present) per
X-API-Key. Exceeding the limit returns
429 with the standard error envelope and a
Retry-After hint. Default tiers:
X-API-Key): 600 requests
per minute per key.
These defaults are subject to change without a contract bump —
the live numbers are enforced by the rate-limit middleware
documented in MOB-139. Always honour the
Retry-After header.
phone, phone_number,
mobile, whatsapp,
wa.me URLs, email,
contact_email, tel: URIs, or
contactPoint.telephone. Contact between consumers
and professionals happens exclusively through the on-platform
conversation flow reachable from each professional's
profile_url. Connectors that synthesise or scrape
off-platform contact handles are in violation of Muovi's
data-use terms.
Connectors that want to drop the consumer back onto Muovi to
start a task with one professional link to Muovi's own task
creation, naming the professional by the id the
search returns:
https://muovi.com.ar/post-task/v2?pro={professional_id}&vertical={service_slug}&source=assistant-link
pro — the professional's id from
GET /api/v1/professionals. A value that is not
such an id is ignored and the page opens an ordinary task.
vertical — optional, the service slug (matches
Service.slug in the spec; values come from
GET /api/v1/services).
source — optional attribution token.The link works for every professional the search returns. When the person publishes, the task goes to that professional first for 24 hours and then opens to everyone. On the form the person can switch on "Recibir ofertas de otros profesionales también", which publishes the task to everyone right away and still tells that professional.
Links already shared in the older form keep working, for professionals who have a ProSite:
https://muovi.com.ar/p/{professional_slug}?create_task=1&service={service_slug}
To hand over a task the connector has already written, use
POST /api/v1/task-handovers, which returns a link
that opens that draft.
Three minimum-viable curl recipes covering the
common connector scenarios. Endpoints documented in detail in
the reference section further down.
Find up to 5 electricians whose coverage area includes Palermo.
service and neighborhood are both
required; a request without both is answered 400.
There is no further page, and reviews rank the results rather
than filter them. The response's match names the
service, barrio and city searched; each result carries one
rating, one review_count, its
verifications and up to 3 portfolio
image URLs, and no neighborhoods:
curl -s 'https://muovi.com.ar/api/v1/professionals?service=electricidad&neighborhood=palermo' \
-H 'X-Muovi-Connector: my-connector/1.0'
has_matricula
Only return gas fitters covering Palermo who have a verified
professional matrícula on file. city
is optional; it is needed only when a barrio slug exists in
more than one city:
curl -s 'https://muovi.com.ar/api/v1/professionals?service=gasista&neighborhood=palermo&city=ar-bue-caba&has_matricula=true' \
-H 'X-Muovi-Connector: my-connector/1.0'
Get the detail payload for one professional, by the
id from the search. profile_url in the
response is the professional's public profile page on Muovi
(https://muovi.com.ar/profile/{id}), which has a
button that starts a task for that professional.
curl -s 'https://muovi.com.ar/api/v1/professionals/8e3c5b41-6f2a-4f7e-8b1d-2c0a9d8f6c11' \
-H 'X-Muovi-Connector: my-connector/1.0'
This documentation is in English (technical audience), but the
underlying content is in Spanish (es-AR). Pro names, service
names, neighbourhood names, review text, and HTML landing pages
(/electricistas/caba/,
/plomeros/caba/, etc.) are all Spanish-language.
See /llms.txt for
the canonical content map.
Muovi ships two MCP server transports on top of this API:
https://mcp.muovi.com.ar/
No auth required. The endpoint accepts JSON-RPC 2.0 POSTs and
returns the same payloads as the npm package below.
npx @muovi/mcp-server
See the package on npm for installation snippets.
The tools that wrap this API's professional and catalog endpoints:
muovi_search_professionals —
GET /v1/professionals (up to 5 results; a
service and a barrio are both required)
muovi_get_professional —
GET /v1/professionals/{id}
muovi_list_services —
GET /v1/services
muovi_list_cities —
GET /v1/cities
muovi_get_reviews —
GET /v1/professionals/{id}/reviews
muovi_create_task_link — pure formatter for
the directed-task link documented above. Makes no HTTP call.
The anti-leakage policy applies at the MCP boundary as well —
every tool response runs through assertNoLeakage
before reaching the agent. A leaky payload is surfaced as an
MCP tool error, never as leaked contact data.
The full endpoint reference is rendered below from the live OpenAPI spec.