Public API for teachers, studios and classes

Read the same directory people see on MoveMentors: independent teachers, small studios and their upcoming classes. No sign-up, no key, plain JSON. Built so AI agents and small tools can point people to local classes without scraping.

Base URL

https://movementors.com/api/v1

Every endpoint below starts here. A plain GET on it returns a JSON list of them all.

Try it

Find five pilates teachers. Paste this into a terminal:

curl "https://movementors.com/api/v1/mentors?category=pilates&limit=5"

Endpoints

All read-only and free to call. Lists take page and limit (up to 50).

EndpointWhat it returns
GET/api/v1/mentorsSearch independent teachers by text, city or discipline.
GET/api/v1/mentors/{slug}One teacher's public profile, disciplines, places and certifications.
GET/api/v1/studiosSearch small studios. Add rentable=1 for rooms other teachers can rent.
GET/api/v1/studios/{slug}One studio's public profile and locations.
GET/api/v1/classesUpcoming sessions, online or in person, with dates, prices and hosts.
GET/api/v1/classes/{id}One class with its schedule and host.
GET/api/v1/healthWhether the service is up.
GET/api/v1/openapi.jsonThe full OpenAPI 3.1 contract, for code generators and agents.

Authentication

None for the endpoints on this page. To book a class or manage a schedule for someone, an agent uses our MCP server with OAuth, so the person approves it first.

Connect an AI assistant

Errors

Every error comes back as JSON in the RFC 9457 problem format (application/problem+json), never as an HTML page. Read code to decide what to do, and hint for how to fix it.

  • 400invalid_parameter

    A query parameter is wrong. The param field names it.

  • 404not_found

    No such endpoint, teacher, studio or class.

  • 405method_not_allowed

    These endpoints only read. Use GET.

  • 429rate_limited

    Too many requests. Wait the number of seconds in Retry-After.

  • 500internal_error

    Something broke on our side. Retry, waiting a little longer each time.

  • 503service_unavailable

    The service is briefly down. Retry later.

HTTP/1.1 404 Not Found
Content-Type: application/problem+json

{
  "type": "https://movementors.com/developers#error-not_found",
  "title": "Not Found",
  "status": 404,
  "detail": "Teacher not found",
  "instance": "/api/v1/mentors/unknown",
  "code": "not_found",
  "hint": "Check the path and identifier. GET /api/v1 lists every public endpoint.",
  "error": "Teacher not found"
}

Rate limits

Limits are per IP address: 100 requests a minute, plus 5,000 a day on list endpoints. Every response says where you stand, so you can slow down before you run out.

  • RateLimit-Policy

    Your quotas, for example "burst";q=100;w=60.

  • RateLimit

    Requests left and seconds until each quota resets.

  • RateLimit-Limit / -Remaining / -Reset

    The same for the quota closest to running out, in the older single-value form.

  • Retry-After

    On a 429, how many seconds to wait.

Versioning

The version is in the path, so nothing changes under you without warning.

  • New endpoints, parameters and fields are added to v1 in place. Your code keeps working.
  • Anything that would break existing code, like removing or renaming a field, ships as /api/v2.
  • Before a version is switched off, its responses carry a Deprecation header (RFC 9745) and a Sunset header (RFC 8594) with the date, at least 6 months ahead.

For agents and tools

Machine-readable entry points: GET /api/v1 · OpenAPI 3.1 · API catalog (RFC 9727) · llms.txt · MCP server card

Questions, or need a higher limit? Write to support@movementors.com