Servidor MCP

Teppek

com.teppek/teppek

Qué hace este MCP

Searches and manages listings for jobs, homes, vehicles, and services, including publishing, messaging, and listing lifecycle operations.

create_listing
Publish a listing on behalf of the user across any of the 4 verticals and 12 roles. `location` must be coordinates ({ lat, lon }) — a free-text address is not accepted, so geocode it first. Publishing consumes credits and requires a free listing slot; get_entitlements reports the current balance and remaining slots. A reached limit makes this return an ACTIVE_LISTING_LIMIT_REACHED error carrying a pay_url. Consumes credits and is held for AI moderation (status starts "pending"); credits are refunded if rejected, EXCEPT for prohibited or spam content, which forfeits the credit. To attach photos, first call request_image_upload for each image and pass the returned keys in `images` — every image is AI-moderated with the text before going live. Requires the user to be connected to Teppek: an anonymous call returns an AUTH_REQUIRED error with an authorize_url — surface "Connect with Teppek" to the user, then retry.
Acceso externo
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['vertical', 'role', 'title', 'price', 'currency', 'location'], 'properties': {'role': {'enum': ['career_employer', 'career_seeker', 'estate_buyer', 'estate_landlord', 'estate_renter', 'estate_seller', 'service_client', 'service_pro', 'vehicle_buyer', 'vehicle_letter', 'vehicle_renter', 'vehicle_seller'], 'type': 'string', 'description': 'The listing role â\x80\x94 this alone fixes supply vs demand (do not send intent_type). vehicle_letter = you OWN the vehicle and are renting it OUT (lessor); for a user who WANTS to rent a vehicle use vehicle_renter. Likewise estate_landlord (renting out) vs estate_renter (wants to rent), estate_seller vs estate_buyer, career_employer (posting a job) vs career_seeker (a CV), service_pro (offering) vs service_client (wants a service).'}, 'price': {'type': 'number', 'minimum': 0}, 'title': {'type': 'string', 'maxLength': 200, 'minLength': 3}, 'images': {'type': 'array', 'items': {'type': 'string', 'maxLength': 512, 'minLength': 1}, 'maxItems': 6}, 'details': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]}}, 'currency': {'type': 'string', 'maxLength': 8, 'minLength': 1, 'description': 'ISO-4217 currency code matching the listing country (e.g. USD, EUR, GBP, TRY). Required â\x80\x94 there is no default, to avoid silently mislabeling non-Turkish listings.'}, 'location': {'type': 'object', 'required': ['lat', 'lon'], 'properties': {'lat': {'type': 'number', 'maximum': 90, 'minimum': -90}, 'lon': {'type': 'number', 'maximum': 180, 'minimum': -180}}, 'description': 'Listing coordinates as { lat, lon }. A free-text address is NOT accepted â\x80\x94 resolve it to coordinates before calling.', 'additionalProperties': False}, 'vertical': {'enum': ['career', 'real_estate', 'vehicle', 'service'], 'type': 'string'}, 'description': {'type': 'string', 'maxLength': 5000}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}, 'additionalProperties': {}}
delete_listing
Delete (soft-delete) one of the USER'S OWN listings by listing_id. Only the owner can delete. No credit is refunded — the listing was already published.
Destructivo Idempotente
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['listing_id'], 'properties': {'listing_id': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'success': {'type': 'boolean'}}, 'additionalProperties': {}}
get_conversation
Read one of the user's OWN message conversations by thread_id, including its messages (marks incoming messages read). Only threads the authenticated user participates in are returned.
Idempotente
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['thread_id'], 'properties': {'thread_id': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}, 'additionalProperties': {}}
get_entitlements
Check the user's publishing entitlements BEFORE attempting to publish: membership tier, max vs current active listings, remaining slots, wallet credit balance, the per-listing credit cost, and can_create_listing. When the limit is reached the response indicates whether the user can pay from wallet credit or should open checkout (pay_url).
Solo lectura
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}, 'additionalProperties': {}}
get_listing
Fetch the full detail of ONE Teppek listing by id — title, description, price/salary, location and the Teppek contact route. Use after search_listings to show, summarize or compare a specific job, home, vehicle or service the user picked.
Solo lectura Acceso externo
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['listing_id'], 'properties': {'listing_id': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'price': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'title': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'status': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'vertical': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': {}}
list_conversations
List the user's OWN listing-message conversations (threads they started, or received as a listing owner), newest first. Resolved from the authenticated agent key — only ever this user's threads. Use get_conversation to read a thread's messages.
Solo lectura
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 50, 'minimum': 1}, 'offset': {'type': 'integer', 'default': 0, 'maximum': 9007199254740991, 'minimum': 0}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}, 'additionalProperties': {}}
list_my_listings
List the user's OWN listings (any status), newest first. Resolved from the authenticated agent key — only ever returns this user's listings. Use status='pending' to see what is awaiting moderation, status='rejected' for declined ones.
Solo lectura
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 50, 'minimum': 1}, 'offset': {'type': 'integer', 'default': 0, 'maximum': 9007199254740991, 'minimum': 0}, 'status': {'enum': ['active', 'pending', 'rejected', 'draft', 'sold', 'expired', 'hidden', 'all'], 'type': 'string', 'default': 'all', 'description': 'Filter YOUR listings by moderation/lifecycle status. Use "pending" to see what is awaiting AI moderation, "rejected" for declined ones, "all" (default) for everything.'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'listings'], 'properties': {'success': {'type': 'boolean'}, 'listings': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'price': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'title': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'status': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'vertical': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': {}}}}, 'additionalProperties': {}}
purchase_package
Top up the ACCOUNT's credit balance by buying a package with USDC on Base — so you can keep publishing/boosting autonomously instead of stopping to ask the human to open teppek.com/pricing. The agent spends the account's package credits (1 credit = 1 USD) exactly like the human owner; this buys the SAME packages a human buys, just paid on-chain. Use it when create_listing/gold/flare returns 402 (out of credits) or 409 (listing limit). TWO STEPS: (1) call with pack_key only (pro/pro_plus/business) → you get a 402 PAYMENT_REQUIRED carrying { payment: { pay_to, amount_usdc, network: 'base', asset } }; (2) send exactly that much USDC to pay_to from the account owner's wallet, then call again with the SAME pack_key and payment_tx set to the transaction hash → the account is credited and you can retry the original action. NOT a per-listing payment. If it returns 404 AGENT_TOPUP_UNAVAILABLE, autonomous top-up is off — tell the owner to buy a package at the pay_url. A 202 PENDING_CONFIRMATION means the tx is not yet confirmed on-chain — retry shortly with the same payment_tx.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['pack_key'], 'properties': {'pack_key': {'enum': ['pro', 'pro_plus', 'business'], 'type': 'string', 'description': 'Which credit package to buy for the ACCOUNT: pro = 90 credits ($90 USDC), pro_plus = 180 ($180), business = 890 ($890). 1 credit = 1 USD.'}, 'payment_tx': {'type': 'string', 'description': 'On-chain USDC (Base) transaction hash of your payment. OMIT on the first call to receive the payment instructions (pay_to + amount); then send the USDC and call again WITH payment_tx set to the tx hash to credit the account.'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}, 'additionalProperties': {}}
renew_listing
Renew one of the USER'S OWN listings — extend its expiry another 30 days (native listings lapse ~30 days after posting). Free — no credit charge. Renewing an expired listing returns it to active; a pending, rejected, sold, or draft listing cannot be renewed.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['listing_id'], 'properties': {'listing_id': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'listing'], 'properties': {'listing': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'price': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'title': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'status': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'vertical': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': {}}, 'success': {'type': 'boolean'}}, 'additionalProperties': {}}
reply_to_conversation
Continue an EXISTING message thread by thread_id — the message goes to the other participant. Use this to follow up in a conversation that already exists, whether the user is the listing owner answering an inquiry or the inquirer following up. For the FIRST message to a listing found in search (you have a listing_id but no thread yet), use send_message instead. Contact routes through Teppek; raw personal details are never exposed. Find thread_id via list_conversations / get_conversation.
Acceso externo
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['thread_id', 'body'], 'properties': {'body': {'type': 'string', 'maxLength': 2000, 'minLength': 1, 'description': 'The reply to post into the conversation. Contact routes through Teppek; raw personal details are never exposed.'}, 'thread_id': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}, 'additionalProperties': {}}
request_image_upload
Get a short-lived upload grant to attach a photo to a listing you're about to publish (any vertical/role). Returns { key, upload_url, upload_token, headers_required }: POST the raw image bytes to upload_url with those headers, then pass the returned key in create_listing's `images` array. Images are AI-moderated (content safety + consistency with the listing text) before the listing goes live.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['content_type', 'file_size'], 'properties': {'file_size': {'type': 'integer', 'maximum': 10485760, 'exclusiveMinimum': 0}, 'content_type': {'enum': ['image/jpeg', 'image/png', 'image/webp', 'image/avif'], 'type': 'string'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'key': {'type': 'string'}, 'upload_url': {'type': 'string'}, 'upload_token': {'type': 'string'}, 'headers_required': {'type': 'object', 'properties': {}, 'additionalProperties': {}}}, 'additionalProperties': {}}
search_listings
Find live jobs, homes/rentals, vehicles, or local services NEAR a place or in a city/country on Teppek — use this for natural requests like "jobs near me", "apartments in Berlin", "used cars under 10k in Madrid", "plumbers nearby". Covers 27 countries with fresh, location-aware listings refreshed daily. For MEANING-based or fuzzy natural-language intent (not exact keywords or filters), use semantic_search instead. Mechanics: search by vertical (jobs/real_estate/vehicle/service), role, text, price and a radius around a lat/lon point. The `role` is the perspective you search AS and returns the COUNTERPARTY listings: to find JOB POSTINGS use role="career_seeker" (NOT career_employer, which searches candidate CVs). A text_query or location is needed — an empty query returns nothing. The response meta.total is the REAL match count (independent of limit); for a multi-word text_query it counts listings matching ANY of the words, so to count a whole occupation/category include its synonyms (e.g. "waiter waitress server"). Use the `country` field for country-scoped totals. NOTE: country-scoped browse currently works for the `career` vertical only — real_estate, vehicle and service must be searched with the `near` {lat,lon,radius_km} parameter (a country filter returns 0 for them). meta.ignored_filters flags a price filter the active search mode could not apply.
Solo lectura Acceso externo
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'near': {'type': 'object', 'required': ['lat', 'lon'], 'properties': {'lat': {'type': 'number', 'maximum': 90, 'minimum': -90}, 'lon': {'type': 'number', 'maximum': 180, 'minimum': -180}, 'radius_km': {'type': 'number', 'default': 10, 'maximum': 200, 'exclusiveMinimum': 0}}, 'additionalProperties': False}, 'role': {'enum': ['career_employer', 'career_seeker', 'estate_buyer', 'estate_landlord', 'estate_renter', 'estate_seller', 'service_client', 'service_pro', 'vehicle_buyer', 'vehicle_letter', 'vehicle_renter', 'vehicle_seller'], 'type': 'string', 'description': 'The perspective you search AS â\x80\x94 results are the matching COUNTERPARTY listings, not your own side. To browse JOB POSTINGS use "career_seeker" (you act as a job seeker looking for jobs); "career_employer" instead searches candidate/CV listings. Likewise: estate_buyer â\x86\x92 properties for sale, estate_renter â\x86\x92 rentals, vehicle_buyer â\x86\x92 vehicles for sale, vehicle_renter â\x86\x92 vehicles for rent, service_client â\x86\x92 service providers. Pair with text_query and/or near.'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 50, 'minimum': 1}, 'offset': {'type': 'integer', 'default': 0, 'maximum': 9007199254740991, 'minimum': 0}, 'country': {'type': 'string', 'maxLength': 2, 'minLength': 2, 'description': 'Optional ISO-3166 alpha-2 country code (e.g. "us", "gb", "de") to scope results to one country and get a real total count for it. Combine with text_query to count/list within a country (e.g. country:"us" + text_query:"waiter"); use country alone (no text_query) to get the total number of listings in that country.'}, 'sort_by': {'enum': ['price_asc', 'price_desc'], 'type': 'string', 'description': 'Optional ordering: "price_asc" = cheapest first, "price_desc" = most expensive first. Use price_asc for "cheapest ..." requests. Omit for the default (most recent first). Currency-naive raw-number sort, so scope by vertical/country when mixing currencies.'}, 'category': {'type': 'string', 'maxLength': 64, 'minLength': 2, 'description': 'Optional PRECISE occupation/category filter using the source category slug (e.g. "hospitality-catering-jobs" for waiters/chefs/bar, "it-jobs", "retail-jobs"). This is far more accurate than keyword text_query for counting an occupation. With no text_query, the response meta.total is the exact count for that category (optionally + country), and meta.categories lists the available category slugs with counts â\x80\x94 call once with country alone to discover them.'}, 'vertical': {'enum': ['career', 'real_estate', 'vehicle', 'service'], 'type': 'string'}, 'price_max': {'type': 'number', 'minimum': 0, 'description': 'Maximum price/salary. Currency-naive raw-number compare (see price_min). If unapplied it appears in meta.ignored_filters.'}, 'price_min': {'type': 'number', 'minimum': 0, 'description': 'Minimum price/salary. CURRENCY-NAIVE: compared as a raw number against the listing price without normalizing currencies, so scope with `country` (or a role/vertical) when mixing regions. If the response cannot apply it, price_min is listed in meta.ignored_filters.'}, 'text_query': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'intent_type': {'enum': ['supply', 'demand'], 'type': 'string'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['data'], 'properties': {'data': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'price': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'title': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'status': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'vertical': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': {}}}, 'meta': {'type': 'object', 'properties': {}, 'additionalProperties': {}}}, 'additionalProperties': {}}
semantic_search
Semantic (meaning-based) search over Teppek's live listings, backed by a multilingual embedding index. Use it when the user describes what they want in natural language rather than exact keywords — e.g. "outdoor jobs that don't need a degree", "affordable family cars that are good in snow", "a cosy studio close to the university". Returns the closest-matching ACTIVE listings ranked by semantic similarity (each item carries a `score`). Complements search_listings: prefer search_listings for precise keyword/role/country/category/price filtering and exact counts; prefer semantic_search when meaning, synonyms, or fuzzy intent matter more than literal terms. Optional `vertical` narrows to jobs/real_estate/vehicle/service.
Solo lectura Acceso externo
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 20, 'minimum': 1}, 'query': {'type': 'string', 'maxLength': 200, 'minLength': 2, 'description': 'Natural-language description of what the user wants (e.g. "quiet night-shift jobs that do not need a degree", "cosy family flat near a park"). Matched by MEANING against the listing text, not exact keywords.'}, 'vertical': {'enum': ['career', 'real_estate', 'vehicle', 'service'], 'type': 'string', 'description': 'Optional vertical filter (career | real_estate | vehicle | service) applied server-side to the active listings before they are returned.'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}, 'additionalProperties': {}}
send_message
START contact with the owner of a Teppek LISTING on the user's behalf (identified by the listing) — the primary FIRST-CONTACT path (there is no price-offer/accept/reject flow). Opens a private thread with the owner; contact routes through Teppek and never exposes raw personal details. To continue a thread that already EXISTS (you have a thread_id from list_conversations), use reply_to_conversation instead. External-feed listings (e.g. imported jobs) have no Teppek owner, so this returns a redirect to the external application URL instead of creating a thread. Requires the user to be connected to Teppek: an anonymous call returns an AUTH_REQUIRED error with an authorize_url — surface 'Connect with Teppek' to the user, then retry.
Acceso externo
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['listing_id', 'body'], 'properties': {'body': {'type': 'string', 'maxLength': 2000, 'minLength': 1, 'description': 'The message to send to the listing owner. Contact routes through Teppek; raw personal details are never exposed.'}, 'listing_id': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}, 'additionalProperties': {}}
set_listing_status
Change the lifecycle status of one of the USER'S OWN listings: mark it sold, hide it (take it offline), or re-activate a hidden one. Free — no credit charge. Cannot set moderation states (pending/rejected); re-activating only works on a listing that was previously approved and is currently hidden.
Idempotente
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['listing_id', 'status'], 'properties': {'status': {'enum': ['active', 'hidden', 'sold'], 'type': 'string', 'description': 'sold = mark the listing sold/closed; hidden = temporarily take a live listing offline; active = re-show a listing that is currently hidden (only works if it was previously approved). Cannot set moderation states.'}, 'listing_id': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'listing'], 'properties': {'listing': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'price': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'title': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'status': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'vertical': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': {}}, 'success': {'type': 'boolean'}}, 'additionalProperties': {}}
update_listing
Edit fields (title, description, price, currency, location) on one of the USER'S OWN listings, identified by listing_id. Only the owner can edit; vertical/intent_type/role are fixed (publish a new listing to change those). Editing is free (no credit charge). Changing the title, description, or location re-triggers AI moderation (the listing returns to 'pending' until cleared); price/currency-only edits stay live. A price change may be rejected if the listing's price is locked.
Idempotente
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['listing_id'], 'properties': {'price': {'type': 'number', 'minimum': 0}, 'title': {'type': 'string', 'maxLength': 200, 'minLength': 3}, 'details': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]}}, 'currency': {'type': 'string', 'maxLength': 8, 'minLength': 1}, 'location': {'type': 'object', 'required': ['lat', 'lon'], 'properties': {'lat': {'type': 'number', 'maximum': 90, 'minimum': -90}, 'lon': {'type': 'number', 'maximum': 180, 'minimum': -180}}, 'description': 'New listing coordinates { lat, lon }. Moving a listing re-triggers AI moderation â\x80\x94 it returns to "pending" until cleared.', 'additionalProperties': False}, 'listing_id': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'description': {'type': 'string', 'maxLength': 5000}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'listing'], 'properties': {'listing': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'price': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'title': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'status': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'vertical': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': {}}, 'success': {'type': 'boolean'}}, 'additionalProperties': {}}
update_listing_images
Add and/or remove photos on one of the USER'S OWN existing listings (max 6 total). First call request_image_upload for each new image and upload the bytes, then pass the returned keys in `add`. Adding any image re-triggers AI moderation — the listing returns to 'pending' until the new images are cleared; removing images does not. Free (no credit).
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['listing_id'], 'properties': {'add': {'type': 'array', 'items': {'type': 'string', 'maxLength': 512, 'minLength': 1}, 'maxItems': 6, 'description': 'Image keys from request_image_upload to attach (upload the bytes first). Each newly-added image is AI-moderated with the listing, so the listing returns to "pending" until cleared. Max 6 images total on a listing.'}, 'remove': {'type': 'array', 'items': {'type': 'string', 'maxLength': 512, 'minLength': 1}, 'maxItems': 6, 'description': 'Image keys currently on the listing to detach.'}, 'listing_id': {'type': 'string', 'maxLength': 64, 'minLength': 1}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'listing'], 'properties': {'listing': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'price': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'title': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'status': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'vertical': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': {}}, 'success': {'type': 'boolean'}}, 'additionalProperties': {}}
Modificado
create_listing
19 de September de 2026 a las 02:52
Modificado
search_listings
19 de September de 2026 a las 02:52
Añadido
update_listing_images
17 de September de 2026 a las 12:37
Añadido
reply_to_conversation
17 de September de 2026 a las 12:37
Añadido
renew_listing
17 de September de 2026 a las 12:37
Añadido
set_listing_status
17 de September de 2026 a las 12:37
Añadido
delete_listing
17 de September de 2026 a las 12:37
Añadido
update_listing
17 de September de 2026 a las 12:37
Añadido
purchase_package
17 de September de 2026 a las 12:37
Añadido
get_entitlements
17 de September de 2026 a las 12:37
Añadido
get_conversation
17 de September de 2026 a las 12:37
Añadido
list_conversations
17 de September de 2026 a las 12:37
Añadido
list_my_listings
17 de September de 2026 a las 12:37
Añadido
request_image_upload
17 de September de 2026 a las 12:37
Añadido
create_listing
17 de September de 2026 a las 12:37
Añadido
send_message
17 de September de 2026 a las 12:37
Añadido
get_listing
17 de September de 2026 a las 12:37
Añadido
semantic_search
17 de September de 2026 a las 12:37
Añadido
search_listings
17 de September de 2026 a las 12:37