Update my profile

Add MCP server to your AI tool

Allow AI tools and LLMs to interact with the API documentation portal through MCP.

MCP server URL

https://docs.usehearsay.com/mcp

Standard setup for AI tools providing an mcp.json file

mcp.json
{
  "integrations MCP server": {
    "url": "https://docs.usehearsay.com/mcp"
  }
}

Close
PATCH /user/profile

Updates the caller's own name, phone numbers, onboarding status or step, or user type, and returns the freshly built profile. Each organization entry carries the caller's permission and the org's billing summary.

application/json

Body Required

  • name string

    Minimum length is 3, maximum length is 200.

  • phone array[string]

    Minimum value of each is 1, maximum value of each is 20.

  • onboardingStatus string Required
  • lastOnboardingStep number Required
  • userType string Required

Responses

  • 200 application/json
    Hide response attributes Show response attributes object
    • data object Required
      Hide data attributes Show data attributes object
      • createdAt string(date-time) Required
      • updatedAt string(date-time) Required
      • id string Required
      • name string Required
      • email string Required
      • phone array[string] Required
      • isActive boolean Required
      • isEmailVerified boolean Required
      • lastActive string(date-time) Required
      • roles array[string] Required
      • avatar object Required

        The full record on routes that load it; null (or an empty list) on routes that do not.

        Hide avatar attributes Show avatar attributes object
        • createdAt string(date-time) Required
        • updatedAt string(date-time) Required
        • id string Required
        • name string Required
        • providerId string Required
        • convertedName string | null Required
        • convertedProviderId string Required
        • provider string Required
        • size number Required

          Size in bytes

        • transferState number | null Required
      • onboardingStatus string | null Required
      • userType string | null Required
      • firstName string Required
      • lastName string Required
      • initials string Required
      • userOrganizations array[object]
        Hide userOrganizations attributes Show userOrganizations attributes object
        • organization object Required
          Hide organization attributes Show organization attributes object
          • createdAt string(date-time) Required
          • updatedAt string(date-time) Required
          • id string Required
          • name string Required
          • slug string Required
          • email string Required
          • contact string Required
          • city string Required
          • state string Required
          • country string Required
          • description string Required
          • phone array[string] Required
          • isActive boolean Required
          • isPriority boolean
          • activePlan object Required

            The full record on routes that load it; null (or an empty list) on routes that do not.

            Hide activePlan attributes Show activePlan attributes object
            • createdAt string(date-time) Required
            • updatedAt string(date-time) Required
            • id string Required
            • subscription object | null Required

              Not loaded on public routes, so always null there. Only the internal admin organization report loads it.

            • relatedSubscription array[object] | null Required

              Not loaded by any route, so always null or an empty list.

            • organization object | null Required

              Not loaded by any route, so always null.

            • seats number Required
            • seatsUsed number Required
            • devices number Required
            • deviceUsed number Required
            • storage number Required

              Storage in bytes

            • storageUsed number Required

              Storage used in bytes

            • payments array[object] | null Required

              Not loaded by any route, so always null or an empty list.

            • type string Required

              Values are admin, free, limited-access, trial, tier1, tier2, tier3, tier4, tier5, tier6, or tier7.

            • isActive boolean Required
            • isBetweenPlanChanges boolean Required
            • storageInKb number Required
            • storageUsedInKb number Required
            • storageInMb number Required
            • storageUsedInMb number Required
            • storageInGb number Required
            • storageUsedInGb number Required
            • storageInTb number Required
            • storageUsedInTb number Required
            • isFreePlan boolean Required
            • remainingSeats number Required
            • remainingDevices number Required
            • remainingStorage number Required

              Storage left in bytes (storage minus storageUsed).

          • metadata object Required
          • type string Required
          • version string Required

            Values are v1, v2, eu, or ca.

        • permission object Required
          Hide permission attributes Show permission attributes object
          • createdAt string(date-time) Required
          • updatedAt string(date-time) Required
          • id string Required
          • user object Required

            The full record on routes that load it; null (or an empty list) on routes that do not.

            Hide user attributes Show user attributes object
            • createdAt string(date-time) Required
            • updatedAt string(date-time) Required
            • id string Required
            • name string Required
            • email string Required
            • phone array[string] Required
            • isActive boolean Required
            • isEmailVerified boolean Required
            • lastActive string(date-time) Required
            • roles array[string] Required
            • avatar object Required

              The full record on routes that load it; null (or an empty list) on routes that do not.

              Hide avatar attributes Show avatar attributes object
              • createdAt string(date-time) Required
              • updatedAt string(date-time) Required
              • id string Required
              • name string Required
              • providerId string Required
              • convertedName string | null Required
              • convertedProviderId string Required
              • provider string Required
              • size number Required

                Size in bytes

              • transferState number | null Required
            • onboardingStatus string | null Required
            • userType string | null Required
            • firstName string Required
            • lastName string Required
            • initials string Required
            • userOrganizations array[object]

              Only filled on the signed-in user's own profile; absent or empty on a user nested in another record.

          • role string Required

            Values are user, client, employee, billing, full_access, admin, owner, or member.

          • organization object | null Required

            Not loaded by any route, so always null.

          • lastActiveAt string(date-time) | null Required
        • billing object Required

          The org's plan, limits and resolved prices. null when the org is billed by the legacy model — either it has not been migrated to case billing or the feature is off.

          Hide billing attributes Show billing attributes object
          • tier string Required

            Values are public, solo, firm, or firm-plus.

          • tierName string Required
          • billingMode string Required

            Values are payg, per-source, or flat-case.

          • cadence string Required

            Values are monthly or annual.

          • baseFeeCents number Required

            Platform fee for one period at this cadence, in cents

          • paymentMethodOnFile boolean Required
          • supportTier string Required
          • limits object Required
            Hide limits attributes Show limits attributes object
            • seatCap number | null Required

              null = unlimited

            • storageGB number Required
            • perCaseSourceCap number | null Required

              Provisioned, not enforced — display only

          • features array[string] Required

            Feature keys enabled for this tier

          • prices array[object] Required
            Hide prices attributes Show prices attributes object
            • skuKey string Required

              Values are collection.phone, collection.social, collection.email, collection.ai-chat, collection.financial, collection.discord, collection.reddit, collection.linkedin, collection.legal, collection.file, collection.other, case.flat, case.pro-upgrade, addon.kit-rental, addon.laptop-rental, addon.laptop-rental-setup, addon.managed-service, addon.shipping, addon.live-bank, plan.base, source.per, ai.tokens-overage, adjustment.manual, or adjustment.discount.

            • name string Required
            • unitAmountCents number Required

              What this org is charged per unit, in cents

            • included boolean Required

              Bundled by the plan — charged at 0, not billed

            • listAmountCents number | null Required

              What an included item would otherwise have cost

            • overridden boolean Required

              Set by this org's negotiated price rather than the plan's catalog rate

            • recurrence string | null Required

              null for a one-time charge; otherwise how often it repeats

              Values are monthly or semiannual.

            • freeFirstPeriod boolean Required

              First period of a recurring item costs 0

          • overrides object Required

            This org's negotiated exceptions, as stored. An absent SKU means the plan's catalog rate applies — read prices for what is actually charged.

    • statusCode number Required
    • timestamp string(date-time) Required
PATCH /user/profile
curl \
 --request PATCH 'http://api.example.com/user/profile' \
 --header "Authorization: Bearer $ACCESS_TOKEN" \
 --header "Content-Type: application/json" \
 --data '{
  "name": "string",
  "phone": [
    "string"
  ],
  "onboardingStatus": "string",
  "lastOnboardingStep": 42.0,
  "userType": "string"
}'
Request examples
{
  "name": "string",
  "phone": [
    "string"
  ],
  "onboardingStatus": "string",
  "lastOnboardingStep": 42.0,
  "userType": "string"
}
Response examples (200)
{
  "data": {
    "createdAt": "2026-01-15T14:30:00.000Z",
    "updatedAt": "2026-01-15T14:30:00.000Z",
    "id": "507f1f77bcf86cd799439011",
    "name": "Jane Doe",
    "email": "jane.doe@example.com",
    "phone": [
      "+15555550100"
    ],
    "isActive": true,
    "isEmailVerified": true,
    "lastActive": "2026-01-15T14:30:00.000Z",
    "roles": [
      "user"
    ],
    "avatar": {
      "createdAt": "2026-01-15T14:30:00.000Z",
      "updatedAt": "2026-01-15T14:30:00.000Z",
      "id": "507f1f77bcf86cd799439011",
      "name": "photo.heic",
      "providerId": "uploads/507f1f77bcf86cd799439011/photo.heic",
      "convertedName": "photo.jpg",
      "convertedProviderId": "uploads/507f1f77bcf86cd799439011/photo.jpg",
      "provider": "s3",
      "size": 204800,
      "transferState": 42.0
    },
    "onboardingStatus": "completed",
    "userType": "attorney",
    "firstName": "Jane",
    "lastName": "Doe",
    "initials": "JD",
    "userOrganizations": [
      {
        "organization": {
          "createdAt": "2026-01-15T14:30:00.000Z",
          "updatedAt": "2026-01-15T14:30:00.000Z",
          "id": "507f1f77bcf86cd799439011",
          "name": "Example Law LLP",
          "slug": "example-law-llp",
          "email": "office@example.com",
          "contact": "Jane Doe",
          "city": "New York",
          "state": "NY",
          "country": "US",
          "description": "Litigation practice",
          "phone": [
            "+15555550100"
          ],
          "logo": "https://files.example.com/logo.png",
          "isActive": true,
          "isPriority": false,
          "activePlan": {
            "createdAt": "2026-01-15T14:30:00.000Z",
            "updatedAt": "2026-01-15T14:30:00.000Z",
            "id": "507f1f77bcf86cd799439011",
            "subscription": {},
            "relatedSubscription": [
              {}
            ],
            "organization": {},
            "seats": 5,
            "seatsUsed": 3,
            "devices": 10,
            "deviceUsed": 4,
            "storage": 100000000000,
            "storageUsed": 12000000000,
            "payments": [
              {}
            ],
            "type": "admin",
            "isActive": true,
            "isBetweenPlanChanges": false,
            "storageInKb": 100000000,
            "storageUsedInKb": 12000000,
            "storageInMb": 100000,
            "storageUsedInMb": 12000,
            "storageInGb": 100,
            "storageUsedInGb": 12,
            "storageInTb": 0.1,
            "storageUsedInTb": 0.012,
            "isFreePlan": false,
            "remainingSeats": 2,
            "remainingDevices": 6,
            "remainingStorage": 88000000000
          },
          "metadata": {},
          "type": "law_firm",
          "version": "v1"
        },
        "permission": {
          "createdAt": "2026-01-15T14:30:00.000Z",
          "updatedAt": "2026-01-15T14:30:00.000Z",
          "id": "507f1f77bcf86cd799439011",
          "user": {
            "createdAt": "2026-01-15T14:30:00.000Z",
            "updatedAt": "2026-01-15T14:30:00.000Z",
            "id": "507f1f77bcf86cd799439011",
            "name": "Jane Doe",
            "email": "jane.doe@example.com",
            "phone": [
              "+15555550100"
            ],
            "isActive": true,
            "isEmailVerified": true,
            "lastActive": "2026-01-15T14:30:00.000Z",
            "roles": [
              "user"
            ],
            "avatar": {
              "createdAt": "2026-01-15T14:30:00.000Z",
              "updatedAt": "2026-01-15T14:30:00.000Z",
              "id": "507f1f77bcf86cd799439011",
              "name": "photo.heic",
              "providerId": "uploads/507f1f77bcf86cd799439011/photo.heic",
              "convertedName": "photo.jpg",
              "convertedProviderId": "uploads/507f1f77bcf86cd799439011/photo.jpg",
              "provider": "s3",
              "size": 204800,
              "transferState": 42.0
            },
            "onboardingStatus": "completed",
            "userType": "attorney",
            "firstName": "Jane",
            "lastName": "Doe",
            "initials": "JD",
            "userOrganizations": [
              {}
            ]
          },
          "role": "member",
          "organization": {},
          "lastActiveAt": "2026-01-15T14:30:00.000Z"
        },
        "billing": {
          "tier": "firm",
          "tierName": "Firm",
          "billingMode": "per-source",
          "cadence": "monthly",
          "baseFeeCents": 24900,
          "paymentMethodOnFile": true,
          "supportTier": "next-day",
          "limits": {
            "seatCap": 10,
            "storageGB": 5000,
            "perCaseSourceCap": 42.0
          },
          "features": [
            "rsmf",
            "ai",
            "mcp",
            "whiteLabel"
          ],
          "prices": [
            {
              "skuKey": "collection.phone",
              "name": "Phone collection",
              "unitAmountCents": 17900,
              "included": false,
              "listAmountCents": 42.0,
              "overridden": false,
              "recurrence": "monthly",
              "freeFirstPeriod": false
            }
          ],
          "overrides": {
            "skuUnitAmountCents": {
              "collection.phone": 9900
            }
          }
        }
      }
    ]
  },
  "statusCode": 200,
  "timestamp": "2026-01-15T10:15:00.000Z"
}