Sign up a new user and organization

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
POST /auth/register

Creates the user and, unless they already belong to one, an organization named from organizationName (or from the user's name) with the user as owner, invites inviteEmails, records acceptance of the terms, then signs the user in. Returns access and refresh tokens, the user's profile and the organization. Returns 400 when the terms are not accepted, the organization name is taken or the user cannot be created. Each organization entry carries the caller's permission and the org's billing summary.

application/json

Body Required

  • email string Required
  • password string Required
  • name string Required

    Minimum length is 3, maximum length is 200.

  • organizationName string
  • inviteEmails array[array]
  • phone array[string]

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

  • userType string Required
  • termsAccepted boolean

Responses

  • 200 application/json
    Hide response attributes Show response attributes object
    • data object Required
      Hide data attributes Show data attributes object
      • accessToken string Required
      • refreshToken string Required
      • userProfile object Required
        Hide userProfile attributes Show userProfile 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.

      • organizationInfo object
        Hide organizationInfo attributes Show organizationInfo 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
POST /auth/register
curl \
 --request POST 'http://api.example.com/auth/register' \
 --header "Authorization: Bearer $ACCESS_TOKEN" \
 --header "Content-Type: application/json" \
 --data '{
  "email": "string",
  "password": "string",
  "name": "string",
  "organizationName": "string",
  "inviteEmails": [
    []
  ],
  "phone": [
    "string"
  ],
  "userType": "string",
  "termsAccepted": true
}'
Request examples
{
  "email": "string",
  "password": "string",
  "name": "string",
  "organizationName": "string",
  "inviteEmails": [
    []
  ],
  "phone": [
    "string"
  ],
  "userType": "string",
  "termsAccepted": true
}
Response examples (200)
{
  "data": {
    "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI2NWExYjJjMyJ9.c2lnbmF0dXJl",
    "refreshToken": "b7c1e2f0a9d84c3e8f6a5b4c3d2e1f00",
    "userProfile": {
      "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
              }
            }
          }
        }
      ]
    },
    "organizationInfo": {
      "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"
}