Implementation Checklist¶
ASP (Agentic Services Protocol) adds live-service transactions on top of UCP — discovery, catalogs, fulfillment, tracking, and personalization. Two sides implement it: marketplaces expose the APIs, agents consume them. The core protocol is domain-agnostic; optional domain profiles add vertical-specific fields.
Marketplace Side¶
You run a marketplace with merchants. Build the following so agents can discover and transact with your merchants.
Discovery¶
- Expose
/.well-known/aspreturning your discovery profile — protocol version, REST/MCP endpoints, and declared capabilities - Implement
POST /discovery/search— accept aprovider_filter(location required; category, rating, availability, price level, free-text query optional),sort_by,sort_order,page,page_size; return paginatedproviders[] - Each provider must include:
id,name,category,rating,estimated_service_minutes,service_fee_cents,minimum_order_cents,price_level,is_open_now,image,address,is_promoted, andtags; optionallyrating_count,images,operating_hours,next_opens_at
Catalog¶
- Implement
GET /catalog/{provider_id}/catalogreturning aservice_catalog - Structure: catalog → sections → items → modifier groups → options
- Each item:
id,title,price_cents,is_available; optionaldescription,image - Each modifier group:
id,title,options[],requiredflag,min_selections,max_selections - Each modifier option:
id,label,price_delta_cents
Checkout & Fulfillment¶
- Implement
POST /checkouts— accept line items with per-item customizations (selected modifier option IDs, special instructions), fulfillment details (type, address, ASAP flag, instructions, fees breakdown, optional tip, optional scheduling), and optional loyalty discount (tier + discount percent) - Implement
PATCH /checkouts/{checkout_id}— allow updates before payment - Implement
POST /checkouts/{checkout_id}/complete— finalize withpayment_method, return order confirmation - Supported fulfillment types:
delivery,pickup,ride,booking,on_site - Include
fees[]for itemized cost breakdown and optionaltipfor gratuity - For scheduled fulfillment:
is_asap: false+scheduled_fordatetime; exposeavailable_time_slotsso agents can present options
Order Tracking¶
- Implement
GET /orders/{order_id}/tracking— return currentfulfillment_statuswith status enum,updated_at, optionalestimated_service_minutes,agent_location,history[],is_delayed,delay_minutes - Push status updates via webhook — POST a
status_update_eventto the agent on each transition:accepted→in_progress→en_route→completed/cancelled - Include
historyarray for full status timeline narration - Set
is_delayedanddelay_minuteswhen orders run behind schedule
Personalization¶
- Implement
GET /personalization/profile— return user'sloyalty_tier,loyalty_points,order_history,preferred_categories,default_address - Implement
GET /personalization/promotions— return promotions filtered by optionalprovider_idandlimit
Catalog: Reorder¶
- Implement
POST /catalog/reorder— acceptorder_idandprovider_id, return current availability and pricing for original items - Include
unavailable_items[]withitem_id,title, andreasonfor items no longer available - Support optional
scheduled_forto schedule reorders
Reviews¶
Capability: dev.asp.services.reviews
- Implement
POST /reviews— acceptorder_id,provider_id,rating, optionalcommentand categoryscores - Implement
GET /reviews/{provider_id}— return paginated reviews withaverage_ratingandtotal_reviews - Support
pageandpage_sizefor pagination (uses the sharedpaginationtype)
Auth & Errors¶
- All endpoints require Bearer token authentication
- Errors follow the shape:
{ error: { code, message, details? } }
Optional: MCP Transport¶
- Expose the same capabilities as MCP tools (JSON-RPC) for direct agent integration
- Implement resource subscriptions on
order://{order_id}/statusfor live push updates
Domain Profile
If your marketplace operates in a specific vertical, also implement the relevant domain profile extensions. See the addendum below and Domain Profiles for full details.
Agent Side¶
You're building an agent that helps users order food, book rides, or use other live services. Here's how to integrate with any ASP-compliant marketplace.
Protocol Negotiation¶
- Fetch
/.well-known/aspfrom the marketplace - Parse the discovery profile: extract protocol version, endpoint URLs, and supported capabilities
- Only call endpoints for capabilities the marketplace declares
Discovery¶
- Build a
provider_filter—locationis always required; addcategory,is_open_now,min_rating,queryas relevant - Use
sort_by(e.g.rating,distance) andsort_orderto rank results - Use
pageandpage_sizefor pagination; callPOST /discovery/search, parseproviders[], surface results to the user - Handle pagination via
has_more/total_results - Use
rating_countalongsideratingfor confident recommendations: "4.8 stars from 2,300 reviews" - Use
operating_hoursandnext_opens_atto inform users when closed providers reopen
Catalog Browsing¶
- Call
GET /catalog/{provider_id}/catalogfor the user's selected provider - Parse the sections → items → modifier groups hierarchy
- Enforce modifier constraints: check
required, respectmin_selections/max_selections - Calculate total price:
price_cents+ sum of selectedprice_delta_centsvalues
Checkout¶
- Build a
fulfillment_checkoutbody:line_items[]— each withitem_id,quantity,modifiers[](selected option IDs),special_instructionsfulfillment—type,address,is_asap,instructionsloyalty(optional) —loyalty_tier+loyalty_discount_percentfrom user profile
POST /checkouts→ obtaincheckout_id- Optionally
PATCH /checkouts/{checkout_id}to modify before payment POST /checkouts/{checkout_id}/completewithpayment_methodto finalize
Order Tracking¶
- Poll
GET /orders/{order_id}/trackingor receive webhookstatus_update_eventpushes - Map the status enum (
accepted,in_progress,en_route,completed,cancelled) to user-friendly messages - Use
estimated_service_minutesfor countdowns; displayagent_locationon a map if present - Use
history[]to narrate the full journey: "Accepted at 7:01, picked up at 7:15" - Watch
is_delayed/delay_minutesto proactively warn: "Heads up, running about 10 minutes late" - After delivery, prompt for a review via
POST /reviews
Personalization¶
- Fetch
GET /personalization/profileto pre-fill addresses, read loyalty tier, and personalize category filters - Fetch
GET /personalization/promotionsto surface relevant deals - Pass
loyalty_tierandloyalty_discount_percentback into checkout to apply discounts
Domain Profile
When integrating with a vertical-specific marketplace, expect extra fields on catalog items and providers. See the addendum below for what each profile adds.
Domain Profile Addendum¶
Domain profiles are optional extensions that add vertical-specific fields. If the marketplace uses one, both sides need to handle the extra data.
| Profile | Extended Catalog Item Fields | Extended Provider Fields | Extra Fulfillment Fields |
|---|---|---|---|
| Food Delivery | dietary_tags, calories, prep_time_minutes, tags, available_for_scheduling |
cuisine_types, dietary_options, minimum_order_cents, accepts_scheduled_orders |
Granular statuses (10 mapping to 5 base), dine_in fulfillment, substitution preferences |
| Ride Hailing | vehicle_category, max_passengers, max_luggage_pieces, vehicle_features, surge_multiplier, estimated_arrival_minutes, availableForScheduling |
vehicle_categories, coverage_area |
pickup_location, dropoff_location, estimated_distance_km, route_polyline |
| Travel | room_type, max_guests, amenities, cancellation_policy, price_per_night_cents, check_in_time, check_out_time |
accommodation_type, star_rating, amenities, total_units |
check_in_date, check_out_date, guests, special_requests, confirmation_code |
Each profile also constrains service_categories and fulfillment_types to a fixed enum, and maps abstract fulfillment statuses to domain-specific meanings. See Domain Profiles for the full specification.
Quick Reference: Endpoints¶
| Method | Path | Capability | Description |
|---|---|---|---|
GET |
/.well-known/asp |
— | Discovery profile |
POST |
/discovery/search |
discovery | Search providers by filters |
GET |
/catalog/{provider_id}/catalog |
catalog | Full catalog for a provider |
POST |
/checkouts |
fulfillment | Create checkout |
PATCH |
/checkouts/{checkout_id} |
fulfillment | Update checkout |
POST |
/checkouts/{checkout_id}/complete |
fulfillment | Complete checkout |
GET |
/orders/{order_id}/tracking |
order_tracking | Current fulfillment status |
POST |
(webhook) | order_tracking | Status update push |
GET |
/personalization/profile |
personalization | User profile |
GET |
/personalization/promotions |
personalization | Promotions list |
POST |
/catalog/reorder |
catalog | Reorder from previous order |
POST |
/reviews |
reviews | Submit a review |
GET |
/reviews/{provider_id} |
reviews | Get provider reviews |