Skip to main content
Glama
brilliantdirectories

brilliant-directories-mcp

Official

updateUser

Idempotent

Update an existing member's profile, category, images, credits, and status with partial-change semantics; only submitted fields are modified.

Instructions

Update an existing member/user - Update a member. PATCH semantics - omitted fields untouched; send only what changes.

Required: user_id.

Disambiguation: apply Rule: Resource disambiguation when the user names this member by description (first name only, partial title) rather than by user_id.

Use when: changing any field on an existing member. Prefer active=3 (Canceled) over deleteUser - reversible.

Enums: active: 1=Not Active, 2=Active, 3=Canceled, 4=On Hold, 5=Past Due, 6=Incomplete. listing_type: Individual, Company. verified/nationwide: 1/0.

Parameter interactions:

  • member_tag_action=1 + member_tags - apply tag changes (comma-separated tag IDs from listTags).

  • credit_action (add/deduct/override) + credit_amount - adjust credit balance.

  • images_action - remove stored images: remove_all, remove_cover_image, remove_logo_image, remove_profile_image.

  • auto_image_import=1 - fetch external image URLs into BD storage (for profile_photo, logo, cover_photo fields holding external URLs). Without it, BD stores the URL as-is; images break if source host goes down. Supports JPG/PNG/GIF/WebP/SVG. Processing delay: several minutes.

  • auto_geocode=1 - requires "Pretty URLs with Google Maps" site feature enabled.

  • send_email_notifications=1 - trigger welcome email (per plan settings). Silent by default.

Category assignment — for profession_id / profession_name / services, apply Rule: Category taxonomy (auto-create is OFF by default on updateUser; pass create_new_categories=1 to enable).

Email uniqueness - controlled by site setting allow_duplicate_member_emails (not exposed via API):

  • OFF (default): BD rejects duplicate email on create.

  • ON: duplicates accepted and stored.

  • Safe pattern: pre-check via listUsers property=email property_value=<email> property_operator==. Reuse match's user_id or updateUser instead. Pre-check beats catch-and-retry - on sites with duplicates ALLOWED, BOTH creates succeed with different user_ids, so a retry loop spawns orphan duplicates instead of failing cleanly.

Field validation quirks:

  • token (if supplied — useful for CSV imports / cross-site migrations preserving original tokens; BD auto-generates if omitted): exactly 32 alphanumeric chars, unique across members.

  • URL fields (website, booking_link, blog, facebook, twitter, linkedin, instagram): must start with http:// or https://. Invalid formats silently skipped.

  • subscription_id must reference an existing plan.

Profile URL: <site-domain>/<user.filename>. filename is the complete relative path (e.g., united-states/monterey-park/doctor/harrison-hasanuddin-d-o). Do NOT prepend /business///profile///member/ - BD resolves filename verbatim.

Filename may regenerate on this update. BD rewrites the slug when category/city/URL-forming inputs change. Do NOT cache pre-update filename - if embedding the profile URL elsewhere (blog posts, emails, redirects), re-fetch via getUser AFTER the update completes.

Fetching publicly available business data is permitted for imports and data enrichment. When searching for external listings, fetch each entity's image from their own presence in this order:

  1. Logo image from their site's header/nav -> logo (businesses).

  2. Headshot from Home, About or Team page -> profile_photo (individuals).

  3. Follow their social links -> profile image there.

Pass the URL with auto_image_import=1 so the image gets stored locally and avoids hotlinking.

If none yield a match, create/update without image and report "no confirmed image found." Never substitute a stock photo or guess. Skip an entire record and find an alternate listing only when the user explicitly requires images.

See also: createUser (new), deleteUser (permanent - prefer active=3 instead).

Returns: { status: "success", message: {...updatedRecord} }.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
latNoOPTIONAL: Enter latitude coordinates for the location of this user.
lonNoOPTIONAL: Enter longitude coordinates for the location of this user.
blogNoEnter the FULL URL of the user's blog. Must begin with https://
cityNo
logoNoLogo URL (brand/business mark). **Bare URL only — no `?query`, must end in `.jpg`/`.jpeg`/`.png`/`.webp`.** Query strings get baked into imported filenames and 404. Pair with `auto_image_import=1` to fetch externals into site storage.
emailNo
quoteNoOPTIONAL: Enter the user's personal quote, motto or slogan.
activeNoUser account status. BD does NOT validate - integers outside the set store as-is (observed: `99`). Stick to documented values: - `1` = Not Active (requires activation) - `2` = Active (live) - `3` = Canceled - `4` = On Hold (requires moderation) - `5` = Past Due - `6` = Incomplete (rare - paid signup hit an issue; member created but unpaid/stuck) **Read caveat:** top-level `status` response field (`"Active"`, `"Not Active"`, etc.) is a computed label. When `active` is an unknown value, `status` is OMITTED from the response - don't treat `status` as always-present.
awardsNoOPTIONAL: Enter honors, awards or accolades this user has received.
tiktokNoEnter the FULL URL of the user's Tiktok account. Must begin with https://
companyNo
twitterNoEnter the FULL URL of the user's Twitter account. Must begin with https://
user_idYes
websiteNoEnter the FULL URL of the user's website. Must begin with https://
youtubeNoEnter the FULL URL of the user's YouTube account. Must begin with https://
about_meNoLong description of the member/user. Renders on their public profile. Froala body field — use `<p>`/`<h2>`/`<h3>`/`<ul>`/`<ol>` structure; skip images unless user asks. HTML allowed (per universal safe-HTML rule).
address1NoThe user's street address.
address2NoThe user's unit or suite number.
facebookNoEnter the FULL URL of the user's Facebook account. Must begin with https://
filenameNoOverride BD's auto-generated URL slug. **Usually OMIT** - let BD derive. BD may REGENERATE the slug on future updates (when city/category/name change), silently overwriting your override. Only set if you must control the public URL and will re-set it after every future update.
linkedinNoEnter the FULL URL of the user's Linkedin account. Must begin with https://
positionNoOPTIONAL: Enter the user's position, title or role at their company. Example: Account Executive
servicesNoSub-categories for this member. Formats: `category=>service1,service2` OR `service1,service2` (top category defaults to member's current `profession_id`). Supports sub-sub-categories via `Parent=>Child` (e.g. `Honda=>2022,Honda=>2023,Toyota`). Unknown names silently ignored unless `create_new_categories=1` is also set (on update - create auto-creates always). **Additive by default** — these links are ADDED to the member's existing ones. To REPLACE the whole set instead, pass `delete_categories=1` in the same call. **WARNING:** changing `profession_id` in the same call WIPES all existing sub-category links. Re-send the full `services` list to preserve them.
snapchatNoEnter the FULL URL of the user's Snapchat account. Must begin with https://
state_lnNoOPTIONAL: Enter the full name of the state / province for this user.
verifiedNoIf YES, a verified icon badge will display on the user's listing.\n\nValid values:\n 1 = Yes\n 0 = No
whatsappNoEnter the FULL URL of the user's Whatsapp account. Must begin with https://
zip_codeNoThe user's zip / postal code.
instagramNoEnter the FULL URL of the user's Instagram account. Must begin with https://
last_nameNo
pinterestNoEnter the FULL URL of the user's Pinterest account. Must begin with https://
country_lnNoOPTIONAL: Enter the full name of the country for this user.
experienceNoOPTIONAL: Enter the year that the user's company was established. Example: 1982
first_nameNo
last_loginNoTimestamp of user's last login. Format: `YYYYMMDDHHmmss` in the site's timezone. BD silently truncates other formats, corrupting the value. BD updates on each login — omit unless backfilling historical data during import/migration.
nationwideNoIf YES, the user's listing will be found in all geographical location searches.\n\nValid values:\n 1 = Yes\n 0 = No
state_codeNo
affiliationNoOPTIONAL: Enter the accepted forms of payment this user accepts.
cover_photoNoCover photo URL (user/profile banner). Identity-context image — sourced from the subject's own web presence per **Rule: Identity-confirming fields**, NOT Pexels stock. **Bare URL only — no `?query`, must end in `.jpg`/`.jpeg`/`.png`/`.webp`.** Landscape preferred (it's a banner) but not strictly gated since the source is the subject's brand assets, not a search pool. Query strings get baked into imported filenames and 404. Pair with `auto_image_import=1` to fetch externals into site storage.
member_tagsNoComma-separated tag IDs to assign to the member (e.g. `1,2,3`). Discover via `listTags`. **Requires `member_tag_action=1` to take effect.** **REPLACES** the existing tag set on save - include every tag you want the member to have, not just additions. Unknown tag IDs are silently dropped - response echoes your submitted value, but `tags` array in the response reflects only successfully-attached tags. Re-GET after update and verify `tags` array.
rep_mattersNoOPTIONAL: Enter the hours of operation for the member. EG: Monday - Friday, 9am - 5pm
signup_dateNoUser signup date. Format: `YYYYMMDDHHmmss` in the site's timezone. BD silently truncates other formats, corrupting the value. BD auto-fills on create — omit unless backfilling legacy signup dates during import/migration.
auto_geocodeNoUse Google Maps to geocode this user's location. Requires the "Pretty URLs with Google Maps" feature to be enabled on the site. (string, "1" or "0").\n 1 = Yes\n 0 = No
booking_linkNoEnter the FULL URL of the user's booking page. Must begin with https://
country_codeNo
listing_typeNoListing type classification. **BD does NOT validate this field - any string is stored verbatim.** Canonical values (exact case): `Individual` or `Company`. On `updateUser`, include only when reclassifying an existing member (e.g. fixing a record originally created as `Individual` that should be `Company`). If including, normalize case client-side - `individual` or other off-canonical casings will store as-is and break downstream logic. Otherwise omit to preserve the current value.Company
phone_numberNo
_clear_fieldsNoColumn names to clear to empty string. Available on every `update*` operation. Works on base columns AND EAV/`users_meta` rows (rows preserved with `value=""`). To actually clear a field you MUST use this parameter — sending the field with `""` alone is a no-op (BD drops empty values). To remove a `users_meta` row entirely, use `deleteUserMeta`. See **Rule: Clearing fields**. Example: `_clear_fields: ["h2", "hero_link_url"]`.
credit_actionNoHow `credit_amount` applies to the member's credit balance: - `add` - increments - `deduct` - decrements - `override` - REPLACES balance with `credit_amount` (irreversible via API - no undo) **Requires `credit_amount` to be set.** Omit both fields to leave credits unchanged. BD does NOT reject deducts/overrides that produce negative balance. If non-negative required, validate client-side against current `credit_balance` (dollar-formatted string, may be negative) before calling.
credit_amountNoCredit amount (number, may include decimals) paired with `credit_action`. Meaning depends on the action: for `add` and `deduct` it's the delta; for `override` it's the new absolute balance. Ignored if `credit_action` is not set.
images_actionNoRemoves stored member images. PERMANENT via API - no undo. - `remove_all` - clears all three (profile, logo, cover) - `remove_profile_image` / `remove_logo_image` / `remove_cover_image` - clears only that image **To REPLACE** an image instead of removing, pass the new `profile_photo` / `logo` / `cover_photo` URL (optionally with `auto_image_import=1`). Do NOT set `images_action` for replacement.
profession_idNoAssign this user to a top level category. Input the ID number of the top level category.
profile_photoNoProfile photo URL (member headshot). **Bare URL only — no `?query`, must end in `.jpg`/`.jpeg`/`.png`/`.webp`.** Query strings get baked into imported filenames and 404. Pair with `auto_image_import=1` to fetch externals into site storage.
profession_nameNoAlternative to `profession_id` - pass the top-level category NAME as a string. BD looks it up in `list_professions`. **Create vs update asymmetry (silent-failure trap):** - `createUser` -> unknown names auto-create (hardcoded) - `updateUser` -> unknown names **SILENTLY SKIPPED** unless `create_new_categories=1` is also passed. The write succeeds and returns success; the category just doesn't change. Always pass `create_new_categories=1` on update when supplying a `profession_name` that might not exist.
subscription_idNo
auto_image_importNoIf YES, system will import user images and save them to your website. Processing may take several minutes after import.\n\nValid values:\n 1 = Yes\n 0 = No
delete_categoriesNoSet `1` to wipe ALL the member's sub- and sub-sub-category links (every `rel_services` row) BEFORE applying any `services` in the same call — turns `services` from append into replace. Does NOT remove the top-level category (`profession_id`) or any `list_services` definitions. Without it, `services` is additive. Combine with `services` (and `create_new_categories=1` for unknown names) to replace the member's entire sub-category set in one call. `updateUser` only.
member_tag_actionNo**REQUIRED when modifying tags.** Set `1` alongside `member_tags` to apply the change - without this flag, `member_tags` value is ignored. **REPLACES** the current tag set (not additive): tag IDs NOT in `member_tags` are removed. To clear all tags, pass empty `member_tags` with `member_tag_action=1`.
search_descriptionNoShort description shown under the user's name on search result pages. **170-char limit.**
create_new_categoriesNoSet `1` to auto-create unknown category names on `updateUser`. Without it, unknown names in `services`/`profession_name` are silently skipped. **No effect on `createUser`** (always auto-creates). Creates whatever level the name references: top-level via `profession_name`, sub via `services`, and sub-sub inline via the `Sub=>SubSub` format in `services` (no separate `createSubCategory` call needed).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv6.55.60
    • changedInput schema / properties / create_new_categories / description
      Previous value: -"Set `1` to auto-create unknown category/service names on `updateUser`. Without it, unknown names in `services`/`profession_name` are silently skipped. **Has no effect on `createUser`** (which always auto-creates, hardcoded).\n\nAuto-created sub-categories go under the member's current top-level category with `master_id=0`; deeper nesting requires a separate `createSubCategory` call."New value: +"Set `1` to auto-create unknown category names on `updateUser`. Without it, unknown names in `services`/`profession_name` are silently skipped. **No effect on `createUser`** (always auto-creates). Creates whatever level the name references: top-level via `profession_name`, sub via `services`, and sub-sub inline via the `Sub=>SubSub` format in `services` (no separate `createSubCategory` call needed)."
    • addedInput schema / properties / delete_categories
      Added value: +{
      +  "description": "Set `1` to wipe ALL the member's sub- and sub-sub-category links (every `rel_services` row) BEFORE applying any `services` in the same call — turns `services` from append into replace. Does NOT remove the top-level category (`profession_id`) or any `list_services` definitions. Without it, `services` is additive. Combine with `services` (and `create_new_categories=1` for unknown names) to replace the member's entire sub-category set in one call. `updateUser` only.",
      +  "enum": [
      +    "0",
      +    "1"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / services / description
      Previous value: -"Sub-categories for this member. Formats: `category=>service1,service2` OR `service1,service2` (top category defaults to member's current `profession_id`). Supports sub-sub-categories via `Parent=>Child` (e.g. `Honda=>2022,Honda=>2023,Toyota`).\n\nUnknown names silently ignored unless `create_new_categories=1` is also set (on update - create auto-creates always).\n\n**WARNING:** changing `profession_id` in the same call WIPES all existing sub-category links. Re-send the full `services` list to preserve them."New value: +"Sub-categories for this member. Formats: `category=>service1,service2` OR `service1,service2` (top category defaults to member's current `profession_id`). Supports sub-sub-categories via `Parent=>Child` (e.g. `Honda=>2022,Honda=>2023,Toyota`).\n\nUnknown names silently ignored unless `create_new_categories=1` is also set (on update - create auto-creates always).\n\n**Additive by default** — these links are ADDED to the member's existing ones. To REPLACE the whole set instead, pass `delete_categories=1` in the same call.\n\n**WARNING:** changing `profession_id` in the same call WIPES all existing sub-category links. Re-send the full `services` list to preserve them."
  2. Addedv6.55.39
  3. Removedv6.55.19
  4. Addedv6.49.4
  5. Removedv6.48.1
  6. Addedv6.0.19
  7. Removedv6.0.18
  8. Changed3 schema fields changedv6.0.16
    • changedInput schema / properties / cover_photo / description
      Previous value: -"Cover photo URL. **LANDSCAPE only — never portrait/vertical. Bare URL — no `?query`, must end in `.jpg`/`.jpeg`/`.png`/`.webp`.** Query strings get baked into imported filenames and 404. Pair with `auto_image_import=1` to fetch externals into site storage."New value: +"Cover photo URL. **LANDSCAPE only — never portrait/vertical; source via `https://www.pexels.com/search/<term>/?orientation=landscape`; bare URL, no `?query`, must end in `.jpg`/`.jpeg`/`.png`/`.webp` — see image URL rule.** Query strings get baked into imported filenames and 404. Pair with `auto_image_import=1` to fetch externals into site storage."
    • changedInput schema / properties / last_login / description
      Previous value: -"Timestamp of user's last login. Format: `YYYYMMDDHHmmss` (14-digit, no separators). Auto-maintained by BD on each login - omit unless backfilling historical data during import/migration."New value: +"Timestamp of user's last login. Format: `YYYYMMDDHHmmss` in the site's timezone. BD silently truncates other formats, corrupting the value. BD updates on each login — omit unless backfilling historical data during import/migration."
    • changedInput schema / properties / signup_date / description
      Previous value: -"User signup date. Format: `YYYYMMDDHHmmss` (14-digit, no separators - e.g. `20260419143022`). Auto-filled by BD on create - omit unless backfilling legacy signup dates during import/migration."New value: +"User signup date. Format: `YYYYMMDDHHmmss` in the site's timezone. BD silently truncates other formats, corrupting the value. BD auto-fills on create — omit unless backfilling legacy signup dates during import/migration."
  9. Changed3 schema fields changedv6.0.13
    • changedInput schema / properties / cover_photo / description
      Previous value: -"OPTIONAL: Enter the FULL URL of the image filename for the user's cover photo. Image URL must already exists somewhere online in order for this field to work properly. URL should begin with http://"New value: +"Cover photo URL. **LANDSCAPE only — never portrait/vertical. Bare URL — no `?query`, must end in `.jpg`/`.jpeg`/`.png`/`.webp`.** Query strings get baked into imported filenames and 404. Pair with `auto_image_import=1` to fetch externals into site storage."
    • changedInput schema / properties / logo / description
      Previous value: -"OPTIONAL: Enter the FULL URL of the image filename for the user's profile logo. Image URL must already exists somewhere online in order for this field to work properly. URL should begin with http://"New value: +"Logo URL (brand/business mark). **Bare URL only — no `?query`, must end in `.jpg`/`.jpeg`/`.png`/`.webp`.** Query strings get baked into imported filenames and 404. Pair with `auto_image_import=1` to fetch externals into site storage."
    • changedInput schema / properties / profile_photo / description
      Previous value: -"OPTIONAL: Enter the FULL URL of the image filename for the user's profile photo. Image URL must already exists somewhere online in order for this field to work properly. URL should begin with http://"New value: +"Profile photo URL (member headshot). **Bare URL only — no `?query`, must end in `.jpg`/`.jpeg`/`.png`/`.webp`.** Query strings get baked into imported filenames and 404. Pair with `auto_image_import=1` to fetch externals into site storage."
  10. Changed1 schema field changedv6.0.12
    • changedInput schema / properties / about_me / description
      Previous value: -"Long description of the member/user. Renders on their public profile page. HTML allowed (per universal safe-HTML rule)."New value: +"Long description of the member/user. Renders on their public profile. Froala body field — use `<p>`/`<h2>`/`<h3>`/`<ul>`/`<ol>` structure; skip images unless user asks. HTML allowed (per universal safe-HTML rule)."
  11. Changed18 schema fields changed
    • changedInput schema / properties / about_me / description
      Previous value: -"The long description about this user. Pass raw HTML — do NOT wrap in `<![CDATA[...]]>`, do NOT escape as `&lt;` / `&gt;`, and do NOT include tool-call scaffolding tags (e.g. `<parameter name=\"...\">...</parameter>`, `<invoke>`, `<function_calls>`). BD stores the field value verbatim; any wrapper / escape / scaffolding renders as literal visible text."New value: +"Long description of the member/user. Renders on their public profile page. HTML allowed (per universal safe-HTML rule)."
    • changedInput schema / properties / active / description
      Previous value: -"The status of the user. BD does NOT validate this field — integers outside the documented set are stored as-is (observed: `99`). Stick to documented values.\\n\\nDocumented values:\\n  1 = Not Active - Account Still Requires Activation\\n  2 = Active - Account is Live\\n  3 = Canceled - Sets User as Canceled Status\\n  4 = On Hold - Account Requires Moderation\\n  5 = Past Due - Sets User as Past Due Status\\n  6 = Incomplete - Paid signup hit an issue BD didn't account for; member was created but stays Incomplete instead of Active (without having paid). Rare edge state.\\n\\nReading: the top-level `status` response field (\"Active\", \"Not Active\", \"Incomplete\", etc.) is a computed label. When `active` is an unknown value, `status` is OMITTED from the response — do not treat `status` as always-present."New value: +"User account status. BD does NOT validate - integers outside the set store as-is (observed: `99`). Stick to documented values:\n\n- `1` = Not Active (requires activation)\n\n- `2` = Active (live)\n\n- `3` = Canceled\n\n- `4` = On Hold (requires moderation)\n\n- `5` = Past Due\n\n- `6` = Incomplete (rare - paid signup hit an issue; member created but unpaid/stuck)\n\n**Read caveat:** top-level `status` response field (`\"Active\"`, `\"Not Active\"`, etc.) is a computed label. When `active` is an unknown value, `status` is OMITTED from the response - don't treat `status` as always-present."
    • changedInput schema / properties / auto_geocode / description
      Previous value: -"Use Google Maps to geocode this user's location. Requires the \"Pretty URLs with Google Maps\" feature to be enabled on the site. (string, \"1\" or \"0\").\\n  1 = Yes\\n  0 = No"New value: +"Use Google Maps to geocode this user's location. Requires the \"Pretty URLs with Google Maps\" feature to be enabled on the site. (string, \"1\" or \"0\").\\n 1 = Yes\\n 0 = No"
    • changedInput schema / properties / auto_image_import / description
      Previous value: -"If YES, system will import user images and save them to your website. Processing may take several minutes after import.\\n\\nValid values:\\n  1 = Yes\\n  0 = No"New value: +"If YES, system will import user images and save them to your website. Processing may take several minutes after import.\\n\\nValid values:\\n 1 = Yes\\n 0 = No"
    • changedInput schema / properties / create_new_categories / description
      Previous value: -"Set to `1` to enable auto-creation of unknown category/service names during this `updateUser` call. Without this flag, unknown names in `services` or `profession_name` are silently skipped. Has no effect on `createUser` (which always auto-creates). Auto-created sub-categories go under the member's current top-level category with `master_id=0`; deeper nesting requires a separate `createSubCategory` call."New value: +"Set `1` to auto-create unknown category/service names on `updateUser`. Without it, unknown names in `services`/`profession_name` are silently skipped. **Has no effect on `createUser`** (which always auto-creates, hardcoded).\n\nAuto-created sub-categories go under the member's current top-level category with `master_id=0`; deeper nesting requires a separate `createSubCategory` call."
    • changedInput schema / properties / credit_action / description
      Previous value: -"How to apply `credit_amount` to the member's credit balance. `add` increments, `deduct` decrements, `override` REPLACES the balance with `credit_amount` (irreversible via API — no undo). Requires `credit_amount` to be set. Omit both fields to leave credits unchanged. BD does NOT reject deducts/overrides that produce a negative balance — if you need a non-negative guarantee, validate client-side against the current `credit_balance` (dollar-formatted string, may be negative) before calling."New value: +"How `credit_amount` applies to the member's credit balance:\n\n- `add` - increments\n\n- `deduct` - decrements\n\n- `override` - REPLACES balance with `credit_amount` (irreversible via API - no undo)\n\n**Requires `credit_amount` to be set.** Omit both fields to leave credits unchanged.\n\nBD does NOT reject deducts/overrides that produce negative balance. If non-negative required, validate client-side against current `credit_balance` (dollar-formatted string, may be negative) before calling."
    • changedInput schema / properties / filename / description
      Previous value: -"Override BD's auto-generated URL slug. BD may REGENERATE the slug on a future update (when city/category/name change), silently overwriting your override. Usually OMIT — let BD derive. Only set if you must control the public URL and are willing to re-set it after every future update."New value: +"Override BD's auto-generated URL slug. **Usually OMIT** - let BD derive. BD may REGENERATE the slug on future updates (when city/category/name change), silently overwriting your override. Only set if you must control the public URL and will re-set it after every future update."
    • changedInput schema / properties / images_action / description
      Previous value: -"Removes stored member images. `remove_all` clears all three (profile, logo, cover); the other values clear only the named image. PERMANENT via API — no undo. To REPLACE an image instead of removing, pass the new `profile_photo` / `logo` / `cover_photo` URL (optionally with `auto_image_import=1`) — do not set `images_action` for replacement."New value: +"Removes stored member images. PERMANENT via API - no undo.\n\n- `remove_all` - clears all three (profile, logo, cover)\n- `remove_profile_image` / `remove_logo_image` / `remove_cover_image` - clears only that image\n\n**To REPLACE** an image instead of removing, pass the new `profile_photo` / `logo` / `cover_photo` URL (optionally with `auto_image_import=1`). Do NOT set `images_action` for replacement."
    • changedInput schema / properties / last_login / description
      Previous value: -"Date/time of the user's last login. Format: `YYYYMMDDHHmmss` (14-digit timestamp, no separators). Auto-maintained by BD on each login — omit unless backfilling historical login data during import/migration."New value: +"Timestamp of user's last login. Format: `YYYYMMDDHHmmss` (14-digit, no separators). Auto-maintained by BD on each login - omit unless backfilling historical data during import/migration."
    • changedInput schema / properties / listing_type / description
      Previous value: -"Listing type classification. **BD does NOT validate this field — any string is stored verbatim.** Canonical values (exact case): `Individual` or `Company`. On `updateUser`, include only when reclassifying an existing member (e.g. fixing a record originally created as `Individual` that should be `Company`). If including, normalize case client-side — `individual` or other off-canonical casings will store as-is and break downstream logic. Otherwise omit to preserve the current value."New value: +"Listing type classification. **BD does NOT validate this field - any string is stored verbatim.** Canonical values (exact case): `Individual` or `Company`. On `updateUser`, include only when reclassifying an existing member (e.g. fixing a record originally created as `Individual` that should be `Company`). If including, normalize case client-side - `individual` or other off-canonical casings will store as-is and break downstream logic. Otherwise omit to preserve the current value."
    • changedInput schema / properties / member_tag_action / description
      Previous value: -"REQUIRED when modifying tags. Set to `1` alongside `member_tags` to actually apply the tag change — without this flag the `member_tags` value is ignored. Tag IDs not included in `member_tags` are removed; i.e. the submitted list REPLACES the current set (not additive). To fully clear tags, pass `member_tags` as an empty string with `member_tag_action=1`."New value: +"**REQUIRED when modifying tags.** Set `1` alongside `member_tags` to apply the change - without this flag, `member_tags` value is ignored.\n\n**REPLACES** the current tag set (not additive): tag IDs NOT in `member_tags` are removed. To clear all tags, pass empty `member_tags` with `member_tag_action=1`."
    • changedInput schema / properties / member_tags / description
      Previous value: -"Comma-separated tag IDs to assign to the member (e.g. `1,2,3`). Discover valid IDs via `listTags`. Requires `member_tag_action=1` to take effect. Replaces the existing tag set on save — include every tag you want the member to have, not just new additions. **Unknown tag IDs are silently dropped** — the response will echo your submitted `member_tags` value, but `tags` in the response will only reflect successfully-attached tags. Re-read the user after update and check the `tags` array to verify."New value: +"Comma-separated tag IDs to assign to the member (e.g. `1,2,3`). Discover via `listTags`. **Requires `member_tag_action=1` to take effect.**\n\n**REPLACES** the existing tag set on save - include every tag you want the member to have, not just additions. Unknown tag IDs are silently dropped - response echoes your submitted value, but `tags` array in the response reflects only successfully-attached tags. Re-GET after update and verify `tags` array."
    • changedInput schema / properties / nationwide / description
      Previous value: -"If YES, the user's listing will be found in all geographical location searches.\\n\\nValid values:\\n  1 = Yes\\n  0 = No"New value: +"If YES, the user's listing will be found in all geographical location searches.\\n\\nValid values:\\n 1 = Yes\\n 0 = No"
    • changedInput schema / properties / profession_name / description
      Previous value: -"Alternative to `profession_id` — pass the top-level category NAME as a string. BD looks it up in `list_professions`. On `createUser`, unknown names are auto-created. On `updateUser`, unknown names are silently skipped unless `create_new_categories=1` is also passed."New value: +"Alternative to `profession_id` - pass the top-level category NAME as a string. BD looks it up in `list_professions`.\n\n**Create vs update asymmetry (silent-failure trap):**\n\n- `createUser` -> unknown names auto-create (hardcoded)\n\n- `updateUser` -> unknown names **SILENTLY SKIPPED** unless `create_new_categories=1` is also passed. The write succeeds and returns success; the category just doesn't change. Always pass `create_new_categories=1` on update when supplying a `profession_name` that might not exist."
    • changedInput schema / properties / search_description / description
      Previous value: -"The short description about this user. Displays under your user's name on search result pages. 170 Character Limit. Pass raw HTML — do NOT wrap in `<![CDATA[...]]>`, do NOT escape as `&lt;` / `&gt;`, and do NOT include tool-call scaffolding tags (e.g. `<parameter name=\"...\">...</parameter>`, `<invoke>`, `<function_calls>`). BD stores the field value verbatim; any wrapper / escape / scaffolding renders as literal visible text."New value: +"Short description shown under the user's name on search result pages. **170-char limit.**"
    • changedInput schema / properties / services / description
      Previous value: -"Sub-categories for this member. Format: `category=>service1,service2` OR `service1,service2` (top category defaults to the member's current `profession_id`). Supports sub-sub-categories via `Parent=>Child` (e.g. `Honda=>2022,Honda=>2023,Toyota`). Unknown names are silently ignored unless `create_new_categories=1` is also set. WARNING: changing `profession_id` in the same call WIPES all existing sub-category links — re-send the full `services` list to preserve them."New value: +"Sub-categories for this member. Formats: `category=>service1,service2` OR `service1,service2` (top category defaults to member's current `profession_id`). Supports sub-sub-categories via `Parent=>Child` (e.g. `Honda=>2022,Honda=>2023,Toyota`).\n\nUnknown names silently ignored unless `create_new_categories=1` is also set (on update - create auto-creates always).\n\n**WARNING:** changing `profession_id` in the same call WIPES all existing sub-category links. Re-send the full `services` list to preserve them."
    • changedInput schema / properties / signup_date / description
      Previous value: -"Date the user signed up. Format: `YYYYMMDDHHmmss` (14-digit timestamp, no separators — e.g. `20260419143022` for 2026-04-19 14:30:22). Auto-filled by BD on create — omit unless backfilling a legacy signup date during import/migration."New value: +"User signup date. Format: `YYYYMMDDHHmmss` (14-digit, no separators - e.g. `20260419143022`). Auto-filled by BD on create - omit unless backfilling legacy signup dates during import/migration."
    • changedInput schema / properties / verified / description
      Previous value: -"If YES, a verified icon badge will display on the user's listing.\\n\\nValid values:\\n  1 = Yes\\n  0 = No"New value: +"If YES, a verified icon badge will display on the user's listing.\\n\\nValid values:\\n 1 = Yes\\n 0 = No"
  12. Addedv6.0.7
  13. Removed
  14. Changed2 schema fields changedv6.0.6
    • addedInput schema / properties / create_new_categories
      Added value: +{
      +  "description": "Set to `1` to enable auto-creation of unknown category/service names during this `updateUser` call. Without this flag, unknown names in `services` or `profession_name` are silently skipped. Has no effect on `createUser` (which always auto-creates). Auto-created sub-categories go under the member's current top-level category with `master_id=0`; deeper nesting requires a separate `createSubCategory` call.",
      +  "enum": [
      +    0,
      +    1
      +  ],
      +  "type": "integer"
      +}
    • addedInput schema / properties / profession_name
      Added value: +{
      +  "description": "Alternative to `profession_id` — pass the top-level category NAME as a string. BD looks it up in `list_professions`. On `createUser`, unknown names are auto-created. On `updateUser`, unknown names are silently skipped unless `create_new_categories=1` is also passed.",
      +  "type": "string"
      +}
  15. First observedv1.0.0

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description extensively discloses behavioral traits beyond annotations, such as PATCH semantics, filename regeneration, email uniqueness controlled by site settings, field validation quirks, parameter interactions (e.g., member_tag_action, credit_action), and processing delays. This adds significant value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured with sections, bullet points, and bold headings. It front-loads the core purpose and then provides detailed specifics. While it could be slightly more concise, the length is justified by the tool's complexity (60 parameters, many edge cases).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the high parameter count, lack of output schema, and complex interactions, the description is remarkably complete. It covers return format, parameter interactions, validation quirks, disambiguation rules, and references external rules. No major gaps are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 83% schema description coverage, the description adds substantial meaning by explaining parameter interactions, edge cases (e.g., profession_name silent failure), formatting requirements (e.g., URL fields, token), and behavioral nuances (e.g., additive vs. replace semantics for tags and categories). This goes well beyond the input schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Update an existing member/user' with PATCH semantics, explicitly distinguishing from createUser (new) and deleteUser (permanent). It identifies the specific verb and resource, and differentiates from siblings by mentioning alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool ('Use when: changing any field on an existing member') and when not to ('Prefer active=3 (Canceled) over deleteUser - reversible'). It also includes a safe pattern for email uniqueness pre-check, offering clear context and exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools