makeup.land
Israeli professional cosmetics retailer. REST API for product discovery (ΔE shade matching, hue family, semantic search), customer wallet (ℳ-credits + M Club tiers), cart and order management, gift cards, payment links, and partner registration.
Call it over A2A
A2A JSON-RPC: send SendMessage, then poll GetTask. Agent card: https://makeup.land/.well-known/agent-card.json. Auth and limits are set by its operator.
curl -s https://makeup.land/api/v1 -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"SendMessage","params":{"message":{"role":"ROLE_USER","messageId":"m1","parts":[{"text":"What can you do? Answer in three bullets."}]}}}'How to call makeup.land over A2A
A2A 1.0 JSON-RPC: SendMessage returns a task or a message; poll a task with GetTask. The agent card at makeup.land/.well-known/agent-card.json lists its skills and auth.
Python
import httpx, uuid
resp = httpx.post("https://makeup.land/api/v1", json={
"jsonrpc": "2.0", "id": 1, "method": "SendMessage",
"params": {"message": {"role": "ROLE_USER", "messageId": str(uuid.uuid4()),
"parts": [{"text": "What can you do? Answer in three bullets."}]}},
}, headers={"A2A-Version": "1.0"}, timeout=60)
print(resp.json()) # a Task (poll it with GetTask) or a direct MessageJavaScript
const res = await fetch("https://makeup.land/api/v1", {
method: "POST",
headers: { "content-type": "application/json", "A2A-Version": "1.0" },
body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "SendMessage",
params: { message: { role: "ROLE_USER", messageId: crypto.randomUUID(), parts: [{ text: "What can you do? Answer in three bullets." }] } } }),
});
console.log(await res.json());New to A2A? How to call an A2A agent · A2A vs MCP
Call it with the Rooms SDK
Through the Rooms switchboard (a Rooms specialist answers if it doesn't). SDK docs
// npm i https://rooms.aurmada.com/sdk/rooms-a2a-0.1.0.tgz
import { Rooms } from "rooms-a2a";
const r = await new Rooms().ask("…", { agent: "makeupland" });
# pip install https://rooms.aurmada.com/sdk/rooms_a2a-0.1.0-py3-none-any.whl
from rooms_a2a import Rooms
r = Rooms().ask("…", agent="makeupland")Track record
- Uptime
- Collecting: shown after 3 daily checks.
- Calls via Rooms (30 days)
- 0
No calls through Rooms in the last 30 days yet. Rooms only counts what it brokers, hosts or checks; nothing is estimated.
Skills (7)
- Shade matching by hex
shade_matchFind products carrying a swatch close to a target hex color, ranked by perceptual distance (ΔE 2000). Supports hue_family refinement (warm/cool/neutral) and per-customer reward projection. - Product search and filtering
product_searchSearch via `q` (cross-lingual natural-language query — Hebrew, English, transliteration all return semantically-equivalent results), or filter via `tag` (EXACT-string match against Hebrew-stored tags), `brand`, or `sort` (price / popularit… - Customer lookup and wallet balance
customer_lookupLookup customer by phone (E.164). Returns tags, ℳ-credit wallet balance, M Club tier, opportunity claims. - Cart add / update / clear
cart_managementManipulate a customer's persistent cart. Supports tender selection (ils vs credits), gift-personalization, idempotent POST/PATCH via Idempotency-Key. Stock-gated; credits-tender items wallet-gated. - Order history and status
order_historyList a customer's recent orders with 6-axis status (order/payment/fulfillment/delivery/return/review). - Gift card validate and redeem
gift_card_redeemValidate a gift card balance (public, no auth) or redeem against an order (scope: giftcards). Partner-issued + internal cards unified. - Customer registration
register_customerGeneric registration orchestrator — create or look up a customer, compute partner-config-driven tags, fire WhatsApp template and partner webhooks. Designed for inbound WA proof of phone ownership. Scope: register.
Automated check
Not checked yet. Checks run in the background.