Artigos sobre: Inteligência artificial (IA)
Este artigo também está disponível em:

Webhooks de saída

Os webhooks permitem-te conectar o Fotostudio a ferramentas externas como Make, Zapier, n8n ou o teu próprio backend. A cada evento importante (novo contacto, fatura paga, contrato assinado...), o Fotostudio envia automaticamente os dados para o URL da tua escolha.



Configurar um webhook


Vai a Módulos → Webhooks de saída e clica em Novo webhook.


Preenche os seguintes campos:


Campo

Descrição

Etiqueta

Um nome para te orientares (ex: "Make – faturas")

URL de destino

O URL HTTPS fornecido pela tua ferramenta (Make, Zapier...)

Eventos

Os eventos a escutar (podes marcar vários)


Um segredo é gerado automaticamente na criação. Copia-o imediatamente: não será exibido novamente. Serve para verificar que as chamadas vêm mesmo do Fotostudio.



Eventos disponíveis


Evento

Acionado quando...

contact.created

Um novo contacto é criado

contact.updated

Um contacto é modificado (coordenadas, infos...)

project.created

Uma nova sessão é criada

project.status_changed

O status de uma sessão muda

project.confirmed

Uma sessão é confirmada

invoice.created

Uma fatura é criada

invoice.paid

Uma fatura é marcada como paga

payment.created

Um pagamento é registado

estimate.accepted

Um orçamento é aceite pelo cliente

estimate.refused

Um orçamento é recusado pelo cliente

contract.signed

Um contrato é assinado



Formato dos dados enviados


Cada chamada é um POST em JSON com a seguinte estrutura:


{
"event": "invoice.paid",
"timestamp": "2026-06-12T10:30:00Z",
"data": {
...
}
}


Cabeçalhos HTTP


Header

Valor

Content-Type

application/json

X-FS-Event

Nome do evento (ex: invoice.paid)

X-FS-Signature

sha256=<hmac> (assinatura HMAC-SHA256 do body)

X-FS-Delivery-Id

Identificador único da entrega


Verificar a assinatura


A assinatura em X-FS-Signature é calculada assim:


HMAC-SHA256(secret, body_json)


Em Node.js por exemplo:


const crypto = require('crypto')
const sig = 'sha256=' + crypto.createHmac('sha256', SECRET).update(rawBody).digest('hex')
if (sig !== req.headers['x-fs-signature']) throw new Error('Assinatura inválida')



Detalhe dos dados por evento


contact.created / contact.updated


{
"id": 123,
"firstname": "Maria",
"lastname": "Santos",
"email": "maria@example.com",
"phone": "+351 912 345 678",
"company": "Studio Foto",
"street": "Rua Augusta 12",
"zipcode": "1100-053",
"city": "Lisboa",
"country": "Portugal",
"created_at": "2026-01-15T09:00:00Z",
"url": "https://www.fotostudio.io/app/contacts/123"
}


project.created / project.status_changed / project.confirmed


{
"id": 456,
"name": "Casamento Santos",
"start_time": "2026-07-20T14:00:00Z",
"end_time": "2026-07-20T18:00:00Z",
"project_type": "Casamento",
"status": "Confirmado",
"validated": true,
"location": "Palácio da Pena",
"contact_id": 123,
"created_at": "2026-01-15T09:00:00Z",
"url": "https://www.fotostudio.io/app/projects/456"
}


invoice.created / invoice.paid


{
"id": 789,
"numero": "F2026-042",
"title": "Casamento Santos",
"invoice_date": "2026-06-01",
"total_price": 1500.00,
"amount_to_pay": 750.00,
"paid": false,
"draft": false,
"contact_id": 123,
"project_id": 456,
"created_at": "2026-06-01T10:00:00Z",
"url": "https://www.fotostudio.io/app/invoices/789"
}


amount_to_pay é o saldo restante a pagar (total - pagamentos já recebidos).


payment.created


{
"id": 101,
"amount": 750.00,
"payment_date": "2026-06-10",
"payment_type": "Transferência",
"invoice_id": 789,
"contact_id": 123,
"created_at": "2026-06-10T14:00:00Z"
}


estimate.accepted / estimate.refused


{
"id": 202,
"numero": "D2026-018",
"title": "Casamento Santos",
"total_price": 1500.00,
"accepted": true,
"refused": false,
"accepted_at": "2026-06-05T16:00:00Z",
"contact_id": 123,
"project_id": 456,
"created_at": "2026-05-20T09:00:00Z",
"url": "https://www.fotostudio.io/app/estimates/202"
}


contract.signed


{
"id": 303,
"title": "Contrato Casamento Santos",
"signed_at": "2026-06-08T11:30:00Z",
"project_id": 456,
"contact_id": 123,
"created_at": "2026-05-25T10:00:00Z",
"url": "https://www.fotostudio.io/app/contracts/303"
}



Histórico das entregas


Na ficha de cada webhook, o separador Logs exibe o histórico das chamadas com:


  • a data e hora
  • o evento acionado
  • o status (sucesso / falha)
  • o código HTTP de resposta
  • a mensagem de erro em caso de falha


Em caso de falha, o Fotostudio tenta novamente automaticamente até 3 vezes com um atraso exponencial. Também podes relançar manualmente uma chamada a partir dos logs.



Usar com Make


  1. No Make, cria um novo cenário e adiciona um módulo Webhooks → Custom webhook
  2. Copia o URL gerado pelo Make
  3. No Fotostudio, cria um webhook com este URL e seleciona os eventos desejados
  4. Aciona um evento de teste a partir do Fotostudio (cria um contacto, por exemplo

Actualizado em: 26/06/2026

Esse artigo foi útil?

Partilhe o seu feedback

Cancelar

Obrigado!