---
title: "Manage Settings"
method: POST
path: "/api/facade/manage_settings"
tags: ["facade"]
---

# Manage Settings

`POST /api/facade/manage_settings`

## Request

- Base URL: `https://api.vruum.ai`
- URL: `https://api.vruum.ai/api/facade/manage_settings`
- Auth: `HTTPBearer` (a scheme the document does not define)

Update company configuration — the consolidated settings writer.

Actions (no ids — settings are singletons per company):
- offer_publish: make an offer public (id = offer UUID). First fetch
  type='offer_publication', then review its exact facts. Payload:
  {expected_version: preview.version, facts: preview.facts}. Owner/operator
  approval publishes these facts for buyers and agents, including discovery
  and incoming inquiries. Third-party copies cannot be recalled.
- offer_withdraw: make an offer private (id = offer UUID;
  payload = {expected_version}). Revokes its buyer sessions too.
- buyer_inquiry_decide: review a buyer inquiry (id = inquiry UUID;
  payload = {expected_version: action_version, decision: reply|decline,
  reply?: exact reviewed text}). Reply appears only in the buyer session.
- profile: update the company profile / ICP (`payload` = the profile
  fields; this steers research match scoring). If supplied, `industry`
  must be one CanonicalIndustry value: Agriculture, Construction,
  Consumer Goods, Consumer Services, Education, Energy & Utilities,
  Financial Services, Government, Healthcare, Hospitality & Travel,
  Legal Services, Manufacturing, Marketing & Advertising,
  Media & Entertainment, Nonprofit, Professional Services, Real Estate,
  Retail & E-commerce, Software & Technology, Staffing & Recruiting,
  Telecommunications, Transportation & Logistics, Wholesale & Distribution,
  or Other. Provider labels and Unspecified are rejected.
- auto_fill: AI-fill the company profile from the website (`payload`
  optional: {website_url?}; returns a job to poll via
  fetch type='job').
- automation: update workspace automation settings (`payload` = the
  automation fields, including the per-workspace diagnosis switch
  diagnosis_loop_disabled, and impact_verifier_default: who verifies
  customer impact on new promises, {roles, customer_confirmation_required};
  the role agent verifies only from the customer's own words and needs
  customer_confirmation_required=true and a human role beside it;
  owners and operators only).
- marketing: update LinkedIn marketing settings (`payload` = the
  marketing fields).
- cta_link: manage call-to-action links (`payload` = {action:
  create|update|delete, cta_link_id?, name?, url?, cta_type?,
  is_active?}).
- offer_create: add a live offer to the catalog objectives sell from
  (`payload` = {name, pricing_type?: fixed|commission|hybrid|custom,
  list_price_minor?, currency?, billing_period?, commission_rate_bps?,
  commission_basis?, pricing_notes?, description?, monetization_model?,
  contract_term_months?}).
  Fixed/hybrid require a minor-unit price (zero means free); commission/custom
  omit price and period. Commission rate may be unknown; a stated rate is
  1–10000 basis points (100 = 1%) and requires its revenue basis. Custom
  requires pricing_notes. Hybrid is a base fee plus commission.
  Monetary forecasts require fixed pricing or separate agreed deal terms.
  contract_term_months (1–120) is the declared contract term of a
  subscription or retainer offer, never its billing period: a 12-month
  contract billed monthly declares 12. The offer-term autopilot proposes
  one for a recurring offer that declares none; a term set here carries
  basis `operator` and no agent overwrites it.
- offer_update: edit a live offer (id = offer UUID; `payload` = {name?,
  description?, contract_term_months?}). Setting contract_term_months
  records basis `operator`; null clears the declaration so the autopilot
  may propose one again. Economic terms (price, currency, billing period,
  commission, monetization model) are immutable; retire and create a
  successor to change them.
- offer_retire: retire an offer no live objective sells (id = offer UUID;
  no payload); the name frees for a new live offer.
- view_save: save a private view of the Accounts, People or Deals table
  (`payload` = {tab: accounts|people|deals, name, definition: {params}}).
  params are the table's URL keys: accounts q, industry, account_list,
  research_objective, owner (me | member id), open_deals (yes|no), sort,
  dir, cols; people q, objective, research (researched|stub),
  account_list, list, stage, enrollment (enrolled|paused|stopped), score
  (60- | -39 | 40-59), added (7d|30d|90d|365d), persona, sort, dir, cols;
  deals q, scope, pipeline, stage (a stage label), owner, sort, dir,
  cols, mode (board; the table is the default).
  Returns the view with `url`, which opens it. List views with fetch
  type='settings' subtype='record_views' filters={tab}. A new view is
  private; share it with view_update.
- view_update: rename, redefine, share or unshare a view the caller may
  change (id = view id; `payload` = {expected_revision, name?,
  definition?, shared?}). `shared: true` shows the view to everyone in
  the workspace; only the view's creator shares or unshares it.
- hubspot_sync_settings: set the custom HubSpot contact properties to
  mirror into company_people.custom_fields (`payload` =
  {extra_contact_properties: [...]}); CHANGING the list auto-enqueues a
  full backfill so existing contacts pick up the new attributes.
- hubspot_backfill: kick a full HubSpot re-pull for this company (owners
  → companies → pipelines → contacts → deals → lists → engagements). No
  payload. Heavy (hours at 250k+ contacts). The recovery path when
  contacts were imported before their custom properties were configured.
  Operators target a client with `for_company`.
Team objective-delegation grant/revoke moved to manage_outreach
(objective_delegate / objective_revoke_delegation, VRU-878).

Payloads are validated by the underlying route's own schema, so a bad
field returns that route's precise 422.

## Request body

- WriterRequest: Uniform request body for every facade writer.
  - `action` string, required: The operation to perform — see the tool description for the action vocabulary and each action's id/payload semantics.
  - `id` union: Target entity id, or an ARRAY of ids to apply the same action+payload to each (max 100; see the tool description for which entity the id names per action).
    - string
    - string[]
  - `payload` object, nullable: Action-specific fields, validated by the underlying route's own schema (a bad field 422s with that route's precise errors). See the tool description per action.
  - `items` object[], nullable: For create-like actions only: an array of per-item payloads processed in order with per-item results (max 100). Mutually exclusive with `id` and `payload`.

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/vruum/apis/vruum-public-api.md) · [All operations](https://skmtc.dev/vruum/apis/vruum-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/vruum/apis/vruum-public-api/revisions/b8ada111c30a?raw)
