activate_webhook_endpoint_secret
ChatGPTPromote the staged pending secret to active. Subsequent deliveries are signed with it.
answer_hsa_shopper_question
ChatGPTReturn Redo's approved shopper-facing answer for an HSA/FSA question. Use this when a merchant needs wording for a shopper about what an HSA/FSA is, how long a Letter of Medical Necessity lasts, how to qualify, the 30–40% effective savings, paying without the card, a balance that does not cover the order, subscriptions, reimbursing a past purchase, using their own doctor's letter, the store return policy, a missing checkout option, a declined card, a letter that was not approved, a denied or incomplete claim, a missing letter or receipt, buying for a spouse or child, not having an HSA/FSA, or sales tax and two HSA/FSA cards. The answer is the source of facts, not a script. Reply in your own words and cover those facts. Do not add claims that are not in the answer. When disclaimer is present, include that text unchanged after your reply. Do not call the savings a discount, do not promise eligibility, and do not say the shopper will qualify. Where the answer says to confirm with Redo Support or the plan administrator, do not promise an outcome. If the question is not one of these ids, do not call this tool and do not improvise. This store's performance and onboarding are separate tools. Diagnoses, fees, payouts, and payment-rail problems that are not in this list go to Redo Support.
approve_return
ChatGPTApprove a return so that the customer can proceed with shipping items back. Before calling this tool, you MUST: (1) call get_return to verify the return exists and check its current status, (2) confirm all items are in 'open' status — only open items can be approved, (3) confirm with the user that they want to approve the return. Optionally, you can specify per-item configuration (e.g., whether the customer must ship each item back). If no items are specified, all items are approved with default settings (ship back required). You can also include customerNotes to share a message with the customer upon approval. For customerNotes: ONLY include the user's exact words if they provide a message. NEVER generate or fabricate customerNotes — omit the field if the user declines or doesn't provide one.
approve_returns
ChatGPTApprove returns that are waiting for review, so each customer can send their items back. Starts a run and returns it at once; the returns are worked through in the background. Returns null, and starts nothing, if any id is not a return owned by the caller.
ask_redo
ChatGPTAsk the Redo support AI any question about the merchant's account, settings, policies, or platform features. Also use this for ANY analytics question — return rates, revenue, exchanges, upsell, product/variant performance, customer return behavior — and for generating or exporting custom analytics reports or CSVs. The AI will ask clarifying questions and require confirmation before running a report. Use this when the user's question cannot be answered by the other return-specific tools. Use threadId to continue an existing conversation, or omit it to start a new thread.
billing_bill
ChatGPTGet one new-system bill with invoice lines and revenue share. Missing and other-store IDs return null.
billing_bills
ChatGPTList new-system merchant bills, newest first, including balances and charges for accounting reconciliation.
billing_charges
ChatGPTPage through the merchant's individual signed charge rows across all bills, optionally filtered by bill ID.
billing_transactions
ChatGPTPage through the merchant's payment and credit transactions across all bills, optionally filtered by bill ID.
bin_inventory_level
ChatGPTFetch a single bin-level inventory record by its id. List records with binInventoryLevels or StorageLocation.binInventoryLevels.
bin_inventory_levels
ChatGPTList bin-level inventory: the quantity of each product in each storage location, newest first. Pass storageLocationId for one bin's contents, sku for every bin holding a product, or both. Add locationId to restrict either to one warehouse. Pass inStock: true to skip empty and negative rows.
calendar_event
ChatGPTFetch a calendar event by id. Returns null when this store has no event with that id.
calendar_event_catalog
ChatGPTThe calendar's grammar: event types, the agenda item kinds each accepts, the input key that writes each kind, and how the Commerce Agent uses them. Read it before creating or editing calendar events.
calendar_events
ChatGPTCalendar events on this store, earliest start first unless orderBy says otherwise. To list the events overlapping a window, pass its start as endsAfter and its end as startsBefore. Read calendarEventCatalog for what each event type and agenda item kind does.
campaign
ChatGPTFetch a single campaign by its id. Ids from earlier versions of the Redo API are also accepted.
campaigns
ChatGPTList campaigns, optionally filtered by name, channel, or when they finished sending.
cancel_campaign
ChatGPTStop an in-progress campaign. Returns null if no campaign with that id is owned by the caller.
cancel_purchase_order
ChatGPTCancel a purchase order, releasing it from incoming stock. Returns null if no purchase order with that id is owned by the caller. Cancelling an already-cancelled order is a no-op. Throws a 409 CONFLICT error (with an extension code of PURCHASE_ORDER_CLOSED or PURCHASE_ORDER_HAS_RECEIVED_ITEMS) if the order can no longer be cancelled.
carrier_shipment_tracker
ChatGPTFetch tracking for one purchased package by its carrier shipment tracker id. Redo checks the carrier about every 4 hours, and every hour once the package is out for delivery, until the package is delivered, returned, or cancelled, or 21 days after purchase. There are no tracking webhooks yet, so poll. Labels from carriers that only push updates (Sendcloud, WeGrow, NZ Post) keep the status they had at purchase.
carrier_shipment_trackers
ChatGPTList tracking for purchased packages, by shipment, tracking number, status, or recent change. Redo checks the carrier about every 4 hours, and every hour once the package is out for delivery, until the package is delivered, returned, or cancelled, or 21 days after purchase. There are no tracking webhooks yet, so poll. Labels from carriers that only push updates (Sendcloud, WeGrow, NZ Post) keep the status they had at purchase. Selecting scans multiplies each tracker's query cost by the scan page size, so a large page with scans can exceed the query cost limit: poll without scans, then fetch scans only for trackers that changed.
close_return
ChatGPTClose a return by marking it as complete. This marks all return items as complete and closes the return without performing any processing actions (no refunds, exchanges, etc.). Use this when a merchant wants to close out a return without taking further action. Cannot be used on returns that are already in a closed state (complete, rejected, or deleted). Confirm with the user before closing.
close_returns
ChatGPTClose returns that were handled outside Redo: every item is marked complete and nothing is refunded. Starts a run and returns it at once; the returns are worked through in the background. Returns null, and starts nothing, if any id is not a return owned by the caller.
commerce_agent_strategies
ChatGPTCommerce Agent strategies on this store, newest first, optionally filtered by name. At most 100 are returned; narrow with query to reach older ones.
commerce_agent_strategy
ChatGPTLook up a Commerce Agent strategy by id. Returns null when this store has no strategy with that id.
consolidation
ChatGPTFetch a single consolidation by its id.
consolidations
ChatGPTList the consolidations you participate in, newest packed first.
create_calendar_event
ChatGPTCreate a calendar event. The Commerce Agent reads MARKETING events near the current date as context when it answers shoppers and writes outbound marketing messages. Read calendarEventCatalog for the agenda item kinds each type accepts.
create_campaign
ChatGPTCreate a campaign shell. Email requires subject and previewText. Set the audience and schedule with updateCampaign.
create_checkout_experience
ChatGPTCreate an empty checkout experience — a named group of shipping methods Redo can serve at checkout. The new experience has no shipping methods and is not live until the checkout tree points at it; add methods with create_shipping_method and route to it with update_checkout_tree.
create_commerce_agent_strategy
ChatGPTCreate a Commerce Agent strategy. Set its id as strategyId when inserting a Start Agent Conversation step.
create_customer_event
ChatGPTRecord a single customer event. The event is queued for asynchronous processing and acknowledged immediately.
create_customer_events
ChatGPTRecord up to 100 customer events in one request. Each event is queued for asynchronous processing and acknowledged individually, in order.
create_customer_tag
ChatGPTCreate a customer tag in this store's Redo catalog. The tag's source is Redo Marketing.
create_discount_code
ChatGPTCreate a discount code on Shopify or BigCommerce. The same input is used for both providers.
create_draft_return
ChatGPTStart a new return for a customer's order. Accepts an internal order ID, Shopify order ID, or Shopify/display order name such as '#1234'. If an order name does not resolve or you need to disambiguate, call list_orders with providerOrderName, then pass the returned order id here. This creates a draft return that must be configured step-by-step before submission. After creating the draft, use manage_draft_return to configure it, then submit_draft_return to finalize.
create_dynamic_segment
ChatGPTCreate a dynamic segment from a condition tree. Attach it to a campaign with updateCampaign.segmentIds.
create_email_template
ChatGPTCreate an email template. trigger is required and cannot be UNKNOWN. Optional operations are applied to the default sections.
create_folder
ChatGPTCreate an OMS fulfillment-group view folder. Folders group related views (for example International Orders or Problem Orders). Use the returned folderId when calling create_views. Confirm the folder name with the merchant before calling. This does not create inventory, returns, claims, or support folders.
create_fulfillment_tag
ChatGPTCreate a shipment tag for OMS fulfillment groups. An existing tag with the same name is updated with the supplied color. Tags label shipments and can be used as filter values with the tagName filter. Only create a tag when the merchant explicitly asks for a new one — do not invent tags because a filter value is missing. Confirm the name and color with the merchant before calling.
create_inbound_shipment
ChatGPTCreate an inbound shipment fulfilling a purchase order. Its line items are derived from that order, not supplied: when this is the order's only shipment they mirror the order exactly, but once an order has several shipments new order lines are left unassigned and quantity changes stop propagating. Throws a 409 CONFLICT error (with an extension code of PURCHASE_ORDER_NOT_EDITABLE) if the order is closed or cancelled.
create_knowledge_article
ChatGPTCreate a Commerce Agent knowledge article. Defaults to DRAFT so it is not retrievable until you set status to ACTIVE.
create_marketing_automation
ChatGPTCreate an automation for a trigger listed in marketingAutomationCatalog. Returns the new automation. Date and price-drop triggers are not supported.
create_marketing_image_upload
ChatGPTStart an image upload for a file on disk. PUT the file's raw bytes to the returned url before expiresAt, then call uploadMarketingImage with source: { uploadId } to compress and host it. Counts against the image upload quota.
create_packing_slip_template
ChatGPTCreate a packing slip template from the standard layout, or copy an existing template when copyFromTemplateId is provided. Call list_packing_slip_templates first to see existing templates. After creation, use get_packing_slip_block_catalog, get_packing_slip_block_details, and update_packing_slip_template to customize sections. Confirm the desired name and copy source with the merchant before calling.
create_product_family
ChatGPTCreate a new product family.
create_product_filter
ChatGPTSave a product filter on this account. The returned id is what an email block stores.
create_purchase_order
ChatGPTCreate a purchase order. Throws a 409 CONFLICT error (with an extension code of PURCHASE_ORDER_NUMBER_TAKEN) if poNumber is already used by another order.
create_shipping_method
ChatGPTAdd a shipping method to a checkout experience. A 'fixed' method is a merchant-set price served by Redo with no carrier involved and needs rates. A 'dynamic' method quotes live carrier rates through Redo and needs carrierServices (or a serviceLevel). A 'custom' method is priced per cart by TypeScript in code, which is type-checked before anything is saved; call get_custom_shipping_method_code first for the contract and starter code. Always use 'fixed' or 'dynamic' unless the merchant specifically asks for a custom (script-priced) shipping method or provides their own code. When they do, send merchant-supplied code exactly as given. Only bring up custom methods after the merchant does, or when discussing a method that is already custom. Until then, do not mention, list or suggest them, including when asked which method types exist: describe only 'fixed' and 'dynamic'. Changing a custom method's script requires confirmCustomCode after the merchant approves the script. Shipping discount rules cannot be set through this API. They are configured by Redo and sync to a live storefront-platform function, so they are read-only here and are carried over untouched on update. Optional fields are omitted when they are not configured. An absent field means the option is not set, or is not editable through this tool — it does not mean Redo lacks the capability.
create_sms_template
ChatGPTCreate an SMS template. trigger is required and cannot be UNKNOWN.
create_views
ChatGPTCreate one or more OMS fulfillment-group views in a single batch. An existing view with the same name is overwritten, including its filters, columns, and folder. Call get_filter_catalog, get_filter_details, and get_filter_values before choosing filters, and get_column_catalog / get_column_details before choosing columns. Omit folderId to create a view with no folder; pass a folderId from create_folder or list_views to place it in a folder. Omit columns or pass an empty array to use the default layout. Duplicate names in the same batch are rejected and nothing is created. Confirm the views with the merchant before calling. This does not create inventory, returns, claims, or support views.
create_webhook_endpoint
ChatGPTCreate a webhook endpoint. Returns the signing secret once. Errors if an endpoint with the same URL already exists.
create_workstation
ChatGPTCreate a new outbound label workstation and write it to team.settings.outboundLabels.workstations. This does not delete other workstations. Call list_printnode_printers first for valid printer IDs and names. Use 4x6 for shipping label printers and 8.5x11 for packing slip / letter printers. Confirm the name and assigned printers with the merchant before calling.
customer
ChatGPTFetch a single customer by its id (or legacy id), or by email. Provide exactly one.
customer_subscriptions_update
ChatGPTUpdate Customer Subscriptions. Update customer subscription status for SMS and email marketing and transactional messages. If the customer with that phone number or email does not exist, it will be created. Requires the [customers_write](/docs/api-reference/scopes) scope.
customer_tag
ChatGPTFetch a single customer tag by its id. Ids from earlier versions of the Redo API are also accepted.
customer_tags
ChatGPTList customer tags in this store's catalog, optionally filtered by name, provider, or source.
customer_upsert
ChatGPTCreate or update customer. Create or update a customer profile. Uses the email address as the upsert key — if a customer with that email exists, their profile is updated; otherwise, a new customer is created. Profile fields - firstName and lastName are set directly on the customer. A full display name is automatically generated from these fields. - phoneNumber should be in E.164 format (e.g., +12345678900). If the number is new, it is added to the customer's contact information. Location Providing location sets the customer's current location. Only the fields you include are updated. Custom fields Use customFields to store arbitrary key-value data on the customer (e.g., pricing_plan, subscription_source). Values can be strings, numbers, or booleans. If a custom field doesn't exist yet, it is created automatically. Requires the [customers_write](/docs/api-reference/scopes) scope.
customers
ChatGPTList customers.
delete_calendar_event
ChatGPTDelete a calendar event. Returns true if an owned event was deleted, false if none matched. An event Redo found on the brand's homepage is dismissed rather than erased, so Redo does not add it again; either way it stops appearing.
delete_campaign
ChatGPTDelete a campaign that has not started sending. Returns true if an owned campaign was deleted, false if none matched.
delete_checkout_experience
ChatGPTPermanently delete a checkout experience and every shipping method on it. This cannot be undone — confirm with the merchant before calling. An experience that is active in the checkout tree cannot be deleted at all: the delete path does not update the storefront platform's delivery customization function, so removing live config would leave that function serving a checkout experience that no longer exists. Repoint the checkout tree away from the experience first, then delete it.
delete_discount_code
ChatGPTDelete a discount code. Returns true if an owned code was deleted, false if none matched. On Shopify the platform discount is deleted too; on BigCommerce only the Redo record is removed.
delete_email_template
ChatGPTDelete an email template. Returns true if an owned template was deleted, false if none matched.
delete_knowledge_article
ChatGPTDelete a Commerce Agent knowledge article. Returns true if an owned article was deleted, false if none matched.
delete_marketing_automation
ChatGPTDelete an automation and stop its in-flight runs. Returns true if an owned automation was deleted, false if none matched.
delete_product
ChatGPTDelete a product. Returns true if an owned product was deleted, false if none matched. Throws a 409 CONFLICT error (with an extension code of PRODUCT_SOURCE_MANAGED, PRODUCT_HAS_LISTING, or PRODUCT_HAS_INVENTORY) if the product is ineligible for deletion.
delete_product_family
ChatGPTDelete a product family and all of its products. Returns true if an owned product family was deleted, false if none matched. Throws a 409 CONFLICT error (with an extension code of PRODUCT_SOURCE_MANAGED, PRODUCT_HAS_LISTING, or PRODUCT_HAS_INVENTORY) if the family or any product is ineligible for deletion.
delete_product_filter
ChatGPTDelete a product filter on this account. Returns false when the id is missing or belongs to another account. Interactive cart sections on this account that stored the id have that reference cleared.
delete_return_tag
ChatGPTPermanently delete a return tag (matched by name) from the authenticated team's tag library. This also strips the tag from every return that referenced it and from every saved view filter. This action cannot be undone — always confirm with the user before calling.
delete_segment
ChatGPTDelete a segment. Returns true if an owned segment was deleted, false if none matched.
delete_shipping_method
ChatGPTPermanently remove a shipping method from a checkout experience. If the experience is live in the checkout tree, shoppers stop seeing this method as soon as the change propagates. This cannot be undone — confirm with the merchant before calling.
delete_sms_template
ChatGPTDelete an SMS template. Returns true if an owned template was deleted, false if none matched.
delete_webhook_endpoint
ChatGPTDelete a webhook endpoint. Returns true if an owned endpoint was deleted, false if none matched.
discount_code
ChatGPTFetch a single discount configuration by its id. Ids from earlier versions of the Redo API are also accepted.
discount_codes
ChatGPTList discount configurations, optionally filtered by title or code text, exact checkout code, platform, group type, or kind.
duplicate_checkout_experience
ChatGPTCopy a checkout experience, including all of its shipping methods, into a new experience named '<original> (copy)'. The copy is not live until the checkout tree points at it. Useful as the starting point for an A/B test variant.
edit_custom_analytics_report
ChatGPTUpdate an existing custom analytics report from a full replacement plain-English spec. The tool validates the query before updating the report and waits for the update to finish. It returns status "ready" and a reportUrl. If the request cannot be represented without limitations, the report does not change and the tool requests a revised spec. Missing reports and reports already being prepared return status "error".
email_addresses
ChatGPTMailboxes the store can use as a campaign From or Reply-To address.
email_template
ChatGPTFetch a single email template by its id. Ids from earlier versions of the Redo API are also accepted.
email_template_variable_catalog
ChatGPTThe static email-template variable grammar for a trigger: template variable names, Url keys, context objects, and table collection paths. Does not include this store's discounts, saved sections, or product filters. UNKNOWN returns empty lists.
email_templates
ChatGPTList email templates, optionally filtered by name or trigger.
flag_returns
ChatGPTFlag returns for attention. Starts a run and returns it at once; the returns are worked through in the background. Returns null, and starts nothing, if any id is not a return owned by the caller.
fulfillment_create
ChatGPTCreate Fulfillment. Create a fulfillment for specific line items within an order, including tracking information. The orderId parameter can be either the external order ID you provided when creating the order, or the internal Redo order ID returned from the create order response. Requires the [orders_write](/docs/api-reference/scopes) scope.
fulfillment_status_update
ChatGPTUpdate Fulfillment Status. Post a shipment status update or trigger an automation event for a fulfillment. The status field accepts two types of values: Statuses (e.g., in_transit, delivered): Real carrier tracking statuses that update the shipment's current status. When you send these, the fulfillment's current status is updated to reflect the new state. Triggers any configured automations for that status. Events (e.g., stalled_in_transit, delayed, arriving_early): Special event types that trigger automations without changing the current shipment status. The status field remains unchanged, but you can still update estimated delivery date and add tracking history entries. Use these to trigger event-based automations. Both statuses and events can update other fields like estimated delivery date and tracking history. Requires the [orders_write](/docs/api-reference/scopes) scope.
generate_custom_analytics_report
ChatGPTCreate a custom analytics report from a plain-English question. This call waits until the report is ready and returns its reportUrl. It validates the query without executing report rows. A proposal with omissions or substitutions returns needs_confirmation. Explain all limitations and obtain merchant approval. Explain that compilation validation does not guarantee runtime success. Then call this tool with the original question and confirmationId to create that exact proposal. An unsupported request returns unavailable without a confirmationId. Ask for a revised request and call again without confirmationId.
get_automation
ChatGPTGet detailed information about an automation, including enabled state, category/schema, timestamps, and step configuration. Use list_automations first to find the automation ID if needed. If a step has an opaque template/config ID, call get_automation_step_configuration with that automation ID and step ID.
get_automation_performance
ChatGPTReturn per-automation performance metrics plus overall totals (with a comparison to the prior period of equal length) for a given date range. Metrics include revenue, spend, ROI, revenue per recipient, and counts of orders/clicks/opens/sends. This is automation-level analytics, not per-step Recover metrics.
get_automation_step_configuration
ChatGPTResolve linked configuration for a specific automation step. Use this after get_automation when a step has an opaque template/config ID. Resolves Recover steps into scenarios, fallback messaging, agent/brand settings, and discount ID; email steps into subject, preview, and builder sections; and SMS steps into message content, prefix, AI config, and attachments.
get_automation_step_performance
ChatGPTReturn step-level automation performance for a metric family. Use metricType='recover_conversation' and stepTypes=['recover'] for Recover questions like recovered revenue, reply rate, conversion rate, or which Recover step is performing better.
get_campaign
ChatGPTGet detailed information about a specific marketing campaign, including its templates (email subject lines or SMS content variants), audiences (customer groups), status, and schedule. Use list_campaigns first to find the campaign ID if you don't have it.
get_campaign_performance
ChatGPTReturn per-campaign performance metrics plus overall totals (with a comparison to the prior period of equal length) for a given date range. Metrics include revenue, spend, ROI (as a percentage), revenue per recipient, and counts of orders / clicks / opens / sends. Currency values are plain numbers in the store's currency. Use campaignId to filter rows to a single campaign; totals remain period-level.
get_checkout_ab_test_results
ChatGPTFetch statistical results for one checkout optimization A/B test: checkout conversion rate, revenue per checkout visit, average order value, average shipping revenue and orders placed, each per treatment with the confidence that a variant differs from control. Use list_checkout_ab_tests to find the test ID. IMPORTANT: A test only has a true winner when it concludes to a non-control treatment (isWinner: true). If the test concluded back to the control treatment, concludedToControl will be true and no treatment will have isWinner: true — in that case the test must NOT be described as having a winner. Results showing a variant ahead of control do not by themselves mean the test was won; check isConcluded and concludedToControl on list_checkout_ab_tests. This is an expensive call. It runs several warehouse queries per invocation, so call it for one test at a time rather than sweeping every test in a list. A metric's confidenceByTreatment is omitted when no significance test is available for it, which is not the same as zero confidence.
get_checkout_experience
ChatGPTGet the full configuration of one checkout experience, including every shipping method it offers. Use list_checkout_experiences to find the ID. How each method is priced: a 'dynamic' method quotes live carrier rates through Redo, and carrierServices lists the carrier services it is configured to quote from. Treat that as the candidate set, not the source of any one displayed price — rate selection, markup, rounding and price constraints all apply afterwards, and the storefront platform can adjust the result again before a shopper sees it. A 'fixed' method is a merchant-set price served by Redo with no carrier involved; its rates lists every configured price, including cart weight or cart value conditions and free-shipping thresholds. A 'custom' method is priced by a merchant-authored script; read its source with get_custom_shipping_method_code. Other per-method settings include bundled Redo coverage, order tags, price and margin constraints, and for dynamic methods the rate selection preset, service level, excluded carriers, markup, rounding and price bounds. Optional fields are omitted when they are not configured. An absent field means the option is not set, or is not editable through this tool — it does not mean Redo lacks the capability.
get_checkout_tree
ChatGPTGet the store's checkout tree — the routing that decides which checkout experience each shopper sees. The checkout tree decides which checkout experience each shopper is offered. It is a nested tree: each 'segment' tests something about the shopper — their cart, delivery address, customer history, the time of day — and routes them to whenMatches or otherwise. A segment that routes more than two ways has branches instead, taken in order, with one marked isFallback for shoppers none of them match. An 'ab_test' splits shoppers between its treatments. 'checkout_experience' and 'block_checkout' end the routing. A checkout experience that no path reaches is unreachable, and no shopper can be served it. This describes the configured tree, not the outcome for any particular shopper: actual evaluation depends on cart, address and customer data at checkout time that this tool does not have. Use this to answer which experiences are reachable, what routes shoppers to them, and where A/B tests sit. To dig into something the tree names, call list_checkout_experiences or list_checkout_ab_tests and find the matching entry in the list. Optional fields are omitted when they are not configured. An absent field means the option is not set, or is not editable through this tool — it does not mean Redo lacks the capability.
get_column_catalog
ChatGPTList available OMS fulfillment-group view columns (key and title). Call this before get_column_details or create_views. The selected checkbox column is always prepended on write and is not useful to add yourself. This is OMS-only.
get_column_details
ChatGPTGet the full definition for specific OMS fulfillment-group columns: title, default width, description, and sortDirection when sortable. Call get_column_catalog first to find keys. Use these keys when setting columns or sort on create_views or update_view.
get_commerce_agent_conversation
ChatGPTGet one Commerce Agent conversation transcript by topic ID. Outbound shopper-agent messages include available provenance such as author, trigger, generation mode, campaign, automation, and human-queue usage. Provenance is intentionally absent for customer, merchant, and older messages when it was not recorded.
get_custom_analytics_report
ChatGPTGet the current state of a custom analytics report by id. Use this to poll for status after calling generate_custom_analytics_report. Status "preparing" means the report is still generating, "ready" means it finished successfully (see columns and reportUrl), and "failed" means generation failed (see errorMessage). If the report id does not exist for this team, report is returned as null with an error message.
get_custom_shipping_method_code
ChatGPTGet what is needed to write or edit a custom shipping method: the custom rate contract's TypeScript type definitions, starter code, and a sample input, plus — when shippingMethodId is given — that method's current source. A custom method is priced per cart by a TypeScript function, export default (input: Input): Output => { ... };, that returns { price, name, description? } or null to hide the method. Always use 'fixed' or 'dynamic' unless the merchant specifically asks for a custom (script-priced) shipping method or provides their own code. When they do, send merchant-supplied code exactly as given. Only bring up custom methods after the merchant does, or when discussing a method that is already custom. Until then, do not mention, list or suggest them, including when asked which method types exist: describe only 'fixed' and 'dynamic'. To change a custom method, edit the returned code and send it as code to update_shipping_method; to add one, send type: 'custom' and code to create_shipping_method. Code is type-checked against these definitions before anything is saved.
get_customer
ChatGPTGet detailed customer information, including contact methods, marketing consent, linked accounts, tags, segment memberships, addresses, custom fields, and loyalty details.
get_customs_readiness
ChatGPTReport how ready this store's product catalog is for international returns customs. Returns how many returns, claims and warranties are currently delayed in customs, which product fields the merchant must fill (HS code, customs description, country of origin, manufacturer), and how many product variants are missing each one. Read requiredFields before the missing counts: a count for a field that is not required does not need action. Use list_products_missing_customs to see which variants are missing data. The merchant fills these fields on the International returns settings page in Redo (Settings > International > Returns), either one by one or with a CSV upload.
get_customs_update_status
ChatGPTCheck a customs update job started by update_product_customs. Reports whether it is still running and, once completed, how many rows were updated and which were not, with the reason. When it completes, call get_customs_readiness to show the merchant their new readiness.
get_discount_config
ChatGPTGet the reusable discount configuration from the shared Discount collection. Use this after campaign, automation, template, or generated-code tools return a discountId and you need the actual offer, code/prefix, provider, expiration, eligibility, usage limits, or stacking rules.
get_filter_catalog
ChatGPTList available OMS fulfillment-group view filters (name, display name, and a short description of what each matches, so similar filters like tagName, shopifyOrderTags, and productTags can be told apart). Call this before get_filter_details, get_filter_values, create_views, or update_view. This is OMS-only: it does not list inventory, returns, claims, or support filters.
get_filter_details
ChatGPTGet the full definition for specific OMS fulfillment-group filters: type, operators, valueFormat, staticValues, and dynamicValuesKey. Call get_filter_catalog first to find names. Use dynamicValuesKey with get_filter_values when present. Use the returned valueFormat when calling create_views or update_view.
get_filter_values
ChatGPTFetch valid runtime values for an OMS fulfillment-group filter. Pass dynamicValuesKey from get_filter_details (for example fg:status or fg:tagName). Values are case-sensitive and must match exactly in create_views or update_view. Optional search narrows the list. This does not invent tags; call this to discover what already exists.
get_generated_discount_code
ChatGPTGet an issued/generated discount code and its usage records. Use this for questions like whether a generated code was used, which customer/order used it, when it expires, what generated it, or what base discount configuration it came from. Provide either generatedDiscountCodeId or discountCode.
get_hsa_onboarding
ChatGPTReturn this store's HSA/FSA onboarding status from what Redo has stored. registered is whether this store has been registered with the payments partner. kycSaved is whether identity-verification details are already on file. kycPath is the stable page where the merchant finishes identity verification. Give that link when they ask for their KYC link. This result never includes the saved business details (legal name, EIN, address, and so on). When the merchant asks to see or change them, say they are not shown here and point them to kycPath: once details are saved, that page has a "Review or update details" button that opens them. When registered is false there is no page yet. Do not invent an onboarding stage, whether payments are enabled, a fee, or a hosted verification URL. Those are not in this result. When registered is false, Redo still has to register the store.
get_hsa_performance
ChatGPTReturn this store's HSA/FSA performance for a date range. These are the same figures as the merchant Payments → HSA dashboard: orders and whole-order value for orders with any HSA/FSA payment, eligible-order count, adoption rate, and the non-HSA comparison, in the shop currency. Quote the returned numbers. Do not invent a rate, a payout, or a fee. When warehouseAvailable is false, say the performance figures are unavailable. Do not describe the zeros as the store's results.
get_hsa_performance_report
ChatGPTReturn this store's HSA/FSA performance report: a ready-to-show markdown report plus every figure with a plain-language explanation. Use this when the merchant asks for an HSA/FSA performance report, summary, recap, or breakdown, or asks who is paying with HSA/FSA, what they buy, or how HSA/FSA orders compare to other orders. For a single quick number (orders or sales over a range), get_hsa_performance is enough. With no dates it covers the store's HSA/FSA go-live date through yesterday (UTC). Every report is also compared with the previous period of the same length, just before it, when HSA/FSA payments were live for all of that period; comparison says whether it was. For month over month or week over week, pass that month's or week's first and last day. A compared report runs about twice the warehouse queries. Show the markdown as returned. When the merchant asks what a number means or how it is calculated, answer from that figure's explanation. Do not recompute, round differently, or invent figures, rates, fees, or payouts. When status is not "ok", relay the message and nothing else.
get_order
ChatGPTGet detailed information about a specific order including its customer, items, totals, discounts, shipping cost, and taxes. Use list_orders first to find the order ID if you don't have it.
get_packing_slip_block_catalog
ChatGPTList available packing slip block types (type, display name, and category). Call this before get_packing_slip_block_details. Categories are general, order, merchant, and customer.
get_packing_slip_block_details
ChatGPTGet full definitions for specific packing slip block types: description and flattened configurable properties. Call get_packing_slip_block_catalog first to find types. When ORDER_ITEMS is requested, also returns available table column types.
get_packing_slip_template_detail
ChatGPTGet the full configuration of one packing slip template: page layout, default/local-pickup flags, a JSON string of the sections array, a text outline, and previewPdfUrl, a PDF of the template rendered with sample order data that you can share with the merchant. Call list_packing_slip_templates first if you do not have a template ID. Parse sectionsJson to inspect block configuration; do not expect a structured sections object.
get_product_return_analytics
ChatGPTPer-product returns analytics for a date range: units returned and sold, return revenue, return rate, exchange rate, and return reasons for each product, plus return reasons totaled across the returned products. Read-only. Use it to find the most returned products, compare return rates by vendor, tag, or sales channel, or see why a product is being returned. Products with fewer than 10 units sold are left out unless itemsSoldMin is set. For a per-variant breakdown of one product use get_variant_return_analytics with the product's id.
get_return
ChatGPTGet detailed information about a specific return including its items, status, compensation totals, and associated order details. Returns the item IDs needed for process_return. Use list_returns first to find the return ID if you don't have it.
get_return_analytics
ChatGPTStore-wide returns analytics for a date range: retained vs. refunded revenue, upsell revenue, return rates by order, item, and revenue, submitted and processed return counts, protection attachment rates, and a breakdown of exchanges by type. Read-only. Use it for questions about return rate, refunds, exchanges, store credit, or returned revenue across the whole store. For per-product figures use get_product_return_analytics.
get_segment
ChatGPTGet detailed configuration for a marketing segment/audience, including counts and the dynamic condition tree when applicable. Use this after list_segments or after get_campaign returns included/excluded audience IDs.
get_shipping_label_quotes
ChatGPTQuote shipping rates for a shipment. Rates are ephemeral.
get_tax_id_requirements
ChatGPTList the tax IDs customs needs for the countries this store's returns ship to, and which are already on file. For each return destination country that needs tax IDs, shows each required ID (for example a GB EORI and GB VAT for returns into Great Britain, an EIN for the US, a VAT number for EU destinations) and whether a saved tax ID covers it. Also lists the saved tax IDs with masked numbers. When a requirement is not satisfied, ask the merchant for the number and save it with save_tax_id. Never guess or make up a tax ID number.
get_team_unit_system
ChatGPTReturn the merchant's length and weight units for custom parcels. Call this before upsert_custom_parcel so dimensions and weight use the team's unit system (inches/ounces for imperial, centimeters/grams for metric).
get_template
ChatGPTGet an email or SMS marketing template by ID. Use this to inspect subject lines, email builder sections, SMS content, prefix content, attachments, and AI config when a campaign or automation references a template ID.
get_variant_return_analytics
ChatGPTPer-variant returns analytics for one product over a date range: units returned and sold, return revenue, return rate, exchange rate, and return reasons for each variant (size, color, style), plus totals for the product. Read-only. Use it to find which variants of a product are returned most, or to spot sizing and color issues. Requires a productId from get_product_return_analytics.
get_view_details
ChatGPTGet the full configuration of one OMS fulfillment-group view: display name, folder, sort, columns, flattened filters, and top-level filterOperator (and/or). Nested filter groups are flattened. The default awaiting-shipment view is named 'Ready to ship'. This is OMS-only: it does not describe inventory, returns, claims, or support views. Call list_views first if you do not have a view ID. Use the returned filter shape and filterOperator when calling update_view.
get_workstation_printer_status
ChatGPTGet live PrintNode printer online/offline status for the merchant's workstations. Refreshes stored PrintNode printer data when it is missing or older than 60 seconds. Use this when the merchant mentions Redo Connect, printing, workstations, printer connections, or print failures. Call list_workstations for workstation configuration without a PrintNode refresh.
inbound_shipment
ChatGPTFetch a single inbound shipment by its id.
inbound_shipments
ChatGPTList inbound shipments, optionally filtered by status.
inventory_item
ChatGPTFetch a single inventory item by its id.
inventory_items
ChatGPTList traceable inventory items, newest first. Pass at least one of storageLocationId, sku, or lotNumber.
inventory_level
ChatGPTFetch a single inventory level by its id. List levels through Product.inventoryLevels or Location.inventoryLevels.
inventory_level_ledger_entries
ChatGPTPage inventory ledger rows for one bin-level inventory record (inventoryLevelId) or one source record (exact referenceId), newest first. Same rows as binInventoryLevel { ledgerEntries } when scoped to one inventoryLevelId. To find a bin's levels first, use storageLocation { binInventoryLevels } or binInventoryLevels(storageLocationId:).
inventory_level_ledger_entry
ChatGPTFetch a single ledger row by id. Prefer binInventoryLevel { ledgerEntries } to page history for a bin.
invoice_csv_get
ChatGPTInvoice (CSV). Get an invoice as a CSV. Requires the [invoices_read](/docs/api-reference/scopes) scope.
invoice_list
ChatGPTList Invoices. Get a list of invoices. Requires the [invoices_read](/docs/api-reference/scopes) scope.
knowledge_article
ChatGPTFetch a single Commerce Agent knowledge article by its id.
knowledge_articles
ChatGPTList Commerce Agent knowledge articles, optionally filtered by title/body substring, status, or origin.
list_automations
ChatGPTList automations for the merchant's team. Returns automation IDs, names, enabled state, category/schema, step count, and unique step types. Use the stepTypes filter to discover automations for a feature, such as ['recover'], then call get_automation for the full step configuration.
list_campaigns
ChatGPTList marketing campaigns for the merchant's team. Filter by channel (email/sms), status, name substring, or scheduled-date range. Returns a summary for each campaign (id, name, channel, status, scheduledAt, sentAt, variant counts, audience counts). Use get_campaign with a specific campaign ID for full details, or get_campaign_performance for per-campaign metrics.
list_carrier_parcels
ChatGPTList FedEx, UPS, and USPS predefined packages from EasyPost. Call this before upsert_carrier_parcel to get valid package names, dimension strings, descriptions, and max weights. Null EasyPost fields are omitted. This does not list the merchant's saved parcels — use list_parcels for those.
list_checkout_ab_tests
ChatGPTList the merchant's checkout optimization A/B tests. Returns metadata for each: name, description, whether it is running or concluded, start and end dates, and its treatments with traffic weights. Does not compute statistics — use get_checkout_ab_test_results for those. IMPORTANT: A test only has a true winner when it concludes to a non-control treatment (isWinner: true). If the test concluded back to the control treatment, concludedToControl will be true and no treatment will have isWinner: true — in that case the test must NOT be described as having a winner. Optional fields are omitted when they are not configured. An absent field means the option is not set, or is not editable through this tool — it does not mean Redo lacks the capability.
list_checkout_experiences
ChatGPTList the merchant's checkout experiences. A checkout experience is a named set of shipping methods; the checkout tree decides which shoppers see which checkout experience. This tool returns a summary for each (id, name, whether it is active, creation date, and its shipping methods). A method's priceDisplay is only its FIRST configured price. When the price varies by cart weight or cart value, or a free-shipping threshold applies, priceDisplay does not tell the whole story — call get_checkout_experience for every price and the conditions each applies to. Use get_checkout_experience with an id from this list to retrieve its complete shipping method configuration. Optional fields are omitted when they are not configured. An absent field means the option is not set, or is not editable through this tool — it does not mean Redo lacks the capability.
list_commerce_agent_conversations
ChatGPTList shopper-agent conversations shown in Commerce Agent > Conversations. Filter by reply status, author (Commerce Agent, Recover, automation SMS, or Campaign), trigger, generation mode, campaign, or automation, and search by customer name, email, phone, or message text. These are not general support tickets: support exchanges without a shopper-agent conversation, and conversations with no shopper-agent outreach, are excluded. Results are summaries; use get_commerce_agent_conversation with a topic ID for the transcript and message provenance.
list_custom_analytics_reports
ChatGPTList the merchant's custom analytics reports, most recent first. Use search to filter by title or requested question. Each report includes its id, status (preparing, ready, or failed), and columns once ready. Use get_custom_analytics_report with a report's id for its full details and reportUrl.
list_customers
ChatGPTSearch and list customer records for the merchant. Use this to find customer IDs before calling get_customer, or to answer questions about customers by name, email, phone, or segment membership.
list_orders
ChatGPTSearch and list orders, sorted by most recent first. Filter by order name, customer email, or date range. Returns summary information for each order; use get_order with a specific order ID for full details. Supports pagination via the pageNext cursor in the response.
list_packing_slip_templates
ChatGPTList packing slip templates for the merchant. Returns each template's id, name, page size, page orientation, section count, and whether it is the default or a local pickup label. Use this to see what templates exist before reading one. Call get_packing_slip_template_detail with an id for the full configuration.
list_parcels
ChatGPTList saved package presets for the merchant. Returns custom parcels (merchant-defined dimensions and weight) and carrier parcels (FedEx, UPS, or USPS predefined packages) in one flattened shape. Use this before creating or updating parcels. Call get_team_unit_system for the merchant's length and weight units, and list_carrier_parcels for available carrier package names.
list_printnode_printers
ChatGPTList PrintNode printers stored for the merchant's Redo Connect account. Returns printer IDs, names, connection state, computer, and capabilities. Call this before create_workstation or update_workstation to discover valid printer IDs. This reads stored printer data and does not refresh PrintNode. Use get_workstation_printer_status for live online/offline status.
list_products_missing_customs
ChatGPTList product variants missing customs information the merchant must fill for international returns, with their current values. Each variant shows its Shopify variant ID (sourceId), SKU, title, which required fields it is missing, and what it already has. Results come in catalog order; pass nextCursor back as cursor for the next page. Call get_customs_readiness first for the totals. Use this list to show the merchant which products need attention. To check specific products, pass skus or sourceIds instead of paging; a missing-info spreadsheet does not need this list at all, since update_product_customs matches rows by SKU or variant ID itself. Paging stops after 1000 variants and reports totalMatching; do not try to walk a large catalog page by page. A lookup returns at most 500 variants and sets truncated when it had to leave some out.
list_return_tags
ChatGPTList every return tag defined for the authenticated team. Use this to resolve the exact stored name (case-sensitive) before calling upsert_return_tag or delete_return_tag when the user refers to a tag loosely.
list_returns
ChatGPTSearch and list returns, sorted by most recent first. This is the starting point for finding returns — filter by order name, customer email, status, or date range. Returns summary information for each return; use get_return with a specific return ID for full details. Supports pagination via the pageNext cursor in the response.
list_segments
ChatGPTList marketing segments/audiences for the merchant's team. Use this to discover segment IDs before calling get_segment, or to inspect the audiences included/excluded on a campaign.
list_views
ChatGPTList OMS fulfillment-group views and folders for the merchant (the same views-and-folders listing as the outbound orders UI). Returns each view's id, display name, filter count, and folder assignment, plus each folder's id and name. The default awaiting-shipment view is named 'Ready to ship'. This is OMS-only: it does not list inventory, returns, claims, or support views. Use this to see what views exist before describing or editing one.
list_workstations
ChatGPTList outbound label workstations for the merchant. Returns each workstation's id, name, and assigned printers. Use this before update_workstation to get workstation IDs, and call list_printnode_printers to see available PrintNode printer IDs before creating or updating a workstation.
location
ChatGPTFetch a single location by its id.
locations
ChatGPTList locations.
manage_draft_return
ChatGPTConfigure a draft return step-by-step. This tool acts as a state machine — it only accepts actions valid for the current step and advances the flow automatically. Each response tells you the current step, available actions, and relevant data. Steps proceed in order: select items → walk return flow (reason/questions per item) → choose compensation → set merchant overrides → choose shipment method → configure exchange (if applicable). Use go_back to return to a previous step. The response always includes availableActions telling you exactly what you can do next.
market
ChatGPTFetch a single market by its id.
marketing_automation
ChatGPTFetch a single marketing automation by its id. Ids from earlier versions of the Redo API are also accepted.
marketing_automation_catalog
ChatGPTThis store's automation grammar: trigger keys createMarketingAutomation accepts, and which step kinds an insert operation accepts for each trigger. Read it before creating an automation or inserting a step.
marketing_automations
ChatGPTList marketing automations, optionally filtered by name, category, or whether they are running.
markets
ChatGPTList markets, optionally filtered by whether they are live.
order
ChatGPTFetch a single order by its id (a branded order id or a legacy Mongo ObjectId hex).
order_create
ChatGPTCreate Order. Create a new order in the system with line items, customer information, and shipping details. Requires the [orders_write](/docs/api-reference/scopes) scope.
order_delete
ChatGPTDelete Order. Delete an order from the system. The orderId parameter can be either the external order ID you provided when creating the order, or the internal Redo order ID returned from the create order response. Requires the [orders_write](/docs/api-reference/scopes) scope.
orders
ChatGPTList orders, optionally filtered by customer email or created/updated date range.
pick_session
ChatGPTFetch a single pick session by its id, or by the legacy Mongo ObjectId shown in the Redo app.
pick_sessions
ChatGPTList pick sessions, newest first. Filter by status to find open work, by location for one warehouse, and by creation time for a day's sessions.
preview_checkout_tree
ChatGPTCheck what a checkout tree change would do, without changing anything. Nothing is saved and live shoppers are unaffected. Send the tree you intend to apply. This validates it and returns the tree live now alongside the tree that would replace it, so you can confirm the change is what you meant before calling update_checkout_tree with the same tree. It also surfaces the reasons a change would be rejected — a name that does not exist, an A/B test that would be altered — without you having to attempt the write. The checkout tree decides which checkout experience each shopper is offered. It is a nested tree: each 'segment' tests something about the shopper — their cart, delivery address, customer history, the time of day — and routes them to whenMatches or otherwise. A segment that routes more than two ways has branches instead, taken in order, with one marked isFallback for shoppers none of them match. An 'ab_test' splits shoppers between its treatments. 'checkout_experience' and 'block_checkout' end the routing. A checkout experience that no path reaches is unreachable, and no shopper can be served it. This describes the configured tree, not the outcome for any particular shopper: actual evaluation depends on cart, address and customer data at checkout time that this tool does not have. Checkout experiences and A/B tests are referred to by name, not by ID. A name must match something that already exists on this store — see list_checkout_experiences and list_checkout_ab_tests. Nothing is created by naming it, and a name matching more than one thing is rejected rather than guessed.
process_return
ChatGPTProcess a return's products by accepting or rejecting each one. Before calling this tool, you MUST: (1) call get_return to retrieve the return's items and their IDs, (2) check that items are in an 'open' status — if items show as 'rejected' or 'complete' on an open return, the return is in an inconsistent state; explain this to the merchant and ask if they want you to re-process the items (accept them) or close the return instead, (3) confirm with the user which products to process and whether each should be accepted or rejected, (4) for accepted products, ask whether to restock. Grade is optional and does not need to be asked unless the user mentions it, and (5) if rejecting any products, ask the user if they'd like to include a message to the customer explaining the rejection. Each product in the request needs either reject:true OR a processInput object, not both. For customerNotes: ONLY include the user's exact words if they provide a message. NEVER generate or fabricate customerNotes — omit the field if the user declines or doesn't provide one.
process_returns
ChatGPTProcess returns with their default outcome, issuing each refund, store credit or exchange. This moves money and cannot be undone. Starts a run and returns it at once; the returns are worked through in the background. Returns null, and starts nothing, if any id is not a return owned by the caller.
product
ChatGPTFetch a single product by its id.
product_families
ChatGPTList product families.
product_family
ChatGPTFetch a single product family by its id.
product_filter
ChatGPTFetch one product filter saved on this account. An id from another account, or one that does not exist, is null.
product_filter_collection
ChatGPTOne collection on this account's connected store. An id that store does not have is null. Uses the account's saved integration only.
product_filter_collections
ChatGPTCollections on this account's connected store for the given provider. Uses that account's saved integration only — there is no shop domain or token argument. A provider this account has not connected returns an empty list. At most 100 collections are returned.
product_filter_metafields
ChatGPTProduct metafield definitions from this account's Shopify Admin API, using the account's saved Shopify connection. Accounts without Shopify get an empty list. Definitions are capped at 100. Provider errors do not include the Shopify response.
product_filters
ChatGPTProduct filters saved on this account.
products
ChatGPTList products, optionally filtered by product family.
products_bulk_upload
ChatGPTBulk upload products. Bulk create or update product families and their variants. Submit up to 1,000 product families per request, each containing up to 100 variants. Products are processed asynchronously in batches. Only one bulk upload can run per store at a time. Matching Strategy The API uses the following priority to match incoming product families to existing records: 1. `product_family_id` — Redo product family ID (direct lookup) 2. `external_id` — ID from your external system 3. SKU — Matched via variant SKUs If no match is found, a new product family is created. Concurrency Only one bulk upload operation can run per store at a time. If a bulk upload is already in progress, the request will return a 409 Conflict error. Requires the [products_write](/docs/api-reference/scopes) scope.
purchase_carrier_shipment
ChatGPTBuy the selected carrier/service/account rate. Returns the single carrier shipment bought, or throws if the purchase failed.
purchase_order
ChatGPTFetch a single purchase order by its id, or by its purchase order number. Provide exactly one.
purchase_orders
ChatGPTList purchase orders, optionally filtered by supplier or status.
reject_returns
ChatGPTReject returns. This cannot be undone. Starts a run and returns it at once; the returns are worked through in the background. Returns null, and starts nothing, if any id is not a return owned by the caller.
reopen_return
ChatGPTReopen a return that was previously completed or rejected. This resets all processed/rejected items back to open, clears pending processing info, resets the expiration date, and marks the return as reopened. Important: reopening does NOT reverse any refunds, exchanges, or other actions performed during processing. The team must have the 'Allow reopen after processing' setting enabled for processed returns. Confirm with the user before reopening.
reset_returns
ChatGPTReset returns: each return is deleted so that its customer can start it again. This cannot be undone. Starts a run and returns it at once; the returns are worked through in the background. Returns null, and starts nothing, if any id is not a return owned by the caller.
return
ChatGPTFetch a single return by its id — a branded Redo return id or its legacy Mongo ObjectId.
return_action_run
ChatGPTFetch a run of a return action by its id, with the outcome for each return so far.
returns
ChatGPTList returns, optionally filtered by status, customer email, order name, or update time.
rotate_webhook_endpoint_secret
ChatGPTStage a new (pending) signing secret. Returns it once; add it to your receiver, then call activateWebhookEndpointSecret.
save_tax_id
ChatGPTSave a tax ID (EORI, VAT, EIN, and so on) that customs uses on this store's international return labels. Saving replaces any saved tax ID with the same type and issuing country, the same as editing it on the International returns settings page. Returns the updated requirements and saved tax IDs, with numbers masked. Only save a number the merchant gave you. Confirm the type, issuing country, and number with the merchant before calling.
search_knowledge_articles
ChatGPTRanked text search over Commerce Agent knowledge articles, including drafts and disabled articles. Ranking is not keyset-paginated; cap results with first.
search_replenishment_reports
ChatGPTSearch the replenishment report (OpenSearch location bin inventory index) for products at a warehouse location. Narrow results with textSearch on product title, SKU, UPC, or barcodes. Each row includes replenishment status fields such as needsReplenishment and suggestedQuantity. Always scoped to the authenticated account and the requested location.
segment
ChatGPTFetch a single segment by its id. Ids from earlier versions of the Redo API are also accepted.
segment_condition_catalog
ChatGPTThe static segment condition grammar: fields, operators, and the JSON Schema for conditions. Does not include this store's tags, products, or customers.
segment_token_field_options
ChatGPTLook up this store's allowed values for a catalog field (tags, products, countries, custom fields, event names). The catalog is static; these values are not.
segments
ChatGPTList segments, optionally filtered by name or by how membership is set.
set_auto_selected_shipping_methods
ChatGPTChoose which of an experience's shipping methods are shown first at checkout, in priority order. The first one available is pre-selected for the shopper, and methods not listed follow in their usual order. Pass only the methods to put first, not every method; pass an empty list to turn auto-selection off. Read the current list from autoSelectedShippingMethodIds on get_checkout_experience first. A repeated ID, or one that does not belong to the experience, is rejected without writing anything.
sms_template
ChatGPTFetch a single SMS template by its id. Ids from earlier versions of the Redo API are also accepted.
sms_templates
ChatGPTList SMS templates, optionally filtered by name or trigger.
storage_location
ChatGPTFetch a single storage location by its id.
storage_locations
ChatGPTList storage locations (bins, totes, and other slots), newest first. Pass locationId, name, or both.
storefront_event
ChatGPTReceive Storefront Events. Processes events from storefronts using Shopify pixel event schema Requires the [storefront_events_write](/docs/api-reference/scopes) scope.
submit_draft_return
ChatGPTSubmit a fully configured draft return to create the actual return. Only succeeds when all required steps are complete (currentStep must be 'ready'). Call this after configuring the draft return via manage_draft_return. Returns the created return ID.
supplier
ChatGPTFetch a single supplier by its id.
suppliers
ChatGPTList suppliers.
sync_sales_channel_variants
ChatGPTResolve sales channel variant ids to products here, syncing any that do not exist yet. Returns one entry per requested variant id, in the order given; a variant the sales channel does not have resolves to NOT_FOUND rather than failing the request. Variants already present are returned without calling the sales channel. Throws a 400 error when a variant id is not in the sales channel's id format (for Shopify, gid://shopify/ProductVariant/<numeric id>), and a 400 error (with an extension code of SALES_CHANNEL_NOT_CONNECTED) when the sales channel is not connected.
tag_return
ChatGPTApply tags to a return by name. SET replaces the return's tags; APPEND unions them in. Returns null if no return with that id is owned by the caller.
tag_returns
ChatGPTAdd a tag to returns by name, keeping the tags each return already has. Starts a run and returns it at once; the returns are worked through in the background. Returns null, and starts nothing, if any id is not a return owned by the caller.
tracker
ChatGPTFetch a single shipment tracker by its id.
trackers
ChatGPTList shipment trackers, optionally filtered by status, tracking number, or created/updated date range.
unflag_returns
ChatGPTRemove the flag from flagged returns, putting each back in the status its shipments imply. Starts a run and returns it at once; the returns are worked through in the background. Returns null, and starts nothing, if any id is not a return owned by the caller.
update_calendar_event
ChatGPTChange a calendar event's fields and agenda in one step. Returns null when this store has no event with that id. Editing an event Redo found on the brand's homepage stops Redo from updating it.
update_campaign
ChatGPTUpdate a campaign. Returns null if no campaign with that id is owned by the caller.
update_checkout_experience
ChatGPTChange a checkout experience's settings. Only the fields you pass are changed. Enabling addLandedCosts fails if any shipping method on the experience uses a carrier service that does not support landed cost calculation; the error names the methods. To edit shipping methods themselves use update_shipping_method.
update_checkout_tree
ChatGPTReplace the store's checkout tree. This changes which checkout experience real shoppers are routed to, and takes effect immediately. Call get_checkout_tree first and edit the tree it returns, then preview_checkout_tree to confirm the change before applying it. You must send the COMPLETE tree: this replaces the routing rather than patching part of it, so anything you leave out is gone. Keep each segment's label, or the merchant's own labels for those decisions are lost. The checkout tree decides which checkout experience each shopper is offered. It is a nested tree: each 'segment' tests something about the shopper — their cart, delivery address, customer history, the time of day — and routes them to whenMatches or otherwise. A segment that routes more than two ways has branches instead, taken in order, with one marked isFallback for shoppers none of them match. An 'ab_test' splits shoppers between its treatments. 'checkout_experience' and 'block_checkout' end the routing. A checkout experience that no path reaches is unreachable, and no shopper can be served it. This describes the configured tree, not the outcome for any particular shopper: actual evaluation depends on cart, address and customer data at checkout time that this tool does not have. Checkout experiences and A/B tests are referred to by name, not by ID. A name must match something that already exists on this store — see list_checkout_experiences and list_checkout_ab_tests. Nothing is created by naming it, and a name matching more than one thing is rejected rather than guessed. While an A/B test is running you CAN change where each of its treatments routes, and you can change any other part of the tree around it. You CANNOT rename the test, rename its treatments, change its traffic split or metric, or remove it from the tree — conclude it through the A/B test flow first. Checkout experience widgets are likewise not stored on the tree. Send all of those back exactly as get_checkout_tree returned them: a value that disagrees is refused and named rather than silently dropped, and acknowledgeIgnoredValues applies the rest while leaving it alone. This will also reject a checkout experience name that does not exist on this store. Applying a tree re-creates every node in it, including nodes you did not change. Rates already quoted to shoppers are tied to the nodes that produced them, so their node-level reporting is detached by any apply — including re-applying an identical tree. Change the routing when you mean to, not to confirm it is unchanged; use get_checkout_tree for that.
update_commerce_agent_strategy
ChatGPTUpdate a Commerce Agent strategy. Returns null when this store has no strategy with that id.
update_customer_tag
ChatGPTRename a customer tag. Returns null if no owned tag matches the id.
update_discount_code
ChatGPTUpdate a discount code. Returns null if no code with that id is owned by the caller.
update_dynamic_segment
ChatGPTUpdate a dynamic segment. Returns null if no owned segment matches the id.
update_email_template
ChatGPTUpdate template metadata and/or apply section operations. Returns null if no owned template matches the id. Pass input, operations, or both.
update_inbound_shipment
ChatGPTUpdate an inbound shipment's own details. Returns null if no inbound shipment with that id is owned by the caller. Its line items are set separately with updateInboundShipmentItems, and its status is derived from receiving. Throws a 409 CONFLICT error (with an extension code of SHIPMENT_ALREADY_RECEIVED) when changing the location of a shipment that has already received stock.
update_inbound_shipment_items
ChatGPTSet which units of a purchase order an inbound shipment carries, taking unallocated units from the order and returning ones no longer wanted. Returns null if the caller owns no such shipment and order. A partial allocation persists only while the order has more than one shipment; on an order with a single shipment the next order update restores the full quantity. Throws a 409 CONFLICT error (with an extension code of SHIPMENT_NOT_LINKED_TO_PURCHASE_ORDER, PRODUCT_NOT_ON_PURCHASE_ORDER, PURCHASE_ORDER_QUANTITY_EXCEEDED, or PURCHASE_ORDER_ITEM_HAS_RECEIPTS).
update_knowledge_article
ChatGPTUpdate a Commerce Agent knowledge article. Returns null if no owned article matches the id.
update_marketing_automation
ChatGPTUpdate automation metadata and/or apply step operations. Returns null if no owned automation matches the id. Pass input, operations, or both.
update_packing_slip_template
ChatGPTUpdate an existing packing slip template. Omitted fields keep their current values. When sectionsJson is provided it is a complete replacement of the sections array: parse get_packing_slip_template_detail's sectionsJson, edit it, and pass the full array back as a JSON string. Each block needs type, a unique 24-character hex ObjectId blockId (reuse existing IDs when keeping a section; generate a new ObjectId for new sections), and the properties for that block type from get_packing_slip_block_details. Confirm the desired changes with the merchant before calling.
update_product_customs
ChatGPTUpdate customs information (HS code, country of origin, customs description, material, weight, manufacturer) on product variants. This does the same job as the customs CSV upload on the International returns settings page. Use it when the merchant gives you their product data in any form (a spreadsheet, a supplier list, a pasted table). Map it to these rows yourself, matching variants by sourceId (best) or SKU; list_products_missing_customs shows both. Always call with confirm=false first. That previews the rows and saves nothing: it reports which rows are ready, which have errors, which match no variant, and warnings such as a SKU matching several variants or an HS code that does not look like 6 to 10 digits. Show the merchant the summary and fix what you can. Then call again with the same rows and confirm=true to save. Saving starts a background job; check it with get_customs_update_status. Only use values the merchant gave you. Never guess HS codes or countries. Blank fields keep their saved values; this tool cannot clear a field. Send at most 500 rows per call; split larger lists and preview and confirm each part.
update_product_filter
ChatGPTReplace a product filter on this account. An id from another account, or one that does not exist, is null.
update_purchase_order
ChatGPTUpdate a purchase order. Returns null if no purchase order with that id is owned by the caller. Changing items re-syncs the order's inbound shipments: on an order with exactly one shipment the lines mirror through, and on one with several new lines are left unassigned. Throws a 409 CONFLICT error (with an extension code of PURCHASE_ORDER_NOT_EDITABLE, PURCHASE_ORDER_ITEM_HAS_RECEIPTS, or PURCHASE_ORDER_NUMBER_TAKEN) if the change conflicts with the order's current state.
update_return_status
ChatGPTUpdate the status of a return. Valid statuses: in_transit, delivered, needs_review, in_review, flagged, pre-shipment. For reopening a return (setting to open), use the reopen_return tool instead. For closing a return (setting to complete), use the close_return tool instead. Confirm the desired status with the user before calling this tool.
update_shipping_method
ChatGPTReplace the configuration of one shipping method. Read the method with get_checkout_experience first and send the full configuration back with your changes applied — an update replaces the method's entire configuration. Shipping discount rules, which this API does not expose, are carried over from the existing method rather than cleared, as is priceConstraints when you omit it. A method's type can be changed between 'fixed', 'dynamic' and 'custom'. For a custom method, read its current source with get_custom_shipping_method_code and send the edited source as code; omit code to keep the current script while changing other fields. Always use 'fixed' or 'dynamic' unless the merchant specifically asks for a custom (script-priced) shipping method or provides their own code. When they do, send merchant-supplied code exactly as given. Only bring up custom methods after the merchant does, or when discussing a method that is already custom. Until then, do not mention, list or suggest them, including when asked which method types exist: describe only 'fixed' and 'dynamic'. Changing a custom method's script requires confirmCustomCode after the merchant approves the script. Optional fields are omitted when they are not configured. An absent field means the option is not set, or is not editable through this tool — it does not mean Redo lacks the capability.
update_sms_template
ChatGPTUpdate an SMS template. Returns null if no owned template matches the id.
update_view
ChatGPTUpdate an existing OMS fulfillment-group view. Omitted fields keep their current values. filters and columns are complete replacements when provided: an empty filters array clears filters, and an empty columns array restores the default layout. Pass filterOperator (and/or) with filters to keep the top-level combination; nested groups are flattened by get_view_details and stored as a single-level group. Use folderId "none" to remove the view from a folder. Call list_views to find the view ID and get_view_details to inspect the current configuration before editing. Confirm the desired changes with the merchant before calling. This does not edit inventory, returns, claims, or support views.
update_webhook_endpoint
ChatGPTUpdate a webhook endpoint. Returns null if no endpoint with that id is owned by the caller.
update_workstation
ChatGPTUpdate an existing outbound label workstation in team.settings.outboundLabels.workstations. Replaces the workstation name and selected printers. Omitted printer options use defaults (no rotation, no fit to page). Call list_workstations for the ID and list_printnode_printers for valid printer IDs. Confirm the desired changes with the merchant before calling.
upload_marketing_image
ChatGPTUpload an image for an SMS or email template. Redo checks the real file type, then resizes and compresses it with the same settings as the template editors, and returns a hosted URL. Each upload costs query points by size and also counts against a per-account upload quota; over the quota returns THROTTLED.
upsert_carrier_parcel
ChatGPTCreate or update one predefined FedEx, UPS, or USPS package preset. If a parcel with the same name already exists, it is updated; otherwise a new parcel is created. This writes a single parcel and does not delete other parcels. Call list_carrier_parcels first for valid names and metadata, and list_parcels to see what the merchant already has. Confirm the package name, carrier, and default flag with the merchant before calling. For merchant-defined dimensions, use upsert_custom_parcel instead.
upsert_custom_parcel
ChatGPTCreate or update one custom package preset with merchant-defined dimensions and weight. If a parcel with the same name already exists, it is updated; otherwise a new parcel is created. This writes a single parcel and does not delete other parcels. Call list_parcels first to see existing names. Dimensions and weight are saved in the merchant's unit system; omit lengthUnit and weightUnit to use it, or pass the unit the merchant gave you and the values are converted. Confirm the name, dimensions, and default flag with the merchant before calling. For FedEx, UPS, or USPS predefined packages, use upsert_carrier_parcel instead.
upsert_market
ChatGPTCreate a market, or update one when id is given. Returns null if no market with that id is owned by the caller. Adding a country sets it up on the store's sales channel, so this can take several seconds. Removing a country tears down its Shopify market, catalog and price list. Throws a 400 error with an extension code of MARKET_COUNTRIES_REQUIRED, DUPLICATE_MARKET_COUNTRY, MARKET_COUNTRY_ADDED_AND_REMOVED, MARKET_COUNTRY_NOT_IN_MARKET, INVALID_MARKUP, or INVALID_MARKET_SETTINGS when the input is invalid (settings are checked against the market as it would be after the update), a 400 error with an extension code of UNEXPECTED_MARKET_RESOLUTION for a resolution no conflict needs, a 409 CONFLICT error (with an extension code of MARKET_COUNTRY_IN_USE) when a country already belongs to another market, and a 409 CONFLICT error (with an extension code of MARKET_COUNTRY_CONFLICT and a conflicts extension listing, per country, the conflicting Shopify market handle, its other countries, a reason sentence explaining the conflict, and allowedResolutions as { kind, effect } pairs whose effect says what that choice does to the merchant's Shopify market) when a country being added is in one of the merchant's own Shopify markets without an allowed resolution. Nothing is written when a request fails.
upsert_return_tag
ChatGPTCreate, update, or rename a return tag for the authenticated team. If no tag with name exists, a new one is created. If a tag with name exists and newName is omitted, only its pillTheme is updated. If a tag with name exists and newName is provided, the tag is renamed to newName and cascaded to every return that referenced it and every saved view filter. Confirm with the user before creating a new tag or renaming one.
void_carrier_shipment
ChatGPTVoid a purchased carrier shipment and refund its label charge. Returns null if the shipment does not exist. Idempotent: voiding an already-voided shipment returns the original result.
warehouse_team_member_productivity
ChatGPTWarehouse team member productivity: fulfillment, scan verification, picking, return restocking, putaway, and replenishment metrics per person. Data refreshes hourly from the analytics warehouse.
webhook_endpoint
ChatGPTFetch a single webhook endpoint by its id.
webhook_endpoints
ChatGPTList webhook endpoints.
approve_return
Claudeask_redo
Claudeclose_return
Claudecreate_draft_return
Claudedelete_return_tag
Claudeedit_custom_analytics_report
Claudegenerate_custom_analytics_report
Claudeget_automation
Claudeget_automation_performance
Claudeget_automation_step_configuration
Claudeget_automation_step_performance
Claudeget_campaign
Claudeget_campaign_performance
Claudeget_custom_analytics_report
Claudeget_customer
Claudeget_discount_config
Claudeget_generated_discount_code
Claudeget_order
Claudeget_return
Claudeget_segment
Claudeget_template
Claudelist_automations
Claudelist_campaigns
Claudelist_custom_analytics_reports
Claudelist_customers
Claudelist_orders
Claudelist_return_tags
Claudelist_returns
Claudelist_segments
Claudemanage_draft_return
Claudeprocess_return
Claudereopen_return
Claudesubmit_draft_return
Claudeupdate_return_status
Claudeupsert_return_tag
Claude