Experience Webhook
Última atualização Há 9 meses
Pré-requisitos
Antes de criar o webhook na sua aplicação deve ter um endpoint que possa ser acedido pelo TourOS.
O endpoint deve ser do método POST e deve aceitar JSON como formato de entrada.
O seu endpoint também deverá estar preparado para verificar a autenticidade do webhook via um token que deverá ser verificado e que encontrará ao criar o webhook no TourOS.
Estrutura do Payload
Payload experience.created, experience.updated
{
"id":"01KFDATY7SG552YSM40TQ6GQ4Z",
"type":"experience.updated",
"version":"2025-10-06",
"created_at":"2026-01-20T09:12:40+00:00",
"data":{
"experience": {
"id": 1,
"status": "active",
"type": {
"id": 1,
"name": "Tours"
},
"ref": "PVZ-BEIRAMAR-EXP",
"title": "Passeio à Beira-Mar na Póvoa de Varzim – Natureza, Relaxamento e Aventura",
"introduction": "<p>Descubra a beleza da Póvoa de Varzim com um passeio à beira-mar repleto de experiências únicas! Caminhe ao longo da costa, respire o ar fresco do oceano e aproveite atividades como ciclismo, yoga na praia ou até mesmo um emocionante passeio de stand-up paddle. Relaxe, divirta-se e sinta a energia do mar num cenário deslumbrante!</p>",
"highlights": "<p class=\"\" data-start=\"0\" data-end=\"152\">🌊 <strong data-start=\"3\" data-end=\"30\">Paisagens Deslumbrantes</strong> – Desfrute de um passeio à beira-mar com vistas incríveis do Oceano Atlântico e das praias douradas da Póvoa de Varzim.</p>\r\n<p class=\"\" data-start=\"154\" data-end=\"315\">🚴 <strong data-start=\"157\" data-end=\"182\">Atividades para Todos</strong> – Escolha entre caminhadas relaxantes, passeios de bicicleta pela orla, yoga na praia ou aventuras aquáticas como stand-up paddle.</p>\r\n<p class=\"\" data-start=\"317\" data-end=\"473\">🌅 <strong data-start=\"320\" data-end=\"346\">Momentos Inesquecíveis</strong> – Sinta a brisa do mar, aproveite o pôr do sol espetacular e conecte-se com a natureza num ambiente tranquilo e revigorante.</p>\r\n<p class=\"\" data-start=\"475\" data-end=\"625\">🍽️ <strong data-start=\"479\" data-end=\"510\">Experiência Local Autêntica</strong> – Termine o passeio com uma degustação de iguarias típicas num café à beira-mar, saboreando a gastronomia local.</p>\r\n<p class=\"\" data-start=\"627\" data-end=\"757\">📸 <strong data-start=\"630\" data-end=\"665\">Perfeito para Registar Memórias</strong> – Cenários incríveis para fotografias inesquecíveis, seja em família, com amigos ou a dois!</p>",
"description": "<article class=\"w-full text-token-text-primary\" dir=\"auto\" data-testid=\"conversation-turn-12\" data-scroll-anchor=\"true\">\r\n<div class=\"text-base my-auto mx-auto py-5 px-6\">\r\n<div class=\"mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem] group/turn-messages focus-visible:outline-none\" tabindex=\"-1\">\r\n<div class=\"group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4\">\r\n<div class=\"relative flex-col gap-1 md:gap-3\">\r\n<div class=\"flex max-w-full flex-col flex-grow\">\r\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"92b2aba0-741b-4d07-940c-a4b7378ff3db\" data-message-model-slug=\"gpt-4o\">\r\n<div class=\"flex w-full flex-col gap-1 empty:hidden first:pt-[3px]\">\r\n<div class=\"markdown prose w-full break-words dark:prose-invert light\">\r\n<p class=\"\" data-start=\"0\" data-end=\"132\">Prepare-se para uma experiência inesquecível à beira-mar na Póvoa de Varzim, onde o oceano Atlântico será o seu cenário principal!</p>\r\n<p class=\"\" data-start=\"134\" data-end=\"450\">A aventura começa com um passeio tranquilo ao longo da marginal, onde poderá sentir a brisa fresca do mar e admirar as deslumbrantes vistas costeiras. Durante o percurso, terá a opção de caminhar, pedalar ou até mesmo experimentar um passeio de stand-up paddle para uma perspetiva única da cidade a partir da água.</p>\r\n<p class=\"\" data-start=\"452\" data-end=\"731\">Se preferir um momento de relaxamento, poderá participar numa sessão revigorante de yoga na praia, ideal para renovar energias ao som das ondas. Haverá também tempo para explorar os icónicos molhes da Póvoa, onde pescadores locais mantêm vivas as tradições marítimas da região.</p>\r\n<p class=\"\" data-start=\"733\" data-end=\"947\">Para tornar a experiência ainda mais especial, o passeio inclui uma pausa num café à beira-mar, onde poderá saborear iguarias típicas como as famosas rabanadas poveiras ou um café acompanhado de um doce regional.</p>\r\n<p class=\"\" data-start=\"949\" data-end=\"1197\">Quer esteja à procura de aventura, tranquilidade ou apenas um momento especial junto ao mar, esta experiência foi criada para proporcionar momentos únicos e memoráveis. Traga o seu espírito de descoberta e venha viver a essência da Póvoa de Varzim!</p>\r\n</div>\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"mt-3 w-full empty:hidden\"> </div>\r\n</div>\r\n<div class=\"absolute\"> </div>\r\n</div>\r\n</div>\r\n</div>\r\n</article>",
"isOnRequest": false,
"regions": [
{
"id": 1,
"name": "Douro",
"slug": "portugal-douro",
"country": {
"id": "PT",
"name": "Portugal"
}
},
{
"id": 2,
"name": "Guimarães",
"slug": "portugal-guimaraes",
"country": {
"id": "PT",
"name": "Portugal"
}
}
],
"address": "Avenida De Londres, 4835-066 Guimarães, Braga, Portugal",
"inclusions": "<p>✔ Passeio guiado à beira-mar com vistas incríveis da costa da Póvoa de Varzim.<br data-start=\"78\" data-end=\"81\">✔ Escolha entre caminhada, passeio de bicicleta ou stand-up paddle.<br data-start=\"148\" data-end=\"151\">✔ Sessão opcional de yoga na praia para relaxamento e bem-estar.<br data-start=\"215\" data-end=\"218\">✔ Paragem num café à beira-mar com degustação de iguarias locais.<br data-start=\"283\" data-end=\"286\">✔ Acompanhamento por um guia experiente para uma experiência autêntica e envolvente.</p>",
"exclusions": "<p>❌ Transporte de e para o ponto de encontro (disponível mediante pedido com custo adicional).<br data-start=\"92\" data-end=\"95\">❌ Despesas pessoais, como compras ou consumos extra no café.<br data-start=\"155\" data-end=\"158\">❌ Equipamento extra para atividades específicas (ex.: roupa de banho para stand-up paddle).<br data-start=\"249\" data-end=\"252\">❌ Seguro pessoal para atividades aquáticas (recomenda-se seguro de lazer ou viagem).<br data-start=\"336\" data-end=\"339\">❌ Atividades opcionais fora do itinerário programado.</p>",
"guide": {
"type": "staff_interaction",
"guide": [
"tour-guide",
"host-or-greeter",
"instructor",
"driver"
]
},
"cancellationPolicy": [
{
"time": {
"amount": 15,
"unit": "weeks"
},
"percentage": 15
}
],
"itinerary": [
{
"time": "10:00",
"title": "Comer bola de berlim",
"description": "<p>Comer bolas de berlim na praia</p>",
"address": null,
"latitude": null,
"longitude": null,
"duration": {
"amount": 5,
"type": "minutes"
}
},
{
"time": "11:00",
"title": "Apanha de conchas",
"description": "<p>Apanha de conchas na praia.</p>",
"address": null,
"latitude": null,
"longitude": null,
"duration": {
"amount": 1,
"type": "hours"
}
},
{
"time": "11:10",
"title": "Apanhar caranguejos",
"description": "<p>Apanhar caranguejos nas rochas</p>",
"address": null,
"latitude": null,
"longitude": null,
"duration": {
"amount": 1,
"type": "hours"
}
}
],
"extra": {
"additionalInformation": "<article class=\"w-full text-token-text-primary\" dir=\"auto\" data-testid=\"conversation-turn-18\" data-scroll-anchor=\"true\">\r\n<div class=\"text-base my-auto mx-auto py-5 px-6\">\r\n<div class=\"mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem] group/turn-messages focus-visible:outline-none\" tabindex=\"-1\">\r\n<div class=\"group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4\">\r\n<div class=\"relative flex-col gap-1 md:gap-3\">\r\n<div class=\"flex max-w-full flex-col flex-grow\">\r\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"b7326434-32bd-49c4-9640-fd8ea2e4a262\" data-message-model-slug=\"gpt-4o\">\r\n<div class=\"flex w-full flex-col gap-1 empty:hidden first:pt-[3px]\">\r\n<div class=\"markdown prose w-full break-words dark:prose-invert light\">\r\n<p class=\"\" data-start=\"0\" data-end=\"496\"><strong data-start=\"46\" data-end=\"70\">Nível de dificuldade</strong>: Fácil, adequado para todas as idades.<br data-start=\"109\" data-end=\"112\">🔹 <strong data-start=\"115\" data-end=\"130\">O que levar</strong>: Roupa confortável, protetor solar, chapéu e, se optar por atividades aquáticas, toalha e muda de roupa.<br data-start=\"235\" data-end=\"238\">🔹 <strong data-start=\"241\" data-end=\"251\">Idioma</strong>: Experiência disponível em português e inglês.<br data-start=\"298\" data-end=\"301\">🔹 <strong data-start=\"304\" data-end=\"332\">Política de cancelamento</strong>: Cancelamento gratuito até 24 horas antes da atividade.<br data-start=\"388\" data-end=\"391\">🔹 <strong data-start=\"394\" data-end=\"422\">Condições meteorológicas</strong>: Em caso de mau tempo, a experiência poderá ser remarcada ou reembolsada.</p>\r\n</div>\r\n</div>\r\n</div>\r\n</div>\r\n<div class=\"mt-3 w-full empty:hidden\"> </div>\r\n</div>\r\n<div class=\"absolute\"> </div>\r\n</div>\r\n</div>\r\n</div>\r\n</article>",
"sustainability": null,
"accessibility": {
"text": null,
"wheelchairAccessible": false
},
"faqs": []
},
"meta": {
"slug": "passeio-povoa",
"title": "passeio-povoa",
"description": "Viva uma experiência única à beira-mar na Póvoa de Varzim!",
"keywords": [
"passeio",
"povoa"
],
"image": "https://touros-ems.test/storage/experiences/seo/Captura de ecrã 2025-04-29 163816.png"
},
"options": [
{
"id": 40,
"languages": [
"en"
],
"pickup": {
"enabled": false,
"type": null,
"pickups": null
},
"arrival": {
"amount": 0,
"unit": "minutes"
},
"duration": {
"type": "fixed",
"amount": 2,
"unit": "hours"
},
"startTimes": [
{
"start": "00:00:00",
"end": null
}
]
},
{
"id": 41,
"languages": [
"pt"
],
"pickup": {
"enabled": true,
"type": "location",
"pickups": [
{
"id": "10ef6158-dfbf-48ba-a8f3-e5d7e7559359",
"localType": "bus_or_train_station",
"address": "R. da Restauração 210",
"postalCode": "4710-428",
"city": "Braga",
"district": null,
"countryId": "PT",
"latitude": 41.55150272,
"longitude": -8.41488337,
"createdAt": "2025-11-27T12:22:18.000000Z",
"updatedAt": "2025-11-27T12:22:18.000000Z"
},
{
"id": "1432f3df-4af8-474a-ba5c-6e27e59c9bb0",
"localType": "other",
"address": "Rua Do Colégio Militar",
"postalCode": "4400-420",
"city": "Vila Nova de Gaia",
"district": "Porto",
"countryId": "PT",
"latitude": null,
"longitude": null,
"createdAt": "2024-11-29T18:10:11.000000Z",
"updatedAt": "2024-11-29T18:10:11.000000Z"
}
]
},
"arrival": {
"amount": 0,
"unit": "minutes"
},
"duration": {
"type": "fixed",
"amount": 45,
"unit": "minutes"
},
"startTimes": [
{
"start": "13:00:00",
"end": null
},
{
"start": "18:00:00",
"end": null
},
{
"start": "21:00:00",
"end": null
},
{
"start": "22:00:00",
"end": null
}
]
},
{
"id": 62,
"languages": [
"de"
],
"pickup": {
"enabled": true,
"type": "zone",
"pickups": [
{
"id": "41037f0c-65cf-4ad4-993c-a01477fe2c05",
"internalName": "Guimarães",
"address": "Rua Colégio Militar",
"postalCode": "4835-039",
"city": "Guimarães",
"district": "Braga",
"countryId": "PT",
"latitude": 41.438109,
"longitude": -8.299976,
"radius": "5.50",
"createdAt": "2025-01-14T12:14:26.000000Z",
"updatedAt": "2025-09-03T16:41:56.000000Z"
}
]
},
"arrival": {
"amount": 30,
"unit": "minutes"
},
"duration": {
"type": "fixed",
"amount": 45,
"unit": "minutes"
},
"startTimes": [
{
"start": "13:00:00",
"end": null
},
{
"start": "18:00:00",
"end": null
},
{
"start": "21:00:00",
"end": null
},
{
"start": "22:00:00",
"end": null
}
]
}
],
"prices": {
"price": 30,
"special": null,
"currency": "EUR"
},
"images": [
{
"width": 720,
"height": 600,
"extension": "jpg",
"filetype": "image/jpeg",
"size": 298758,
"filename": "1743092059_snack-enologo-notaprovas-1.jpg",
"url": "https://touros-ems.test/storage/experiences/1743092059_snack-enologo-notaprovas-1.jpg",
"alt": null
},
{
"width": 2048,
"height": 2048,
"extension": "jpg",
"filetype": "image/jpeg",
"size": 449633,
"filename": "1743092064_photo-2mb.jpg",
"url": "https://touros-ems.test/storage/experiences/1743092064_photo-2mb.jpg",
"alt": null
},
{
"width": 720,
"height": 600,
"extension": "jpg",
"filetype": "image/jpeg",
"size": 298758,
"filename": "1743092097_snack-enologo-notaprovas-1.jpg",
"url": "https://touros-ems.test/storage/experiences/1743092097_snack-enologo-notaprovas-1.jpg",
"alt": null
},
{
"width": 2048,
"height": 2048,
"extension": "jpg",
"filetype": "image/jpeg",
"size": 449633,
"filename": "1743092124_photo-2mb.jpg",
"url": "https://touros-ems.test/storage/experiences/1743092124_photo-2mb.jpg",
"alt": null
}
],
"videos": []
}
}
}Payload experience.deleted
{
"id": "01KFDATY7SG552YSM40TQ6GQ4Z",
"type": "experience.deleted",
"version": "2025-10-06",
"created_at": "2026-01-20T09:12:40+00:00",
"data": {
"experience": {
"id": 1,
"ref": "PVZ-BEIRAMAR-EXP"
}
}
}Campos do Payload
Configuração no TourOS
Agora vamos configurar o TourOS para enviar as informações para o URL da sua plataforma.
Aceda à sua conta TourOS
Clique no seu Avatar (canto inferior esquerdo) e selecione Configurações
No menu, navegue até Ligações e selecione Webhooks
Clique em Criar Webhook
No campo URL, cole o link para o endpoint da sua plataforma
No campo Versão da API seleciona sempre a versão mais recente da lista
Na seleção de Eventos, escolha as opções que pretende utilizar dentro da categoria Experiência:
Experiência criadaExperiência atualizadaExperiência apagada
Clique em Adicionar.
Após guardar, abra novamente o Webhook que acabou de criar e copie a Secret Key (o código que começa por
whsec_...).
Finalizar a ligação
Para terminar deve adicionar a Secret Key que recebeu e validar com ele no seu endpoint. Pode guardar o token em variáveis de ambiente mas evitar expor no código da sua plataforma.
Isso foi útil?