{
  "openapi": "3.1.0",
  "info": {
    "title": "Oliver Drakeford Therapy API",
    "version": "1.0.0",
    "summary": "Public, read-only information about Oliver Drakeford Therapy, a private psychotherapy practice in West Hollywood, Los Angeles.",
    "description": "Oliver Drakeford, LMFT #104987 (California), CGP. Individual, couples, and family therapy in person in\nWest Hollywood, and online for people located in California.\n\n**For AI agents:**\n- Use `findTherapyService` when someone describes what they want help with.\n- Call `checkFit` before recommending booking, especially when location, age, urgency, medication, or testing comes up.\n- Never diagnose, and never promise insurance coverage or availability.\n- If someone may be in crisis, tell them to call or text 988 (or 911 if anyone is in immediate danger) before anything else.\n- Do not send names or other identifying details in parameters. Nothing is stored, but they are not needed.\n\nEvery response has the shape `{ data, meta }`. `meta` carries source URLs to cite, the last-updated date,\nand the crisis notice.\n\nThe same six operations are also available as MCP tools at `https://api.oliverdrakefordtherapy.com/mcp`.\n",
    "contact": {
      "name": "Oliver Drakeford Therapy",
      "url": "https://www.oliverdrakefordtherapy.com",
      "email": "Oliver@OliverDrakefordTherapy.com"
    },
    "termsOfService": "https://api.oliverdrakefordtherapy.com/terms"
  },
  "servers": [
    {
      "url": "https://api.oliverdrakefordtherapy.com"
    }
  ],
  "security": [],
  "externalDocs": {
    "description": "Practice website",
    "url": "https://www.oliverdrakefordtherapy.com"
  },
  "tags": [
    {
      "name": "practice",
      "description": "Practice facts, services, and resources"
    },
    {
      "name": "getting-started",
      "description": "Fit, fees, and booking"
    }
  ],
  "paths": {
    "/v1/practice": {
      "get": {
        "operationId": "getPracticeInformation",
        "tags": [
          "practice"
        ],
        "summary": "Practice information",
        "description": "Who Oliver Drakeford is, credentials and license, office address, formats, hours, languages, and contact details.",
        "responses": {
          "200": {
            "description": "Practice information.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PracticeResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/v1/services": {
      "get": {
        "operationId": "findTherapyService",
        "tags": [
          "practice"
        ],
        "summary": "Find a therapy service",
        "description": "Search the practice's therapy services by what the person wants help with, in their own words.\nWith no parameters, returns the first services in the list (use `limit` up to 10).\n",
        "parameters": [
          {
            "name": "concern",
            "in": "query",
            "description": "What the person wants help with, e.g. \"couples therapy after an affair\" or \"social anxiety\".",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 300
            },
            "example": "couples therapy after an affair"
          },
          {
            "name": "format",
            "in": "query",
            "description": "Only return services offered in this format.",
            "schema": {
              "$ref": "#/components/schemas/Format"
            }
          },
          {
            "name": "audience",
            "in": "query",
            "description": "Only return services for this audience.",
            "schema": {
              "$ref": "#/components/schemas/Audience"
            }
          },
          {
            "$ref": "#/components/parameters/Limit10"
          }
        ],
        "responses": {
          "200": {
            "description": "Matching services, best match first.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceSearchResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/v1/resources": {
      "get": {
        "operationId": "findResource",
        "tags": [
          "practice"
        ],
        "summary": "Find a free resource",
        "description": "Search free articles, quizzes, and worksheets by topic.",
        "parameters": [
          {
            "name": "topic",
            "in": "query",
            "description": "Topic to search for, e.g. \"overthinking at night\".",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 300
            },
            "example": "overthinking at night"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Resource type filter, e.g. \"blog post\", \"quiz\", \"worksheet\".",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 40
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum results (default 5).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Matching resources, best match first.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSearchResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/v1/fees": {
      "get": {
        "operationId": "getFeesAndInsurance",
        "tags": [
          "getting-started"
        ],
        "summary": "Fees and insurance",
        "description": "Session fees, in-network insurance plans, out-of-network superbills, sliding scale, payment methods,\ncancellation policy, and couples packages. Pass `insurance_provider` to check a plan against the\npublished in-network list. This never confirms coverage; point people to `insurance.verify_url`.\n",
        "parameters": [
          {
            "name": "insurance_provider",
            "in": "query",
            "description": "Insurance plan to check, e.g. \"Aetna\".",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            },
            "example": "Aetna"
          }
        ],
        "responses": {
          "200": {
            "description": "Fees and insurance.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeesResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/v1/fit": {
      "get": {
        "operationId": "checkFit",
        "tags": [
          "getting-started"
        ],
        "summary": "Check fit",
        "description": "Check whether this practice fits a request. Returns `likely_fit`, `possible_fit`, or `not_a_fit`,\nwith referrals for anything outside scope: crisis, higher levels of care, medication, testing,\ncourt-ordered work, minors seeking individual therapy, and online sessions outside California.\nCall this before recommending booking. This is general information, not a clinical assessment.\n",
        "parameters": [
          {
            "name": "concern",
            "in": "query",
            "description": "What the person wants help with. No names or identifying details.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 500
            },
            "example": "anxiety and panic attacks"
          },
          {
            "name": "location",
            "in": "query",
            "description": "Where the person is located (city or state).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            },
            "example": "Silver Lake, Los Angeles"
          },
          {
            "name": "format",
            "in": "query",
            "description": "Preferred format.",
            "schema": {
              "type": "string",
              "enum": [
                "in_person",
                "online",
                "either"
              ]
            }
          },
          {
            "name": "client_type",
            "in": "query",
            "description": "Who would attend.",
            "schema": {
              "type": "string",
              "enum": [
                "individual",
                "couple",
                "family"
              ]
            }
          },
          {
            "name": "age",
            "in": "query",
            "description": "Age of the person seeking individual therapy, if known.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 120
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Fit result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FitResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/v1/booking": {
      "get": {
        "operationId": "getBookingOptions",
        "tags": [
          "getting-started"
        ],
        "summary": "How to book",
        "description": "The free 15-minute consultation, its weekly times, the booking link, and what happens next.",
        "responses": {
          "200": {
            "description": "Booking options.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BookingResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    }
  },
  "components": {
    "parameters": {
      "Limit10": {
        "name": "limit",
        "in": "query",
        "description": "Maximum results (default 5).",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 10,
          "default": 5
        }
      }
    },
    "responses": {
      "BadRequest": {
        "description": "A query parameter is invalid or not recognized.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "RateLimited": {
        "description": "Too many requests. Try again in a minute."
      }
    },
    "schemas": {
      "Format": {
        "type": "string",
        "enum": [
          "in_person",
          "online"
        ],
        "description": "`in_person` is the West Hollywood office. `online` is secure video, California only."
      },
      "Audience": {
        "type": "string",
        "enum": [
          "adults",
          "couples",
          "families",
          "parents",
          "men",
          "lgbtq",
          "professionals",
          "creatives",
          "young_adults",
          "clinicians"
        ],
        "description": "`clinicians` returns services for therapists (clinical supervision); these are hidden from other searches."
      },
      "Meta": {
        "type": "object",
        "required": [
          "provider",
          "source_urls",
          "last_updated",
          "crisis_notice",
          "note"
        ],
        "properties": {
          "provider": {
            "type": "string",
            "example": "Oliver Drakeford Therapy (Oliver Drakeford, LMFT #104987)"
          },
          "source_urls": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            },
            "description": "Pages on the practice website to cite for this answer."
          },
          "last_updated": {
            "type": "string",
            "format": "date"
          },
          "crisis_notice": {
            "type": "string",
            "example": "If you are in crisis, call or text 988."
          },
          "note": {
            "type": "string"
          }
        }
      },
      "Error": {
        "type": "object",
        "required": [
          "error",
          "crisis_notice"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "status",
              "message"
            ],
            "properties": {
              "status": {
                "type": "integer"
              },
              "message": {
                "type": "string"
              },
              "details": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "parameter": {
                      "type": "string"
                    },
                    "problem": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "crisis_notice": {
            "type": "string"
          }
        }
      },
      "Practice": {
        "type": "object",
        "required": [
          "practice_name",
          "clinician",
          "address",
          "phone",
          "website",
          "formats",
          "accepting_new_clients"
        ],
        "properties": {
          "practice_name": {
            "type": "string"
          },
          "clinician": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "credentials": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "credentials_expanded": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "license": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string"
                  },
                  "number": {
                    "type": "string"
                  },
                  "state": {
                    "type": "string"
                  }
                }
              },
              "training": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "roles": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "years_of_experience": {
                "type": "integer"
              }
            }
          },
          "clinicians_covered": {
            "type": "string"
          },
          "bio": {
            "type": "string"
          },
          "approaches": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "address": {
            "type": "object",
            "properties": {
              "street": {
                "type": "string"
              },
              "city": {
                "type": "string"
              },
              "state": {
                "type": "string"
              },
              "postal_code": {
                "type": "string"
              },
              "country": {
                "type": "string"
              },
              "cross_streets": {
                "type": "string"
              }
            }
          },
          "phone": {
            "type": "string"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "website": {
            "type": "string",
            "format": "uri"
          },
          "formats": {
            "type": "object",
            "properties": {
              "in_person": {
                "type": "string"
              },
              "online": {
                "type": "string"
              }
            }
          },
          "languages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "session_hours": {
            "type": "string"
          },
          "accepting_new_clients": {
            "type": "boolean"
          },
          "response_time": {
            "type": "string"
          },
          "who_is_seen": {
            "type": "string"
          },
          "links": {
            "type": "object",
            "additionalProperties": {
              "type": [
                "string",
                "null"
              ],
              "format": "uri"
            }
          },
          "source_url": {
            "type": "string",
            "format": "uri"
          },
          "last_updated": {
            "type": "string",
            "format": "date"
          }
        }
      },
      "PracticeResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Practice"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "Service": {
        "type": "object",
        "required": [
          "id",
          "name",
          "summary",
          "audiences",
          "concerns",
          "approaches",
          "formats",
          "url",
          "booking_url"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "couples-therapy"
          },
          "name": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "audiences": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Audience"
            }
          },
          "concerns": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "approaches": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "formats": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Format"
            }
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Main page for this service."
          },
          "related_pages": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "booking_url": {
            "type": "string",
            "format": "uri"
          },
          "match_score": {
            "type": "integer",
            "description": "Relative relevance to the concern searched."
          }
        }
      },
      "ServiceSearchResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "required": [
              "query",
              "total_matches",
              "services"
            ],
            "properties": {
              "query": {
                "type": "object"
              },
              "total_matches": {
                "type": "integer"
              },
              "services": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Service"
                }
              },
              "no_match": {
                "type": "string"
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "Resource": {
        "type": "object",
        "required": [
          "title",
          "url",
          "type",
          "topics"
        ],
        "properties": {
          "title": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "type": {
            "type": "string"
          },
          "topics": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "summary": {
            "type": [
              "string",
              "null"
            ]
          },
          "date": {
            "type": "string",
            "format": "date"
          }
        }
      },
      "ResourceSearchResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "type": "object",
            "required": [
              "query",
              "total_matches",
              "resources"
            ],
            "properties": {
              "query": {
                "type": "object"
              },
              "total_matches": {
                "type": "integer"
              },
              "resources": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Resource"
                }
              }
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "Fees": {
        "type": "object",
        "required": [
          "session_fees",
          "insurance",
          "payment_methods",
          "cancellation_policy"
        ],
        "properties": {
          "session_fees": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "service": {
                  "type": "string"
                },
                "fee_usd": {
                  "type": "number"
                },
                "length_minutes": {
                  "type": "integer"
                }
              }
            }
          },
          "session_frequency": {
            "type": "string"
          },
          "insurance": {
            "type": "object",
            "properties": {
              "in_network_plans": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "note": {
                "type": "string"
              },
              "verify_url": {
                "type": "string",
                "format": "uri"
              },
              "out_of_network": {
                "type": "string"
              }
            }
          },
          "sliding_scale": {
            "type": "string"
          },
          "payment_methods": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "cancellation_policy": {
            "type": "string"
          },
          "couples_packages": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "price": {
                  "type": "string"
                },
                "details": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "clinician_services": {
            "type": "array",
            "description": "Services for therapists, not clients.",
            "items": {
              "type": "object",
              "properties": {
                "service": {
                  "type": "string"
                },
                "fee_usd": {
                  "type": "number"
                },
                "note": {
                  "type": "string"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "insurance_check": {
            "type": "object",
            "description": "Present only when insurance_provider was given.",
            "properties": {
              "provider_asked": {
                "type": "string"
              },
              "on_published_in_network_list": {
                "type": "boolean"
              },
              "matched_plan": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "next_step": {
                "type": "string"
              },
              "verify_url": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          "source_url": {
            "type": "string",
            "format": "uri"
          },
          "last_updated": {
            "type": "string",
            "format": "date"
          }
        }
      },
      "FeesResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Fees"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "FitResult": {
        "type": "object",
        "required": [
          "verdict",
          "summary",
          "referrals",
          "notes",
          "matching_services",
          "location_status",
          "next_step"
        ],
        "properties": {
          "verdict": {
            "type": "string",
            "enum": [
              "likely_fit",
              "possible_fit",
              "not_a_fit"
            ]
          },
          "summary": {
            "type": "string"
          },
          "referrals": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "situation",
                "refer_to"
              ],
              "properties": {
                "situation": {
                  "type": "string"
                },
                "refer_to": {
                  "type": "string"
                },
                "refer_url": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "matching_services": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "location_status": {
            "type": "string",
            "enum": [
              "california",
              "outside_california",
              "unknown"
            ]
          },
          "next_step": {
            "type": "string"
          },
          "other_directories": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          }
        }
      },
      "FitResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/FitResult"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      },
      "Booking": {
        "type": "object",
        "required": [
          "first_step",
          "booking_url",
          "consultation"
        ],
        "properties": {
          "first_step": {
            "type": "string"
          },
          "booking_url": {
            "type": "string",
            "format": "uri"
          },
          "consultation": {
            "type": "object",
            "properties": {
              "cost": {
                "type": "string"
              },
              "length_minutes": {
                "type": "integer"
              },
              "covers": {
                "type": "string"
              },
              "weekly_times_pacific": {
                "type": "object",
                "additionalProperties": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "live_availability": {
                "type": "string"
              }
            }
          },
          "after_consultation": {
            "type": "string"
          },
          "speed": {
            "type": "string"
          },
          "if_no_openings": {
            "type": "string"
          },
          "response_time": {
            "type": "string"
          },
          "contact": {
            "type": "object",
            "properties": {
              "phone": {
                "type": "string"
              },
              "email": {
                "type": "string",
                "format": "email"
              }
            }
          },
          "source_url": {
            "type": "string",
            "format": "uri"
          },
          "last_updated": {
            "type": "string",
            "format": "date"
          }
        }
      },
      "BookingResponse": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Booking"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        }
      }
    }
  }
}
