Skip to main content

Obriym CRM

com.obriym-crm/mcpVersion 1.34.0

Operate Obriym CRM from your AI assistant: leads, deals, orders, catalog, stock, marketplaces.

Status

Responds184 msAnswered our handshake without sign-in.

Registry data may be out of date

We could not refresh it, so this page shows the last copy.
Last checked
Nov 14, 2026, 14:08 UTC
Latency
184 ms
Remotes responding
1 of 1
Sign-in
No sign-in
Hosting
Hosted outside the EU (detected)
Registry data as of
Nov 14, 2026, 22:14 UTC

Data from the official MCP Registry, checked by run.zero. How we check

Connect

Streamable HTTP
https://obriym-crm.com/api/mcpResponds184 ms
No sign-in

Claude Code

claude mcp add --transport http obriym-crm https://obriym-crm.com/api/mcp

Claude Desktop and claude.ai

Settings > Connectors > Add custom connector
Name: obriym-crm
Remote MCP server URL: https://obriym-crm.com/api/mcp

Cursor

{
  "mcpServers": {
    "obriym-crm": {
      "url": "https://obriym-crm.com/api/mcp"
    }
  }
}

VS Code

code --add-mcp '{"name":"obriym-crm","type":"http","url":"https://obriym-crm.com/api/mcp"}'

Built your own server? run.zero hosts MCP servers on European infrastructure.

Host your own MCP server on run.zero

Tools

165 tools

Tools of Obriym CRM
Read-only
Idempotent
Open world
add_content_localesAdd languages to the workspace's export languages, which gives products, categories and brands a translation tab in each of them and makes them targets for a bulk translation. Languages already offered are ignored, and none is ever removed. Use list_content_locales first to see what is offered. Idempotent. The result names what was added and echoes the workspace.YesNoYesNo
add_order_itemAdd a line item to an existing order by its externalId. Recomputes the order total. Only allowed while the order is pending or confirmed; on any other status (processing and later, cancelled, refunded) it fails with 409 CONFLICT "Order lines can only be changed while the order is pending or confirmed". Use list_orders or create_order for the order externalId, and search_products to quote a real product. The CRM recalculates shipping eligibility from the saved priced lines; a separate whole-order discount may require source-confirmed amount correction. The result echoes the operating workspace.NoNoNoNo
add_product_imagesAdd photos to ONE product, after the photos it already has: public https image links (images, each with an optional caption), files the person attached in ChatGPT (files — ChatGPT fills it), or links returned by create_image_upload for files on the agent's own machine. Obriym downloads every image and stores its OWN COPY in the workspace's storage — the link may be temporary and nothing hotlinks to it. Limits: JPEG, PNG or WebP, at most 2 MB each (a bigger file is refused — there is no resize), at most 10 photos per product. All or nothing: if any link fails, or the total would exceed 10, nothing is stored and the reason is returned. Saves through the product form's own operation (version check, audit, channel updates). Not idempotent: repeating the call adds the photos again. Returns the product's full photo list { url, alt } — the first is the main photo. Use get_product first to see the current photos and update_product_images to reorder, caption or remove them. The result echoes the workspace.NoNoNoYes
adjust_stockMove a product stock by a relative delta (negative to write off, positive to add) with a reason, and record it in the stock history. This is the correct tool for a correction, a write-off or damage — it never sets an absolute number, so an order committing at the same moment is not overwritten. The reason decides the direction: write_off, damage and return_to_supplier must carry a negative delta, opening_balance a positive one, while correction and other accept either; a delta that contradicts its reason is rejected. Any other word is your own vocabulary and is accepted in either direction. The product must already track inventory; a product that does not returns a conflict rather than having tracking switched on for it. A bundle also returns a conflict: its stock is derived from its components, so adjust each component instead. Pass a stable externalId to make a retry idempotent. The new stock is pushed to every connected sales channel. The result echoes the operating workspace.YesNoNoNo
apply_bulk_price_changeApply a bulk price change — step 2 of 2, after preview_bulk_price_change. Send the SAME rule, scope and target and the digest the preview returned, copied verbatim and never invented. The plan is recomputed from live prices and refused with CONFLICT if it no longer matches the digest (prices moved, or the rule would compound on a retry) — preview again and show the person the new numbers. Changes real prices: a selling price reaches connected channels where the owner armed price writes; a purchase cost is never published. Returns { affected, skipped }. Needs the owner's "AI may change prices in bulk" switch (Settings → Integrations → Connect AI); without it the call is refused and you should tell the person to ask the owner. Not idempotent for percent rules — never repeat a successful apply. Confirm with the person unless they asked for the change outright. Echoes the workspace.YesNoNoYes
archive_productsArchive up to 100 products — this is how an AI client removes a product. It leaves sale and every sales channel's feed, and nothing is erased: update_product with status active or draft restores it. Hard deletion is not available over MCP. A product that a non-archived bundle is made of is NOT archived: it is listed in heldByBundle with the bundles that contain it — archive or change those bundles first. Archiving also asks Prom to take the product's listings down; notAttempted counts takedowns not reached in time. To end a live eBay listing use withdraw_ebay_listings. Returns { affected, skipped, notAttempted, heldByBundle } — skipped products were already archived. Idempotent. The result echoes the workspace.YesNoYesNo
assign_economic_operatorsPoint a brand or a supplier at its GPSR companies: the manufacturer and the EU responsible person (ids from list_economic_operators, or null to clear). Every product of that brand takes them first, then the supplier's. Replaces both roles at once. The result echoes the workspace.YesNoYesNo
assign_leadAssign a lead to a workspace member by user id, or pass assignedTo=null to unassign. Use search_leads to find the lead id and get_workspace_info to confirm the operating workspace. The result echoes the operating workspace.YesNoNoNo
bulk_set_ebay_fulfillment_policyChoose one eBay shipping (fulfillment) policy — or null for the connection default — for up to 25 products on one eBay site, with the same per-product rules as set_product_ebay_fulfillment_policy: no listing stores the choice; a draft or live listing has its offer updated in place and read back. The policy is checked against eBay once before any product is touched, and a product whose listing lives on another eBay site fails with marketplaceMismatch instead of being moved. Returns results per product (status updated, unchanged, saved, unverified or failed with the eBay error), counts and notAttempted (not reached in the time budget — call again with those ids). Refused until the workspace owner switches on AI publishing. Idempotent. The result echoes the workspace.YesNoYesYes
bulk_set_product_brandSet — or clear — the BRAND of many products in one call, the way the CRM's product list bar does it. scope names the products: a list of ids (at most 100, from search_products), a model (every colour and size of it) or a category (add includeSubcategories to take the ones under it); an open filter is not accepted. A brand belongs to the model, so for a product in a model the model changes and every article of it follows — articles outside the ones named are counted in expandedByModel, never hidden. brandId comes from list_brands or create_brand (null clears the brand). Products that already have the brand are skipped. A brand called Unbranded needs no special handling: Amazon listings send it as Generic. Saved in the CRM; a live Amazon offer keeps its brand until it is updated there. Idempotent. Returns { affected, skipped, expandedByModel } and the workspace. Use update_product to change one product.YesNoYesNo
cancel_listing_jobsCancel listings waiting in the listing automation's queue on a one-item-per-listing marketplace (Vinted), by job id from list_listing_jobs. Nothing is sent to the marketplace and no live listing changes; the products simply are not listed for that reason. A job a run is sending right now, or one already closed, is not cancelled and comes back in notCancelled. Idempotent. Returns { cancelled, notCancelled } and echoes the workspace.YesNoYesNo
check_amazon_brand_accessAsk Amazon whether this seller account may list a brand: allowed, approval_required (with the link to apply), not_eligible, or unknown. Amazon answers such questions per ASIN only (Listings Restrictions API) — there is no account-level brand query — so the answer is read for a SAMPLE ASIN of the brand: the one you pass, else the first catalog match whose brand equals the name. The result names the sampleAsin it was read for; when no item of the brand is found the status is unknown. Amazon has no 'application pending' state: until Amazon approves, the status stays approval_required. Reads Amazon, never writes. Use search_amazon_catalog to pick a sample ASIN, and check_amazon_readiness for a product.NoYesNot declaredYes
check_amazon_readinessAsk Amazon whether up to 25 products could be listed now — the same check as the Amazon channel page: the offline requirements (product type on the category, brand, a photo, the condition, a title of at most 75 characters), the price in the marketplace's currency, then Amazon's own dry run (VALIDATION_PREVIEW), which creates nothing. A product whose barcode Amazon already knows is checked as an OFFER on that existing item (ready rows carry its asin): only the condition and the price matter then, and a brand or category Amazon gates is refused with reason amazonListingRestricted and the approval links. Returns ready, blocked (reason, details, Amazon's sentence) and notAttemptedIds (call again with those). A blocked product's details also name what the Amazon product type still needs, found against Amazon's own schema before its dry run: missingFieldKeys (attribute keys), missingFields (their titles in the marketplace's language) and invalidFields. The CRM fills model_name (the model's code), list_price (the old price when higher, else the price, VAT included) and the item's dimensions itself; set anything else for Amazon with set_amazon_field_values (keys, kinds and allowed values from get_amazon_fields) — on the category or the model when every product shares the value. A characteristic named exactly like the field's title (upsert_product_attributes) also reaches Amazon, but characteristics are shown on the shop's site and every other channel, so keep them for real product facts. Needs a listing marketplace chosen on the Amazon connection; no arming. Then publish with publish_amazon_listings.NoYesNot declaredYes
check_amazon_variation_familyThe model's active articles become ONE listing with variations on one Amazon store — Amazon's "variation family"; call it a model with variations when talking to the user: a parent whose SKU is the model's code (no price, no quantity) and a child listing per article, varying by colour and/or size — the theme is chosen from what the Amazon product type declares. An article not yet on the store becomes a new child (action create); an article already sold there as a listing of its own — a model put on a store article by article, or copied from another store without its parent — is JOINED to the parent (action attach): only parentage_level, child_parent_sku_relationship and variation_theme are sent to it, by PATCH under the SKU Amazon knows it by (amazonSku when that differs), and its offer, photos and texts stay as they are. A listing Amazon already shows under this parent counts as in the family (skipped, listed). Every listing is first validated by Amazon (VALIDATION_PREVIEW); this tool only checks and creates nothing. Start from gaps: one entry per kind of problem with every SKU it concerns, found before Amazon is asked — size or color (set with update_product), price (none in the run's currency, the marketplace's: upsert_product_prices, set_product_channel_price or apply_bulk_price_change), productType (update_category), brand, images, condition, title; quantity with blocking=false: the article does not track stock, so the listing goes up without one (update_product with trackInventory, then adjust_stock); and barcodeLength with blocking=false: the article's barcode has another number of digits than the rest of the model, so a digit may be lost — confirm it from the label before publishing (update_product with ean). Amazon is asked only when no gap blocks. A listing that cannot be joined gets status excluded and holds nobody up — the rest of the model goes ahead, it stays a listing of its own, and every later run tries it again; the gap cannotAttach (blocking=falseNoYesNot declaredYes
check_amazon_variation_parentFor a model ALREADY on Amazon as a model with variations (published with publish_amazon_variation_family): what its parent listing shows now (currentTitle) and what the CRM would send — the model's Amazon title set with set_channel_texts (modelId), else the model's name translated into the marketplace's language (titleSource model or name) — with warnings when that name would go untranslated, and Amazon's own dry run: status ready (Amazon would take it), nothing (Amazon already shows the same, nothing to send) or rejected (issues in the marketplace's language). Changes nothing. Then send it with update_amazon_variation_parent.NoYesNot declaredYes
check_channel_readinessCheck locally which products a marketplace will refuse and why — missing price, unusable price, blank name, unmapped category — grouped by what fixes them, without calling the marketplace. The response separates `blocked` (these products do NOT go out) from `warnings` (these DO go out, but probably will not be published as the merchant expects: a price in a currency the platform does not name, no words of their own in a language the channel reads, a placeholder description, characteristics the marketplace does not recognise). Local checks exist for prom, rozetka, google_merchant and olx; other platforms report their connection state through get_marketplace instead. If the channel is not connected the call fails with NOT_FOUND ("<channel> is not connected in this workspace") instead of reporting an empty channel — use list_marketplaces to see which are connected. This never publishes anything: it reports what would happen.NoYesNot declaredNo
complete_activityMark an activity (task, call, or meeting) as completed by its id. Use list_activities first to find the activity id. The result echoes the operating workspace.YesNoNoNo
configure_pipelineUpdate an existing pipeline stage's name, default probability, or WIP limit. Provide the stage id (from list_pipeline_stages) and ONLY the fields to change — omitted fields keep their current value; wipLimit null removes the limit. A name cannot be blank and must be unique among stages (409 CONFLICT otherwise). Stages cannot be created here, and stage order and terminal behavior are fixed. The result echoes the operating workspace.YesNoNoNo
convert_leadConvert a lead into a contact, company, and/or deal (select at least one via the input flags). Sets the lead status to converted. Use search_leads first to find the lead id. The result echoes the operating workspace.YesNoNoNo
create_activityCreate an activity (task, call, meeting, email, or note). Must link to at least one lead, contact, company, or deal — use search_leads/search_contacts/search_companies/search_deals to get the entity id. The result echoes the operating workspace.NoNoNoNo
create_brandCreate a catalog brand with optional description, website and per-language description translations. The brand NAME is never translated: marketplaces match the vendor name verbatim, so send it exactly as the vendor is known. The slug is normalized to Latin. A name already used in this workspace is rejected, so call list_brands first to avoid duplicates. Translate only the brand's own description — add no facts the user did not give. The result is the created brand with its id (use it as brandId for create_product/update_product) and echoes the operating workspace.NoNoNoNo
create_categoryCreate a catalog category, optionally nested under an existing one, with optional description and per-language translations. The slug is normalized to Latin whatever is sent. The parent must exist in this workspace, and a name already used under the same parent is rejected, so call list_categories first to avoid duplicates. To link marketplace categories send marketplaceCategories ({ prom, rozetka, olx, amazon, google_merchant, etsy } with the id as a string, null to clear): look the ids up with search_marketplace_categories first and never guess them. The format is always checked on write, and against the marketplace while it is connected (OLX and Etsy must be a leaf category; a Google id must exist in the Google taxonomy). Translate only the category's own name and description into each locale — add no facts the user did not give. The result is the created category with its id (use it as categoryId for create_product/update_product) and echoes the operating workspace.NoNoNoNo
create_companyCreate a company (B2B account). The company name must be unique in the workspace. representationState is explicitly declared (unspecified, works_alone, or has_representatives), never inferred from contacts; an individual always uses unspecified. Enforces the workspace plan limit; the result echoes the operating workspace. Use search_companies first to avoid creating a duplicate.NoNoNoNo
create_contactCreate a contact (person). Use search_companies for the companyId to link an employer. Enforces the workspace plan limit and validates the company/owner links; the result echoes the operating workspace.NoNoNoNo
create_content_postCreate a social post as a DRAFT — nothing is published. Give it a working title, the main text, optional hashtags, the channels (each may carry its own text), and images: public https image links (Obriym stores its own copy), files the person attached in ChatGPT (the `files` field, filled by ChatGPT), links returned by create_image_upload for local files, and/or a catalog product whose photos are attached and whose sell-out later marks the live Telegram and Threads post as sold. Each channel's text, with hashtags, must fit that channel's limit (list_content_channels). Returns the post id and warnings — a channel that is not ready, Instagram without an image — to relay to the person. Not idempotent: each call creates a new draft. Then use schedule_content_post or publish_content_post. Echoes the workspace.NoNoNoYes
create_dealCreate a pipeline deal. Requires a stageId, title, and next-action note. Use list_pipeline_stages for the stageId, and search_companies/search_contacts to link a company or contact. Enforces the workspace plan limit; the result echoes the operating workspace.NoNoNoNo
create_ebay_draftsCreate eBay DRAFT offers for up to 25 products — real writes to the seller's eBay account, but nothing is buyer-visible until publish_ebay_drafts. Run inspect_ebay_listings first and pass only products whose nextAction is create_draft and ready is true. Each product is attempted on its own: returns created, failed (each with a reason to look up in remediation.ebayPlaybook) and notAttempted (not reached in the time budget — call again with those ids). Refused until the owner switches on AI publishing, and while draft creation is not armed on the eBay connection. Not idempotent: a product that already has a draft fails with alreadyListed. The result echoes the workspace.YesNoNoYes
create_google_shopping_campaignCreate a Google Shopping campaign in the connected Google Ads account — step 2 of 2, after preview_google_shopping_campaign. A REAL write to the live ad account, but the campaign is always created PAUSED: this tool never activates or starts one, and spends nothing until a person starts it in Google Ads. It obeys the owner's own settings on the Ads page: refused unless campaign creation is armed there and the daily budget is within the owner's cap. It is also refused until the workspace owner switches on 'AI may create paused ad campaigns' (Settings → Integrations → Connect AI), and an API token is refused because it has no role — only a signed-in owner or administrator can create. Returns { campaignResourceName, status: 'PAUSED' }. Not idempotent: Google refuses a duplicate name. Never tell the user a campaign is running. Use list_ad_campaigns afterwards, once the sync has read it. The result echoes the workspace.NoNoNoYes
create_image_uploadGet one-time links for uploading image FILES from the agent's own machine — for clients that can read local files and send HTTP requests (Claude Code, Cursor, scripts). A chat client passes image links instead, and ChatGPT passes attached files itself through the files field. For each link, send the raw file bytes with HTTP PUT within 15 minutes — for example: curl -X PUT --data-binary @photo.jpg "<uploadUrl>". One file per link; JPEG, PNG or WebP, at most 2 MB each (a bigger file is refused — there is no resize). The PUT answers JSON with url: pass that url to add_product_images (images[].url), create_content_post (imageUrls), set_category_image or set_brand_image (url), which store their own copy. Creating links changes nothing in the CRM. Returns { uploads: [{ uploadUrl, expiresAt }], maxBytes, allowedTypes }. Needs products:write or content:write.NoNoNoNo
create_leadCreate a lead. Idempotent by externalId (re-sending the same externalId returns the existing lead). Requires an email or phone. Enforces the workspace plan limit; the result echoes the workspace it landed in. Use update_lead to change it afterward.NoNoYesNo
create_orderCreate an order with line items. Currency is required: use trusted source facts or CRM product prices; never guess or convert. Idempotent by externalId: re-sending the same request returns the existing order. Counts toward the plan's monthly order limit (403 PLAN_LIMIT_EXCEEDED when reached). The result echoes the operating workspace. Use search_products first. For a promo code use quote_order_promotion, then send promotion.code and promotion.expectedTotal. CRM alone calculates discounts, net totals, usage limits and free shipping. Do not invent a discount, send a legacy discountAmount, or promise free shipping from your own arithmetic.NoNoYesNo
create_productCreate a catalog product. Defaults to draft status — publish it by sending status 'active' once it is complete. Use list_categories, list_brands and list_warehouses for the ids; SKU is generated when omitted and must be unique in the workspace. Set trackInventory with an opening stock to start counting units, which is recorded as the first movement in the product stock history. A bundle (type bundle with bundleItems) holds no stock of its own: its stock, tracking and cost are derived from its components, so a stock sent for it is refused and trackInventory/costPrice are ignored. If the target warehouse is set to list new products on the marketplaces, this product joins those channels. When productGroupId names an existing product model, the product joins that model as a new article and takes the model's shared content (name, description, category, brand, characteristics, translations) instead of the values sent. Enforces the workspace plan limit; the result echoes the operating workspace.NoNoNoNo
delete_categoryPermanently delete ONE catalog category by id. Its products are NOT deleted but lose this category (so they also drop out of marketplace feeds that require a category); its subcategories move to the top level; its translations and linked marketplace category ids are removed. NOT reversible. Not idempotent in effect: a second call for the same id returns NOT_FOUND. Call get_category first to read productCount and subcategoryCount, and confirm with the user before deleting a category that has products. The result reports productsUncategorized and subcategoriesMovedToRoot and echoes the operating workspace.YesNoNoNo
delete_content_postDelete a post that has not been published — a draft, a scheduled post (its schedule goes with it) or one whose every channel failed. Its own stored images are deleted too; a linked product's photos are never touched. Refused for a post that went out on any channel: that record stays. This cannot be undone. Echoes the workspace.YesNoNoNo
delete_ebay_draftsDelete the eBay DRAFT offer of up to 25 products; a live listing is refused — end it with withdraw_ebay_listings first. The CRM product itself is untouched. Works even while draft creation is disarmed on the connection, but still needs the owner's AI publishing switch. Returns done, failed and notAttempted. The result echoes the workspace.YesNoNoYes
delete_ebay_variation_draftDelete a model's UNPUBLISHED eBay multi-variation draft: every variation's offer and the inventory item group are removed from eBay; the articles stay on the channel, ready for a new listing (together or one by one). A live listing is refused — end it with withdraw_ebay_variation_listing first. Refused until the workspace owner switches on AI publishing. Returns deleted. The result echoes the workspace.YesNoNoYes
estimate_catalog_translationWork out what a bulk AI translation of products would do, step 1 of 2; nothing is written and no credits are spent. Give the products (ids, or a whole category, brand, supplier, warehouse or model) and the target languages, which must be offered by the workspace (list_content_locales). Returns how many of the selected products still need it, the most it can cost in AI credits and the credits left. Only empty fields are ever filled. Show the person this before start_catalog_translation.NoYesNot declaredNo
get_activityFetch one CRM activity in the selected workspace by activity id, including type, due date, completion state, assignee and linked entity. Use list_activities first when you only know the related lead/deal/contact.NoYesNot declaredNo
get_amazon_fieldsThe fields of the Amazon product type of ONE product, model or category (name exactly one id), read from Amazon's own schema for the workspace's Amazon marketplace: each field's attribute key, its title in the marketplace's language, its kind (choice with Amazon's list of values and labels, number, measure with the units it accepts, text), whether the type requires it, the value set on this level (own) and the one it inherits from the model or the category (inherited), and — for a product, or a model read through its first active article — its status: missing or invalid (what Amazon would refuse) or filled, and fromCrm when the CRM already fills it from the product's characteristics or fields. fields lists in full the ones that are required, missing, refused or already hold a value; otherFields names every other field by key, title and kind — pass their keys in keys to get them in full. An attribute made of several values that only mean something together (a size: shirt_size, bottoms_size, footwear_size) appears as one field per part, keyed attribute.part (shirt_size.size_system); the article's own size part is listed only for a product. Fields the CRM always writes itself (title, brand, barcode, price, photos, the colour's name, the variation relationship) are never listed. The colour's name is the product's colour in the store's language (translations on get_product, written with upsert_product_translation); which of Amazon's colour families it belongs to is the field color.standardized_values, listed for a product only, which the CRM fills from the name unless a value is set here. Use it before set_amazon_field_values; for what a product still lacks to be listed, check_amazon_readiness. Read-only: it changes nothing.NoYesNot declaredYes
get_catalog_translation_statusRead how the workspace's bulk AI translation is going: state (none, running, waiting for AI answers, halted when credits ran out, done), products written, credits used and the target languages. Read-only. Use start_catalog_translation to begin one and stop_catalog_translation to end it.NoYesNot declaredNo
get_categoryFetch one catalog category by id: name, slug, parent, description, image, translations, the linked marketplace category ids (marketplaceCategories: Prom, Rozetka, OLX, Amazon, Google Merchant, each { id, label } or null), its direct subcategories (children), and productCount and subcategoryCount. Read-only. Use list_categories first to find the id, and call this before delete_category to see what a deletion would affect.NoYesNot declaredNo
get_channel_stock_limitRead the global or product-specific maximum published quantity on one numeric-inventory channel. Optional productId returns mode (inherit/limit/unlimited), own and effective ceiling, delivery state and reasons; readiness reports disabled inventory writes across all nine numeric-stock channels. Delivery items include target scope, attempted quantity, reasons and optional import reference; submitted means asynchronous processing, not confirmed live stock. maxQuantity null means unlimited. Each tracked SKU publishes min(available after reservations, maxQuantity); this does not reserve stock. Read-only. Use preview_channel_stock_limit before changing or removing it.NoYesNot declaredNo
get_channel_sync_reportReport which products of one marketplace channel were reached by the last syncs and which were not, and why — from stored state, without calling the marketplace. Per product on the channel: state (attention = the marketplace reported a problem with the listing; never_sent = nothing recorded as sent, or no listing is linked; changed_since_sent = the product changed after it was last sent; paused = syncing paused for it; sent = sent and unchanged), a plain-language reason, lastSyncedAt (when the CRM last sent it), observedAt (when the marketplace last answered about it — null means never asked), presence, listing id, moderationStage/Action and up to 3 issues, productUpdatedAt. Also returns counts per state over the whole channel, the adapters' own last run (lastRun: matched, updated, failed, unmatched, error, lastSuccessAt and, for Google Merchant, failedSample — up to 5 refused products with Google's own message), pagination, and notStored — what the CRM does NOT keep, chiefly a reason for EVERY refused product (only the last run's sample is stored), so do not invent one. For attention, presence not_available counts only when the marketplace itself answered (observedAt set) and the channel sells; on an advertising channel (Google Merchant) it never does. Worst first; filter with state; page with page and perPage. Read-only. Use list_channel_products for price and stock on the channel and check_channel_readiness for why a product would be refused before it is sent.NoYesNot declaredNo
get_companyFetch one CRM company in the selected workspace by company id, including status, industry, owner and contact links when present. Use search_companies first when you only know the company name.NoYesNot declaredNo
get_contactFetch one CRM contact in the selected workspace by contact id, including company, owner, tags and communication fields when present. Use search_contacts first when you only know a name, email or phone.NoYesNot declaredNo
get_content_postRead one social post: its main text, hashtags, images, linked product, status and schedule, and per channel the text that channel gets (ownText or the main text), its length against the channel limit, whether the channel is ready, and what publishing returned there — status, link to the live post (permalink) or the network's error. Read-only. Use list_content_posts to find the id; call it after publish_content_post to report the links.NoYesNot declaredNo
get_customerFetch one CRM customer summary in the selected workspace by company id: a company that bought (a purchase order — processing, ready to ship, shipped, delivered or refunded, or with a settled payment — or a won deal that never became an order). Returns health, lifetimeValue (completed-order revenue plus won deals without an order), purchases (purchase orders plus won deals without an order), repeat (two or more purchases), lastPurchaseAt and wonDealsCount (every won deal). Read-only; a company with no purchase is not found. Use list_customers first when you only know the company name; use get_person_customer for a person who bought without a company.NoYesNot declaredNo
get_dashboard_overviewReturn the operational 'what needs attention today' snapshot for this workspace: active/qualified/stale lead counts, pipeline value, weighted forecast and overdue activities. Takes no arguments. Use get_report for period trend analytics instead.NoYesNot declaredNo
get_dealFetch one pipeline deal in the selected workspace by deal id, including stage, value, probability and linked company/contact data when present. Use search_deals first when you only know the title or related customer.NoYesNot declaredNo
get_ebay_offer_policiesRead the eBay offers of up to 25 products live and return, per offer, the fulfillment, payment and return policy ids it carries now, the shipping policy name, its eBay site and status (PUBLISHED = live, UNPUBLISHED = draft), and matchesAssignment — whether it carries the product's own choice in the CRM (null when the product has none). Products with no draft or live listing are listed in withoutOffer; notAttempted were not reached in the time budget — call again with those ids. Reads only. Use get_product_ebay_fulfillment_policy for one product's full picture.NoYesNot declaredYes
get_ebay_variation_listingShow a product MODEL as one eBay multi-variation listing: state (none, draft, live), marketplaceId, listingId and listingUrl, the stable groupKey, and every article of the model with its sku, colour, size, channelState on eBay and inclusion — included, not_active, not_on_channel (put it on the channel with set_channel_membership) or single_listing (it has its own eBay draft or listing, which must be deleted or ended first). Also says whether eBay is connected and whether the owner armed listing creation. Reads the CRM only. Use inspect_ebay_variation_listing for eBay's own checks before saving.NoYesNot declaredNo
get_google_merchant_product_performanceClicks and impressions per product in Google Shopping for a date range, best first, read from Google's Merchant API Reports on demand — nothing is stored, so it is a question, not a sync. Each row has offerId, title, clicks, impressions and clickThroughRate. At most 92 days per call and 100 products; truncated is true when more products matched than limit, so narrow the dates or raise limit. Conversions are not included. Read-only: it changes nothing at Google and needs no arming, only a connected Google account. Use get_marketplace for what Google decided about the products (moderation), and list_ad_campaigns for spend and the sales the CRM recorded.NoYesNot declaredYes
get_leadFetch one CRM lead in the selected workspace by lead id, including status, source, assignee, tags, custom fields, score, notes and next action. Use search_leads first when you only know a name, email, phone or company.NoYesNot declaredNo
get_lead_conversationRead one lead's customer messages, oldest to newest: { at, channel, direction (inbound = from the customer, outbound = sent by the business), text (up to 2000 characters; truncated is true when cut), media ({ kind, contentType, name } or null — the file itself is never returned) }. A person who writes on two channels has two separate conversations: pass channel to read one, omit it to get all channels interleaved by time. Returns the most recent `limit` messages (default 30, max 100). Use it before drafting a reply or to answer what the customer asked. Read-only — this server cannot send messages. Use list_conversations to find leads with messages and get_lead for the lead card.NoYesNot declaredNo
get_listing_automationRead the listing automation of a one-item-per-listing marketplace (Vinted), where a sale ends the listing: whether it lists the next unit after a sale and again when stock arrives, when (relistTiming: instant, next_run within 10 minutes, after_1h, after_6h, after_24h), its publishing windows in the workspace time zone, the daily limit, the refresh of listings that do not sell, the settings version, whether a dry run was done (previewAt), whether the connection's own publishing and removing are turned on (arming — only the owner turns those on, on the connection page), and the queue summary (open jobs by state, listed today, failed this week). Read-only. Use update_listing_automation to change it, preview_listing_automation for the dry run, list_listing_jobs for the queue itself.NoYesNot declaredNo
get_marketplaceFetch one connected marketplace in detail: every adapter on it with its setup state, last poll, last poll error, last catalog-sync outcome (`sync`, whose `lastSuccessAt` is the last run without a connection error — it survives failures, so it says how long a channel has been broken; `notAttempted` counts matched listings the run had no time left for and `truncated` true means not every listing was read — the next run continues, so a short `updated` with a large `notAttempted` is an unfinished run, not a skipped change) and last product import, a classified `problem` (kind, needsReconnect, platformMessage, whatToDo) when anything failed, `partialFailure` ({ failed, sent, sample, whatToDo }) when the last run connected fine but the marketplace refused some products (health stays active), and for google_merchant `sync.failedSample` (up to 5 refused products with Google's own message; the reason for those only, not every refused one), plus the channel sales, leads and product counts. For google_merchant each adapter also has `moderation` — what Google decided about the products the CRM sent, as the hourly check stored it (approved, pending, limited, rejected, missing, otherTarget, offChannel, topIssues, lastCheckedAt, complete, lastError; null before the first check; complete false means only part of the catalog was read) — and `setup`: setupBlock (what stands in the way: not_connected, no_account, no_country, no_terms, not_armed — owner setup, not an outage), armed, lastPreviewAt, feedLabel, currency, termsAccepted, productUrlTemplate and contentLanguageOverride. Reads stored state only, never calls the marketplace. Use list_marketplaces first to see which platforms are connected, list_channel_products for the products on the channel and check_channel_readiness for what would be refused.NoYesNot declaredNo
get_obriym_product_factsRead-only facts about Obriym CRM itself: approved marketing claims, conditions, limitations, review sources, plan prices/limits and integration scenarios/readiness with beta caveats; no customer data or external calls, and implementation review does not establish workspace configuration or customer results (empty assets means no screenshot supplied). Call before writing about Obriym, narrow by topic, use list_content_channels for publishing readiness, list_published_posts to avoid repeated topics and get_content_post to inspect a draft or publication result.NoYesNot declaredNo
get_orderFetch full order detail in the selected workspace by externalId, including line items, payments, shipments, returns and shipByAt (recorded ISO ship-by deadline, or null when unknown; not the actual dispatch time). Use list_orders first when you only know the customer or date.NoYesNot declaredNo
get_person_customerFetch one person who bought without a company, by contact id: health, lifetimeValue (completed-order revenue plus won deals without an order), purchases, repeat, firstPurchaseAt, lastPurchaseAt and contact details. Read-only; a contact who never bought without a company is not found. Use list_people_customers or search_contacts first when you only know the name, email or phone; use get_customer for a company.NoYesNot declaredNo
get_productFetch one catalog product in the selected workspace by product id or SKU — returned in any status (draft, active, or archived; check the status field) — with every catalog field: prices, cost, stock and trackInventory, availability, variant fields, all attributes (characteristics) and translations, identifiers, weight and dimensions, images, videos, bundle components and related products; plus its model, warehouse and supplier by name, supplierOffers (what the supplier last said: quantity, restock date, purchase price, state), every sales channel with its listing and moderation state, the collections it is in and its model's review summary; channelTexts (the title and bullet points written for a channel such as Amazon, per language), safetyDocuments (safety PDFs a marketplace receives) and gpsr (the manufacturer and EU responsible person with their emails, each from the brand, else the supplier). A bundle's stock and cost are derived from its components. Provide exactly one known identifier; use search_products first when unsure (search covers active products only).NoYesNot declaredNo
get_product_ebay_fulfillment_policyShow ONE product's eBay shipping policy. Per eBay site: assignedPolicyId (the product's own choice, null when it has none), defaultPolicyId (the connection default) and effectivePolicyId with effectiveSource — product, connection_default or first_available — the policy a new draft or a go-live would carry, plus that site's policies. For a product with a draft or live listing it also reads the eBay offer live: offer.fulfillmentPolicyId is what buyers see now. Reads only. Use list_ebay_fulfillment_policies for the costs of every policy and get_ebay_offer_policies to read several products' offers at once.NoYesNot declaredYes
get_product_pricingEverything about ONE product's prices in one call: its own price, old price and currency; the price-list rows (other currencies); per-channel price overrides (platform, currency, price); the channel price rules that apply where there is no override (channelPriceRules); wholesale quantity breaks per currency; the purchase cost with its currency (a bundle's cost is derived from its components and cannot be set on it); and the markup over cost per sale currency (marginPercent = price ÷ cost − 1, in percent; not a margin on the price) — the cost crossed at the workspace's stated rate, null with missingRate true when no rate is stated. Read-only. Use search_products for the id; call it before set_product_channel_price, set_product_price_tiers or upsert_product_prices so you change the right row, and after a change to confirm it. For a whole group of products use preview_bulk_price_change.NoYesNot declaredNo
get_reportReturn one aggregated analytics report over a period for this workspace, selected by the report parameter: lead_source_conversion, pipeline_velocity, team_performance, revenue_trend, product_sales (units, revenue and gross margin per brand/category/SKU) or stock_valuation (units on hand and their value per warehouse, per cost currency). Each returns aggregated rows (no per-record data); days tunes the look-back for lead_source_conversion, team_performance and product_sales, months the span for revenue_trend; pipeline_velocity and stock_valuation take no period. Use get_dashboard_overview for today's operational snapshot instead.NoYesNot declaredNo
get_workspace_infoShow which account and workspace this connection operates: signed-in name/email (OAuth only), workspace name, plan, connection type and granted scopes — what this connection may do right now (capabilities: aiSwitches, the owner's switches for AI marketplace publishing, social publishing, bulk price changes and bulk translation, each with allowedNow = switch on AND scope granted; marketplaces, each connected channel with the write directions its owner armed, and for Amazon which stores are open for listing creation, photos/GPSR, and price and stock) — so check it before a write instead of learning from a refusal — and the server itself: its version and every tool it has now (server.tools), with how to refresh an AI app whose tool list is older (server.refreshHint). Call this when the user asks 'which account or workspace am I connected to?', and when the user asks for something your tool list has no tool for: if server.tools has it, your list is outdated — relay server.refreshHint instead of saying Obriym cannot do it. Sign-in connections can use list_workspaces and select_workspace to see or change the bound workspace.NoYesNot declaredNo
inspect_amazon_listingsReport how the workspace's Amazon offers stand for a buyer and what Amazon says is wrong with them. Per product linked to an Amazon listing: stage (active; search_suppressed = buyable but hidden from search, usually no main image; inactive = Seller Central's 'Non attivo'; no_offer = the listing exists but Amazon shows no offer on it yet (Seller Central's 'Offerta mancante'), usual for a few hours after it is created, so re-check before changing anything; suppressed = taken down by Amazon; missing = no offer under that SKU any more; null = never checked), action (fix_issues when Amazon reports an ERROR), issues (code, severity, message, the attributes involved, Amazon's enforcement such as SEARCH_SUPPRESSED), amazonSku (the seller SKU Amazon knows the offer by when it differs from the CRM SKU, e.g. a variation child linked by its barcode), the ASIN and when it was checked, and markets (per Amazon store: stage, action, the price and quantity it shows); plus a count per stage over the whole channel. Worst first, 100 rows a page: total, limit, offset and hasMore say whether to read on with offset; stage filters (with marketplaceId, the stage and action are that store's). For a listing Amazon started by itself, stage no_offer on a store is a shell with no offer: publish_amazon_listings with that marketplaceId adds the offer to it (price, quantity and condition come from the product). With refresh=true it asks Amazon first (a read; writes only the CRM's record of the answer). It never changes an offer: send photos and GPSR contacts with preview_amazon_listing_content then update_amazon_listing_content; the rest is fixed in Seller Central or on the product. Use list_channel_products for price and stock on the channel and check_channel_readiness for products not yet listed.NoYesNot declaredYes
inspect_ebay_listingsCheck up to 25 products against eBay before any write, with the same live preflight the CRM's eBay channel page and the real draft and publish calls run. Per product it returns the eBay state (off, member, draft, live, ended), nextAction (create_draft, publish_draft or none), whether that step is ready and, when not, the blocking reason with details. ebayDraftSetup lists the armed eBay sites and their currencies; remediation.ebayPlaybook maps every reason to the tool that fixes it; publishingEnabled says whether the owner allows AI to publish in this workspace. Reads eBay, never writes. Use search_products first for the ids; after a fix with update_product, upsert_product_prices, upsert_product_attributes or upsert_product_translation, call it again — a reason can change or clear.NoYesNot declaredYes
inspect_ebay_variation_listingRun every check saving a model's eBay multi-variation listing would run, writing nothing: each article's required fields and price in the marketplace currency, the variation axes (colour and/or size, named as the eBay site names them), duplicate or missing variation values, the category (suggested from the title, or the saved listing's), whether it allows variations, item condition, required item specifics, one shipping policy for all articles, business policies and inventory location. Returns ready, marketplaceId, categoryId, axes, variationCount and issues (reason, message, skus). Needs a marketplace but not the owner's arming. Reads eBay. Use save_ebay_variation_listing once ready is true.NoYesNot declaredYes
list_activitiesList this workspace's activities (tasks, calls, meetings, emails, notes), filtered by type/assignee/overdue/completion/linked-entity and paginated. Returns summary rows (id, type, title, priority, dueDate, completed, assignee, linked lead/contact/company/deal, isOverdue) plus pagination { page, perPage, total }. Use get_activity to fetch one activity's full detail by id.NoYesNot declaredNo
list_ad_accountsList the connected ad channels with their accounts: per channel the provider key, label, health (active, setup_required, error), the last sync time, any current sync error, campaign counts, and each account's id, name, currency, status and last sync. Also returns reportingCurrency, the workspace currency every revenue and ROAS figure is stated in. Read-only, from stored state: no ad platform is called, so a figure is as fresh as the last hourly sync. Takes no arguments. Use list_ad_campaigns with a provider for campaigns, spend and results, and list_ad_recommendations for what the CRM suggests.NoYesNot declaredNo
list_ad_campaignsList one ad channel's campaigns for the last N days, biggest spend first: status, objective, daily or lifetime budget, currency, spend and clicks (from the ad platform), and what the CRM recorded for the campaign — leads, deals, won deals, orders, sales, revenue, costPerLead. roas is revenue divided by spend, and is null — never guessed — when the ad account's currency differs from reportingCurrency, because that would invent an exchange rate; revenue is in reportingCurrency only. Read-only, from stored state, no ad platform is called. Use list_ad_accounts for the provider keys, list_ad_recommendations for what to do next, and get_report for the CRM's own sales reports.NoYesNot declaredNo
list_ad_recommendationsList the CRM's open advertising recommendations across every channel: kind (spend_no_result, unanswered_leads, low_roas, scale_winner, cost_per_lead_spike), severity (urgent, warning, opportunity), the campaign and the frozen evidence the rule saw. They are deterministic rules over data only the CRM has — whether a click became a customer, what it paid, whether anyone replied — not a model's opinion. Snoozed and handled ones are not listed. Read-only; deciding a recommendation is done on the Ads page. Takes no arguments. Use list_ad_campaigns for the figures behind a card and list_conversations for the unanswered enquiries.NoYesNot declaredNo
list_amazon_shipping_templatesList the seller's Amazon shipping templates on ONE store — each template's id (the value Amazon takes) and name (as typed in Seller Central), read from Amazon's seller-specific product type schema through any category mapped to a product type. Templates exist per store (amazon.de has its own). When Amazon names none for this seller, templates is empty and note says so: templates are created in Seller Central only (no API creates or edits them), and until one is assigned Amazon applies the account's default shipping settings. Needs a category mapped to an Amazon product type (update_category) and a listing marketplace on the Amazon connection; no arming. Read-only: it changes nothing. Then assign one with set_amazon_shipping; use get_amazon_fields for the other product type fields.NoYesNot declaredYes
list_brandsList this workspace catalog brands with id, name, description and website. Use a brand id here as the brandId for create_product/update_product, or as the search_products brand filter.NoYesNot declaredNo
list_categoriesList this workspace catalog categories as a flat array, each with id, name, slug, parentId (null for a root category), description, googleProductCategory, imageUrl, translations and marketplaceCategories (the Prom, Rozetka, OLX, Amazon and Google Merchant category ids already linked, each as { id, label } or null). Categories are workspace-global, not per warehouse. Use a category id here as the categoryId for create_product/update_product, or as the search_products category filter. Use get_category for one category's product and subcategory counts, and search_marketplace_categories to find a marketplace category id to link.NoYesNot declaredNo
list_channel_price_rulesList how each connected sales channel prices products, one row per channel and currency: rule null means the base price, otherwise percent, fixed and rounding are added to it. The currency null means the channel has not told the CRM its currency yet. Read-only. Use preview_channel_price_rule to see what a change would do, and get_product_pricing for one product.NoYesNot declaredNo
list_channel_productsList the products that are on one marketplace, with each listing external id, what the marketplace last reported about it (`presence`, valid only when `observedAt` is set — null `observedAt` means the marketplace has never been asked about that listing, not that it is absent; Prom is reconciled every 15 minutes, other channels only when a sync or publish runs), whether the workspace paused syncing it, its price and stock. Also returns the honest totals over the whole channel and the ACTIVE products that have no listing there at all (the 'did not match by SKU' list), which is usually the answer when a push updated fewer products than expected. Pages by name: the first 40 by default, pagination { page, perPage, total, hasMore } says whether to read on (the totals and the unmatched list cover the whole channel on every page). Use check_channel_readiness for why a product would be refused and get_channel_sync_report for when each product was last sent.NoYesNot declaredNo
list_content_channelsList the social channels this workspace can publish posts to — Telegram channel, Instagram, Facebook page, LinkedIn, Threads, Viber channel — with, per channel, whether it is ready, where it posts (destination), its public address (profile: profileUrl, publicFeedUrl — a public Telegram channel reads without signing in at t.me/s/<name>, older posts via ?before=<post id> — and readableBy: anyone, login_required or not_public), its text limit (maxTextLength) and, when not ready, the setup step the person must do in Obriym. Open the profile with your own browsing to read every post the channel already has, including ones written outside Obriym. Also returns now (the current time on the workspace's clock) and the workspace time zone — build schedule_content_post times from them — the image rules, and publishingEnabled: whether the workspace owner allows AI clients to publish or schedule. Read-only. Call it before create_content_post and only target ready channels.NoYesNot declaredNo
list_content_localesList the languages this workspace writes product content in: the base language (the text stored on products, categories and brands themselves), the extra languages the owner added, and the offered set — every language the CRM shows as a translation tab. Each entry is an ISO 639-1 code with its English name. Read-only. Call it BEFORE writing any translation (upsert_product_translation, upsert_category_translation, upsert_brand_translation) and write only offered languages; never write the base language as a translation.NoYesNot declaredNo
list_content_postsList the workspace's social posts, newest first, 20 per page: id, working title, status (draft, scheduled, publishing, published, partial, failed), channels, scheduled and published times. Filter by status or by part of the title. Read-only. Use get_content_post for one post's texts and per-channel results; use it to check what is already scheduled before planning more posts.NoYesNot declaredNo
list_conversationsList customer conversations across every connected channel (Instagram, Messenger, WhatsApp and comments, Telegram, OLX, Prom, eBay, Threads replies, the B2B portal, buyer order pages …). One row per lead and channel, newest first: { leadId, leadName, channel, lastMessageAt, lastMessageText (first 300 characters), lastDirection (inbound = from the customer), awaitingReply (the customer wrote last) } plus pagination { page, perPage, total }. Open conversations only — converted or disqualified leads and closed threads are left out. Filter by channel, by awaitingReply, or by a text match on the customer's name or last message. Read-only: replies are written by a person in the CRM Inbox, this server cannot send messages. Use get_lead_conversation to read one thread's messages and get_lead for the lead card.NoYesNot declaredNo
list_customersList CRM customers: companies that bought — a purchase order (processing, ready to ship, shipped, delivered or refunded, or with a settled payment) or a won deal that never became an order. Filter by health, lifetime-value bucket, owner, name search or minimum won deals; sorted by lifetime value and paginated. Returns summary rows (id, name, health, lifetimeValue = completed-order revenue plus won deals without an order, purchases = purchase orders plus won deals without an order, repeat = two or more purchases, lastPurchaseAt, wonDealsCount = every won deal, lastActivityAt, owner) plus pagination { page, perPage, total }. Read-only. Use get_customer to fetch one customer's detail by company id; use list_people_customers for people who bought without a company (shop buyers).NoYesNot declaredNo
list_ebay_fulfillment_policiesList the eBay shipping (fulfillment) business policies the seller has on each eBay site the connection sells on: fulfillmentPolicyId, name, freeShipping, shippingCost of the first domestic service (null for CALCULATED shipping), costType, handlingTime, domestic and international services, ship-to regions, and isDefault — the connection default. productCount is how many products chose the policy themselves; staleAssignments are product choices pointing at a policy eBay no longer has. Reads the stored copy; a site never read before is read from eBay, and refresh true reads eBay now. Reads only. Use a fulfillmentPolicyId from here with set_product_ebay_fulfillment_policy, bulk_set_ebay_fulfillment_policy or set_ebay_default_fulfillment_policy; for one product's policy use get_product_ebay_fulfillment_policy.NoYesNot declaredYes
list_economic_operatorsList the workspace's GPSR companies — the manufacturers and EU responsible persons marketplaces ask for (Amazon takes them as the EMAIL of a record the seller created in Seller Central). Each has id, name, email, phone, website and address. Assign them to a brand or supplier with assign_economic_operators; a product takes each role from its brand, else its supplier. Read-only.NoYesNot declaredNo
list_lead_sourcesList this workspace's lead sources (built-in plus custom), with each source's key, label and active state. Pass includeInactive to also return archived sources. Use set_lead_sources to add or archive a source; use a source key here as the source filter for search_leads.NoYesNot declaredNo
list_listing_jobsList the listing automation's queue on a one-item-per-listing marketplace (Vinted): listings waiting to go up (after a sale, after a restock, on schedule, or a refresh), with the product, when each is due and its state (pending, waiting_stock, waiting_delete, running) — or, with scope history, what was done, skipped, cancelled or failed and why. Paginated with a real total. Read-only. Use cancel_listing_jobs to cancel waiting ones and get_listing_automation for the settings.NoYesNot declaredNo
list_marketplacesList every marketplace connected to this workspace with its setup state, health, last activity, any current sync error with `problem` (its kind, whether a person must reconnect the account, and what to do), `partialFailure` ({ failed, sent, sample, whatToDo }) when the last run reached the marketplace but part of it was refused (health stays active for that, so check it), orders revenue per currency, leads, product counts on the channel and how many imported products are waiting to be reviewed. advertising: true marks a channel where nothing is sold (Google Merchant), so its zero revenue is structural. Answers 'which channels do I sell on and is anything broken'. Takes no arguments. Use get_marketplace for one channel in detail, list_channel_products for what is on it, and check_channel_readiness for what it will refuse.NoYesNot declaredNo
list_ordersList this workspace's orders, filtered by status/customer/created-date and paginated. Returns summary rows (externalId, status, currency, totalAmount, itemCount, timestamps, shipByAt: nullable ISO ship-by deadline) plus pagination { page, perPage, total }, newest first. Use get_order to fetch one order's full detail (line items, payments, shipments, returns) by externalId.NoYesNot declaredNo
list_people_customersList people (CRM contacts) who bought without a company — shop buyers: a purchase order without a company (processing, ready to ship, shipped, delivered or refunded, or with a settled payment) or a won deal of theirs without a company that never became an order. A company's purchases never count for the person who represents it. Filter by health, lifetime-value bucket, repeat (two or more purchases) or search over name, email and phone; sorted by lifetime value and paginated. Returns rows (id = contact id, firstName, lastName, email, phone, health, lifetimeValue, purchases, repeat, firstPurchaseAt, lastPurchaseAt, lastActivityAt) plus pagination { page, perPage, total }. Read-only. Use get_person_customer for one person by contact id; use list_customers for companies.NoYesNot declaredNo
list_pipeline_stagesList this workspace's pipeline stages in order, with each stage's id, name, kind, default probability, WIP limit and position. Use configure_pipeline to change a stage, and the stage id here as the stageId for create_deal / transition_deal.NoYesNot declaredNo
list_published_postsList what this workspace has already published to its social channels, newest first: per post the exact text each channel got (hashtags included), the channel, permalink, publishedAt, title, contentPostId and productId, plus per channel the publishing rhythm (lastPostedAt, postsLast7Days, postsLast30Days, medianGapHours, nextScheduledAt, scheduledCount) and, in sources, the channel's public address (profileUrl, publicFeedUrl) with a note. Only posts published through Obriym are listed. Posts typed directly into the network are not stored here — before planning, compare against BOTH this list and the channel itself: open sources[].publicFeedUrl or profileUrl with your own browsing to read everything posted there (a public Telegram channel reads at t.me/s/<name>; LinkedIn and Instagram may need a login; a Viber channel is read in the Viber app; a private channel cannot be read from outside). Never claim the channel had no other posts, and say so when a channel cannot be read. Use it before planning or writing new posts: avoid repeating a topic, product or phrasing, and use the rhythm to choose dates that keep a steady flow; then create_content_post and schedule_content_post. Filter by channel or by days (YYYY-MM-DD on the workspace's clock), 20 per page. Read-only. Use list_content_posts for drafts and scheduled posts, get_content_post for one post's per-channel results.NoYesNot declaredNo
list_suppliersList the workspace's suppliers: id, name, status (active or archived), the currency they invoice in and how many products each covers (productCount). Read-only. Use it as the id source for a {kind:'supplier'} scope of preview_bulk_price_change and apply_bulk_price_change — 'raise every Sipec product by 5%'. Categories, brands and warehouses come from list_categories, list_brands and list_warehouses.NoYesNot declaredNo
list_warehousesList this workspace warehouses with id, name, description, phone, address (the street line), country (ISO code), city, postalCode, workingHours (free text) and pickupEnabled (whether the warehouse is offered as a self-pickup point). A product lives in at most one warehouse, and the warehouse decides the inventory-tracking default and which sales channels new products are listed on. Use a warehouse id here as the warehouseId for create_product.NoYesNot declaredNo
list_workspacesList every workspace the connected user belongs to (id, name, role) and mark which one this connection currently operates. OAuth sign-in connections only. Use select_workspace to switch.NoYesNot declaredNo
preview_amazon_listing_contentAsk Amazon whether it would take the photos, GPSR contacts, texts, safety documents, shipping settings and missing listing data of up to 25 products on their EXISTING Amazon offers — Amazon's own dry run (VALIDATION_PREVIEW), which changes nothing. Per product: status (ready = Amazon would accept; nothing = nothing to send, see skipped; blocked = no offer to write to, see reason: noListing, removedFromChannel, syncPaused, listingNotFound, variationParent; rejected = Amazon refused it, see issues in the marketplace's language; failed = the call failed), the attributes it would send, filled (what the attributes part fills, by key and the store's own title), stillMissing (what this store's product type requires and nobody has answered: set it with set_amazon_field_values, keys and values from get_amazon_fields), untranslated (what the store lacks and the CRM knows only in another language: write it with upsert_product_translation, or set_channel_texts for the title and points) and skipped (noImages, noManufacturer, noResponsiblePerson, noTexts, noDocuments, noShipping; noAttributes = this store already shows everything the CRM could fill; colorFamilyUnknown = the colour's name goes, but which of Amazon's colour families it is cannot be told from it: set color.standardized_values on the product with set_amazon_field_values; the product type does not take that attribute: textsNotInSchema, documentsNotInSchema, templateNotInSchema, handlingNotInSchema; templateNotInStore = the template is not one of this store's; shippingNotMfn = Amazon ships the offer itself; handlingNoQuantity = no tracked stock to carry the handling time). GPSR companies are set on the brand or supplier (assign_economic_operators), Amazon texts with set_amazon_listing_texts, safety documents with set_product_safety_documents, shipping with set_amazon_shipping. Needs a listing marketplace chosen on the Amazon connection; no arming. Then send with update_amazon_listing_content. Use inspect_amazon_listingNoYesNot declaredYes
preview_bulk_price_changeDry run of a bulk price change — step 1 of 2; nothing is written. Give a rule (percent, fixed, fromCost, discount, endDiscount, compareAtMarkup, compareAtClear), a scope (a named category, brand, supplier, warehouse or model, or up to 100 explicit product ids) and optionally a target (the product's price, a price-list currency, or the purchase cost). Returns totalItems (how many products would change), a sample of up to 10 with from/to, old price and cost, belowCost (how many would sell below their cost), skipped grouped by reason (no price, no cost, no rate, unchanged, …), the currency, and a digest. Always show the person the counts, the sample, the skipped reasons and any belowCost warning BEFORE applying. Then call apply_bulk_price_change with the SAME rule, scope and target and this digest. Ids come from list_categories, list_brands, list_suppliers, list_warehouses (a category includes its sub-categories only with includeSubcategories) and search_products. Read-only and repeatable.NoYesNot declaredNo
preview_channel_price_ruleDry run of a price rule for one sales channel in one currency, step 1 of 2; nothing is written. A rule prices every product on the channel from its base price (price + percent, then + fixed, then rounding) and moves with the base price; a product with its own price on the channel keeps that price. Pass rule null to go back to the base price. Returns how many products would change, how many have their own price, how many have no price in that currency, how many would sell below cost, sample rows before and after, and the digest set_channel_price_rule needs. Show the person this result before saving. Advertising channels (Google Merchant) cannot have a rule.NoYesNot declaredNo
preview_channel_stock_limitDry run of a channel's maximum published quantity per SKU; nothing is written or sent. Optional productId targets ONE SKU: inherit true with maxQuantity null restores the channel rule; otherwise positive maxQuantity overrides it and null explicitly means unlimited. Without productId, positive maxQuantity sets the global ceiling and null removes it. Returns product counts (total, changed, untracked, paused), a truncation flag, before/after sample quantities and a signed previewToken valid for 15 minutes. Show the person these numbers, then use set_channel_stock_limit with the SAME platform, maxQuantity and token. Physical stock and stock-write permissions stay unchanged.NoYesNot declaredNo
preview_google_merchant_productsShow, for 1 to 25 products, the exact body the Google Merchant push would send for each one — title, description, link, image links, price, availability, identifiers and custom labels — or the reason it would be held back (blocker: no_url, no_title, no_price, no_image, no_translation, not_shoppable, no_feed_label). It walks the same collect step and the same builder as the real push, so it cannot differ from what Google would receive. Local and read-only: no Google call, nothing is sent or stored, and it needs no arming. A product that is not an active, unpaused member of the Google channel is listed in notOnChannel (set_channel_membership adds it). Returns { adapterId, adapterName, feedLabel, currency, contentLanguage, items, notOnChannel }. Use check_channel_readiness for the whole channel's blockers and push_google_merchant_catalog to actually send; fix a blocker with update_product, upsert_product_prices or upsert_product_translation and preview again.NoYesNot declaredNo
preview_google_shopping_campaignDry run of a Google Shopping campaign, step 1 of 2: the very request create_google_shopping_campaign would send, validated by Google with validateOnly — nothing is created in the ad account. Returns { currency, payload } or Google's own refusal (a duplicate name above all). It does record that a dry run happened, which is the evidence the owner needs before arming campaign creation on the Ads page; it arms nothing and needs no owner switch. Needs a signed-in connection with the ads:write scope and a role that works with ads; an API token is refused because it carries no role. Show the person the payload before creating. Idempotent. Use list_ad_accounts for the account and currency, and create_google_shopping_campaign for step 2.YesNoYesYes
preview_listing_automationDry run of the listing automation on a one-item-per-listing marketplace (Vinted), from the CRM's own data — nothing is sent to the marketplace. Counts live listings whose product has another unit (they would be listed again after a sale), listings of the last unit (they would wait for stock), listings of products whose stock the CRM does not count (never listed again), and sold or removed products still in stock (list them yourself), with sample names. Running it records that a dry run was done, which update_listing_automation needs before it may turn a behaviour on; show the person these numbers first. The result echoes the workspace.YesNoYesNo
publish_amazon_listingsCreate Amazon listings for up to 25 products — a REAL publication on the seller's Amazon account. Each product runs the full check again (Amazon's dry run included) and is refused with Amazon's own sentences if anything changed; a product whose barcode Amazon already knows becomes an offer on that existing item. Run check_amazon_readiness first and pass only ready products. Refused until the owner switches on AI publishing, and while listing creation is not armed on the Amazon connection. Returns created (with the ASIN or SKU and, in submitted, the price, currency, quantity and fulfilment the listing was sent with — quantityOmitted says why no quantity went out: stockNotTracked or stockUnknown; an FBA offer's quantity is Amazon's own), failed (reason, details) and notAttemptedIds. created means Amazon ACCEPTED the submission for processing, not that the listing is live or buyable: Amazon finishes it asynchronously, so check the outcome later with inspect_amazon_listings and never tell the user a listing is live from this result alone. Not idempotent: a product already listed fails with alreadyListed. The result echoes the workspace.YesNoNoYes
publish_amazon_variation_familyThe model's active articles become ONE listing with variations on one Amazon store — Amazon's "variation family"; call it a model with variations when talking to the user: a parent whose SKU is the model's code (no price, no quantity) and a child listing per article, varying by colour and/or size — the theme is chosen from what the Amazon product type declares. An article not yet on the store becomes a new child (action create); an article already sold there as a listing of its own — a model put on a store article by article, or copied from another store without its parent — is JOINED to the parent (action attach): only parentage_level, child_parent_sku_relationship and variation_theme are sent to it, by PATCH under the SKU Amazon knows it by (amazonSku when that differs), and its offer, photos and texts stay as they are. A listing Amazon already shows under this parent counts as in the family (skipped, listed). Every listing is first validated by Amazon (VALIDATION_PREVIEW); only when ALL of them would be accepted is the family created — a REAL publication: the parent first, then each child with its price and quantity. Run check_amazon_variation_family first. Refused until the owner switches on AI publishing, and while listing creation is not armed on the Amazon connection; joining listings already on the store changes live listings, so it is also refused (reason amazonContentPushDisarmed) while sending content to Amazon (contentPush) is not open for that store. Returns the same report with statuses created (a new child), attached (a listing joined to the parent), excluded (a listing left out, see check_amazon_variation_family), failed, notAttempted or notChecked; each child's offer names the price, currency, quantity and fulfilment it is submitted with (quantityOmitted says why no quantity goes out), and progress says what is left (createdNow, attachedNow, alreadyOnAmazon, remaining, notReached, excluded) and the one next step: done, callAgain, fixAndRetry, fixGapYesNoNoYes
publish_content_postPublish a post NOW to every ready channel of it — a real, public post in the business's name that followers see at once and that cannot be taken back from Obriym. A channel already published is never sent twice, so calling it again only retries the channels that failed or were not ready. Returns, per channel, the outcome (published, failed, already_published, skipped_not_configured with the setup step, skipped_empty, skipped_unsupported), the link to the live post and the network's error. Needs the owner's "AI may publish to social channels" switch (publishingEnabled in list_content_channels). Confirm with the person before calling it unless they asked for the publication outright. Echoes the workspace.YesNoNoYes
publish_ebay_draftsMake the eBay DRAFT offers of up to 25 products LIVE and buyer-visible — a real publication on the seller's account. The item and offer are refreshed from the current product first, so a price, title, photo or characteristic fixed after the draft was made is published too. Pass only products whose nextAction from inspect_ebay_listings is publish_draft. Returns done, failed (with reasons) and notAttempted. Never tell the user a listing is live unless it is counted in done. Refused until the owner switches on AI publishing. The result echoes the workspace.YesNoNoYes
publish_ebay_variation_listingPublish a product model on eBay as ONE live listing with variations: saves it first exactly like save_ebay_variation_listing (so eBay gets the articles as they are now), then publishes the whole group — a real listing buyers can purchase. Returns status: blocked (with issues — reason, message, skus — and nothing written), saved (a draft on eBay) or published, plus marketplaceId, listingId, listingUrl, publishedAt, variationCount, failed (variations eBay refused, by sku — nothing is published while any) and removedSkus (articles that left the listing). A partial/uncertain publication returns reason ebayVariationReconciliationPending with retryable=true. Retry the same operation to check eBay first; never withdraw or delete to repair it. Confirmed recovery updates CRM links without publishing again. Needs listing creation armed on the eBay connection, and is refused until the workspace owner switches on AI publishing. Confirm with the user before calling. The result echoes the workspace.YesNoNoYes
push_google_merchant_catalogSend this workspace's catalog, or just the products you name, to Google Merchant Center now — the same as the "Update now" button on the Google Merchant channel page. It is a REAL write to Google: products become or stay visible in Google Shopping. It runs only the product push the owner has ALREADY armed on the connection (otherwise it is refused) and only after the owner accepted Google's terms; it never arms anything and never changes settings. Refused until the owner switches on AI publishing. It is rarely needed: an hourly job sends the catalog anyway, so use it only when a fix must reach Google before the next run. To get one fixed product to Google immediately pass productIds (1 to 25): only those products are sent, and the result is { adapterId, adapterName, sent, failed, blocked, notOnChannel } — sent and failed (with Google's own message) name each product, blocked carries the readiness reason, notOnChannel lists ids that are not active channel members; this does not change the channel's last-run summary. Without productIds the whole catalog is sent, never-sent and changed products first, bounded by a time budget — if truncated is true, call it again. Returns { adapterId, adapterName, outcome } where outcome has pushed, failed, blocked, ready, total, truncated, lastSyncAt and failedSample (up to 5 refused products with Google's message). A failure that came back from Google carries reason (for example auth_expired) with details.needsReconnect and details.whatToDo: auth_expired, such as invalid_grant, means a person must reconnect the Google account on the adapter page, and retrying will not help. Use check_channel_readiness first to see which products would be withheld, and get_marketplace for the last run. Not idempotent. The result echoes the workspace.YesNoNoYes
quote_order_promotionValidate a known promo code against trusted cart prices, currency and buyer facts. Returns the CRM-calculated discount, net order total and delivery terms without creating an order or reserving a use. The code must be enabled for this connection's source; a personal or capture code also needs the same buyer email (or customer.externalId of a profile with it). reservesUse is false: nothing is claimed. A refusal returns a public reason (for example code_unavailable, email_mismatch, not_eligible, minimum_not_met). Promo codes run on the Team and Scale plans; on Free every code is code_unavailable. Never invent a code or discount. Then call create_order with promotion.code and promotion.expectedTotal; the CRM checks eligibility and capacity again.NoYesNot declaredNo
recreate_ebay_draftsDelete each product's eBay draft and create a fresh one from its current data, for up to 25 products. Needed only when a draft must move to another category or eBay site, or the reason is ebayDraftOfferMissing or ebayNoOfferId — ordinary edits are picked up by publish_ebay_drafts. A live listing is refused. If the delete succeeds but the new draft fails, that product is left with no draft and its failure says so. Refused until the owner switches on AI publishing. The result echoes the workspace.YesNoNoYes
remove_order_itemRemove a line item from an order. Recomputes the order total. Only allowed while the order is pending or confirmed; otherwise it fails with 409 CONFLICT "Order lines can only be changed while the order is pending or confirmed". Use get_order to find the order's externalId and the item's itemId. The result echoes the operating workspace.YesNoNoNo
retry_channel_stock_deliveryRetry the current saved stock policy for a channel or optional productId, without changing the rule or arming any direction. Read get_channel_stock_limit first, copy its current retryToken verbatim, and show its delivery/readiness reasons; disabled inventory writes stay disabled. Requires settings:write and the owner's AI marketplace-writes switch. Queues up to 500 eligible products; remaining products use scheduled reconciliation. A queued job is not marketplace acceptance. Confirm with the person first. Echoes the workspace.YesNoNoYes
save_ebay_variation_listingSave a product model on eBay as ONE listing with variations — every active article of the model on the eBay channel is a variation (its own SKU, price and stock; buyers choose colour and size). Writes the inventory items, the inventory item group and each variation's offer; a draft stays unpublished. When the listing is already LIVE this updates it in place: new variations, prices and texts reach buyers at once, and articles that no longer qualify leave it. Returns status: blocked (with issues — reason, message, skus — and nothing written), saved (a draft on eBay) or published, plus marketplaceId, listingId, listingUrl, publishedAt, variationCount, failed (variations eBay refused, by sku — nothing is published while any) and removedSkus (articles that left the listing). A partial/uncertain publication returns reason ebayVariationReconciliationPending with retryable=true. Retry the same operation to check eBay first; never withdraw or delete to repair it. Confirmed recovery updates CRM links without publishing again. Needs listing creation armed on the eBay connection, and is refused until the workspace owner switches on AI publishing. Idempotent. The result echoes the workspace.YesNoYesYes
save_economic_operatorCreate a GPSR company (manufacturer or EU responsible person), or update one when id is given. The email is the key Amazon matches against the record in Seller Central, so it must be exactly that record's email — ask the user, never guess one. Name is unique in the workspace. Then assign it with assign_economic_operators. The result echoes the workspace.YesNoNoNo
schedule_content_postSchedule a post to be published at a time, or cancel its schedule. Obriym itself publishes it to every ready channel of the post within about 15 minutes after that time — the AI client does not need to be running then. This is how regular publishing is set up: create several drafts, then schedule each. Needs the owner's "AI may publish to social channels" switch to schedule (see publishingEnabled in list_content_channels); cancelling (scheduledAt: null) does not. A post that is published or being published cannot be scheduled. Returns a warning when no channel of the post is ready yet. Echoes the workspace.YesNoNoYes
schedule_listing_publishesQueue products to be listed on a one-item-per-listing marketplace (Vinted) within the listing automation's publishing windows and daily limit, a few at a time, instead of all at once — the same as the channel page's "Publish on schedule". Each queued product later goes up as a new listing through the same publisher as the Publish button, so a product missing something is reported in list_listing_jobs, not sent. Requires the connection's publishing to be turned on by the owner, and the owner's switch for AI marketplace publishing in Settings → Integrations → Connect AI. A product already listed, already queued or not on the channel is counted, never listed twice. Returns { queued, alreadyListed, alreadyQueued, notOnChannel }. Not idempotent beyond that guard. Echoes the workspace.YesNoNoYes
search_amazon_catalogFind whether a product already exists in Amazon's catalog on the workspace's listing marketplace — by barcode (EAN/UPC/GTIN), by ASIN, or by keywords. Returns up to 10 matches with asin, title, brand, the product type and the first photo. A barcode match means publish_amazon_listings makes an OFFER on that item rather than a new product. Reads Amazon, never writes. Use search_products for the CRM's own catalog.NoYesNot declaredYes
search_companiesList and search this workspace's companies, filtered by industry/status/owner, sorted and paginated. Returns summary rows (id, name, industry, size, status, owner, contactCount) plus pagination { page, perPage, total }. Use get_company to fetch one company's full detail by id.NoYesNot declaredNo
search_contactsList and search this workspace's contacts, filtered by company/owner/tag, sorted and paginated. Returns summary rows (id, firstName, lastName, email, phone, jobTitle, company, owner, tags) plus pagination { page, perPage, total }. Use get_contact to fetch one contact's full detail by id.NoYesNot declaredNo
search_dealsList and search pipeline deals, filtered by stage/owner/company/contact/stale and paginated. Returns summary rows (id, title, stage, amount, probability, owner, company, contact, next-action, isStale) plus pagination { page, perPage, total }. Use get_deal to fetch one deal's full detail by id.NoYesNot declaredNo
search_leadsList and search this workspace's leads, filtered by text/status/source/created-date/stale and paginated. Returns summary rows (id, name, contact, company, status, source, assignee, tags, next-action, isStale, timestamps) plus pagination { page, perPage, total }, newest first. Use get_lead to fetch notes, position and score for one lead by id.NoYesNot declaredNo
search_marketplace_categoriesFind the category id a marketplace uses, to link it to a catalog category. Read-only. Pass the platform (prom, rozetka, olx, amazon, google_merchant or etsy) and a query, or for OLX, Rozetka and Etsy a parentId to browse one level of the tree (no query and no parentId lists the top level). Sources differ: Google Merchant searches the bundled Google product taxonomy and needs no connection; Etsy searches Etsy's seller taxonomy, shared by every shop; OLX, Rozetka and Amazon ask the marketplace through the connected adapter (connected tells you whether one exists); Prom publishes no category directory, so only rubrics already seen on this merchant's own Prom listings are returned (partial tells you the list may be incomplete, note explains why). OLX and Etsy only accept a LEAF category: check isLeaf and keep browsing with parentId until you reach one. Results are candidates for the USER to choose from: when several fit, show them and ask, never pick one silently. Then pass the chosen id in marketplaceCategories of update_category or create_category.NoYesNot declaredYes
search_productsList and search catalog products (active unless status says otherwise: draft, archived or any), filtered by text (name or SKU), barcode (barcode or EAN/GTIN) or having none (withoutBarcode), category/brand/collection/model (productGroupId — the other colours and sizes of one model)/size/color/stock/tag/type, by price in a given currency (priceCurrency with minPrice/maxPrice, read through the product's price list) or having no price in it (withoutPriceIn), by being on or off a marketplace channel (channel, onChannel), or by supplier and the supplier's last stock report (supplierId, supplierStock), sorted by name, price, newest or popularity (units sold in the last 90 days), and paginated. Returns each product's catalog fields — price and prices per currency, stock (null when the shop does not count it; see trackInventory), availability, variant fields (productGroupId, color, size, material and the rest), attributes (every characteristic), category, brand — plus its model, warehouse and supplier by name and supplierOffers (what the supplier last said: quantity, restock date, purchase price, state), and pagination { page, perPage, total }. A full row is heavy: pass fields to receive only the parts you read (id is always included). Use get_product to fetch one product's full detail by id or SKU.NoYesNot declaredNo
select_workspaceRe-bind this OAuth connection to the workspace selected by the user. Takes effect on the next tool call. Use the organizationId returned by list_workspaces or by WORKSPACE_SELECTION_REQUIRED; never invent or guess it.YesNoYesNo
set_amazon_field_valuesSet or remove values of Amazon product type fields on ONE product, model or category (name exactly one id) — the attributes Amazon requires that are not product facts the shop shows on its site or other channels (Reparto, Tipo di chiusura, Capacità). A category's value is the default of every product in it, a model's is shared by every colour and size, a product's overrides both. Keys and values come from get_amazon_fields: for a choice, one of its values (or labels); a number as digits; a measure with a unit it lists. An attribute made of several values is set part by part under attribute.part (shirt_size.size_system): a part's value must be on its list, and one answer on the model serves every article; the CRM builds a size from each article's own size, so only a part it reported as unresolved needs an answer. Every value is checked against Amazon's schema first, and the whole call is refused, naming the fields, when a key is not one a person fills or a value cannot be taken. Write only what the user stated or what the product's facts (get_product) establish, in the marketplace's language. Saved in the CRM only: a new listing carries them; an existing offer is not changed. null removes a value, so the level below shows through again. Idempotent. The result echoes the workspace.YesNoYesYes
set_amazon_field_values_for_productsSet the SAME Amazon product type field values (item_form, number_of_items, unit_count, package dimensions …) on an explicit list of up to 25 products — set_amazon_field_values for each product, with the same checks against the Amazon schema of THAT product's type, so a product whose type does not take a key is refused for that key only. When every product shares the value, set it once on their model or category with set_amazon_field_values instead. Keys, kinds and allowed values come from get_amazon_fields (read it for one of the products). Saved in the CRM only: a new listing carries the values; an existing offer is not changed. null removes a value. Idempotent. Returns one result per product (saved, or the refusal naming the fields); products are independent, so some can succeed while others fail. The result echoes the workspace.YesNoYesYes
set_amazon_listing_textsSet ONE product's title and selling points for Amazon, in the language of the workspace's Amazon marketplace (amazon.it → Italian). The title keeps to 75 characters (the workspace's rule — a product whose own name is longer cannot be listed without it); up to 5 points of at most 500 characters. Write only what the user stated or approved, in the marketplace's language. title null with bulletPoints [] removes them; bulletPoints left out keeps the saved points, and Amazon then gets the product name and characteristics. Saved in the CRM only: a new listing carries them; an existing offer gets them through update_amazon_listing_content with parts ["texts"]. For a whole model (every colour at once, and the title of its Amazon parent) or for eBay, use set_channel_texts. Idempotent. The result echoes the workspace.YesNoYesNo
set_amazon_shippingAssign an Amazon shipping template and/or a handling time (the most days from order to dispatch, lead_time_to_ship_max_days) to ONE product, model or category (name exactly one id). Inherited like Amazon field values: a category's value is the default of every product in it, a model's is shared by every colour and size, a product's overrides both. The template is given by id or name from list_amazon_shipping_templates and is refused, with the available ones, when it is not one of that store's templates. The handling time is refused when the product type does not take it. null removes a value so the level below shows through; omit a field to leave it as it is. Saved in the CRM only: a new listing and an offer on an existing ASIN carry them, and update_amazon_listing_content with part shipping (dry run first with preview_amazon_listing_content) sends them to an offer already on Amazon, under the owner's content arming. With no template assigned nothing is sent and Amazon applies the account's default shipping settings; with no handling time Amazon keeps its own default. Merchant-fulfilled offers only — an FBA offer takes neither. Values are stored per language, so two stores sharing one (UK and Ireland) read the same template id and skip it where it is not listed; alsoReadBy names them. Idempotent. The result echoes the workspace.YesNoYesYes
set_brand_imageSet or remove the picture (logo) of ONE brand. Pass a public https image link in url (JPEG, PNG or WebP, at most 2 MB; a bigger file is refused, there is no resize) — Obriym stores its own copy and the previous picture is deleted only after the new one is in place. Pass url: null to remove the current picture. Idempotent in effect: repeating it leaves the same picture. Use list_brands to find the brand id. The result echoes the workspace.YesNoYesYes
set_category_imageSet or remove the picture of ONE category. Pass a public https image link in url (JPEG, PNG or WebP, at most 2 MB; a bigger file is refused, there is no resize) — Obriym stores its own copy and the previous picture is deleted only after the new one is in place. Pass url: null to remove the current picture. Idempotent in effect: repeating it leaves the same picture. Use list_categories to find the category id. The result echoes the workspace.YesNoYesYes
set_channel_membershipMark or unmark up to 100 products for one connected sales channel (prom, rozetka, ebay, olx, …). It changes what the CRM intends to send: on Prom and Rozetka the next feed pull adds or drops the product; on eBay it only makes the product a channel member — a listing exists only after create_ebay_drafts and publish_ebay_drafts. It never arms a sync. Adding picks up active products only. Returns { affected, skipped } — skipped were already in that state. Refused until the workspace owner switches on AI publishing. Idempotent. The result echoes the workspace.YesNoYesNo
set_channel_price_ruleSave a price rule for one sales channel in one currency, step 2 of 2, after preview_channel_price_rule. Send the SAME platform, currency and rule with that preview's digest; a digest from an older preview is refused. Applies to every product on the channel on its next update, wherever the owner has turned price updates on, and to new listings; it never turns price updates on. Requires the workspace owner's switch for bulk price changes in Settings → Integrations → Connect AI, which is off by default. rule null removes the rule. Idempotent. The result echoes the workspace.YesNoYesYes
set_channel_stock_limitSave or remove a channel's maximum published quantity per SKU after preview_channel_stock_limit. Send the SAME platform, optional productId, inherit and maxQuantity (product inherit true restores the channel rule; product null without inherit explicitly bypasses it), with that preview's token copied verbatim. A stale, expired or mismatched preview is refused: preview again and show the new result. Requires settings:write (owner/admin over OAuth or an explicitly scoped token) AND the workspace owner's AI marketplace-writes switch, off by default. Saves the rule, audits it, expires caches and schedules bounded stock delivery to this channel; remaining products reconcile through scheduled sync. A no-op queues no new delivery; use retry_channel_stock_delivery for a resend. Never changes physical stock, channel membership, paused products or armed write directions. Confirm with the person after showing the preview. Echoes the workspace.YesNoNoYes
set_channel_textsSet the listing words of ONE product or ONE model for a channel — amazon (title up to 75 characters and up to 5 selling points) or ebay (title up to 80 characters, no points) — in the marketplace's language, which the CRM picks from the channel's marketplace (pass locale only when it says the channel sells in several languages). Which title a listing gets: the product's own words, else its model's title plus its colour or size («DEMI Borsa duffle 40 L, Blu»), else the product's name in that language. A model's title is also the title of Amazon's variation parent and of eBay's listing with variations — set it once per model instead of per colour. Write from the product's facts (get_product) and what the user said — never invent a claim. Saved in the CRM: new listings carry them; an existing Amazon offer gets them with update_amazon_listing_content parts ["texts"], an existing parent with update_amazon_variation_parent. title null with bulletPoints [] removes them; bulletPoints left out keeps the saved points. Idempotent. The result echoes the workspace.YesNoYesNo
set_ebay_default_fulfillment_policySet the eBay connection's default shipping (fulfillment) policy for one eBay site, or null to remove it. Products without their own choice carry it in every new draft and when a draft goes live; LIVE listings keep the policy they have — change those with bulk_set_ebay_fulfillment_policy. The policy is checked against eBay's live list first; with no default, listings use the first policy eBay returns. Returns marketplaceId, previousFulfillmentPolicyId, fulfillmentPolicyId and the policy. Refused until the workspace owner switches on AI publishing. Idempotent. The result echoes the workspace.YesNoYesYes
set_google_merchant_labelsSet or clear Google's custom labels customLabel1 to customLabel4 on up to 100 products, models or categories, so ad campaigns can be split by your own groups ("season sale", "clearance"). This writes to the CRM only: the labels reach Google with the next hourly product push, and only if the owner armed that push — it never sends anything itself, never arms anything, and never touches the preview stamp. A product takes its own label, else its model's, else its category's (nearest ancestor). customLabel0 is derived from each product's markup and is refused. Omit a slot to leave it alone; null or empty clears it. Returns { set, cleared, targets }; an id not in the workspace refuses the whole call. Idempotent. Use preview_google_merchant_products to see the labels in the body, and push_google_merchant_catalog to send sooner. The result echoes the workspace.YesNoYesNo
set_lead_sourcesCreate or update a workspace lead source: set its label and active state by key (built-in or custom, lowercase_with_underscores). Idempotent — re-sending the same key updates it. Archiving the fallback 'other' source is not allowed. Use list_lead_sources to see current sources. The result echoes the operating workspace.YesNoYesNo
set_product_channel_priceSet — or clear — the price ONE sales channel gets for ONE product, instead of the product's ordinary price in that currency. Send price as a decimal string to set it (with an optional compareAtPrice, the old price, higher than price) or price null to remove the override so the channel gets the ordinary price again. Per platform and currency: Prom, Rozetka, eBay, Amazon, Shopify, WooCommerce, OLX or Google Merchant. Send only an amount the person stated. The new price reaches the channel the same way a price edit does — only where the owner armed price writes; on Amazon a price goes out only with the hourly push or sync_amazon_offers (pass the changed productIds to send them now). This is not the price-list row for a currency (upsert_product_prices). Idempotent; clearing a missing override is not an error. Returns { changed }. Read get_product_pricing first. Echoes the workspace.YesNoYesNo
set_product_ebay_fulfillment_policyChoose the eBay shipping (fulfillment) policy of ONE product, or with fulfillmentPolicyId null return it to the connection default. A product with no eBay listing stores the choice for its next draft. A draft or LIVE listing has its eBay offer updated in place — no relisting — when listing writes are armed on the eBay connection, and the offer is then read back to confirm; with listing writes off a live listing is refused and a draft stores the choice for go-live. Per-service shipping cost overrides tied to the old policy are removed (droppedShippingCostOverrides). Returns productId, sku, offerId, marketplaceId, previousFulfillmentPolicyId, newFulfillmentPolicyId, status (updated, unchanged, saved, unverified, failed), verified and error — tell the user a listing changed only when status is updated. Refused until the workspace owner switches on AI publishing. Idempotent. The result echoes the workspace.YesNoYesYes
set_product_price_tiersReplace ONE product's wholesale quantity breaks in ONE currency — 'from 12 units, 12.40 each'. The list you send becomes the whole set for that currency (at most 10; each quantity at least 2 and once; a bigger quantity must cost less per unit); an empty list removes all its breaks. The product must already be priced in that currency. Breaks apply to buyers outside the team (the customer portal and connected partners), never to the website or marketplaces, and the buyer gets the better of a break or their own discount. Idempotent. Returns { count }. Read get_product_pricing first. Echoes the workspace.YesNoYesNo
set_product_safety_documentsReplace ONE product's safety documents (EU GPSR) — the whole list: a document left out is removed. Each is a public https link to a PDF that marketplaces fetch themselves (Amazon's compliance_media), its kind (safety_information, user_manual, declaration_of_conformity, certificate) and the language it is written in. At most 10. Use only links the user gave — never invent a document. A new Amazon listing carries them; an existing offer gets them through update_amazon_listing_content with parts ["documents"]. Idempotent. The result echoes the workspace.YesNoYesNo
start_catalog_translationStart a bulk AI translation of products, step 2 of 2, after estimate_catalog_translation. The CRM translates from the workspace's base language into the given languages and fills only empty fields; a model is translated once for all its colours and sizes. It runs in the background, usually for up to a few hours, spends the workspace's AI credits and stops at the limit keeping what is done. Requires the workspace owner's switch for AI bulk translation in Settings → Integrations → Connect AI, which is off by default. Starting again replaces the previous translation. Follow it with get_catalog_translation_status. The result echoes the workspace.YesNoNoNo
stop_catalog_translationStop the workspace's bulk AI translation. Products already translated keep their text, and no further credits are spent. Idempotent: with nothing running it changes nothing. The result echoes the workspace.YesNoYesNo
sync_amazon_offersPush the CRM's current price and stock to the workspace's existing Amazon offers now; an hourly job does it anyway, so use it only when a change must reach Amazon before the next run. A price change — the product's own, its price list, or set_product_channel_price — reaches Amazon ONLY through this push (an instant update after an edit sends stock alone). Pass productIds after changing a set of products: their offers are looked up by SKU, which is far faster than the whole run; without productIds it is the same as the Amazon connection page's sync button and walks every offer on every store, which a single call often cannot finish. It runs only the directions the owner ALREADY armed (price push, stock push) and never arms anything: price only in the store's currency (with the product's Amazon channel price when one is set), stock only for products that track it and only for MFN offers (FBA stock is Amazon's). Offers Amazon shows on sale go first. A product taken off the channel or paused is skipped. Refused until the owner switches on AI publishing. Returns matched (product × store pairs found), updated (sent and accepted), unchanged (Amazon already showed these numbers), failed, priceBlocked (no price in the store's currency), truncated (the offers were not all read) and notAttempted (the call ran out of time before these: call again — sending the same numbers again changes nothing on Amazon). Amazon applies an accepted change asynchronously, so the offer can show the old price for a while; check with inspect_amazon_listings refresh=true. The result echoes the workspace.YesNoNoYes
sync_ebay_fulfillment_policiesRe-read the eBay shipping (fulfillment) policies from eBay for every site the connection sells on, or one marketplaceId, and refresh the copy the CRM keeps — after the seller created, renamed or deleted a policy in Seller Hub. Returns the same shape as list_ebay_fulfillment_policies; check staleAssignments: products whose chosen policy eBay no longer has will be refused at their next draft or go-live until another policy is chosen. Changes no listing and no choice. Use list_ebay_fulfillment_policies for an ordinary read.NoYesNot declaredYes
transition_dealMove a deal to a pipeline stage by its id. Closed-lost stages require a lostReason. Use search_deals for the deal id and list_pipeline_stages for the target stageId. The result echoes the operating workspace.YesNoNoNo
update_amazon_listing_contentSend the photos and GPSR contacts of up to 25 products to their EXISTING Amazon offers — a real write to the seller's live listings: Amazon's photos are replaced with the CRM's, the manufacturer and EU responsible person with the companies set on the product's brand or supplier, and — when asked for — the title and bullet points written for Amazon, the safety documents, the shipping template with handling time, and any listing data this store does not show yet. Nothing else on the offer changes (a partial patch). Run preview_amazon_listing_content first and pass only products whose status is ready. Refused until the owner switches on AI publishing, and while photo/GPSR updates are not armed on the Amazon connection. Returns the same rows as the preview, with status sent where Amazon accepted the patch; notAttempted lists products not reached in the time budget — call again with those ids. Never tell the user a change is live unless its row says sent; Amazon shows it to buyers within minutes. Idempotent: the same content again leaves the offer as it was. The result echoes the workspace.YesNoYesYes
update_amazon_variation_parentSend the parent of a model ALREADY on Amazon its title and selling points again — a REAL change on a live listing: the model's Amazon title and points (set_channel_texts with modelId), else its name in the marketplace's language. Replaces only item_name and bullet_point; nothing else a person set in Seller Central changes. Run check_amazon_variation_parent first. Refused until the owner switches on AI publishing, and while sending content to Amazon (contentPush) is not armed on the Amazon connection. Returns the same report with status sent, nothing or rejected. Idempotent. The result echoes the workspace.YesNoYesYes
update_brandUpdate fields on an existing catalog brand by id: name, slug, description, website and description translations. Provide a patch with at least one field; use list_brands first to find the id and current values. Renaming a brand changes the vendor name sent to marketplaces, so rename only on the user's explicit request; the name is never translated. Translations REPLACE the whole set when sent (an empty array removes them all) and are left untouched when omitted — translate only the brand's own description, add no facts. The result is the updated brand and echoes the operating workspace.YesNoNoNo
update_categoryUpdate fields on an existing catalog category by id: name, parent, slug, description, Google category, marketplaceCategories and translations. Provide a patch with at least one field; use list_categories first to find the id and current values. The slug is normalized to Latin. The parent must exist in this workspace and cannot create a loop. Translations REPLACE the whole set when sent (an empty array removes them all) and are left untouched when omitted — translate only the category's own name and description, add no facts. marketplaceCategories ({ prom, rozetka, olx, amazon, google_merchant, etsy }) links marketplace category ids: a string sets one, null clears it, an omitted platform is left untouched. Look ids up with search_marketplace_categories first and never guess them; the format is always checked on write, and against the marketplace while it is connected (OLX and Etsy must be a leaf category; a Google id must exist in the Google taxonomy). The result is the updated category and echoes the operating workspace.YesNoNoNo
update_companyUpdate fields on a company by id. Provide a patch with at least one field. representationState is explicit and never inferred from contacts. primaryContactId can select an existing contact already linked to this same non-individual company; send null to clear it. Use search_companies first to find the company id. The result echoes the operating workspace.YesNoNoNo
update_contactUpdate fields on a contact by id. Provide a patch with at least one field. Use search_contacts first to find the contact id. The result echoes the operating workspace.YesNoNoNo
update_content_postChange a draft or scheduled post: working title, main text, hashtags, format, or its channels and their own texts (sending channels replaces the whole set). Fields you omit stay as they are; images cannot be changed here. Refused for a published post — a post already live on a network cannot be changed from Obriym; create a new one instead. Refused while the post is being published. Repeating the same call changes nothing further. Echoes the workspace.YesNoYesNo
update_leadUpdate fields on an existing lead by id. Provide a patch with at least one field. Use search_leads first to find the lead id. The result echoes the operating workspace.YesNoNoNo
update_listing_automationChange the listing automation of a one-item-per-listing marketplace (Vinted). Send only the fields to change; the rest stay as saved. Changing when it lists (relistTiming, windows, maxPerDay) and turning a behaviour off work with the settings scope alone; turning relistAfterSale, relistOnRestock or the refresh ON also needs a dry run first (preview_listing_automation) and the workspace owner's switch for AI listing automation in Settings → Integrations → Connect AI, which is off by default. Once on, the CRM creates (and, for a refresh, takes down) listings on the live marketplace account by itself, only for products whose stock it counts. It never turns on the connection's own publishing: when that is off, the result carries the warning publishing_not_armed and nothing is sent until the owner turns it on. Turning a behaviour off cancels its waiting listings. Pass expectedVersion from get_listing_automation to avoid overwriting a change made meanwhile. Returns the saved settings, what was turned on and off, cancelled and warnings. Echoes the workspace.YesNoNoYes
update_order_itemUpdate a line item on an order (quantity, unit price, discount, name, or SKU). Recomputes the order total. Only allowed while the order is pending or confirmed; otherwise it fails with 409 CONFLICT "Order lines can only be changed while the order is pending or confirmed" (stock is committed from processing on). Use get_order to find the order's externalId and the item's itemId. The CRM recalculates shipping eligibility from the saved priced lines; a separate whole-order discount may require source-confirmed amount correction. The result echoes the operating workspace.YesNoNoNo
update_order_statusMove an order to a new status by externalId. Only valid transitions from the current status are allowed. Use list_orders to find the externalId and get_order to see the current status. The result echoes the operating workspace.YesNoNoNo
update_productUpdate fields on an existing catalog product by id — including status, to publish a draft or archive a product. Provide a patch with at least one field; use get_product first to see the current values. A changed stock number is applied as a relative movement and recorded in the product stock history; prefer adjust_stock when the intent is a correction with a reason. A bundle's stock is derived from its components, so a stock sent for a bundle is refused; sending bundleItems replaces its composition. A product's type (simple or bundle) cannot change after creation — create a new product instead — and a product that is a component of a bundle that is not archived cannot be archived. A change to price, stock, tracking or status is pushed to every connected sales channel. For a product that belongs to a model, a changed shared field (name, description, category, brand, unit, keywords, videos, material, pattern, gender, age group, size type, condition) is applied to the whole model and every article of it; productGroupId null detaches the product from its model, and the code of another model moves it there. The result echoes the operating workspace.YesNoNoNo
update_product_imagesReorder, caption or REMOVE the photos a product already has. Send the photos as they should be afterwards: the order given is the display order (the first is the main photo), each alt replaces the stored caption (empty clears it), and a current photo you leave out is removed from the product (the stored file is kept, exactly as when a person removes a photo in the product form). Returns the new list and how many were removed. It never adds photos: every url must already belong to the product, otherwise the call is refused and nothing changes — use add_product_images to add. Idempotent: the same call twice leaves the same result. Saves through the product form's own operation. Call get_product first and copy the urls exactly. The result echoes the workspace.YesNoYesNo
upsert_brand_translationSet a brand's DESCRIPTION in ONE language, leaving every other language as it is; null or an empty description removes that language. Translate the text yourself — Obriym does not translate for MCP clients. Never translate a brand NAME: marketplaces match it verbatim. Call list_content_locales first; the workspace's base language is refused (use update_brand for it). update_brand's translations field REPLACES the whole set, so use this tool to change a single language. Idempotent. Returns a warning when the CRM does not show that language yet. Echoes the workspace.YesNoYesNo
upsert_category_translationSet a category's name and/or description in ONE language, leaving every other language as it is. Translate the text yourself — Obriym does not translate for MCP clients. Call list_content_locales first; the workspace's base language is refused (use update_category for it). A language needs a translated name before it can hold a description; description null clears it. Idempotent: repeating the same call changes nothing. update_category's translations field REPLACES the whole set, so use this tool to change a single language. Returns a warning when the CRM does not show that language yet. Echoes the workspace.YesNoYesNo
upsert_product_attributesAdd or update characteristics (name, value, unit) on ONE product without removing the ones not named. Names match case-insensitively; a new name is appended. For eBay, use the item-specific names exactly as inspect_ebay_listings reported them (details.aspects), in the eBay site's own language — 'Marca' on ebay.it, not 'Brand'. Never invent a value: ask the user. Saves through the same product-card operation as the CRM form, with a version check (on CONFLICT re-read and retry). On a product that belongs to a model: when it is the model's only article, the characteristics are the model's and change for the model; when the model has other articles, a value set here applies to this article only — a characteristic shared by every article is changed on the model card. Idempotent. The result echoes the workspace.YesNoYesNo
upsert_product_pricesAdd, update or REMOVE the price-list rows of ONE product — the price it sells at in another currency, for example EUR for an eBay site — keeping its other currencies and its own workspace-currency price. Send only an amount the user stated: never a converted or estimated price; to drop a currency send its code in remove. The product's own currency is refused; change that with update_product's price. A price for one channel only is set_product_channel_price; see all of a product's prices with get_product_pricing. Saves through the same product-card operation as the CRM form, with a version check (on CONFLICT re-read the product and retry), and the new price reaches connected channels like a manual edit. Idempotent. The result echoes the workspace.YesNoYesNo
upsert_product_translationWrite ONE language of ONE product's translation — title, description, keywords, colour, material, pattern and its characteristics (attributes: keyed by the characteristic's name exactly as get_product returns it, each with a translated name and/or value) in that language — keeping the other languages and every field not named. A characteristic name the product does not have is refused with the list of its names. Call list_content_locales first and write only an offered language, never the base one. Use it when a marketplace publishes in another language (ebay.it reads Italian, Prom and Rozetka read uk and ru) or inspect_ebay_listings reports a title over 80 characters in the site's language. Translate the product's OWN text from get_product and add no fact it does not state; show the user the text before writing. For a product that belongs to a model the translation is the model's, so every article of it changes. Saves through the CRM's own Переклади tab operation with its version check (on CONFLICT re-read the product and retry). Idempotent. The result echoes the workspace.YesNoYesNo
withdraw_amazon_listingsTake up to 25 products off sale on Amazon: the offer's quantity becomes 0 on every marketplace it exists on (nobody can buy it) — the offer is NOT deleted and keeps its history and reviews in Seller Central — and the product leaves the CRM's Amazon channel so the hourly push does not restore the quantity; adding it to the channel again (set_channel_membership) brings it back. Not gated on the owner's arming (taking an offer down never is), but refused until the owner switches on AI publishing. Returns per product: withdrawn, blocked (noListing, listingNotFound, variationParent, fulfilledByAmazon, noOffer = Amazon holds the item with no offer on it, so there is nothing to take off sale), rejected (Amazon's sentences) or failed; notAttempted to call again. With marketplaceIds only those stores are zeroed and the other stores keep selling; the product leaves the CRM's Amazon channel only when no store is left selling. The result echoes the workspace.YesNoNoYes
withdraw_ebay_listingsEnd the LIVE eBay listing of up to 25 products: they stop being buyer-visible and their offers return to drafts — nothing is deleted, and publish_ebay_drafts can put them back. Needs the owner's AI publishing switch. Returns done, failed and notAttempted. The result echoes the workspace.YesNoNoYes
withdraw_ebay_variation_listingEnd a model's LIVE eBay multi-variation listing: every variation leaves sale at once. The group and its offers stay on eBay as a draft, so publish_ebay_variation_listing restores the same listing. Works while listing creation is disarmed (a way off eBay is never locked), but is refused until the workspace owner switches on AI publishing. Returns withdrawn. The result echoes the workspace.YesNoNoYes

Details

Registry status
Active
Published
Nov 13, 2026
Updated
Nov 13, 2026
Repository
Not given
Categories (suggested)
E-commerceSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
GDPR
Not declared

Are you the operator? Claim this listing