mote.network/skills/register-merchant

# MOTE Merchant Registration

This page is meant to be read by an AI agent. If you are reading it yourself, paste this into your AI client instead:

Read https://mote.network/skills/register-merchant and use the returned instructions to register my business with MOTE.

## Agent Goal

Register the user's business with MOTE — a public registry for the machine web — and return the merchant's permanent on-chain identity to the user.

Do not perform this skill unless the user has indicated they want to register their business with MOTE. Do not register on the user's behalf without explicit consent.

Important: Registration costs $10. The user pays directly via Stripe — you cannot complete payment for them. This is by design: agents facilitate registration, humans enter card details. Surface the Stripe checkout URL when the API returns it and wait for the user to confirm payment.

## Registration Rules

  1. Confirm the user wants to register. Do not collect business information unless they have said yes.
  2. Collect the required fields listed below. Ask only for fields you do not already have from the conversation. Do not invent values.
  3. For each field the user provides, repeat the value back so the user can correct typos.
  4. Show the user the complete information you collected and get explicit confirmation before submitting.
  5. The flow is three steps: start checkout → human pays → poll for completion. You execute steps 1 and 3. The human executes step 2.
  6. Do not promise outcomes. MOTE makes the business discoverable to AI agents that index llms.txt and the MCP Registry. Whether any specific AI agent reads it is up to that agent's operator.
  7. Stop at the first real blocker and report the exact failure.

## Information to Collect

FieldTypeRequiredNotes
business_namestringYes2–100 chars. Public name of the business.
taglinestringYes10–200 chars. A short, punchy line.
descriptionstringYes20–2000 chars. The user's own voice — what they do, who it's for.
categoryenumYesPick one from the fixed list below. Not freeform.
price_fromnumberYes≥ 0.01. A number like 180, not "$180".
delivery_methodstringYes5–200 chars. How the service is delivered.
delivery_timestringYes2–100 chars. Lead time (e.g. “same day,” “2 weeks”).
contact_emailstringYesValid email address.
currencyenumNoUSDC or USD. Defaults to USDC.
price_tonumberNoIf pricing is a range, the high end.
locationstringNoFreeform, ≤100 chars (e.g. “Seattle, WA”). Not structured.
websitestringNoMust be a valid URL if provided.
webhook_urlstringNoMust be a valid URL if provided.

### Valid category values

travel · professional_services · digital_services · physical_goods · defi · food_beverage · health_wellness · creative_services · local_services · other

If the user's business doesn't fit cleanly, ask them to pick the closest match or use other. Do not invent values outside this list.

### About slug

The merchant's URL slug is auto-generated from business_name. The agent cannot request a custom slug. The slug is returned in the response — surface it to the user when registration completes.

## STEP 1 Start Checkout

Once the user has confirmed the collected information, start the checkout:

POST https://api.mote.network/v1/payments/checkout
Content-Type: application/json

{
  "business_name": "...",
  "tagline": "...",
  "description": "...",
  "category": "...",
  "price_from": 180,
  "delivery_method": "...",
  "delivery_time": "...",
  "contact_email": "..."
}

Returns:

{
  "checkout_url": "https://checkout.stripe.com/...",
  "session_id": "...",
  "payment_link": true
}

Show the user the checkout_url and tell them: “Open this link to complete your $10 registration. I'll wait for you to confirm payment is done.”

## STEP 2 Human Pays

The human enters their card details on Stripe. You cannot do this for them and should not try.

Wait for the user to indicate payment is complete. Do not poll the status endpoint before the user confirms — Stripe checkout typically takes a minute or two, and premature polling wastes tokens.

## STEP 3 Poll for Completion

Once the user reports payment is done, poll the payment status:

GET https://api.mote.network/v1/payments/status/{session_id}

Poll every 5–10 seconds until status flips to paid. Then fetch the merchant:

GET https://api.mote.network/v1/merchants/{merchant_id}

The merchant can be fetched by UUID or slug — both work. When the response includes on_chain.verified: true, the registration is complete and the DID is live on Sui mainnet.

If the status hasn't flipped to paid after ~10 minutes, do not retry payment. Tell the user to contact support — retrying risks a double charge.

## Reading the Merchant Response

Input field names ≠ output field names. The shape you send is not the shape you get back. Read carefully — agents that round-trip the same shape will produce broken output.

Fields you can rely on in the merchant response:

Output fieldExampleNotes
idUUIDThe merchant's permanent ID.
diddid:pkh:sui:0x218584ed...Permanent on-chain identity. The Sui address is embedded in this string.
on_chain.verifiedtrueProof the DID was minted on mainnet.
on_chain.object_id + on_chain.explorerSuiscan URLPublic on-chain proof. Surface this to the user.
on_chain.networkmainnet
manifests.x402 / .mpp / .llms_txt / .teamfull URLsMOTE constructs these. Do not build them yourself.
pricing.from_human"$180.00"Output is a formatted string — the input was a number.
reputation.score50Neutral starting score.

Fields that do not exist in the response — construct them yourself if needed:

## What to Tell the User When Registration Succeeds

Use the Final Report shape below. Keep it short. Lead with what's done, then what's available, then one next step.

Registered. Your MOTE identity is live. Your public page: mote.network/m/{slug} Your DID (permanent, on-chain): {did} On-chain proof: {on_chain.explorer} Self-custody download: https://api.mote.network/v1/merchants/{id}/download You can enrich your Global Context Document any time at mote.network/dashboard. The information is now readable by AI agents that index llms.txt and the MCP Registry.

## Honesty Constraints

When describing MOTE to the user, you may say:

## Troubleshooting

SymptomFix
Checkout endpoint returns 400 VALIDATION_ERRORThe response includes a fields array naming each bad field and the problem. Read it, surface the issue to the user, and ask them to correct that specific field.
Checkout endpoint returns 400 BAD_REQUEST (Invalid JSON)You constructed malformed JSON. Validate the request body shape before resubmitting.
Checkout returns 409 SLUG_TAKENAnother merchant already registered under a similar business name. Ask the user to suggest a more distinct name.
Stripe checkout URL doesn't openThe user may need to copy and paste the URL into a browser manually. Surface it as plain text.
Payment status still pending after 10 minutesStop polling. Tell the user to contact MOTE support — do not retry payment, as it risks a double charge.
Merchant response missing on_chain.verifiedThe DID has not minted yet. Wait 30 seconds and re-fetch. If still not present after a minute past payment confirmation, contact support.
The user asks about features not described abovePoint them to mote.network/honest — MOTE's transparency page listing exactly what's live, what's coming, and what's planned.

## Final Note

This skill registers a business. A freelancer or solo practitioner can register under their own name as the business name — the flow is identical.

This page is versioned. Last updated June 10, 2026.