Create a user (internal)

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 /admin/user/add

Creates a user account and its own organization as a sign-up would, optionally already email-verified or claimable, and returns the new account's access token, profile and organization. Super admin only.

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
  • emailVerified boolean
  • claimable boolean

Responses

  • 201 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
      • accessToken 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 /admin/user/add
curl \
 --request POST 'http://api.example.com/admin/user/add' \
 --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,
  "emailVerified": true,
  "claimable": true
}'
Request examples
{
  "email": "string",
  "password": "string",
  "name": "string",
  "organizationName": "string",
  "inviteEmails": [
    []
  ],
  "phone": [
    "string"
  ],
  "userType": "string",
  "termsAccepted": true,
  "emailVerified": true,
  "claimable": true
}
Response examples (201)
{
  "data": {
    "createdAt": "2026-01-15T14:30:00.000Z",
    "updatedAt": "2026-01-15T14:30:00.000Z",
    "id": "507f1f77bcf86cd799439011",
    "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI2NWExYjJjMyJ9.c2lnbmF0dXJl",
    "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": 201,
  "timestamp": "2026-01-15T10:15:00.000Z"
}