Commerce
Space MCP tools in the Commerce scope (commerce). Reach these with a wks_live_ key over space-mcp or space-api.
Tools in the commerce scope, callable over space-mcp (tools/call) or space-api (REST) with a wks_live_* key that grants commerce.
add_job_date
Scope: commerce:write
Put a date on the job: a delivery (a window between on_date and end_date), an appointment (a slot: at_time–end_time), or something else. firmness estimated|confirmed. where_address/where_details say where; needs says what the person going must bring. visible_to_client false keeps it to our side. step_index pins it to one of the steps; assigned_participant_id to one of our people.
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes | |
kind | delivery | appointment | other | ||
label | string | ||
on_date | string | yes | YYYY-MM-DD |
at_time | string | HH:MM, the shop's clock. | |
end_date | string | ||
end_time | string | ||
firmness | estimated | confirmed | ||
where_address | string | ||
where_details | string | ||
where_lat | number | ||
where_lng | number | ||
needs | string | ||
visible_to_client | boolean | ||
assigned_participant_id | string | ||
step_index | number |
add_job_note
Scope: commerce:write
A private note on the job — our side only, the client never sees it. Pin it to a date or a stage, or leave it on the job.
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes | |
body | string | yes | |
date_id | string | ||
stage_id | string |
add_job_person
Scope: commerce:write
Add a person to a job. side 'business' (default) = one of ours — a driver, a technician — who sees the work and can post updates but never a figure; side 'client' = someone on the client's side who sees the figures and can pay. They get their own link.
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes | |
name | string | yes | |
email | string | Where their link goes; optional for our side. | |
role | string | e.g. Driver, Photographer, Accountant. | |
side | business | client | ||
can_approve | boolean | Client side: may confirm delivery. | |
can_post_updates | boolean | Our side: may post updates (default true). |
add_job_stage
Scope: commerce:write
Add a money stage. On a draft it is simply added; on a sent job it is PROPOSED and needs the client's agreement before it can be paid.
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes | |
label | string | yes | |
amount | number | yes | Whole currency units. |
due_rule | on_accept | on_checkpoint | on_delivery | on_date | manual | ||
due_step_index | number | ||
due_date | string | ||
hold_until_delivery | boolean |
answer_product_question
Scope: commerce:write
Answer (or re-answer) a buyer's question on a listing. The answer is PUBLIC on the listing's Q&A tab, under the business — short, honest, no promises the listing doesn't make. question_id from list_product_questions.
| Parameter | Type | Required | Description |
|---|---|---|---|
question_id | string | yes | |
answer | string | yes |
apply_email_theme
Scope: commerce:write
Dress every buyer email in one of the house designs in a single move: 'studio_white' (editorial stationery), 'dark_signal' (premium night), 'bold_banner' (poster energy), 'default' (the platform frame), or 'custom' (put this store's OWN designs back on). Covers the receipt family, the invoice AND its printable document; the store's live logo and accent flow in automatically. Switching is always reversible — designs you authored with set_commerce_email_template are kept on their own shelf, never overwritten by a theme. A theme is an ordinary token design — restyle it afterwards with set_commerce_email_template. The owner previews and switches on Commerce → Settings.
| Parameter | Type | Required | Description |
|---|---|---|---|
theme | studio_white | dark_signal | bold_banner | default | custom | yes |
cancel_job
Scope: commerce:write
Cancel a job on which no money has moved. If money has, refund from Sales and close it instead.
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes |
cancel_job_stage
Scope: commerce:write
Withdraw an unpaid stage (pending, proposed or payable). A paid stage cannot be cancelled — refund from Sales.
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes | |
stage_id | string | yes |
check_purchase
Scope: commerce:read
Has the person you are talking with bought this listing? Answers from their own Wakato orders (never by name): { bought, times, test_only, refunded, latest_order, answer }. Works in a one-to-one chat — with someone who has you, or your own DM. A TEST order (no money moved) is reported as test_only, not bought.
| Parameter | Type | Required | Description |
|---|---|---|---|
listing_id | string | yes | The listing's id ([listing:<id>] in your instructions). |
close_job
Scope: commerce:write
Close an active or delivered job once nothing is held on it.
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes |
control_subscription
Scope: commerce:write
Cancel or resume a customer's subscription. action: 'cancel_at_period_end' (graceful — keeps access until the period ends), 'cancel_now' (immediate — access revoked at once), or 'resume' (undo a scheduled cancel). subscription_id from list_subscriptions. Access grants are revoked automatically.
| Parameter | Type | Required | Description |
|---|---|---|---|
subscription_id | string | yes | |
action | cancel_at_period_end | cancel_now | resume | yes |
create_discount
Scope: commerce:write
Create a promo code buyers type at checkout. Set exactly ONE of percent_off (1–100) or amount_off_cents. Applies to the merchandise subtotal, never shipping; validated server-side; a redemption counts only when the order settles. Scope with product_ids and/or tags (product must carry ANY listed tag — e.g. tags:["men"] for a menswear sale); omit both for storewide. Optional: min_subtotal_cents, max_redemptions, per_buyer_limit, starts_at/expires_at (ISO).
| Parameter | Type | Required | Description |
|---|---|---|---|
code | string | yes | 3–40 chars, letters/numbers/dashes. Stored uppercase (SUMMER20). |
percent_off | number | ||
amount_off_cents | number | ||
currency | string | Fixed-amount codes only: restrict to one currency (e.g. usd). | |
min_subtotal_cents | number | ||
product_ids | string[] | ||
tags | string[] | ||
max_redemptions | number | ||
per_buyer_limit | number | ||
starts_at | string | ||
expires_at | string |
create_invoice
Scope: commerce:write
Create an invoice from the connected commerce account. line_items amounts are in CENTS (unit_amount_cents: 15000 = $150.00). Defaults to a draft; pass send:true to immediately number it and email the recipient (gapless INV-#### numbering, payment link auto-created). If the space configured a billing email address, it sends from that address.
| Parameter | Type | Required | Description |
|---|---|---|---|
recipient_name | string | yes | |
recipient_email | string | yes | |
recipient_phone | string | Optional — how to reach the person billed. | |
line_items | object[] | yes | |
tax_cents | number | ||
due_date | string | YYYY-MM-DD | |
notes | string | ||
contact_id | string | Optional space contact to link for Contact 360. | |
send | boolean | true = send immediately instead of leaving a draft. |
create_job
Scope: commerce:write
Start a job for one client. A CUSTOM OFFER: pass product_id (one of the store's service listings) and the listing's title, what's included, steps and price fill whatever you leave blank — then name your own price in stages or your own scope, and only this client sees it; the listing never changes. Without product_id it is a standalone job. Stages are the money, in whole currency units: [{label:'Deposit', amount:50, due_rule:'on_accept'}, {label:'Balance', amount:70, due_rule:'on_delivery'}] (due_rule on_accept|on_checkpoint|on_delivery|on_date|manual; hold_until_delivery default true). Steps are the plain-words checkpoints the work moves through. Saved as a draft unless send:true.
| Parameter | Type | Required | Description |
|---|---|---|---|
client | object | yes | |
product_id | string | Make it a custom offer on this listing (list_products, listing_type service). | |
title | string | ||
scope | string | What's included — the sentence(s) the client reads. Defaults to the listing's. | |
steps | string[] | The checkpoints, in order, e.g. ['Brief agreed','First draft','Final files']. Defaults to the listing's. | |
stages | object[] | Defaults to one 'Payment' stage at the listing's price when product_id is given. | |
currency | string | ||
send | boolean | true = send it to the client now. |
create_payment_link
Scope: commerce:write
Create a shareable checkout link for the connected commerce account. amount_cents is in CENTS (1999 = $19.99). link_type one_time (default) or subscription (needs billing_interval). Returns pay_url to share. Requires the seller's Stripe payouts to be enabled.
| Parameter | Type | Required | Description |
|---|---|---|---|
title | string | yes | |
amount_cents | number | yes | |
currency | string | 3-letter code, default usd. | |
link_type | one_time | subscription | ||
billing_interval | day | week | month | year | ||
billing_interval_count | number | ||
description | string | ||
success_message | string | ||
redirect_url | string | ||
require_signin | boolean |
create_product
Scope: commerce:write
Create a product in the connected commerce account (starts as an unpublished draft). price is in whole currency units (e.g. 19.99). Set product_type:'physical' for shippable goods (then set inventory_quantity + shipping_fee_cents); default 'digital' has no stock/shipping. For size/color options use set_product_variants after creating. Go live with update_product {status:'active', is_published:true}.
| Parameter | Type | Required | Description |
|---|---|---|---|
title | string | yes | |
description | string | ||
short_description | string | ||
price | number | Whole currency units (19.99 = $19.99). 0 or is_free for free products. | |
is_free | boolean | ||
listing_type | product | service | ||
product_type | digital | physical | physical = shippable (stock + shipping); digital = default. | |
thumbnail_url | string | ||
images | string[] | Gallery image URLs (first is used as thumbnail if none set). | |
tags | string[] | Free-form product tags (max 20). Storefront pages build live category sections from these via data-tags="<tag>" (e.g. tag 'men' → a Men section). | |
inventory_quantity | number | Stock on hand (physical only). | |
shipping_fee_cents | number | Flat shipping fee in CENTS (physical only; 0 = free). | |
require_signin | boolean | Require a Wakato account to buy (no guest checkout). Auto-enforced anyway for products that enrol the buyer in a community/group or grant an entitlement. | |
delivery_days | number | SERVICES: days to deliver. | |
revisions | number | SERVICES: revisions included. | |
requirements | string | SERVICES: what you need from the buyer before starting. | |
billing_interval | one_time | month | year | SERVICES: one-time engagement or a subscription. | |
billing_interval_count | number | SERVICES: bill every N intervals (1–12). | |
service_mode | online | in_person | SERVICES: delivered remotely or on-site. | |
service_area | string | SERVICES (in_person): the area served. | |
booking_page_id | string | SERVICES (in_person): a booking page of this space buyers schedule on (list_booking_pages). | |
deliverable_type | download | external_link | snapshot | manual | PRODUCTS: how the buyer receives it — download (files the seller attaches), external_link (deliverable_url), snapshot, or manual (you deliver directly). | |
deliverable_url | string | PRODUCTS (external_link / download): where the buyer accesses it. | |
file_format | string | PRODUCTS: e.g. 'PDF', 'Figma', 'ZIP'. | |
license_type | personal | commercial | extended | ||
author | string | ||
version | string | ||
compatible_with | string | ||
whats_included | string[] | Bullets of what the buyer gets (max 30). | |
video_url | string | Promo video (YouTube / Vimeo / mp4) shown in the gallery. | |
ship_from | object | PHYSICAL: ship-from address {line1, line2?, city, state?, postal_code, country (ISO-2), name?}. | |
agent_discoverable | boolean | Let EXTERNAL AI shopping assistants (ChatGPT, Google) find it through Wakato's product feed. Reaches them ONLY once the listing is approved on the Wakato Marketplace (marketplace_enabled + review). Omit to inherit the space default. | |
agent_checkout_enabled | boolean | Agentic checkout — let shopping agents COMPLETE the purchase (not just find it). Defaults on with discovery; set false for discover-only (agent recommends, buyer checks out on your own site). | |
brand | string | Brand for the product feed (defaults to the store name). | |
gtin | string | The listing's barcode — UPC (12), EAN (13), GTIN-8 or GTIN-14 digits; the check digit is verified, a wrong one is refused. Omit for digital/handmade goods. With variants, put each row's own on set_product_variants instead. | |
google_product_category | string | Google product-taxonomy category, e.g. 'Apparel & Accessories > Clothing' (optional). | |
condition | new | used | refurbished | Item condition for the feed (default 'new'). |
delete_product
Scope: commerce:write
Delete a listing (with its packages, resources, variants, files, questions and reviews). If any order references it, it is ARCHIVED instead (off sale everywhere, history kept). confirm_title must match the listing's title exactly. Prefer update_product {status:'archived'} for a pause.
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | string | yes | |
confirm_title | string | yes |
duplicate_product
Scope: commerce:write
Copy a listing as a new unpublished draft with the same details, packages, resources, variants and deliverable files (questions and reviews are not copied). Optional title; defaults to '<title> (copy)'. Then edit and go live.
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | string | yes | |
title | string |
fulfill_order
Scope: commerce:write
Mark a physical order shipped with tracking — notifies the buyer and starts the payout release window. order_id from list_orders; carrier e.g. USPS/UPS/FedEx/DHL.
| Parameter | Type | Required | Description |
|---|---|---|---|
order_id | string | yes | |
tracking_number | string | yes | |
carrier | string | yes |
get_checkout_design
Scope: commerce:read
Read how THIS space's storefront is designed: the checkout brand tokens, the product-card template and the product detail-page templates (checkout_shell_html is a retired layout — it is not drawn). Use before changing them.
get_commerce_email_design
Scope: commerce:read
Read the buyer-email design for this space's store: the receipt / invoice / shipped email frames (null = default Wakato frame carrying the store's name + checkout branding) and the sender identity buyers see. Buyers ALWAYS get these emails automatically at payment/shipping — design only changes the frame.
get_commerce_feed
Scope: commerce:read
Get the PUBLIC agentic-commerce product-feed URLs for this space (JSON for AI shopping agents, XML for Google Merchant) plus how many products are currently discoverable. Share these so external AI agents (ChatGPT, Google) can find and sell the space's opted-in products. A product only appears when agent_discoverable is on AND it is active + published.
get_commerce_policies
Scope: commerce:read
Read the business's canonical policies — terms & conditions, refund policy, shipping policy. THE source of truth: quote these verbatim when a buyer asks; never improvise a policy that isn't written here. Buyers also see them on payment pages and printed invoice documents. null = not written yet (ask the seller, then save with set_commerce_policies).
get_commerce_report
Scope: commerce:read
How the store is doing: orders, revenue, average order, refunds, open disputes for a period (7d | 30d | 90d | 12m | all, or from/to ISO dates), top products, a per-day series, sales by source (direct / community / referral), plus what needs attention — unanswered questions, active subscriptions, low stock.
| Parameter | Type | Required | Description |
|---|---|---|---|
period | 7d | 30d | 90d | 12m | all | ||
from | string | ISO date (overrides period) | |
to | string | ISO date |
get_commerce_status
Scope: commerce:read
Check whether THIS space is set up to take payments, in plain terms — read this BEFORE telling anyone how to 'set up' or 'connect' payments. Returns stage (not_set_up | pending | ready), a summary to relay, and a next_step (null when ready). If it's already ready, there is nothing to set up. Never describe payment setup from memory, and never name the underlying payment provider — Wakato white-labels it.
get_conversation
Scope: commerce:read
A conversation with a buyer, oldest message first, with what it is about (product_id / order_id in each message's context).
| Parameter | Type | Required | Description |
|---|---|---|---|
conversation_id | string | yes |
get_job
Scope: commerce:read
Read one job in full: the engagement, its stages (with pay links where payable), people, dates, private notes, requirements, and the listing it was started from (title + listed price) when it is a custom offer.
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes |
get_order
Scope: commerce:read
Get one order from the connected commerce account.
| Parameter | Type | Required | Description |
|---|---|---|---|
order_id | string | yes |
get_product
Scope: commerce:read
Get one product from the connected commerce account.
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | string | yes |
get_storefront_sdk_reference
Scope: commerce:read
How to build a storefront ENTIRELY in the seller's own design and still sell through Wakato: the Storefront SDK every served page carries. Bind a listing's facts (title, price, photos, options, stock, shipping) with data-wakato-listing / data-wakato-field marks or Wakato.store — they stay live when the seller edits the listing, never hard-code them — and build your own checkout form with Wakato.checkout.quote (Wakato's own arithmetic: shipping, discount, tax, total), Wakato.checkout.paymentField (Wakato's secure card field inside your design) and Wakato.checkout.pay (charges exactly the quote). Read this before designing a product page or a checkout your own way. Free.
get_test_kit
Scope: commerce:read
The shop's TEST KIT: what to type to rehearse a listing before it goes live — a test buyer, addresses (one per country the shop ships to, one it does NOT cover, one with no postal code), test promo codes, and the platform's test cards (each number = one outcome). Nothing in it is real. Then place_test_order. Read this before rehearsing; never invent a card or an address.
list_after_purchase_targets
Scope: commerce:read
The store owner's PM groups, communities and active Wakato Pass templates — the ids an automation on commerce_order_paid uses to let a buyer in (add_buyer_to_group, add_buyer_to_community, enroll_in_pass). After a sale is an automation, not a listing setting.
list_buyers
Scope: commerce:read
Aggregated buyers of the connected commerce account: payment-link/invoice payers grouped by email with payment count and total. Payout balances are never exposed.
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | number |
list_conversations
Scope: commerce:read
The store's Inbox: conversations buyers opened from a listing, the business profile or an order (filter: all | waiting — unread on the store's side | orders | closed). This is where 'Message us' lands; it is the same list the seller sees in Commerce → Inbox and the space sees in its Commerce.
| Parameter | Type | Required | Description |
|---|---|---|---|
filter | all | waiting | orders | closed | ||
limit | number |
list_discounts
Scope: commerce:read
List the seller's promo codes (code, percent/fixed amount, scope, redemption count, active/expiry). A code with is_test true belongs to the test kit and works only on a test order.
list_disputes
Scope: commerce:read
Disputes buyers opened on the store's orders, with your response and the admin's resolution. status filter: open | resolved.
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | ||
limit | number |
list_invoices
Scope: commerce:read
List the connected commerce account's invoices (status: draft|sent|viewed|paid|overdue|void).
| Parameter | Type | Required | Description |
|---|---|---|---|
status | draft | sent | viewed | paid | overdue | void | ||
limit | number | ||
offset | number |
list_jobs
Scope: commerce:read
List the connected store's jobs (engagements): a scoped piece of work for one client, paid in stages, with steps, dates, people and a thread. kind is custom_offer (started from a listing by hand), bought_as_listed (a sale opened it) or standalone. Filter by status (draft|sent|active|delivered|closed|declined|cancelled) or client_email.
| Parameter | Type | Required | Description |
|---|---|---|---|
status | draft | sent | active | delivered | closed | declined | cancelled | ||
client_email | string | ||
limit | number | Default 50, max 200. | |
offset | number |
list_marketplace_categories
Scope: commerce:read
The Wakato Marketplace's categories (id, name, parent). Set a listing's with update_product { marketplace_category_id } before or when submitting it (marketplace_enabled:true).
list_orders
Scope: commerce:read
List the connected commerce account's marketplace orders (amount, status, fulfillment, product).
| Parameter | Type | Required | Description |
|---|---|---|---|
status | pending | paid | delivered | completed | refunded | disputed | ||
limit | number | ||
offset | number |
list_payment_links
Scope: commerce:read
List the connected commerce account's payment links with their public pay_url.
| Parameter | Type | Required | Description |
|---|---|---|---|
status | active | inactive | archived | ||
limit | number |
list_product_deliverable_files
Scope: commerce:read
List the paid files a digital product delivers after purchase (private; buyers get signed download links).
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | string | yes |
list_product_questions
Scope: commerce:read
Buyer questions on the store's listings (newest first; unanswered_only to see what is waiting). Buyers wait on these — answer with answer_product_question. Omit product_id for every listing.
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | string | ||
unanswered_only | boolean | ||
limit | number |
list_product_resources
Scope: commerce:read
List a product's public Resources (learn-more videos, articles, files shown in the listing's Resources tab).
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | string | yes |
list_product_variants
Scope: commerce:read
Read a product's option axes (e.g. Size, Color) and its concrete variants (each with price override + stock).
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | string | yes |
list_products
Scope: commerce:read
List the connected commerce account's products (title, price, status), newest first, archived ones left out unless you pass status:'archived'. The answer says how many there are (total, has_more): to find one listing by name pass search — never conclude a listing does not exist from one page of results. Every LIVE one is on this space's storefront pages automatically. Requires a commerce account connected to this space.
| Parameter | Type | Required | Description |
|---|---|---|---|
status | draft | active | paused | archived | ||
search | string | Filter by title (case-insensitive contains). | |
limit | number | ||
offset | number |
list_reviews
Scope: commerce:read
Reviews on the store's listings (rating, title, comment, your reply). unreplied_only to see what still has no reply. Omit product_id for every listing.
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | string | ||
unreplied_only | boolean | ||
limit | number |
list_subscriptions
Scope: commerce:read
List the commerce account's recurring subscriptions (id, buyer, source, status, period end, cancel-at-period-end). Filter by status (active|past_due|canceled).
| Parameter | Type | Required | Description |
|---|---|---|---|
status | active | past_due | canceled | ||
limit | number |
mark_invoice_paid
Scope: commerce:write
Mark a SENT invoice as paid — for payments taken outside Wakato (cash, bank transfer, etc.). Fires the invoice-paid automation. The invoice must have been sent (not a draft) and not already paid/void. invoice_id from list_invoices.
| Parameter | Type | Required | Description |
|---|---|---|---|
invoice_id | string | yes |
mark_job_delivered
Scope: commerce:write
Say the work is done. The client is asked to confirm; whatever is held releases when they do.
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes | |
note | string |
mark_job_stage_paid_outside
Scope: commerce:write
Record that a stage was paid outside Wakato (cash, bank transfer, mobile money). Wakato did not hold or process that money and the receipt says so. Only on an accepted job.
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes | |
stage_id | string | yes | |
method | cash | bank_transfer | mobile_money | other | yes | |
reference | string | A transfer reference, receipt number… | |
paid_at | string | ISO date-time; defaults to now. |
message_buyer
Scope: commerce:write
Write to the buyer of an order AS THE BUSINESS: an email to the address that paid (replies reach the store's mail) and, for Wakato buyers, the same note in their Wakato PM from the seller's account. OUTBOUND — keep it about their order. order_id from list_orders.
| Parameter | Type | Required | Description |
|---|---|---|---|
order_id | string | yes | |
message | string | yes | |
subject | string |
offer_listing
Scope: commerce:read
Put one of your shop's listings in the chat you are answering, as a card with a Buy button — THE way someone pays you: call it whenever they ask to buy, ask the price of, or need the work of a listing (for themselves or anyone else), instead of explaining how to pay. Use it when the person needs something your instructions say is paid (a tagged listing, [listing:<id>]); in a chat with someone who has you, ONLY the listings tagged in your instructions may be offered. Say in a line what it covers, then offer it; don't start the paid part until it's bought. When they buy, a line lands in this chat saying so — that is your go (check_purchase answers any time). Returns { offered, message_id, listing }.
| Parameter | Type | Required | Description |
|---|---|---|---|
listing_id | string | yes | The listing's id — from your instructions' tag [listing:<id>] or list_products. |
note | string | Optional line shown above the card, e.g. 'A full promo with two rounds of changes.' |
offer_payment_link
Scope: commerce:read
Charge the person you are talking to for THIS job: makes a one-time payment link for the amount you and they agreed and puts it in this chat as a card with a Pay button. Only that person can pay it, and it closes once paid. Use it when the work isn't one of your listings or needs its own price ("a 30-second ad with 2 revisions: $49"); for a tagged listing use offer_listing. Say in a line what the payment covers, then send it; don't start the paid part until it's paid. When they pay, a line lands in this chat saying so — that is your go. Only in a one-to-one chat. Returns { offered, message_id, pay_url, amount_cents, currency }.
| Parameter | Type | Required | Description |
|---|---|---|---|
title | string | yes | What they are paying for, e.g. '30-second spring sale ad'. |
amount_cents | number | yes | The price in CENTS (4900 = $49). At least 500. |
currency | string | 3-letter code, default usd. | |
note | string | Optional line shown above the card, e.g. 'Includes two rounds of changes.' |
open_commerce_account
Scope: commerce:write
Open a commerce account (a shop) FOR THIS SPACE when get_commerce_status says not_set_up. The shop is owned by the SPACE OWNER, named after the space unless you pass a name, and connected to this space in the same step — after it succeeds every other commerce tool works (products, invoices, payment links). Only allowed when the owner has switched on 'the agent may open a commerce account' for the space; otherwise the error says so — relay it and ask the owner. The new shop cannot collect money until the owner picks which verified business it pays out through (Account Management → Commerce accounts); say that plainly and build the catalog as drafts meanwhile. Never name the underlying payment provider.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Shop name. Defaults to the space's name. |
place_test_order
Scope: commerce:write
Rehearse a purchase of a listing (a DRAFT, or LIVE bought as a test) exactly as a buyer would: the real checkout, the shop's test kit for the buyer and address, a test card for the outcome. 'pays' places a test order (no money, no stock, counts toward nothing — emails, the job and automations run for real); 'declined' answers with the decline; 'needs_verification' walks the bank challenge then pays. Pick a 'not_covered' address to rehearse the shipping refusal; pass a promo code to rehearse it. A live listing may be rehearsed too — it stays on sale and the order is still a test. Never a real purchase.
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | string | yes | |
outcome | pays | declined | needs_verification | Default 'pays'. | |
address_id | string | An id from get_test_kit.addresses. Omit for the first one. | |
discount_code | string | A promo code to try — a test one from the kit, or a real one of the shop's. | |
quantity | number | 1–20, default 1. | |
variant_id | string | For a listing with options (size, colour): the variant to buy. Omitted = the first one in stock. | |
package_id | string | For a listing sold in packages (Basic / Standard / Premium): the package to buy. Omitted = the cheapest. | |
slot | object | For a service booked at a time: { date: 'YYYY-MM-DD', start: 'HH:MM' } on the booking page's clock. Omitted = the first free time in the next 14 days. | |
route | object | For a delivery from one place to another: { pickup_address, delivery_address, delivery_country_code, what?, pickup_lat?, pickup_lng?, delivery_lat?, delivery_lng? } — a distance-priced one needs all four coordinates. Required for a route listing (the checkout refuses one without it, in words). |
post_job_update
Scope: commerce:write
Post into the job's thread as the business. Either a text update (body), or a TRACKING NUMBER (tracking: {carrier, number, url}) — that one also lands at the top of the job for the client. A sent job only.
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes | |
body | string | ||
tracking | object |
refund_order
Scope: commerce:write
Refund a marketplace order to the buyer via the original payment (full, or partial with amount_cents in CENTS). ⚠️ Money leaves the business and can't be un-refunded. The order/payout status updates automatically once the refund settles. order_id from list_orders.
| Parameter | Type | Required | Description |
|---|---|---|---|
order_id | string | yes | |
amount_cents | number | Partial refund amount in cents; omit for a full refund. | |
reason | string |
remove_job_date
Scope: commerce:write
Take a date off the job.
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes | |
date_id | string | yes |
remove_job_note
Scope: commerce:write
Remove a private note (note_id from get_job).
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes | |
note_id | string | yes |
remove_job_person
Scope: commerce:write
Take a person off a job (participant_id from get_job).
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes | |
participant_id | string | yes |
reply_conversation
Scope: commerce:write
Reply to a buyer in the store's Inbox AS THE BUSINESS. They see it on their order page / the listing and by email. Keep it about their question; say when you don't know. close:true marks the conversation done.
| Parameter | Type | Required | Description |
|---|---|---|---|
conversation_id | string | yes | |
body | string | yes | |
close | boolean |
reply_to_review
Scope: commerce:write
Reply to a review as the business — PUBLIC under the review. Thank a good one briefly; address a bad one plainly and say what you'll do. Pass reply:null to remove a reply. review_id from list_reviews.
| Parameter | Type | Required | Description |
|---|---|---|---|
review_id | string | yes | |
reply | string |
request_job_stage
Scope: commerce:write
Ask the client for a stage now (stage_id from get_job): they get the invoice and a pay link. The job must be active or delivered.
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes | |
stage_id | string | yes |
respond_to_dispute
Scope: commerce:write
Respond to an open dispute for the admin who resolves it: what was delivered, when, and any evidence (tracking, links, dates). Read the order first (get_order). dispute_id from list_disputes.
| Parameter | Type | Required | Description |
|---|---|---|---|
dispute_id | string | yes | |
response | string | yes |
send_invoice
Scope: commerce:write
Send (or re-send) an invoice: assigns the gapless number on first send, creates/reprices its payment link, emails the recipient, returns the pay_url.
| Parameter | Type | Required | Description |
|---|---|---|---|
invoice_id | string | yes |
send_job
Scope: commerce:write
Send a draft job to its client. They get a link (and Messages, if they have an account), accept, and pay the first stage; the job goes active when they do.
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes |
set_checkout_branding
Scope: commerce:write
Color THIS space's checkout — the sheet that opens over your pages when someone buys: its Pay button and the secure payment field take your colors, font and corner radius. Colors are hex (#RRGGBB); logoUrl must be https. Your cards, product pages and Buy buttons are designed on the page itself (set_product_card_template, set_product_page_template). Pass clear:true to revert to the default theme.
| Parameter | Type | Required | Description |
|---|---|---|---|
colorPrimary | string | Buttons/accents, hex e.g. #C9A227 | |
colorBackground | string | Surface background, hex | |
colorText | string | Body text, hex | |
colorDanger | string | Error text, hex | |
fontFamily | string | e.g. "Inter, sans-serif" | |
borderRadius | string | e.g. 12px | |
logoUrl | string | https logo shown on checkout | |
clear | boolean | Revert to the default theme |
set_checkout_layout
Scope: commerce:write
RETIRED — the checkout is no longer wrapped in a layout: it opens as a sheet over your own page. Design the page instead (set_product_card_template, set_product_page_template, your own Buy buttons carrying data-wakato-checkout="<product id>" or calling Wakato.checkout(id)) and color the checkout with set_checkout_branding. Only clear:true still works (it empties an old layout).
| Parameter | Type | Required | Description |
|---|---|---|---|
shell_html | string | The checkout layout HTML (presentational only) | |
clear | boolean | Revert to the default checkout panel |
set_commerce_email_template
Scope: commerce:write
Design a buyer email END TO END — same grammar as product cards/pages: the platform fills facts into your layout. SIX independently designable kinds: 'receipt' (order receipts, and the fallback for the others), 'payment_link' (payment-link receipts), 'invoice' (the pay-me document), 'invoice_paid' (the settled receipt), 'shipped' (the shipping notice), 'refund' (the refund confirmation). payment_link/invoice_paid/shipped/refund fall back to the receipt design when unset, so one design can still cover everything. TWO modes: (a) BLOCK — include one <div data-wakato-receipt-slot></div> and the whole facts block mounts there; (b) TOKEN — lay everything out yourself with {{items}} (items+totals table) + for receipts/shipped {{actions}} (the buyer's download/track/review buttons + notes) + {{statement_line}} (card-statement facts), or for invoices {{pay_button}}; those are MANDATORY and enforced at save — buyers lose downloads or the pay link without them. Optional everywhere: {{store_name}} {{buyer_name}} {{reference}} {{date}} {{total}}; invoice also has {{bill_to}} {{from}} {{legal}} (the business's legal name/address/tax id — fill them via update_business_details) {{notes}} {{due_date}} {{issued_date}} {{reminder}} {{pay_qr}} (a scannable brand-tinted pay-QR image) {{document_link}} (the recipient's view/print/save-as-PDF link — the emailed invoice is also a printable DOCUMENT). Logos/photos: any https <img> works. Inline style= only; no scripts/forms. clear:true reverts a kind to the default. The owner previews every email on Commerce → Settings.
| Parameter | Type | Required | Description |
|---|---|---|---|
kind | receipt | payment_link | invoice | invoice_paid | shipped | refund | yes | |
template_html | string | The email design HTML (presentational only — block or token mode) | |
clear | boolean | Revert this kind to its default/fallback |
set_commerce_policies
Scope: commerce:write
Write the business's policies (terms & conditions / refund / shipping) — plain text, saved on the BUSINESS so they hold across every space it operates in. They render to buyers on every payment page and in the terms section of printable invoice documents, and agents answer from them. Partial update: only keys you pass change; empty string clears one. These are real commitments the seller is bound by — save what the seller actually decided, don't author policy on their behalf.
| Parameter | Type | Required | Description |
|---|---|---|---|
terms | string | Terms & conditions (plain text, max 8000 chars; '' clears) | |
refund | string | Refund/return policy (plain text; '' clears) | |
shipping | string | Shipping policy (plain text; '' clears) |
set_job_step
Scope: commerce:write
Move a running job to a step (0-based index into its steps), optionally with a note the client reads. Stages due on that step become payable.
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes | |
index | number | yes | |
note | string |
set_job_steps
Scope: commerce:write
Replace the job's steps (the full ordered list). Steps already passed can be renamed, not removed.
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes | |
steps | string[] | yes |
set_product_after_purchase
Scope: commerce:write
Set or clear the LINK a buyer gets after paying for this product (link_url + link_label — a Discord/WhatsApp/Telegram invite, a course platform, a booking page), shown on the thank-you page, the receipt and their order; it never forces a Wakato sign-in. Everything else after a sale is an AUTOMATION: create an automation on commerce_order_paid with trigger_config.product_id and add_buyer_to_group / add_buyer_to_community / enroll_in_pass / agent_message_buyer — group_id, community_id and pass_template_id here are refused.
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | string | yes | |
group_id | string | ||
community_id | string | ||
pass_template_id | string | ||
points_per_purchase | number | Points awarded on every settled purchase (pass only). | |
link_url | string | ||
link_label | string | Button label, e.g. 'Join our Discord' (max 60 chars). |
set_product_card_template
Scope: commerce:write
Design the product CARD every listed product renders into on this space's storefront pages (grids + single cards). It is YOUR design: any HTML, <style>, classes and <script> (put shared CSS/JS on the page once rather than in every card). Tokens (escaped — safe in text or inside an attribute): {{id}} {{title}} {{price}} (formatted: "$28", "From $40", "$9/month") {{price_amount}} {{currency}} {{description}} {{image}} (first photo as an <img>) {{image_url}} {{images}} (swipeable strip of every photo) {{rating}} (★ fragment, empty until reviewed) {{rating_avg}} {{rating_count}} {{url}} (the product's live detail page) {{available}} ("true"/"false"; the card's wrapper also carries data-available) {{buy_label}} (Buy now / Book now / Subscribe / Sold out…) {{buy_url}} (the checkout's address — a plain link that works even with no script) {{checkout_attrs}} {{buy}}. BUY BUTTON: use the ready-made {{buy}}, or design your own — any element carrying {{checkout_attrs}} (= data-wakato-checkout="<id>") opens the platform checkout OVER the page on click, e.g. <button {{checkout_attrs}} class="buy">{{buy_label}}</button> ({{checkout_attrs}} is empty when sold out or for a quote). The checkout itself — fields, card, payment — is the platform's; color it with set_checkout_branding. To design EVERYTHING yourself — the product page and the checkout form too — bind the listing with the Storefront SDK (data-wakato-listing / data-wakato-field marks, Wakato.store, Wakato.checkout.quote / paymentField / pay): read get_storefront_sdk_reference first. clear:true reverts to the default card.
| Parameter | Type | Required | Description |
|---|---|---|---|
template_html | string | Card template HTML with {{...}} tokens — any HTML/CSS/JS | |
clear | boolean | Revert to the default product card |
set_product_deliverable_files
Scope: commerce:write
REPLACE the paid files a digital product delivers after purchase (stored privately; buyers download through signed links on their order page and receipt). Each file: asset_id (a document in this space's asset library — upload_asset first) OR file_name + data_base64 (+ mime_type). Max 20 files, 50 MB each. Attaching files sets deliverable_type to 'download'. [] clears.
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | string | yes | |
files | object[] | yes |
set_product_packages
Scope: commerce:write
SERVICES: offer tiered pricing (Basic / Standard / Premium) instead of one flat price — REPLACES the product's packages with this list (max 5, in order). Each: name, price (whole currency units), optional delivery_days, revisions, description, features[]. The listing then reads 'Packages from' the cheapest tier and buyers pick one at checkout. Pass [] to go back to a single price (then set price with update_product).
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | string | yes | |
packages | object[] | yes |
set_product_page_template
Scope: commerce:write
Design the product DETAIL PAGE. Every listed product automatically has a live page at /product/<product_id> (cards link to it with {{url}}) — this is the template it renders through: a full HTML document that is entirely YOURS (any <style>, classes, <script>, fonts, your site's own nav and footer). Same tokens as the card ({{id}} {{title}} {{price}} {{price_amount}} {{currency}} {{short_description}} {{image}} {{image_url}} {{rating}} {{rating_avg}} {{rating_count}} {{available}} {{buy_label}} {{buy_url}} {{checkout_attrs}} {{buy}}) plus {{description}} (the long description), {{images}} (full gallery), {{reviews}} (the review list) and {{product_json}} — every fact as JSON, variants included [{id, options, price, available, image_url}], for your own script: <script type="application/json" id="product">{{product_json}}</script>. Omit a token and that field doesn't show. BUYING: {{buy}}, your own element carrying {{checkout_attrs}} (add data-wakato-variant="<variant id>" for an option picked in your own picker), or from script Wakato.checkout("<id>", { variantId }). The checkout opens over the page, never a new tab; your page hears window events wakato:checkout-open, wakato:checkout-close and wakato:checkout-paid (detail.orderId). Pass tags to scope a layout to a CATEGORY (products carrying ALL those tags — e.g. tags:["men"]); no tags sets the space default. clear:true removes the default (or, with tags, that category's template). Without any template a clean built-in page renders. To design EVERYTHING yourself — the product page and the checkout form too — bind the listing with the Storefront SDK (data-wakato-listing / data-wakato-field marks, Wakato.store, Wakato.checkout.quote / paymentField / pay): read get_storefront_sdk_reference first.
| Parameter | Type | Required | Description |
|---|---|---|---|
template_html | string | Full-page HTML with {{...}} tokens — any HTML/CSS/JS | |
tags | string[] | Scope to products carrying ALL these tags. Omit for the space default. | |
clear | boolean | Remove the default template (or the tags-scoped one when tags are given) |
set_product_profiles
Scope: commerce:write
Choose which of the business's Wakato profiles a product appears on (the profile page IS the storefront — a listing is live once attached to at least one public profile). REPLACE-SET: after this call the product shows on exactly profile_ids; [] detaches it everywhere and reverts it to draft. Profile ids from list_business_profiles.
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | string | yes | |
profile_ids | string[] | yes | The full set of profile ids the product should appear on |
set_product_resources
Scope: commerce:write
REPLACE a product's public Resources — the learn-more material in the listing's Resources tab (not the paid deliverable). Each: url (YouTube/Vimeo/mp4 → video, pdf/zip/image → file, else link; auto-detected unless resource_type is given), optional title and thumbnail_url (YouTube thumbnails and image URLs are picked up automatically). Upload files first with upload_asset and pass the returned URL. Max 30; [] clears.
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | string | yes | |
resources | object[] | yes |
set_product_variants
Scope: commerce:write
Define a product's options (e.g. Size, Color) and REPLACE its variants in one call. option_types is the axes [{name, values[]}]; variants is one entry per combination with options {axis:value}, inventory_quantity (null = untracked), sku, image_url, description (one line on what makes it different). A variant prices itself ONE of three ways: price (its own number in whole currency units — does NOT follow the base price), OR price_adjustment_kind 'amount'|'percent' + price_adjustment (base + that; FOLLOWS the base, so raising the listing price moves it too — prefer this for 'Large is $3 more'), OR neither (the base price). Both at once is refused. Send the FULL desired set each time (it replaces existing). Pass empty variants + null option_types to clear.
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | string | yes | |
option_types | object[] | ||
variants | object[] |
submit_community_product
Scope: commerce:write
List one of the business's products on a community's Products shelf. The seller must be an approved member of that community with listing rights (Sellers role or can_list_products); the submission lands pending and the community's own approval rules decide when it shows.
| Parameter | Type | Required | Description |
|---|---|---|---|
community_id | string | yes | |
product_id | string | yes |
update_discount
Scope: commerce:write
Adjust a promo code: activate/deactivate (is_active), expiry, redemption caps, minimum. The amount itself is immutable — create a new code for a different discount so past redemptions stay truthful.
| Parameter | Type | Required | Description |
|---|---|---|---|
discount_id | string | yes | |
is_active | boolean | ||
expires_at | string,null | ||
max_redemptions | number,null | ||
per_buyer_limit | number,null | ||
min_subtotal_cents | number |
update_job
Scope: commerce:write
Edit a DRAFT job — same fields as create_job (client, title, scope, steps, stages, product_id). Once sent, use add_job_stage / set_job_steps / add_job_date instead.
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes | |
client | object | ||
product_id | string | ||
title | string | ||
scope | string | ||
steps | string[] | ||
stages | object[] | ||
currency | string | ||
send | boolean |
update_job_date
Scope: commerce:write
Change a date on the job (date_id from get_job) — same fields as add_job_date.
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes | |
date_id | string | yes | |
kind | delivery | appointment | other | ||
label | string | ||
on_date | string | yes | |
at_time | string | ||
end_date | string | ||
end_time | string | ||
firmness | estimated | confirmed | ||
where_address | string | ||
where_details | string | ||
where_lat | number | ||
where_lng | number | ||
needs | string | ||
visible_to_client | boolean | ||
assigned_participant_id | string | ||
step_index | number |
update_payment_link
Scope: commerce:write
Edit a payment link's title/description/status (active|inactive|archived — inactive stops accepting money).
| Parameter | Type | Required | Description |
|---|---|---|---|
payment_link_id | string | yes | |
title | string | ||
description | string | ||
success_message | string | ||
redirect_url | string | ||
require_signin | boolean | ||
status | active | inactive | archived |
update_product
Scope: commerce:write
Edit a product: title, descriptions, price, images, tags, stock (inventory_quantity), shipping_fee_cents, status (draft|active|paused|archived) and is_published. To sell on this space's pages a product needs status:'active' AND is_published:true. A DRAFT is where the whole purchase is rehearsed (place_test_order) before anyone else can reach it — see the status field.
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | string | yes | |
title | string | ||
description | string | ||
short_description | string | ||
price | number | ||
is_free | boolean | ||
thumbnail_url | string | ||
images | string[] | ||
tags | string[] | Free-form product tags (max 20). Storefront pages build live category sections from these via data-tags="<tag>" (e.g. tag 'men' → a Men section). | |
inventory_quantity | number | Stock on hand (physical). null = untracked. | |
shipping_fee_cents | number | Flat shipping fee in CENTS. | |
require_signin | boolean | Require a Wakato account to buy (no guest checkout). | |
status | draft | active | paused | archived | 'draft' is hidden from buyers and buyable ONLY by the store's owner, staff and agents — as a TEST order (place_test_order): the real order, emails, job and automations run but nothing is charged, no stock moves and it counts toward no total; automations that reach outside Wakato are recorded rather than sent. A draft is SEEN wherever it is placed — the space's pages, a Wakato profile — by everyone there, marked as a draft, and anyone may walk its checkout with a test card (a real card never works on a draft); placed nowhere, only the shop's people see it. Then 'active' + is_published:true opens the door. | |
is_published | boolean | ||
marketplace_enabled | boolean | Wakato Marketplace placement (the platform-curated /marketplace). true SUBMITS the listing for Wakato's review (status becomes pending; the owner is told the verdict); false withdraws it. Needs the listing live. An agentic app also needs demo_video_url and preview_template_id. Physical products are refused. | |
marketplace_category_id | string | Wakato Marketplace category (list_marketplace_categories). null clears. | |
snapshot_release_id | string | Sell a Wakato template: a release the store's owner published (create_snapshot → publish). Sets deliverable_type to snapshot (the value keeps its old name). null clears. | |
agentic_app_id | string | Sell an AGENTIC APP: an app in a space the store's owner owns. The listing becomes an Agentic App (product_type 'app') selling COPIES: the app as it is now is frozen as version 1, and each buyer gets their own copy added to the space they pick at checkout (never the seller's records). Naming the SAME app again publishes its next version — on a listing on the Wakato Marketplace it waits for Wakato while the approved version stays on sale. | |
demo_video_url | string | AGENTIC APPS: a video of someone using the app — a YouTube, Loom, Vimeo or Wakato screen recording link (https://wakato.io/r/…). Plays at the top of the listing; REQUIRED, with preview_template_id, before marketplace_enabled can submit it. null clears. | |
preview_template_id | string | AGENTIC APPS: the PREVIEW buyers click through before buying ("See inside" on the listing), VIEW ONLY: an app template of the store's owner made from the same app WITH records that show finished work (create_snapshot with include_records or record_ids). REQUIRED, with demo_video_url, before marketplace_enabled can submit it; Wakato checks it holds no customer names, emails or orders. On a listing already on the Marketplace a new preview waits for Wakato while the approved one stays. Buyers get the version on sale, not these records. null clears (refused once on the Marketplace). | |
delivery_days | number | SERVICES: days to deliver. | |
revisions | number | SERVICES: revisions included. | |
requirements | string | SERVICES: what you need from the buyer before starting. | |
billing_interval | one_time | month | year | SERVICES: one-time engagement or a subscription. | |
billing_interval_count | number | SERVICES: bill every N intervals (1–12). | |
service_mode | online | in_person | SERVICES: delivered remotely or on-site. | |
service_area | string | SERVICES (in_person): the area served. | |
booking_page_id | string | SERVICES (in_person): a booking page of this space buyers schedule on (list_booking_pages). | |
deliverable_type | download | external_link | snapshot | manual | PRODUCTS: how the buyer receives it — download (files the seller attaches), external_link (deliverable_url), snapshot, or manual (you deliver directly). | |
deliverable_url | string | PRODUCTS (external_link / download): where the buyer accesses it. | |
file_format | string | PRODUCTS: e.g. 'PDF', 'Figma', 'ZIP'. | |
license_type | personal | commercial | extended | ||
author | string | ||
version | string | ||
compatible_with | string | ||
whats_included | string[] | Bullets of what the buyer gets (max 30). | |
video_url | string | Promo video (YouTube / Vimeo / mp4) shown in the gallery. | |
ship_from | object | PHYSICAL: ship-from address {line1, line2?, city, state?, postal_code, country (ISO-2), name?}. | |
agent_discoverable | boolean | Let external AI shopping assistants find it through Wakato's feed — only once the listing is approved on the Wakato Marketplace. | |
agent_checkout_enabled | boolean | Agentic checkout — let shopping agents complete the purchase. false = discover-only. | |
brand | string | Brand for the product feed (empty to clear). | |
gtin | string | The listing's barcode (UPC/EAN/GTIN digits, check digit verified; empty to clear). With variants, each row's own goes on set_product_variants. | |
google_product_category | string | Google product-taxonomy category (empty to clear). | |
condition | new | used | refurbished |
update_store_profile
Scope: commerce:write
Edit the store's business details: business_email (where buyer replies and receipts route), business_phone, business_address, business_description, business_website. Store name/logo/description shown on the storefront are update_store_presentation. Payouts, Stripe and verification are never reachable.
| Parameter | Type | Required | Description |
|---|---|---|---|
business_email | string | ||
business_phone | string | ||
business_address | string | ||
business_description | string | ||
business_website | string |
void_invoice
Scope: commerce:write
Void an unpaid invoice and deactivate its pay link so it stops accepting money.
| Parameter | Type | Required | Description |
|---|---|---|---|
invoice_id | string | yes |