{"name":"Cumbaya Travel Agent","description":"AI travel assistant that helps users discover dream destinations.","supportedInterfaces":[{"url":"https://app.cumbaya.travel/v1/a2a","protocolBinding":"JSONRPC","protocolVersion":"2.0"}],"version":"0.1.0","capabilities":{"streaming":false,"extendedAgentCard":false},"securitySchemes":{"oauth2":{"oauth2SecurityScheme":{"description":"OAuth2 client credentials flow. POST client_id and client_secret to https://app.cumbaya.travel/v1/auth/token to obtain a Bearer access token.","flows":{"clientCredentials":{"tokenUrl":"https://app.cumbaya.travel/v1/auth/token"}}}}},"securityRequirements":[{"schemes":{"oauth2":{}}}],"defaultInputModes":["text/plain"],"defaultOutputModes":["text/plain"],"skills":[{"id":"travel_agent","name":"Travel planning assistant","description":"Orchestrates travel planning: greets the user by name, routes to specialists for destinations, full itineraries, flights, accommodations, activities, or support for an existing itinerary.","tags":["travel","orchestrator","llm"],"examples":["Help me plan a trip to Italy in July","I want to find a great beach destination for my family","What can you help me with for my holiday?"],"inputModes":["text/plain"],"outputModes":["text/plain"]},{"id":"destination_expert","name":"Destination discovery","description":"Helps users find a dream destination for their next holiday. Asks about travel timing and region, then suggests 2 or 3 tailored destination alternatives. Once the user confirms a destination the skill emits a structured 'destination' artifact alongside the conversational text reply.\n\nARTIFACTS:\n```json\n{'properties': {'destination_id': {'description': 'ID of the destination', 'title': 'Destination Id', 'type': 'integer'}, 'city': {'description': 'City of the destination', 'title': 'City', 'type': 'string'}, 'country_code': {'description': 'Country code of the destination', 'title': 'Country Code', 'type': 'string'}, 'latitude': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Latitude of the destination', 'title': 'Latitude'}, 'longitude': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Longitude of the destination', 'title': 'Longitude'}}, 'required': ['destination_id', 'city', 'country_code'], 'title': 'Destination', 'type': 'object'}\n```","tags":["travel","destination","sub_agent:destination_expert","artifact:destination"],"examples":["Where should I go for a sunny holiday in Europe?","Suggest a destination for a family trip in August","I don't know where I want to travel yet"],"inputModes":["text/plain"],"outputModes":["text/plain","application/json"]},{"id":"create_itinerary_expert","name":"Itinerary creation","description":"Helps users build a complete A-to-Z itinerary including transport, accommodation, and activities.","tags":["travel","itinerary","sub_agent:create_itinerary_expert"],"examples":["Create a full itinerary for a week in Barcelona","Plan my trip from start to finish","I know where I'm going — help me plan everything"],"inputModes":["text/plain"],"outputModes":["text/plain"]},{"id":"activity_expert","name":"Activity search","description":"Helps users find activities to do on their holiday. Once the user has searched activities, the skill emits a structured 'activities' artifact alongside the conversational text reply.\n\nARTIFACTS:\n```json\n{'$defs': {'Address': {'properties': {'street': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Street of the address', 'title': 'Street'}, 'street_nr': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'Street number of the address', 'title': 'Street Nr'}, 'street_addition': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Street addition of the address', 'title': 'Street Addition'}, 'street_and_nr': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Street and number of the address', 'title': 'Street And Nr'}, 'city': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'City of the address', 'title': 'City'}, 'region': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Region of the address', 'title': 'Region'}, 'state': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'State of the address', 'title': 'State'}, 'country_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Country code of the address', 'title': 'Country Code'}, 'postal_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Postal code of the address', 'title': 'Postal Code'}}, 'title': 'Address', 'type': 'object'}, 'Image': {'properties': {'url': {'default': 'the url of the image', 'title': 'Url', 'type': 'string'}}, 'title': 'Image', 'type': 'object'}, 'Location': {'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Name of the location', 'title': 'Name'}, 'description': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Description of the location', 'title': 'Description'}, 'latitude': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Latitude of the location', 'title': 'Latitude'}, 'longitude': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Longitude of the location', 'title': 'Longitude'}, 'google_place_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Google place ID of the location', 'title': 'Google Place Id'}, 'address': {'anyOf': [{'$ref': '#/$defs/Address'}, {'type': 'null'}], 'default': None, 'description': 'Address of the location'}}, 'title': 'Location', 'type': 'object'}}, 'description': 'An activity.', 'properties': {'title': {'description': 'Title of the activity', 'title': 'Title', 'type': 'string'}, 'description': {'description': 'Description of the activity', 'title': 'Description', 'type': 'string'}, 'partner': {'description': 'The partner that organizes the activity', 'title': 'Partner', 'type': 'string'}, 'partner_id': {'description': 'The ID of the activity', 'title': 'Partner Id', 'type': 'string'}, 'price': {'description': 'Price of the activity', 'title': 'Price', 'type': 'number'}, 'currency': {'description': 'Currency of the price of the activity', 'title': 'Currency', 'type': 'string'}, 'duration_in_minutes': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'Duration of the activity in minutes', 'title': 'Duration In Minutes'}, 'rating': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Rating of the activity', 'title': 'Rating'}, 'nr_of_reviews': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'Number of reviews of the activity', 'title': 'Nr Of Reviews'}, 'partner_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'partner URL to view or book the activity', 'title': 'Partner Url'}, 'activity_id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'ID of the activity', 'title': 'Activity Id'}, 'images': {'default': [], 'description': 'List of images associated with the activity', 'items': {'$ref': '#/$defs/Image'}, 'title': 'Images', 'type': 'array'}, 'city': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'City of the activity', 'title': 'City'}, 'country_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Country code of the activity', 'title': 'Country Code'}, 'start_date': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Start date when the user is at the destination', 'title': 'Start Date'}, 'end_date': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'End date until the user is at the destination', 'title': 'End Date'}, 'start_location': {'anyOf': [{'$ref': '#/$defs/Location'}, {'type': 'null'}], 'default': None, 'description': 'start location of the activity'}}, 'required': ['title', 'description', 'partner', 'partner_id', 'price', 'currency'], 'title': 'Activity', 'type': 'object'}\n```","tags":["travel","activities","sub_agent:activity_expert","artifact:activities"],"examples":["What are fun things to do in Lisbon?","Find family-friendly activities near our hotel","Show me outdoor activities for this weekend"],"inputModes":["text/plain"],"outputModes":["text/plain","application/json"]},{"id":"accommodation_expert","name":"Accommodation search","description":"Helps users find accommodations to stay at during their holiday. Once the user has searched accommodations, the skill emits a structured 'accommodations' artifact alongside the conversational text reply.\n\nARTIFACTS:\n```json\n{'$defs': {'AccommodationRate': {'properties': {'partner': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'The partner of the rate', 'title': 'Partner'}, 'partner_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Partner ID of the rate', 'title': 'Partner Id'}, 'price': {'anyOf': [{'$ref': '#/$defs/Price'}, {'type': 'null'}], 'default': None, 'description': 'Price of the rate'}, 'breakfast_included': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'default': None, 'description': 'Whether breakfast is included', 'title': 'Breakfast Included'}, 'cancellation_policy': {'anyOf': [{'$ref': '#/$defs/CancellationPolicy'}, {'type': 'null'}], 'default': None, 'description': 'Cancellation policies of the rate'}, 'room_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Name of the room', 'title': 'Room Name'}}, 'title': 'AccommodationRate', 'type': 'object'}, 'Address': {'properties': {'street': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Street of the address', 'title': 'Street'}, 'street_nr': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'Street number of the address', 'title': 'Street Nr'}, 'street_addition': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Street addition of the address', 'title': 'Street Addition'}, 'street_and_nr': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Street and number of the address', 'title': 'Street And Nr'}, 'city': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'City of the address', 'title': 'City'}, 'region': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Region of the address', 'title': 'Region'}, 'state': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'State of the address', 'title': 'State'}, 'country_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Country code of the address', 'title': 'Country Code'}, 'postal_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Postal code of the address', 'title': 'Postal Code'}}, 'title': 'Address', 'type': 'object'}, 'CancellationPolicy': {'properties': {'rules': {'default': [], 'description': 'Rules for the cancellation policy', 'items': {'$ref': '#/$defs/CancellationPolicyRule'}, 'title': 'Rules', 'type': 'array'}, 'free_cancellation_before': {'anyOf': [{'type': 'object'}, {'type': 'null'}], 'default': None, 'description': 'Latest point in time at which cancellation is still free of charge, RFC3339 UTC', 'title': 'Free Cancellation Before'}}, 'title': 'CancellationPolicy', 'type': 'object'}, 'CancellationPolicyRule': {'properties': {'provider_start_at': {'anyOf': [{'type': 'object'}, {'type': 'null'}], 'default': None, 'description': 'Start date of the rule (provider view), RFC3339 UTC', 'title': 'Provider Start At'}, 'provider_end_at': {'anyOf': [{'type': 'object'}, {'type': 'null'}], 'default': None, 'description': 'End date of the rule (provider view), RFC3339 UTC', 'title': 'Provider End At'}, 'consumer_start_at': {'anyOf': [{'type': 'object'}, {'type': 'null'}], 'default': None, 'description': 'Start date of the rule (consumer view), RFC3339 UTC', 'title': 'Consumer Start At'}, 'consumer_end_at': {'anyOf': [{'type': 'object'}, {'type': 'null'}], 'default': None, 'description': 'End date of the rule (consumer view), RFC3339 UTC', 'title': 'Consumer End At'}, 'percent_charged': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': \"Percentage of the total charged if cancelled within this rule's period\", 'title': 'Percent Charged'}, 'nights_charged': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': \"Number of nights charged if cancelled within this rule's period\", 'title': 'Nights Charged'}, 'amount_charged': {'anyOf': [{'$ref': '#/$defs/Price'}, {'type': 'null'}], 'default': None, 'description': \"Fixed amount charged if cancelled within this rule's period\"}}, 'title': 'CancellationPolicyRule', 'type': 'object'}, 'Facility': {'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Name of the facility', 'title': 'Name'}}, 'title': 'Facility', 'type': 'object'}, 'Image': {'properties': {'url': {'default': 'the url of the image', 'title': 'Url', 'type': 'string'}}, 'title': 'Image', 'type': 'object'}, 'Location': {'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Name of the location', 'title': 'Name'}, 'description': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Description of the location', 'title': 'Description'}, 'latitude': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Latitude of the location', 'title': 'Latitude'}, 'longitude': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Longitude of the location', 'title': 'Longitude'}, 'google_place_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Google place ID of the location', 'title': 'Google Place Id'}, 'address': {'anyOf': [{'$ref': '#/$defs/Address'}, {'type': 'null'}], 'default': None, 'description': 'Address of the location'}}, 'title': 'Location', 'type': 'object'}, 'Occupancy': {'properties': {'adults': {'description': 'Number of adults (must be at least 1)', 'exclusiveMinimum': 0, 'title': 'Adults', 'type': 'integer'}, 'kids_ages': {'description': 'A list of ages for each child traveling', 'items': {'type': 'integer'}, 'title': 'Kids Ages', 'type': 'array'}}, 'required': ['adults', 'kids_ages'], 'title': 'Occupancy', 'type': 'object'}, 'Price': {'properties': {'consumer_total_rate': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'The total rate for the consumer', 'title': 'Consumer Total Rate'}, 'consumer_base_rate': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'The base rate for the consumer', 'title': 'Consumer Base Rate'}, 'provider_total_rate': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'The total rate for the provider', 'title': 'Provider Total Rate'}, 'provider_base_rate': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'The base rate for the provider', 'title': 'Provider Base Rate'}, 'currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'The currency of the price', 'title': 'Currency'}}, 'title': 'Price', 'type': 'object'}}, 'description': 'An accommodation.', 'properties': {'name': {'description': 'Name of the accommodation', 'title': 'Name', 'type': 'string'}, 'description': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Description of the accommodation', 'title': 'Description'}, 'price': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Price of the accommodation', 'title': 'Price'}, 'currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Currency of the price of the accommodation', 'title': 'Currency'}, 'rating': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Rating of the accommodation', 'title': 'Rating'}, 'nr_of_reviews': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'Number of reviews of the accommodation', 'title': 'Nr Of Reviews'}, 'accommodation_id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'ID of the accommodation', 'title': 'Accommodation Id'}, 'images': {'default': [], 'description': 'List of images associated with the accommodation', 'items': {'$ref': '#/$defs/Image'}, 'title': 'Images', 'type': 'array'}, 'start_date': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Start date when the user is at the destination', 'title': 'Start Date'}, 'end_date': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'End date until the user is at the destination', 'title': 'End Date'}, 'location': {'anyOf': [{'$ref': '#/$defs/Location'}, {'type': 'null'}], 'default': None, 'description': 'Location of the accommodation'}, 'occupancies': {'anyOf': [{'items': {'$ref': '#/$defs/Occupancy'}, 'type': 'array'}, {'type': 'null'}], 'default': None, 'description': 'The occupancies of the accommodation', 'title': 'Occupancies'}, 'best_accommodation_score': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'The best accommodation score of the accommodation', 'title': 'Best Accommodation Score'}, 'url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'URL of the accommodation on the cumbaya website', 'title': 'Url'}, 'partner': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'The partner of the accommodation search', 'title': 'Partner'}, 'partner_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'The ID of the partner of the accommodatio search', 'title': 'Partner Id'}, 'hotel_star_rating': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Official star rating of the accommodation', 'title': 'Hotel Star Rating'}, 'rates': {'default': [], 'description': 'Rates available for the accommodation', 'items': {'$ref': '#/$defs/AccommodationRate'}, 'title': 'Rates', 'type': 'array'}, 'distance_km': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Distance to the accommodation in kilometers', 'title': 'Distance Km'}, 'type': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Property type of the accommodation', 'title': 'Type'}, 'facilities': {'default': [], 'description': 'Facilities of the accommodation', 'items': {'$ref': '#/$defs/Facility'}, 'title': 'Facilities', 'type': 'array'}, 'accommodation_search_id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'ID of the accommodation search', 'title': 'Accommodation Search Id'}}, 'required': ['name'], 'title': 'Accommodation', 'type': 'object'}\n```","tags":["travel","accommodation","sub_agent:accommodation_expert","artifact:accommodations"],"examples":["Find hotels in Rome for 4 nights in September","I need a family-friendly place to stay near the beach","Search accommodations with a pool in the city center"],"inputModes":["text/plain"],"outputModes":["text/plain","application/json"]},{"id":"flight_expert","name":"Flight search","description":"Helps users search for flights. Collects origin, destination, dates, passengers, and preferences, then creates and polls flight searches ","tags":["travel","flights","sub_agent:flight_expert","artifact:flights"],"examples":["Find flights from Brussels to New York on 12 August","Search round-trip flights for 2 adults and 1 child","Do you have a direct afternoon flight?"],"inputModes":["text/plain"],"outputModes":["text/plain","application/json"]},{"id":"in_itinerary_expert","name":"Itinerary support","description":"Helps users with questions about their existing itinerary.","tags":["travel","itinerary","sub_agent:in_itinerary_expert"],"examples":["What's planned for day 3 of my trip?","Can you change the hotel on my itinerary?","I have a question about my current trip"],"inputModes":["text/plain"],"outputModes":["text/plain"]}]}