Egonex MCP
An official MCP server for the Egonex marketplace that enables AI agents to search listings, ask sellers questions, send messages, and initiate orders on behalf of users. It supports stateless Streamable HTTP connections and integrates with Stripe for payments, allowing agents to browse independent sellers' items and services without requiring user accounts or API keys.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://api.egonex.ai/api/v1/mcpWhat its tools do
7 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (3)
Can change data (4)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to egonex.ai ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Search marketplace listings by keywords, category, or location
- Ask sellers questions about specific items or services
- Initiate purchase orders and manage payment tokens
- Check order status and request details from sellers
Source and maintenance
Protocol and capabilities
- Server
- egonex 1.21.1
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 7 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
7 advertised
ask_seller — Ask about a listing
Ask one question about a listing before your user decides: availability, condition, what is included, timing, location, sizes, how delivery or pickup works. If the seller has their assistant (Ego) answering (seller.answers_questions is true in search results), the answer comes back in this response, written only from the seller's public page and listings; when the seller has set a lowest price, Ego can also talk price with you about that listing: it may counter once, and when you agree a price the answer has deal (deal.id, valid for 24 hours, for one request_order). For 24 hours it holds the price it named to you and won't go lower, and it declines questions that are not about this store (reason declined). Otherwise the response says the seller answers in chat. For a follow-up about the same listing, pass the conversation_id from the previous answer so Ego sees the earlier questions and answers. After three declined questions in a row in one conversation, Ego stops answering there (reason conversation_stopped). Ego answers a limited number of questions from you per seller per minute and per day (reasons slow_down, handoff, email_required); Ego may tell the seller about a question it can't answer, but the seller's reply doesn't come back through ask_seller. To send your question to the seller as your user instead, use message_seller.
{
"type": "object",
"required": [
"offer_id",
"question"
],
"properties": {
"offer_id": {
"type": "string",
"description": "The listing id from search_offers (the 8-character id at the end of a listing page URL also works)."
},
"question": {
"type": "string",
"maxLength": 500,
"description": "Your question, up to 500 characters."
},
"conversation_id": {
"type": "string",
"description": "From the previous ask_seller answer about the same listing (kept for 30 minutes): Ego then sees the earlier questions and answers."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"answered",
"next",
"offer"
],
"properties": {
"deal": {
"type": "object",
"required": [
"id",
"unit_price",
"list_price",
"currency",
"unit",
"quantity",
"amount",
"expires_at"
],
"properties": {
"id": {
"type": "string",
"description": "Pass it as request_order's deal_id (works for one request)."
},
"unit": {
"type": "string",
"description": "What one unit is (as in the listing's price)."
},
"amount": {
"type": "number",
"description": "unit_price × quantity, before shipping and tax."
},
"currency": {
"type": "string",
"description": "usd."
},
"quantity": {
"type": "number",
"description": "How many units the price was agreed for: pay_order takes at most this many (rounded down, at least 1)."
},
"expires_at": {
"type": "string",
"description": "Use it in request_order before this time (RFC 3339)."
},
"list_price": {
"type": "number",
"description": "The listed price per unit when it was agreed, USD."
},
"unit_price": {
"type": "number",
"description": "Agreed price per unit, USD."
},
"delivery_days": {
"type": "integer",
"description": "Agreed delivery time in days after payment (pay_order uses it when you leave delivery_days out)."
}
},
"description": "The price Ego agreed with you (only when it agreed one). Pass deal.id as deal_id to request_order within 24 hours; that request then keeps this price for pay_order and for the order your user pays on Egonex."
},
"next": {
"type": "string",
"description": "What to do next."
},
"offer": {
"type": "object",
"required": [
"id",
"title",
"description",
"price",
"delivery",
"kind",
"availability",
"category",
"url",
"ask_url",
"order_url",
"seller",
"updated_at"
],
"properties": {
"id": {
"type": "string",
"description": "Listing id (pass it as offer_id)."
},
"url": {
"type": "string",
"description": "The listing's own page."
},
"city": {
"type": "string",
"description": "City for in-person listings."
},
"gtin": {
"type": "string",
"description": "Physical items: barcode (UPC / EAN / ISBN, 8–14 digits, check digit verified) when the seller gave it."
},
"kind": {
"enum": [
"physical",
"service",
"digital"
],
"type": "string",
"description": "What it is: physical (an item, shipped or picked up), service, or digital (a file or link the seller sends by hand after payment)."
},
"brand": {
"type": "string",
"description": "Physical items: brand, as the seller gave it; absent when not stated."
},
"model": {
"type": "string",
"description": "Physical items: model name or number, as the seller gave it; match it to compare the exact version."
},
"price": {
"type": "object",
"required": [
"amount",
"currency",
"unit",
"text"
],
"properties": {
"text": {
"type": "string",
"description": "The price as text, e.g. \"$1,150 per item\"."
},
"unit": {
"type": "string",
"description": "What the price is per: item, package, hour, day, week, month, night, person, project or time (a session)."
},
"amount": {
"type": "number",
"description": "Price per unit."
},
"currency": {
"type": "string",
"description": "Currency code (USD)."
}
},
"description": "The price."
},
"ships": {
"type": "boolean",
"description": "true = the seller ships it; your user enters the shipping address when paying on Egonex, or you pass it to pay_order when you pay."
},
"title": {
"type": "string",
"description": "Title."
},
"photos": {
"type": "array",
"items": {
"type": "string",
"description": "Photo URL."
},
"description": "Up to 4 photo URLs; the first is the cover."
},
"seller": {
"type": "object",
"required": [
"handle",
"url",
"answers_questions",
"trusted"
],
"properties": {
"url": {
"type": "string",
"description": "The seller's public page."
},
"intro": {
"type": "string",
"description": "The store's short intro."
},
"handle": {
"type": "string",
"description": "Store name (shop.egonex.ai/@handle)."
},
"trusted": {
"type": "boolean",
"description": "true = the seller has Egonex's Trusted badge, the same one shown on their public page. Egonex gives it automatically when the seller's recent trading on Egonex reaches the top earn-back step (sellers can't set it), and doesn't show it while their account health is low."
},
"avatar_url": {
"type": "string",
"description": "The seller's picture."
},
"review_count": {
"type": "integer",
"description": "Counted buyer reviews (buyers rate the item they bought from 1 to 5 stars); only present from 1."
},
"positive_rate": {
"type": "integer",
"description": "Percent of counted reviews with 4 or 5 stars, 0 to 100, rounded down; only present from 10 counted reviews."
},
"average_rating": {
"type": "number",
"description": "Average star rating of the counted reviews, 1 to 5 with one decimal (shown as ★ 4.8 on Egonex); present with review_count."
},
"negative_count": {
"type": "integer",
"description": "Counted reviews with 1 to 3 stars; present with review_count, 0 included."
},
"positive_count": {
"type": "integer",
"description": "Counted reviews with 4 or 5 stars; present with review_count, 0 included."
},
"orders_completed": {
"type": "integer",
"description": "Orders completed on Egonex; only present from 3."
},
"answers_questions": {
"type": "boolean",
"description": "true = the seller's assistant (Ego) answers ask_seller right away."
}
},
"description": "The seller (only what is on their public page)."
},
"ask_url": {
"type": "string",
"description": "Link a person can open to ask the seller on Egonex."
},
"category": {
"type": "string",
"description": "Category code, e.g. EDUCATION.TUTORING."
},
"delivery": {
"type": "string",
"description": "onsite (in person), remote (online) or hybrid (either)."
},
"shipping": {
"type": "object",
"properties": {
"fee": {
"type": "number",
"description": "The shipping fee in USD for the order; absent when free."
},
"free": {
"type": "boolean",
"description": "true = free shipping."
},
"no_international": {
"type": "boolean",
"description": "Older listings only: true = it doesn't ship to other countries."
},
"international_fee": {
"type": "number",
"description": "Older listings only: the fee to other countries (fee is then the fee inside the seller's country)."
}
},
"description": "Items that ship, when the seller set a shipping fee: charged once per order whatever the quantity, paid at Egonex checkout and by pay_order. Absent when not set (see the store's shipping rules)."
},
"condition": {
"enum": [
"new",
"used"
],
"type": "string",
"description": "Physical items: new or used."
},
"order_url": {
"type": "string",
"description": "Link a person can open to order on Egonex."
},
"relevance": {
"type": "string",
"description": "Search results only: all_words (the listing itself, not its store's name or intro, matched every search word and, if the query said online, remote or in person, it is delivered that way or its title says so; either-way listings fit both), some_words or other_filters (no word matched; another listing in the category or store searched)."
},
"stock_left": {
"type": "integer",
"description": "Only present when 1 to 3 are left (for a limited service, orders left); no number otherwise."
},
"updated_at": {
"type": "string",
"description": "Last change (RFC 3339)."
},
"description": {
"type": "string",
"description": "The seller's description."
},
"availability": {
"enum": [
"in_stock",
"sold_out"
],
"type": "string",
"description": "in_stock, or sold_out (can't be ordered until the seller restocks; sold-out listings are left out of search, you only see them when you fetch one by id)."
},
"city_unknown": {
"type": "boolean",
"description": "true = in person, the seller did not give a city and it doesn't ship; ask before suggesting it to someone far away."
},
"delivery_days": {
"type": "integer",
"description": "The seller's usual delivery time in days (for shipped items, days to ship); absent when not stated."
},
"matched_words": {
"type": "array",
"items": {
"type": "string",
"description": "A search word."
},
"description": "Search results only: the words of query this listing's title or description (or its category, for a category name such as pets) matches, as written in query. Chinese, Japanese and Korean text is matched in overlapping two-character pieces, and these are what is listed."
},
"missing_words": {
"type": "array",
"items": {
"type": "string",
"description": "A search word."
},
"description": "Search results only: the words of query this listing doesn't match (for Chinese, Japanese and Korean, two-character pieces); absent when it matches them all. A some_words listing without missing_words matched every word, but either it is not delivered the way the query asked (online, remote or in person) or some words of the query could not be searched."
},
"digital_format": {
"enum": [
"pdf",
"video",
"template",
"preset",
"code",
"other"
],
"type": "string",
"description": "Digital products: the file type; absent when not stated."
},
"session_minutes": {
"type": "integer",
"description": "Services priced per session or per hour: how long one session is, in minutes."
},
"digital_delivery": {
"enum": [
"file",
"link"
],
"type": "string",
"description": "Digital products: the seller sends a file or a link after payment."
}
},
"description": "One listing."
},
"answer": {
"type": "string",
"description": "The answer, or what Ego said when it didn't answer."
},
"reason": {
"type": "string",
"description": "Why it wasn't answered: seller_answers_in_chat, handoff (the seller has to answer, also after many questions from you today), busy (Ego answers no more questions for this seller today; send the seller a message instead), slow_down (too many questions in a minute), email_required (send it as a message instead), unavailable, declined (not about this store) or conversation_stopped."
},
"answered": {
"type": "boolean",
"description": "true = answer is the seller's assistant answering now."
},
"conversation_id": {
"type": "string",
"description": "Pass it with the next question about the same listing (kept for 30 minutes)."
}
},
"description": "Ego's answer."
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}check_request — Check an order or message request
Check a request made with request_order or message_seller: the confirm link and, once there is one, the order it led to (order has its title, quantity, amount and deadlines). Returns the confirm_url again. status is one of: - pending: Your user hasn't confirmed or declined yet. Nothing has happened: no order, no charge, no message sent. Give your user the confirm_url. - declined: Your user chose not to go ahead on the confirm page. Nothing was ordered, charged or sent. Don't make a new request unless your user asks. - expired: Nobody acted on the link within 7 days, so it no longer works. Nothing was ordered, charged or sent. Make a new request if your user still wants it. - listing_unavailable: This listing isn't for sale anymore (it was taken down, or it sold out), so the request can't go ahead. Nothing was ordered, charged or sent. Search again for something else, or ask the seller with ask_seller whether it will be back. - message_sent (messages only): Your user confirmed and the message was sent to the seller as your user. The seller replies in the Egonex chat (a buyer without an Egonex account gets the reply by email); you don't see the reply here. - awaiting_order (orders only): Your user confirmed: a chat with the seller is open with the order filled in, but they haven't placed the order yet. They place it and pay on Egonex; once they do, this status follows that order. After an order is placed, everything about it (confirming delivery, a problem with it, a refund or a cancellation) is handled on Egonex, in your user's chat with the seller (a buyer without an Egonex account opens it from the link in Egonex's email), not through these tools. - payment_in_progress (orders only): A payment for this order is being processed: usually a few seconds when you paid with pay_order; a few minutes after pay_order returned payment_error, while Egonex checks with Stripe whether it went through; and up to a few business days for a bank payment your user made on Egonex. Don't call pay_order while it shows this; check back later. After a payment_error, once it no longer shows this: paid means nothing more is needed; payment_failed or ready_to_pay means the payment didn't go through, so ask your user for a new approval and call pay_order again with the new token (not the same one). - payment_failed (orders only): The payment you made with pay_order didn't go through, and nothing was charged. If the card was declined or the bank needs your user to verify it, ask your user for a new approval and call pay_order again with the same buyer_email, or give your user the confirm_url to pay on Egonex. After pay_order returned payment_error, this status means Egonex checked with Stripe and the payment didn't go through: ask your user for a new approval and call pay_order again with the new token (not the same one) and the same buyer_email. - waiting_for_seller (orders only): The order was sent to the seller, who hasn't accepted it yet (they have until order.accept_by). Nothing has been charged: on Egonex the buyer pays only after the seller accepts. Check back later; if the seller declines or doesn't respond in time, the order closes and nothing is charged. - ready_to_pay (orders only): The order is waiting to be paid by order.pay_by (if the seller had to accept it first, they accepted). If you made it with pay_order, call pay_order again with the same request_id and buyer_email and a valid token (ask your user for a new approval if yours has expired, or if pay_order returned payment_error before: then use the new token, not the same one); for an item that ships, this call charges, so it needs shipping_address and shipping_address_confirmed=true (ask your user for the address and read it back to them first). Otherwise your user pays on Egonex, in their chat with the seller, and enters the address there. If nobody pays in time, the order closes and nothing is charged. - paid (orders only): Your user paid and the seller now delivers (by order.deliver_by when it is set). If order.accept_by is set, the seller hasn't accepted yet and has until then; if they don't, your user is refunded minus the payment processing fee. After an order is placed, everything about it (confirming delivery, a problem with it, a refund or a cancellation) is handled on Egonex, in your user's chat with the seller (a buyer without an Egonex account opens it from the link in Egonex's email), not through these tools. - delivered (orders only): The seller marked the order delivered. Confirming receipt, or raising a problem or a refund, happens on Egonex before order.auto_confirm_at; after that the order completes on its own and the seller is paid. After an order is placed, everything about it (confirming delivery, a problem with it, a refund or a cancellation) is handled on Egonex, in your user's chat with the seller (a buyer without an Egonex account opens it from the link in Egonex's email), not through these tools. - refund_requested (orders only): Your user asked for a refund and Egonex is handling it: the seller responds first, and if they don't agree, a review decides. Nothing is needed from you; this status changes to refunded or completed when it's decided. After an order is placed, everything about it (confirming delivery, a problem with it, a refund or a cancellation) is handled on Egonex, in your user's chat with the seller (a buyer without an Egonex account opens it from the link in Egonex's email), not through these tools. - completed (orders only): The order is complete and the seller was paid. If part of it was refunded, order.refunded_amount says how much. - refund_pending (orders only): The order was canceled after payment and Egonex is returning the money, but the refund hasn't gone through yet (if it failed, Egonex is following it up). Nothing is needed from you; this changes to refunded once the money is back. - refunded (orders only): The order was canceled after payment and your user was refunded order.refunded_amount (the payment processing fee isn't returned). A payment that was only held on the card was released instead. - closed_unpaid (orders only): The order closed before anything was charged; close_reason says why: seller_declined, seller_acceptance_timed_out (the seller didn't accept in time), seller_canceled_before_payment, buyer_withdrew (your user withdrew it) or payment_deadline_passed (nobody paid in time). Search again, or make a new request if your user still wants it.
{
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string",
"description": "The id returned by request_order or message_seller."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"id",
"kind",
"status",
"offer_id",
"confirm_url",
"expires_at"
],
"properties": {
"id": {
"type": "string",
"description": "Request id (pass it as request_id)."
},
"deal": {
"type": "object",
"required": [
"id",
"unit_price",
"list_price",
"currency",
"unit",
"quantity",
"amount",
"expires_at"
],
"properties": {
"id": {
"type": "string",
"description": "Pass it as request_order's deal_id (works for one request)."
},
"unit": {
"type": "string",
"description": "What one unit is (as in the listing's price)."
},
"amount": {
"type": "number",
"description": "unit_price × quantity, before shipping and tax."
},
"currency": {
"type": "string",
"description": "usd."
},
"quantity": {
"type": "number",
"description": "How many units the price was agreed for: pay_order takes at most this many (rounded down, at least 1)."
},
"expires_at": {
"type": "string",
"description": "Use it in request_order before this time (RFC 3339)."
},
"list_price": {
"type": "number",
"description": "The listed price per unit when it was agreed, USD."
},
"unit_price": {
"type": "number",
"description": "Agreed price per unit, USD."
},
"delivery_days": {
"type": "integer",
"description": "Agreed delivery time in days after payment (pay_order uses it when you leave delivery_days out)."
}
},
"description": "The price Ego agreed with you (only when it agreed one). Pass deal.id as deal_id to request_order within 24 hours; that request then keeps this price for pay_order and for the order your user pays on Egonex."
},
"kind": {
"enum": [
"order",
"message"
],
"type": "string",
"description": "order (request_order) or message (message_seller)."
},
"next": {
"type": "string",
"description": "What to do next (when the request is created)."
},
"order": {
"type": "object",
"required": [
"id",
"title",
"amount",
"currency"
],
"properties": {
"id": {
"type": "string",
"description": "Order id."
},
"title": {
"type": "string",
"description": "What was ordered: the order's title, as on the order card."
},
"amount": {
"type": "number",
"description": "Order total."
},
"pay_by": {
"type": "string",
"description": "ready_to_pay: the order closes if nobody pays by then (RFC 3339)."
},
"ship_to": {
"type": "object",
"required": [
"city",
"country"
],
"properties": {
"city": {
"type": "string",
"description": "City."
},
"state": {
"type": "string",
"description": "State or region (US: 2-letter code)."
},
"country": {
"type": "string",
"description": "2-letter country code."
},
"postal_code": {
"type": "string",
"description": "US only: the 5-digit ZIP code."
}
},
"description": "An order that ships, once it is paid: the area it ships to (the name and street are never returned). pay_order can't change it; your user tells the seller in the Egonex chat."
},
"currency": {
"type": "string",
"description": "usd."
},
"quantity": {
"type": "number",
"description": "How many units at the listed price (items, hours, nights...); absent when the order doesn't record one, such as an older order or a total the seller quoted."
},
"accept_by": {
"type": "string",
"description": "waiting_for_seller, or paid before the seller accepted: the seller has to accept by then (RFC 3339)."
},
"deliver_by": {
"type": "string",
"description": "paid: the seller has to deliver by then (RFC 3339)."
},
"auto_confirm_at": {
"type": "string",
"description": "delivered: the order completes on its own then, unless a refund is requested before (RFC 3339)."
},
"refunded_amount": {
"type": "number",
"description": "refunded or completed: what was refunded to your user."
}
},
"description": "The order this request led to: made with pay_order, or placed by your user in the chat after confirming. Times are given only where they matter for the status."
},
"status": {
"enum": [
"pending",
"declined",
"expired",
"listing_unavailable",
"message_sent",
"awaiting_order",
"payment_in_progress",
"payment_failed",
"waiting_for_seller",
"ready_to_pay",
"paid",
"delivered",
"refund_requested",
"completed",
"refund_pending",
"refunded",
"closed_unpaid"
],
"type": "string",
"description": "Where this request and its order stand: pending (waiting for your user to confirm or decline; nothing has happened yet), declined (your user chose not to go ahead), expired (nobody acted within 7 days; the link no longer works), listing_unavailable (the listing isn't for sale anymore (taken down or sold out), so the request can't go ahead), message_sent (messages only: your user confirmed and the message was sent to the seller), awaiting_order (orders only: your user confirmed and the chat is open, but they haven't placed the order yet), payment_in_progress (orders only: a payment is being processed), payment_failed (orders only: a pay_order payment didn't go through; nothing was charged and the order can still be paid), waiting_for_seller (orders only: the order was sent to the seller, who hasn't accepted yet; nothing has been charged), ready_to_pay (orders only: the order is waiting to be paid (pay_order again, or your user pays on Egonex)), paid (orders only: paid; waiting for the seller to deliver), delivered (orders only: the seller marked it delivered; waiting for your user to confirm receipt), refund_requested (orders only: your user asked for a refund; Egonex is handling it), completed (orders only: the order is complete), refund_pending (orders only: canceled after payment; the refund hasn't gone through yet), refunded (orders only: canceled after payment; your user was refunded), closed_unpaid (orders only: the order closed before anything was charged (close_reason says why))."
},
"payment": {
"type": "object",
"required": [
"pay_url",
"amount",
"currency",
"unit",
"max_quantity",
"payment_handlers",
"terms_url",
"privacy_url",
"next"
],
"properties": {
"next": {
"type": "string",
"description": "How to pay."
},
"unit": {
"type": "string",
"description": "What one unit is (as in the listing's price)."
},
"amount": {
"type": "number",
"description": "USD for one unit."
},
"pay_url": {
"type": "string",
"description": "REST: POST the token here (MCP: pay_order)."
},
"currency": {
"type": "string",
"description": "usd."
},
"quote_id": {
"type": "string",
"description": "The request was made with this quote_order quote: pass it to pay_order to charge exactly quoted_total. Absent otherwise."
},
"terms_url": {
"type": "string",
"description": "Egonex Terms of Service your user must agree to."
},
"privacy_url": {
"type": "string",
"description": "Egonex Privacy Policy."
},
"max_quantity": {
"type": "integer",
"description": "Most units one payment can buy (no more than what's left when only 1 to 3 are left of an item sold per piece)."
},
"quoted_total": {
"type": "number",
"description": "The quote's total in USD (items + shipping + sales tax). Absent without a quote."
},
"payment_handlers": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"type",
"version",
"spec",
"schema",
"available_instruments",
"config"
],
"properties": {
"id": {
"type": "string",
"description": "Handler id."
},
"spec": {
"type": "string",
"description": "Handler spec URL."
},
"type": {
"type": "string",
"description": "com.stripe.payments."
},
"config": {
"type": "object",
"description": "business_profile and environment (production or sandbox)."
},
"schema": {
"type": "string",
"description": "Handler schema URL."
},
"version": {
"type": "string",
"description": "Handler version."
},
"available_instruments": {
"type": "array",
"items": {
"type": "object"
},
"description": "Payment instruments."
}
}
},
"description": "UCP payment handlers (com.stripe.payments) with the Stripe network_id to issue the token to."
},
"requires_shipping_address": {
"type": "boolean",
"description": "true = the item ships: the pay_order call that charges needs shipping_address and shipping_address_confirmed=true (a call that only sends the order to the seller doesn't). Absent otherwise."
}
},
"description": "On a new order request that can be paid directly with a Stripe Shared Payment Token (pay_order)."
},
"offer_id": {
"type": "string",
"description": "The listing."
},
"order_id": {
"type": "string",
"description": "The order this request led to (same as order.id)."
},
"expires_at": {
"type": "string",
"description": "When a pending request expires (RFC 3339)."
},
"confirm_url": {
"type": "string",
"description": "The page your user opens to confirm."
},
"close_reason": {
"enum": [
"seller_declined",
"seller_acceptance_timed_out",
"seller_canceled_before_payment",
"buyer_withdrew",
"payment_deadline_passed"
],
"type": "string",
"description": "closed_unpaid only: why the order closed (absent for orders closed before 2026-11-01)."
}
},
"description": "A request your user confirms on confirm_url, and the order it led to."
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}message_seller — Message the seller for your user
Send a message to the seller of a listing as your user: a question Ego couldn't answer, a custom request, or whether a sold-out listing will be back. Returns a confirm_url for your user: nothing is sent until they open it and confirm. They need only an email address, no Egonex account. The message then goes to the seller's Egonex chat as your user, and the seller replies there (a buyer without an Egonex account gets the reply by email); you don't see the reply. Use check_request with the returned id to see whether it was sent (message_sent). To get an answer from the seller's assistant (Ego) right away instead, use ask_seller.
{
"type": "object",
"required": [
"offer_id",
"message"
],
"properties": {
"message": {
"type": "string",
"maxLength": 1000,
"description": "What the seller gets from your user, up to 1000 characters."
},
"offer_id": {
"type": "string",
"description": "The listing id from search_offers (the 8-character id at the end of a listing page URL also works)."
},
"agent_name": {
"type": "string",
"maxLength": 60,
"description": "Your name, shown to your user when they confirm."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"id",
"kind",
"status",
"offer_id",
"confirm_url",
"expires_at"
],
"properties": {
"id": {
"type": "string",
"description": "Request id (pass it as request_id)."
},
"deal": {
"type": "object",
"required": [
"id",
"unit_price",
"list_price",
"currency",
"unit",
"quantity",
"amount",
"expires_at"
],
"properties": {
"id": {
"type": "string",
"description": "Pass it as request_order's deal_id (works for one request)."
},
"unit": {
"type": "string",
"description": "What one unit is (as in the listing's price)."
},
"amount": {
"type": "number",
"description": "unit_price × quantity, before shipping and tax."
},
"currency": {
"type": "string",
"description": "usd."
},
"quantity": {
"type": "number",
"description": "How many units the price was agreed for: pay_order takes at most this many (rounded down, at least 1)."
},
"expires_at": {
"type": "string",
"description": "Use it in request_order before this time (RFC 3339)."
},
"list_price": {
"type": "number",
"description": "The listed price per unit when it was agreed, USD."
},
"unit_price": {
"type": "number",
"description": "Agreed price per unit, USD."
},
"delivery_days": {
"type": "integer",
"description": "Agreed delivery time in days after payment (pay_order uses it when you leave delivery_days out)."
}
},
"description": "The price Ego agreed with you (only when it agreed one). Pass deal.id as deal_id to request_order within 24 hours; that request then keeps this price for pay_order and for the order your user pays on Egonex."
},
"kind": {
"enum": [
"order",
"message"
],
"type": "string",
"description": "order (request_order) or message (message_seller)."
},
"next": {
"type": "string",
"description": "What to do next (when the request is created)."
},
"order": {
"type": "object",
"required": [
"id",
"title",
"amount",
"currency"
],
"properties": {
"id": {
"type": "string",
"description": "Order id."
},
"title": {
"type": "string",
"description": "What was ordered: the order's title, as on the order card."
},
"amount": {
"type": "number",
"description": "Order total."
},
"pay_by": {
"type": "string",
"description": "ready_to_pay: the order closes if nobody pays by then (RFC 3339)."
},
"ship_to": {
"type": "object",
"required": [
"city",
"country"
],
"properties": {
"city": {
"type": "string",
"description": "City."
},
"state": {
"type": "string",
"description": "State or region (US: 2-letter code)."
},
"country": {
"type": "string",
"description": "2-letter country code."
},
"postal_code": {
"type": "string",
"description": "US only: the 5-digit ZIP code."
}
},
"description": "An order that ships, once it is paid: the area it ships to (the name and street are never returned). pay_order can't change it; your user tells the seller in the Egonex chat."
},
"currency": {
"type": "string",
"description": "usd."
},
"quantity": {
"type": "number",
"description": "How many units at the listed price (items, hours, nights...); absent when the order doesn't record one, such as an older order or a total the seller quoted."
},
"accept_by": {
"type": "string",
"description": "waiting_for_seller, or paid before the seller accepted: the seller has to accept by then (RFC 3339)."
},
"deliver_by": {
"type": "string",
"description": "paid: the seller has to deliver by then (RFC 3339)."
},
"auto_confirm_at": {
"type": "string",
"description": "delivered: the order completes on its own then, unless a refund is requested before (RFC 3339)."
},
"refunded_amount": {
"type": "number",
"description": "refunded or completed: what was refunded to your user."
}
},
"description": "The order this request led to: made with pay_order, or placed by your user in the chat after confirming. Times are given only where they matter for the status."
},
"status": {
"enum": [
"pending",
"declined",
"expired",
"listing_unavailable",
"message_sent",
"awaiting_order",
"payment_in_progress",
"payment_failed",
"waiting_for_seller",
"ready_to_pay",
"paid",
"delivered",
"refund_requested",
"completed",
"refund_pending",
"refunded",
"closed_unpaid"
],
"type": "string",
"description": "Where this request and its order stand: pending (waiting for your user to confirm or decline; nothing has happened yet), declined (your user chose not to go ahead), expired (nobody acted within 7 days; the link no longer works), listing_unavailable (the listing isn't for sale anymore (taken down or sold out), so the request can't go ahead), message_sent (messages only: your user confirmed and the message was sent to the seller), awaiting_order (orders only: your user confirmed and the chat is open, but they haven't placed the order yet), payment_in_progress (orders only: a payment is being processed), payment_failed (orders only: a pay_order payment didn't go through; nothing was charged and the order can still be paid), waiting_for_seller (orders only: the order was sent to the seller, who hasn't accepted yet; nothing has been charged), ready_to_pay (orders only: the order is waiting to be paid (pay_order again, or your user pays on Egonex)), paid (orders only: paid; waiting for the seller to deliver), delivered (orders only: the seller marked it delivered; waiting for your user to confirm receipt), refund_requested (orders only: your user asked for a refund; Egonex is handling it), completed (orders only: the order is complete), refund_pending (orders only: canceled after payment; the refund hasn't gone through yet), refunded (orders only: canceled after payment; your user was refunded), closed_unpaid (orders only: the order closed before anything was charged (close_reason says why))."
},
"payment": {
"type": "object",
"required": [
"pay_url",
"amount",
"currency",
"unit",
"max_quantity",
"payment_handlers",
"terms_url",
"privacy_url",
"next"
],
"properties": {
"next": {
"type": "string",
"description": "How to pay."
},
"unit": {
"type": "string",
"description": "What one unit is (as in the listing's price)."
},
"amount": {
"type": "number",
"description": "USD for one unit."
},
"pay_url": {
"type": "string",
"description": "REST: POST the token here (MCP: pay_order)."
},
"currency": {
"type": "string",
"description": "usd."
},
"quote_id": {
"type": "string",
"description": "The request was made with this quote_order quote: pass it to pay_order to charge exactly quoted_total. Absent otherwise."
},
"terms_url": {
"type": "string",
"description": "Egonex Terms of Service your user must agree to."
},
"privacy_url": {
"type": "string",
"description": "Egonex Privacy Policy."
},
"max_quantity": {
"type": "integer",
"description": "Most units one payment can buy (no more than what's left when only 1 to 3 are left of an item sold per piece)."
},
"quoted_total": {
"type": "number",
"description": "The quote's total in USD (items + shipping + sales tax). Absent without a quote."
},
"payment_handlers": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"type",
"version",
"spec",
"schema",
"available_instruments",
"config"
],
"properties": {
"id": {
"type": "string",
"description": "Handler id."
},
"spec": {
"type": "string",
"description": "Handler spec URL."
},
"type": {
"type": "string",
"description": "com.stripe.payments."
},
"config": {
"type": "object",
"description": "business_profile and environment (production or sandbox)."
},
"schema": {
"type": "string",
"description": "Handler schema URL."
},
"version": {
"type": "string",
"description": "Handler version."
},
"available_instruments": {
"type": "array",
"items": {
"type": "object"
},
"description": "Payment instruments."
}
}
},
"description": "UCP payment handlers (com.stripe.payments) with the Stripe network_id to issue the token to."
},
"requires_shipping_address": {
"type": "boolean",
"description": "true = the item ships: the pay_order call that charges needs shipping_address and shipping_address_confirmed=true (a call that only sends the order to the seller doesn't). Absent otherwise."
}
},
"description": "On a new order request that can be paid directly with a Stripe Shared Payment Token (pay_order)."
},
"offer_id": {
"type": "string",
"description": "The listing."
},
"order_id": {
"type": "string",
"description": "The order this request led to (same as order.id)."
},
"expires_at": {
"type": "string",
"description": "When a pending request expires (RFC 3339)."
},
"confirm_url": {
"type": "string",
"description": "The page your user opens to confirm."
},
"close_reason": {
"enum": [
"seller_declined",
"seller_acceptance_timed_out",
"seller_canceled_before_payment",
"buyer_withdrew",
"payment_deadline_passed"
],
"type": "string",
"description": "closed_unpaid only: why the order closed (absent for orders closed before 2026-11-01)."
}
},
"description": "A request your user confirms on confirm_url, and the order it led to."
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}pay_order — Pay for an order with a Stripe Shared Payment Token
Pay for an order made with request_order without the confirm page, using a Stripe Shared Payment Token that your user approved (for example in Stripe Link). request_order returns payment: the amount per unit in USD, max_quantity and payment_handlers with the Stripe network_id to issue the token to; the token must allow at least amount × quantity in USD (plus sales tax where Egonex collects it, calculated from the shipping address for an item that ships and from the card's billing address otherwise; if the token doesn't cover it, nothing is charged and the error gives the total). Egonex creates the order for your user (a guest account on the email you give; receipts and seller replies go to that email). The result has the same status and order as check_request (order has its title, quantity, amount and deadlines), so you can tell your user where the order stands. The seller confirms an order before the buyer pays: when the result has status waiting_for_seller, the order was sent to the seller and nothing was charged; once check_request shows ready_to_pay, call pay_order again with the same request_id and buyer_email and a valid token (or your user pays from the link Egonex emails them). If the seller declines or doesn't respond, the order closes and nothing is charged. When the result has status paid and order.accept_by, the token was charged first and the seller has until then to accept; if they decline or don't respond, your user is refunded minus the payment processing fee. For an item that ships (payment.requires_shipping_address), the pay_order call that charges must have shipping_address and shipping_address_confirmed=true, otherwise nothing is charged (shipping_address_required / shipping_address_not_confirmed): before you pay, ask your user for the full address, read it back to them and pass it only once they say it's right. A call that only sends the order to the seller charges nothing and doesn't keep an address: pass it on the call that pays. An address that fails the format check (the error names the field) or that Stripe can't place for sales tax is refused with shipping_address_invalid, and nothing is charged. The address becomes the order's shipping address only once the payment goes through (if it doesn't, nothing is kept and you can retry with a corrected address); order.ship_to then shows its city, state, ZIP code and country (never the name or street). After payment pay_order can't change it: a different address is refused (shipping_address_locked), and your user tells the seller in the Egonex chat instead. If your user pays on Egonex (the confirm page, or the link in Egonex's email), they enter the address there and no address you passed is used. If the email already has an Egonex account, nothing is charged and your user should pay on the confirm_url page instead. If Stripe declines the token, nothing is charged and check_request shows payment_failed: retry with a new token and the same buyer_email, or give confirm_url to your user. If the payment couldn't be confirmed (payment_error), it may or may not have gone through: don't call pay_order again while check_request shows payment_in_progress (Egonex is checking with Stripe, usually a few minutes; nothing is charged twice meanwhile). When it no longer does: if it shows paid, nothing more is needed; if it shows payment_failed or ready_to_pay, ask your user for a new approval and call pay_order again with the new token (not the same one). If the listing sold out meanwhile, or there aren't that many left, nothing is charged (sold_out / stock_short; stock_short says how many are left when it is 3 or fewer): search again, or call pay_order again with a smaller quantity. If the seller isn't taking new orders right now and hasn't accepted this order yet, nothing is charged (seller_not_taking_orders): choose another listing, or ask the seller with ask_seller. Errors end with their code in parentheses, the same code the REST API returns (for example (shipping_address_required), (invalid_input), (not_found)). After an order is placed, everything about it (confirming delivery, a problem with it, a refund or a cancellation) is handled on Egonex, in your user's chat with the seller (a buyer without an Egonex account opens it from the link in Egonex's email), not through these tools. Pass quote_id from quote_order (the one given to request_order, or a new one for the same listing and quantity) to charge exactly the quoted total: if the price, shipping, sales tax, agreed price or quantity changed, or the quote expired, nothing is charged (quote_changed / quote_expired / quote_not_found): call quote_order again. When the seller accepts first, quote the order with quote_order and request_id right before the call that charges. Only call this after your user agreed to the purchase and to Egonex's terms.
{
"type": "object",
"required": [
"request_id",
"shared_payment_token",
"buyer_email",
"accept_terms"
],
"properties": {
"quantity": {
"type": "integer",
"maximum": 99,
"minimum": 1,
"description": "How many units (items, hours, sessions...) at the listed price. Default 1."
},
"quote_id": {
"type": "string",
"description": "Optional: quote_id from quote_order (it lasts 15 minutes)."
},
"buyer_name": {
"type": "string",
"maxLength": 40,
"description": "Optional name shown to the seller."
},
"request_id": {
"type": "string",
"description": "The id returned by request_order."
},
"buyer_email": {
"type": "string",
"maxLength": 254,
"description": "Your user's email address. Receipts, the order and seller replies go there."
},
"accept_terms": {
"type": "boolean",
"description": "true only if your user agreed to Egonex's Terms of Service and Privacy Policy (payment.terms_url)."
},
"delivery_days": {
"type": "integer",
"maximum": 60,
"minimum": 1,
"description": "Days the seller has to deliver once the order starts (it starts when it is paid and accepted): shipping time for an item, the day of the lesson or service, 1 for digital goods. Default: the listing's delivery_days when it has one, else 3."
},
"shipping_address": {
"type": "object",
"required": [
"name",
"line1",
"city",
"country"
],
"properties": {
"city": {
"type": "string",
"maxLength": 100
},
"name": {
"type": "string",
"maxLength": 100,
"description": "Recipient's full name."
},
"line1": {
"type": "string",
"maxLength": 200,
"description": "Street address."
},
"line2": {
"type": "string",
"maxLength": 200,
"description": "Apartment, suite or unit (optional)."
},
"state": {
"type": "string",
"maxLength": 100,
"description": "State or region; for the US the 2-letter USPS code (for example CA)."
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "2-letter country code (ISO 3166-1), for example US."
},
"postal_code": {
"type": "string",
"maxLength": 20,
"description": "ZIP or postal code; for the US 12345 or 12345-6789."
}
},
"description": "For an item that ships (payment.requires_shipping_address): where to ship it, as your user confirmed it. Required on the call that charges (when the seller accepts first, the call after they accept); a call that only sends the order doesn't keep it, and after payment it can't be changed. US addresses: 2-letter state code and a 5-digit ZIP code or ZIP+4.",
"additionalProperties": false
},
"shared_payment_token": {
"type": "string",
"description": "The Stripe Shared Payment Token (spt_...) your user approved for this purchase."
},
"shipping_address_confirmed": {
"type": "boolean",
"description": "true only if you read shipping_address back to your user and they said it's right. Required with shipping_address on the call that charges."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"request_id",
"paid",
"status",
"order",
"next"
],
"properties": {
"next": {
"type": "string",
"description": "What happens next."
},
"paid": {
"type": "boolean",
"description": "true = the payment went through."
},
"order": {
"type": "object",
"required": [
"id",
"title",
"amount",
"currency"
],
"properties": {
"id": {
"type": "string",
"description": "Order id."
},
"title": {
"type": "string",
"description": "What was ordered: the order's title, as on the order card."
},
"amount": {
"type": "number",
"description": "Order total."
},
"pay_by": {
"type": "string",
"description": "ready_to_pay: the order closes if nobody pays by then (RFC 3339)."
},
"ship_to": {
"type": "object",
"required": [
"city",
"country"
],
"properties": {
"city": {
"type": "string",
"description": "City."
},
"state": {
"type": "string",
"description": "State or region (US: 2-letter code)."
},
"country": {
"type": "string",
"description": "2-letter country code."
},
"postal_code": {
"type": "string",
"description": "US only: the 5-digit ZIP code."
}
},
"description": "An order that ships, once it is paid: the area it ships to (the name and street are never returned). pay_order can't change it; your user tells the seller in the Egonex chat."
},
"currency": {
"type": "string",
"description": "usd."
},
"quantity": {
"type": "number",
"description": "How many units at the listed price (items, hours, nights...); absent when the order doesn't record one, such as an older order or a total the seller quoted."
},
"accept_by": {
"type": "string",
"description": "waiting_for_seller, or paid before the seller accepted: the seller has to accept by then (RFC 3339)."
},
"deliver_by": {
"type": "string",
"description": "paid: the seller has to deliver by then (RFC 3339)."
},
"auto_confirm_at": {
"type": "string",
"description": "delivered: the order completes on its own then, unless a refund is requested before (RFC 3339)."
},
"refunded_amount": {
"type": "number",
"description": "refunded or completed: what was refunded to your user."
}
},
"description": "The order this request led to: made with pay_order, or placed by your user in the chat after confirming. Times are given only where they matter for the status."
},
"status": {
"enum": [
"pending",
"declined",
"expired",
"listing_unavailable",
"message_sent",
"awaiting_order",
"payment_in_progress",
"payment_failed",
"waiting_for_seller",
"ready_to_pay",
"paid",
"delivered",
"refund_requested",
"completed",
"refund_pending",
"refunded",
"closed_unpaid"
],
"type": "string",
"description": "Where the order stands, as check_request reports it: pending (waiting for your user to confirm or decline; nothing has happened yet), declined (your user chose not to go ahead), expired (nobody acted within 7 days; the link no longer works), listing_unavailable (the listing isn't for sale anymore (taken down or sold out), so the request can't go ahead), message_sent (messages only: your user confirmed and the message was sent to the seller), awaiting_order (orders only: your user confirmed and the chat is open, but they haven't placed the order yet), payment_in_progress (orders only: a payment is being processed), payment_failed (orders only: a pay_order payment didn't go through; nothing was charged and the order can still be paid), waiting_for_seller (orders only: the order was sent to the seller, who hasn't accepted yet; nothing has been charged), ready_to_pay (orders only: the order is waiting to be paid (pay_order again, or your user pays on Egonex)), paid (orders only: paid; waiting for the seller to deliver), delivered (orders only: the seller marked it delivered; waiting for your user to confirm receipt), refund_requested (orders only: your user asked for a refund; Egonex is handling it), completed (orders only: the order is complete), refund_pending (orders only: canceled after payment; the refund hasn't gone through yet), refunded (orders only: canceled after payment; your user was refunded), closed_unpaid (orders only: the order closed before anything was charged (close_reason says why))."
},
"request_id": {
"type": "string",
"description": "The request."
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}quote_order — Get the full price before ordering
Get the full price before your user orders: the items (price × quantity, at the agreed price with deal_id), shipping, sales tax and the total in USD, when the charge happens, the shop's return rules and Egonex buyer protection. It only reads: nothing is ordered, reserved or charged. Pass offer_id for a new order, or request_id for an order already sent to the seller (when the seller accepts first: quote it once check_request shows ready_to_pay, right before the pay_order that charges). For an item that ships pass shipping_address; for other items, where Egonex adds sales tax, pass buyer_location. Egonex uses them only to calculate shipping and sales tax and doesn't store them. Returns a quote_id that lasts 15 minutes: pass it to request_order and pay_order, and get a payment token for exactly total. pay_order then charges exactly that total, or nothing when something changed or the quote expired (quote_changed / quote_expired): call quote_order again. Quotes that calculate sales tax are limited to 15 a minute for the same listing from the same client (slow_down). Errors end with their code in parentheses.
{
"type": "object",
"properties": {
"deal_id": {
"type": "string",
"description": "With offer_id, optional: deal.id from an ask_seller answer in which Ego agreed a price with you for this listing."
},
"offer_id": {
"type": "string",
"description": "For a new order: the listing id from search_offers (the 8-character id at the end of a listing page URL also works)."
},
"quantity": {
"type": "integer",
"maximum": 99,
"minimum": 1,
"description": "With offer_id: how many units (items, hours, sessions...). Default 1."
},
"request_id": {
"type": "string",
"description": "Instead of offer_id, for an order already sent to the seller: the id from request_order. The quote is for that order as it was sent (its quantity and price)."
},
"buyer_location": {
"type": "object",
"required": [
"country"
],
"properties": {
"city": {
"type": "string",
"maxLength": 100
},
"line1": {
"type": "string",
"maxLength": 200,
"description": "Street address."
},
"state": {
"type": "string",
"maxLength": 100,
"description": "State or region; for the US the 2-letter USPS code."
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "2-letter country code (ISO 3166-1), for example US."
},
"postal_code": {
"type": "string",
"maxLength": 20,
"description": "ZIP or postal code; required in the US (12345 or 12345-6789)."
}
},
"description": "For an item that doesn't ship, where Egonex adds sales tax: the billing address of the card your user will pay with. pay_order calculates the tax from that card's billing address, so give the full address (street, city, state, ZIP code) when you can.",
"additionalProperties": false
},
"shipping_address": {
"type": "object",
"required": [
"line1",
"city",
"country"
],
"properties": {
"city": {
"type": "string",
"maxLength": 100
},
"name": {
"type": "string",
"maxLength": 100,
"description": "Recipient's full name."
},
"line1": {
"type": "string",
"maxLength": 200,
"description": "Street address."
},
"line2": {
"type": "string",
"maxLength": 200,
"description": "Apartment, suite or unit (optional)."
},
"state": {
"type": "string",
"maxLength": 100,
"description": "State or region; for the US the 2-letter USPS code (for example CA)."
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "2-letter country code (ISO 3166-1), for example US."
},
"postal_code": {
"type": "string",
"maxLength": 20,
"description": "ZIP or postal code; for the US 12345 or 12345-6789."
}
},
"description": "For an item that ships: where your user wants it shipped, the same object you will pass to pay_order (the recipient's name isn't needed here).",
"additionalProperties": false
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"quote_id",
"offer_id",
"title",
"quantity",
"unit",
"unit_price",
"items",
"shipping",
"sales_tax",
"sales_tax_collected",
"total",
"currency",
"charge",
"charge_note",
"buyer_protection",
"expires_at",
"next"
],
"properties": {
"next": {
"type": "string",
"description": "What to do next."
},
"unit": {
"type": "string",
"description": "What one unit is (as in the listing's price)."
},
"items": {
"type": "number",
"description": "unit_price × quantity, USD."
},
"title": {
"type": "string",
"description": "The listing's title."
},
"total": {
"type": "number",
"description": "items + shipping + sales_tax, USD."
},
"charge": {
"enum": [
"at_payment",
"after_seller_accepts"
],
"type": "string",
"description": "When the money is taken (charge_note says how)."
},
"deal_id": {
"type": "string",
"description": "The agreed price the quote uses (from ask_seller); absent without one."
},
"currency": {
"type": "string",
"description": "usd."
},
"offer_id": {
"type": "string",
"description": "The listing."
},
"quantity": {
"type": "integer",
"description": "Units quoted."
},
"quote_id": {
"type": "string",
"description": "Pass it to request_order and pay_order before expires_at."
},
"shipping": {
"type": "number",
"description": "Shipping in USD, once per order (0 when it doesn't ship or ships free)."
},
"sales_tax": {
"type": "number",
"description": "Sales tax in USD (0 when sales_tax_collected is false)."
},
"expires_at": {
"type": "string",
"description": "The quote works until then (RFC 3339)."
},
"request_id": {
"type": "string",
"description": "With request_id: the request whose order the quote is for (use it only with that request's pay_order)."
},
"shop_rules": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"value"
],
"properties": {
"label": {
"type": "string",
"description": "Returns or Not returnable."
},
"value": {
"type": "string",
"description": "What the shop says."
}
}
},
"description": "The shop's own return rules, when the seller wrote them."
},
"unit_price": {
"type": "number",
"description": "USD per unit (the agreed price when the quote has deal_id)."
},
"charge_note": {
"type": "string",
"description": "When the charge happens and what happens if the seller declines."
},
"buyer_protection": {
"type": "string",
"description": "Egonex buyer protection."
},
"sales_tax_collected": {
"type": "boolean",
"description": "false = Egonex doesn't add sales tax to this order."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}request_order — Order a listing for your user
Start an order for one listing on your user's behalf. Returns a confirm_url: your user opens it, checks the listing and price, enters an email address and pays on Egonex (payments are processed by Stripe). Nothing is ordered or charged until they confirm, and no Egonex account is needed. Use note for what the seller needs to know, such as dates, quantity, size, or the area for delivery or pickup. For an item that ships, your user enters the shipping address when they pay on Egonex. Use check_request with the returned id to see whether your user confirmed. A sold-out listing, or one whose seller isn't taking new orders right now, can't be ordered (error listing_unavailable); ask_seller can still ask whether it will be back. Errors end with their code in parentheses (for example (listing_unavailable), (deal_expired), (invalid_input)). Pass quote_id from quote_order to order at that quote (its deal_id comes with it); payment then has quote_id and quoted_total for pay_order.
{
"type": "object",
"required": [
"offer_id"
],
"properties": {
"note": {
"type": "string",
"maxLength": 1000,
"description": "Optional note to the seller, e.g. the date or quantity your user wants."
},
"deal_id": {
"type": "string",
"description": "Optional: deal.id from an ask_seller answer in which Ego agreed a price with you for this listing (use it within 24 hours, once). The order then uses that price."
},
"offer_id": {
"type": "string",
"description": "The listing id from search_offers (the 8-character id at the end of a listing page URL also works)."
},
"quote_id": {
"type": "string",
"description": "Optional: quote_id from quote_order (it lasts 15 minutes)."
},
"agent_name": {
"type": "string",
"maxLength": 60,
"description": "Your name, shown to your user when they confirm."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"id",
"kind",
"status",
"offer_id",
"confirm_url",
"expires_at"
],
"properties": {
"id": {
"type": "string",
"description": "Request id (pass it as request_id)."
},
"deal": {
"type": "object",
"required": [
"id",
"unit_price",
"list_price",
"currency",
"unit",
"quantity",
"amount",
"expires_at"
],
"properties": {
"id": {
"type": "string",
"description": "Pass it as request_order's deal_id (works for one request)."
},
"unit": {
"type": "string",
"description": "What one unit is (as in the listing's price)."
},
"amount": {
"type": "number",
"description": "unit_price × quantity, before shipping and tax."
},
"currency": {
"type": "string",
"description": "usd."
},
"quantity": {
"type": "number",
"description": "How many units the price was agreed for: pay_order takes at most this many (rounded down, at least 1)."
},
"expires_at": {
"type": "string",
"description": "Use it in request_order before this time (RFC 3339)."
},
"list_price": {
"type": "number",
"description": "The listed price per unit when it was agreed, USD."
},
"unit_price": {
"type": "number",
"description": "Agreed price per unit, USD."
},
"delivery_days": {
"type": "integer",
"description": "Agreed delivery time in days after payment (pay_order uses it when you leave delivery_days out)."
}
},
"description": "The price Ego agreed with you (only when it agreed one). Pass deal.id as deal_id to request_order within 24 hours; that request then keeps this price for pay_order and for the order your user pays on Egonex."
},
"kind": {
"enum": [
"order",
"message"
],
"type": "string",
"description": "order (request_order) or message (message_seller)."
},
"next": {
"type": "string",
"description": "What to do next (when the request is created)."
},
"order": {
"type": "object",
"required": [
"id",
"title",
"amount",
"currency"
],
"properties": {
"id": {
"type": "string",
"description": "Order id."
},
"title": {
"type": "string",
"description": "What was ordered: the order's title, as on the order card."
},
"amount": {
"type": "number",
"description": "Order total."
},
"pay_by": {
"type": "string",
"description": "ready_to_pay: the order closes if nobody pays by then (RFC 3339)."
},
"ship_to": {
"type": "object",
"required": [
"city",
"country"
],
"properties": {
"city": {
"type": "string",
"description": "City."
},
"state": {
"type": "string",
"description": "State or region (US: 2-letter code)."
},
"country": {
"type": "string",
"description": "2-letter country code."
},
"postal_code": {
"type": "string",
"description": "US only: the 5-digit ZIP code."
}
},
"description": "An order that ships, once it is paid: the area it ships to (the name and street are never returned). pay_order can't change it; your user tells the seller in the Egonex chat."
},
"currency": {
"type": "string",
"description": "usd."
},
"quantity": {
"type": "number",
"description": "How many units at the listed price (items, hours, nights...); absent when the order doesn't record one, such as an older order or a total the seller quoted."
},
"accept_by": {
"type": "string",
"description": "waiting_for_seller, or paid before the seller accepted: the seller has to accept by then (RFC 3339)."
},
"deliver_by": {
"type": "string",
"description": "paid: the seller has to deliver by then (RFC 3339)."
},
"auto_confirm_at": {
"type": "string",
"description": "delivered: the order completes on its own then, unless a refund is requested before (RFC 3339)."
},
"refunded_amount": {
"type": "number",
"description": "refunded or completed: what was refunded to your user."
}
},
"description": "The order this request led to: made with pay_order, or placed by your user in the chat after confirming. Times are given only where they matter for the status."
},
"status": {
"enum": [
"pending",
"declined",
"expired",
"listing_unavailable",
"message_sent",
"awaiting_order",
"payment_in_progress",
"payment_failed",
"waiting_for_seller",
"ready_to_pay",
"paid",
"delivered",
"refund_requested",
"completed",
"refund_pending",
"refunded",
"closed_unpaid"
],
"type": "string",
"description": "Where this request and its order stand: pending (waiting for your user to confirm or decline; nothing has happened yet), declined (your user chose not to go ahead), expired (nobody acted within 7 days; the link no longer works), listing_unavailable (the listing isn't for sale anymore (taken down or sold out), so the request can't go ahead), message_sent (messages only: your user confirmed and the message was sent to the seller), awaiting_order (orders only: your user confirmed and the chat is open, but they haven't placed the order yet), payment_in_progress (orders only: a payment is being processed), payment_failed (orders only: a pay_order payment didn't go through; nothing was charged and the order can still be paid), waiting_for_seller (orders only: the order was sent to the seller, who hasn't accepted yet; nothing has been charged), ready_to_pay (orders only: the order is waiting to be paid (pay_order again, or your user pays on Egonex)), paid (orders only: paid; waiting for the seller to deliver), delivered (orders only: the seller marked it delivered; waiting for your user to confirm receipt), refund_requested (orders only: your user asked for a refund; Egonex is handling it), completed (orders only: the order is complete), refund_pending (orders only: canceled after payment; the refund hasn't gone through yet), refunded (orders only: canceled after payment; your user was refunded), closed_unpaid (orders only: the order closed before anything was charged (close_reason says why))."
},
"payment": {
"type": "object",
"required": [
"pay_url",
"amount",
"currency",
"unit",
"max_quantity",
"payment_handlers",
"terms_url",
"privacy_url",
"next"
],
"properties": {
"next": {
"type": "string",
"description": "How to pay."
},
"unit": {
"type": "string",
"description": "What one unit is (as in the listing's price)."
},
"amount": {
"type": "number",
"description": "USD for one unit."
},
"pay_url": {
"type": "string",
"description": "REST: POST the token here (MCP: pay_order)."
},
"currency": {
"type": "string",
"description": "usd."
},
"quote_id": {
"type": "string",
"description": "The request was made with this quote_order quote: pass it to pay_order to charge exactly quoted_total. Absent otherwise."
},
"terms_url": {
"type": "string",
"description": "Egonex Terms of Service your user must agree to."
},
"privacy_url": {
"type": "string",
"description": "Egonex Privacy Policy."
},
"max_quantity": {
"type": "integer",
"description": "Most units one payment can buy (no more than what's left when only 1 to 3 are left of an item sold per piece)."
},
"quoted_total": {
"type": "number",
"description": "The quote's total in USD (items + shipping + sales tax). Absent without a quote."
},
"payment_handlers": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"type",
"version",
"spec",
"schema",
"available_instruments",
"config"
],
"properties": {
"id": {
"type": "string",
"description": "Handler id."
},
"spec": {
"type": "string",
"description": "Handler spec URL."
},
"type": {
"type": "string",
"description": "com.stripe.payments."
},
"config": {
"type": "object",
"description": "business_profile and environment (production or sandbox)."
},
"schema": {
"type": "string",
"description": "Handler schema URL."
},
"version": {
"type": "string",
"description": "Handler version."
},
"available_instruments": {
"type": "array",
"items": {
"type": "object"
},
"description": "Payment instruments."
}
}
},
"description": "UCP payment handlers (com.stripe.payments) with the Stripe network_id to issue the token to."
},
"requires_shipping_address": {
"type": "boolean",
"description": "true = the item ships: the pay_order call that charges needs shipping_address and shipping_address_confirmed=true (a call that only sends the order to the seller doesn't). Absent otherwise."
}
},
"description": "On a new order request that can be paid directly with a Stripe Shared Payment Token (pay_order)."
},
"offer_id": {
"type": "string",
"description": "The listing."
},
"order_id": {
"type": "string",
"description": "The order this request led to (same as order.id)."
},
"expires_at": {
"type": "string",
"description": "When a pending request expires (RFC 3339)."
},
"confirm_url": {
"type": "string",
"description": "The page your user opens to confirm."
},
"close_reason": {
"enum": [
"seller_declined",
"seller_acceptance_timed_out",
"seller_canceled_before_payment",
"buyer_withdrew",
"payment_deadline_passed"
],
"type": "string",
"description": "closed_unpaid only: why the order closed (absent for orders closed before 2026-11-01)."
}
},
"description": "A request your user confirms on confirm_url, and the order it led to."
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}search_offers — Search Egonex listings
Search listings on Egonex, a marketplace where individual people sell things and services directly. Use it when your user wants to buy, hire, book, rent or commission something from a person rather than a store, for example: - items, new or used: cameras and lenses, phones, laptops, bikes, furniture, clothing, collectibles, instruments, gear; - lessons and coaching: languages, music, tutoring and test prep, fitness, cooking, art, coding; - services in person: photography, repairs (bikes, electronics, film cameras), cleaning, moving help, pet care, babysitting, beauty, tours; - online and freelance work: design, writing and editing, translation, software, marketing, consulting, video editing; - digital goods, tickets, handmade and custom work. Each result is one listing with a price and unit (per item, package, hour, session, day, week, month, night, person or project; USD), how it is delivered (in person in a city, online, or either), for physical items its condition (new or used), brand / model / gtin when the seller gave them, and ships = true when the seller posts it (your user enters the shipping address when paying on Egonex, or you pass it to pay_order when you pay), delivery_days when the seller states a usual delivery time (days to ship for posted items), up to 4 photo URLs, the listing's own page, ask_url / order_url links a person can open, and the seller: their public page, seller.answers_questions (true = ask_seller gets an answer right away), seller.trusted (true = Egonex's Trusted badge, given automatically for the seller's recent trading on Egonex, not set by the seller) and, when there are 3 or more, seller.orders_completed; seller.review_count and seller.average_rating (1 to 5 stars, one decimal) appear when the seller has counted buyer reviews (buyers rate the item they bought from 1 to 5 stars), with seller.positive_count / seller.negative_count (4–5 stars / 1–3 stars), and seller.positive_rate (0 to 100, rounded down) once there are 10 or more. Results are ranked by how well they match the query words (rarer words count more; listings that match only common words are left out); among results that match equally well (and are equally close, for in-person services), sellers whose counted buyer reviews average more stars come first (a seller with only a few reviews counts as closer to 4 stars), and sellers with no reviews sit in the middle, level with a 4-star average; each result's relevance says whether the listing itself (its title and description, not the store's name or intro) matches all or only some words, and matched_words / missing_words say which. Online, remote and in person in query never bring in a listing by themselves: among equally good matches, listings whose title says it come first, then those delivered that way; a listing that is neither counts as some. Only the first 12 search words of query are used (filler words like for, near or cheap don't count, nor do two-letter words in lowercase or a single letter on its own: write abbreviations in capitals, such as QA or IT, and give a letter another word, such as C++ tutor); the rest come back in unused_words. When nothing matches, the response says so and lists the categories that have listings; a search within a category or a store returns that category's or store's other listings instead, marked other_filters. query can be in any language. When it isn't English, Egonex also searches an English translation of it; when it has words too short to search, ends with a place (and city is empty), matches nothing or has a word no listing uses, Egonex searches a rewrite instead. searched_as says what was searched. Put the place in city, not in query (listing cities are not matched against query words): in-person listings in that city come first, then those nearby (same metro area or within about 30 miles), and add the state when several places share the name (Portland, OR). Online, either-way and shipped listings are always included, and in-person listings without a city that don't ship come back with city_unknown = true (ask the seller before suggesting one to someone far away). Use store to list one seller's storefront. Each listing has availability (in_stock; sold-out listings are left out of results) and stock_left when only 1 to 3 are left. When you suggest a listing to your user, give them its url (the listing's own page) so they can open it. No account or API key is needed.
{
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City for in-person listings, e.g. \"San Francisco\" or \"Portland, OR\". In-person listings in that city come first, then those nearby (same metro area or within about 30 miles); listings done only in person elsewhere are left out. Add the state when several places share the name. In-person listings without a city are kept and marked city_unknown (unless they ship); online, either-way and shipped listings are always included and rank after local ones."
},
"limit": {
"type": "integer",
"maximum": 20,
"minimum": 1
},
"query": {
"type": "string",
"description": "What your user wants, in a few words, e.g. \"spanish lessons for kids\", \"used fujifilm camera\", \"logo design\", \"road bike tune-up\". Matched as whole words and their word forms (lesson / lessons, colorized / colorization) against listing titles and descriptions; a word naming a category (pets, electronics, fashion, clothing, jewelry, makeup, furniture, toys, baby, camping, hobbies, crafts, books, food, tickets, rentals, templates, video, or the same in Chinese, Japanese or Korean) also matches listings in that category. Store names, intros and listing cities are not matched (put places in city). Rarer words count more, and listings that match only common words are left out. Online, remote and in person never bring in a listing by themselves: among equally good matches, listings whose title says it come first, then those delivered that way (either-way listings count as both). To keep only one kind use delivery, which is exact: delivery=remote leaves out either-way listings. Only the first 12 search words are used, so put the most important first. Write abbreviations in capitals (QA, PR, IT)."
},
"store": {
"type": "string",
"description": "Only this seller's storefront (the store name after shop.egonex.ai/@)."
},
"offset": {
"type": "integer",
"minimum": 0
},
"category": {
"enum": [
"electronics",
"fashion",
"jewelry",
"beauty",
"home",
"toys",
"baby",
"sports",
"hobbies",
"art",
"pets",
"books",
"food",
"lessons",
"local",
"creative",
"professional",
"digital",
"rentals",
"other"
],
"type": "string",
"description": "One category. Goods: electronics (electronics & accessories), fashion (clothing & shoes), jewelry (jewelry, bags & accessories), beauty (beauty & personal care), home (home & living), toys (toys & games), baby (baby & maternity), sports (sports & outdoor gear), hobbies (collectibles & hobbies), art (art, handmade & craft supplies), pets (pet supplies), books (books, music & movies), food (food & drinks). Services: lessons (lessons & tutoring), local (local services: repairs, cleaning, moving, pet care, babysitting, beauty, photography), creative (design, writing, translation, video, music), professional (software, AI setup, marketing, legal, accounting). digital (templates, e-books, courses, apps, AI agent skills, media files), rentals (tickets & vouchers), other."
},
"delivery": {
"enum": [
"onsite",
"remote",
"hybrid"
],
"type": "string",
"description": "onsite = in person only, remote = online only, hybrid = either."
},
"condition": {
"enum": [
"new",
"used"
],
"type": "string",
"description": "Physical items: new = only new items; used = new and used. Listings that don't state a condition are included."
},
"max_price": {
"type": "number",
"minimum": 0,
"description": "Highest price in USD (per the listing's unit)."
},
"min_price": {
"type": "number",
"minimum": 0,
"description": "Lowest price in USD (per the listing's unit)."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"offers",
"total",
"next_offset"
],
"properties": {
"note": {
"type": "string",
"description": "How the results were found, when not every word matched or nothing did, or not every word was used."
},
"total": {
"type": "integer",
"description": "How many listings match in all."
},
"offers": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"title",
"description",
"price",
"delivery",
"kind",
"availability",
"category",
"url",
"ask_url",
"order_url",
"seller",
"updated_at"
],
"properties": {
"id": {
"type": "string",
"description": "Listing id (pass it as offer_id)."
},
"url": {
"type": "string",
"description": "The listing's own page."
},
"city": {
"type": "string",
"description": "City for in-person listings."
},
"gtin": {
"type": "string",
"description": "Physical items: barcode (UPC / EAN / ISBN, 8–14 digits, check digit verified) when the seller gave it."
},
"kind": {
"enum": [
"physical",
"service",
"digital"
],
"type": "string",
"description": "What it is: physical (an item, shipped or picked up), service, or digital (a file or link the seller sends by hand after payment)."
},
"brand": {
"type": "string",
"description": "Physical items: brand, as the seller gave it; absent when not stated."
},
"model": {
"type": "string",
"description": "Physical items: model name or number, as the seller gave it; match it to compare the exact version."
},
"price": {
"type": "object",
"required": [
"amount",
"currency",
"unit",
"text"
],
"properties": {
"text": {
"type": "string",
"description": "The price as text, e.g. \"$1,150 per item\"."
},
"unit": {
"type": "string",
"description": "What the price is per: item, package, hour, day, week, month, night, person, project or time (a session)."
},
"amount": {
"type": "number",
"description": "Price per unit."
},
"currency": {
"type": "string",
"description": "Currency code (USD)."
}
},
"description": "The price."
},
"ships": {
"type": "boolean",
"description": "true = the seller ships it; your user enters the shipping address when paying on Egonex, or you pass it to pay_order when you pay."
},
"title": {
"type": "string",
"description": "Title."
},
"photos": {
"type": "array",
"items": {
"type": "string",
"description": "Photo URL."
},
"description": "Up to 4 photo URLs; the first is the cover."
},
"seller": {
"type": "object",
"required": [
"handle",
"url",
"answers_questions",
"trusted"
],
"properties": {
"url": {
"type": "string",
"description": "The seller's public page."
},
"intro": {
"type": "string",
"description": "The store's short intro."
},
"handle": {
"type": "string",
"description": "Store name (shop.egonex.ai/@handle)."
},
"trusted": {
"type": "boolean",
"description": "true = the seller has Egonex's Trusted badge, the same one shown on their public page. Egonex gives it automatically when the seller's recent trading on Egonex reaches the top earn-back step (sellers can't set it), and doesn't show it while their account health is low."
},
"avatar_url": {
"type": "string",
"description": "The seller's picture."
},
"review_count": {
"type": "integer",
"description": "Counted buyer reviews (buyers rate the item they bought from 1 to 5 stars); only present from 1."
},
"positive_rate": {
"type": "integer",
"description": "Percent of counted reviews with 4 or 5 stars, 0 to 100, rounded down; only present from 10 counted reviews."
},
"average_rating": {
"type": "number",
"description": "Average star rating of the counted reviews, 1 to 5 with one decimal (shown as ★ 4.8 on Egonex); present with review_count."
},
"negative_count": {
"type": "integer",
"description": "Counted reviews with 1 to 3 stars; present with review_count, 0 included."
},
"positive_count": {
"type": "integer",
"description": "Counted reviews with 4 or 5 stars; present with review_count, 0 included."
},
"orders_completed": {
"type": "integer",
"description": "Orders completed on Egonex; only present from 3."
},
"answers_questions": {
"type": "boolean",
"description": "true = the seller's assistant (Ego) answers ask_seller right away."
}
},
"description": "The seller (only what is on their public page)."
},
"ask_url": {
"type": "string",
"description": "Link a person can open to ask the seller on Egonex."
},
"category": {
"type": "string",
"description": "Category code, e.g. EDUCATION.TUTORING."
},
"delivery": {
"type": "string",
"description": "onsite (in person), remote (online) or hybrid (either)."
},
"shipping": {
"type": "object",
"properties": {
"fee": {
"type": "number",
"description": "The shipping fee in USD for the order; absent when free."
},
"free": {
"type": "boolean",
"description": "true = free shipping."
},
"no_international": {
"type": "boolean",
"description": "Older listings only: true = it doesn't ship to other countries."
},
"international_fee": {
"type": "number",
"description": "Older listings only: the fee to other countries (fee is then the fee inside the seller's country)."
}
},
"description": "Items that ship, when the seller set a shipping fee: charged once per order whatever the quantity, paid at Egonex checkout and by pay_order. Absent when not set (see the store's shipping rules)."
},
"condition": {
"enum": [
"new",
"used"
],
"type": "string",
"description": "Physical items: new or used."
},
"order_url": {
"type": "string",
"description": "Link a person can open to order on Egonex."
},
"relevance": {
"type": "string",
"description": "Search results only: all_words (the listing itself, not its store's name or intro, matched every search word and, if the query said online, remote or in person, it is delivered that way or its title says so; either-way listings fit both), some_words or other_filters (no word matched; another listing in the category or store searched)."
},
"stock_left": {
"type": "integer",
"description": "Only present when 1 to 3 are left (for a limited service, orders left); no number otherwise."
},
"updated_at": {
"type": "string",
"description": "Last change (RFC 3339)."
},
"description": {
"type": "string",
"description": "The seller's description."
},
"availability": {
"enum": [
"in_stock",
"sold_out"
],
"type": "string",
"description": "in_stock, or sold_out (can't be ordered until the seller restocks; sold-out listings are left out of search, you only see them when you fetch one by id)."
},
"city_unknown": {
"type": "boolean",
"description": "true = in person, the seller did not give a city and it doesn't ship; ask before suggesting it to someone far away."
},
"delivery_days": {
"type": "integer",
"description": "The seller's usual delivery time in days (for shipped items, days to ship); absent when not stated."
},
"matched_words": {
"type": "array",
"items": {
"type": "string",
"description": "A search word."
},
"description": "Search results only: the words of query this listing's title or description (or its category, for a category name such as pets) matches, as written in query. Chinese, Japanese and Korean text is matched in overlapping two-character pieces, and these are what is listed."
},
"missing_words": {
"type": "array",
"items": {
"type": "string",
"description": "A search word."
},
"description": "Search results only: the words of query this listing doesn't match (for Chinese, Japanese and Korean, two-character pieces); absent when it matches them all. A some_words listing without missing_words matched every word, but either it is not delivered the way the query asked (online, remote or in person) or some words of the query could not be searched."
},
"digital_format": {
"enum": [
"pdf",
"video",
"template",
"preset",
"code",
"other"
],
"type": "string",
"description": "Digital products: the file type; absent when not stated."
},
"session_minutes": {
"type": "integer",
"description": "Services priced per session or per hour: how long one session is, in minutes."
},
"digital_delivery": {
"enum": [
"file",
"link"
],
"type": "string",
"description": "Digital products: the seller sends a file or a link after payment."
}
},
"description": "One listing."
},
"description": "Listings on this page."
},
"browse_url": {
"type": "string",
"description": "When nothing matched: the sellers directory for people."
},
"categories": {
"type": "array",
"items": {
"type": "object",
"required": [
"category",
"label",
"count"
],
"properties": {
"count": {
"type": "integer",
"description": "Listings in it."
},
"label": {
"type": "string",
"description": "Name of the category."
},
"category": {
"type": "string",
"description": "Pass it as category."
}
}
},
"description": "When nothing matched: categories that have listings."
},
"next_offset": {
"type": [
"integer",
"null"
],
"description": "Pass as offset for the next page; null = no more."
},
"searched_as": {
"type": "object",
"required": [
"reason",
"query"
],
"properties": {
"city": {
"type": "string",
"description": "City read from query and used as the city filter; a short form such as sf comes back as the full name (San Francisco, CA)."
},
"query": {
"type": "string",
"description": "The English search words that were used."
},
"reason": {
"enum": [
"translated",
"abbreviation",
"place",
"no_results",
"unmatched_words"
],
"type": "string",
"description": "Why query was rewritten."
},
"delivery": {
"enum": [
"onsite",
"remote"
],
"type": "string",
"description": "Delivery read from query: listings delivered that way rank first (either-way listings count); it does not filter."
},
"max_price": {
"type": "number",
"description": "Highest price read from query and used as a filter."
},
"min_price": {
"type": "number",
"description": "Lowest price read from query and used as a filter."
}
},
"description": "Only when Egonex searched a rewrite of query (it isn't in English, has words too short to search, ends with a place, nothing matched, or one of its words appears in no listing): what was searched. matched_words and missing_words are in the words of the search that found the listing: the rewrite, or, for a query that isn't in English, the query as written."
},
"unused_words": {
"type": "array",
"items": {
"type": "string"
},
"description": "Words of query that were not used: only the first 12 search words count. Search again with them if they matter."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 2 of 2 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 850 ms
- 95th percentile latency
- 850 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 850 ms · metadata changed · 7 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http egonex-mcp https://api.egonex.ai/api/v1/mcpCodex
codex mcp add egonex-mcp --url https://api.egonex.ai/api/v1/mcpCursor
{
"mcpServers": {
"egonex-mcp": {
"url": "https://api.egonex.ai/api/v1/mcp"
}
}
}Cline
{
"mcpServers": {
"egonex-mcp": {
"type": "streamableHttp",
"url": "https://api.egonex.ai/api/v1/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"egonex-mcp": {
"type": "http",
"url": "https://api.egonex.ai/api/v1/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http egonex-mcp https://api.egonex.ai/api/v1/mcpClaude Desktop
https://api.egonex.ai/api/v1/mcpWindsurf
{
"mcpServers": {
"egonex-mcp": {
"serverUrl": "https://api.egonex.ai/api/v1/mcp"
}
}
}Let your agent find its tools
Find servers like Egonex MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other commerce servers
Do you run Egonex MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.