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

Webhooks de saída

Os webhooks permitem-te ligar 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 que escolheres.



Configurar um webhook


Os webhooks são um módulo a ativar, disponível em todas as assinaturas. Vai a Módulos > Todos os módulos, categoria Avançado, e ativa o módulo Webhooks. Se já tinhas criado um webhook, o módulo já está ativado para ti.


Depois, vai a Módulos > Webhooks de saída e clica em Adicionar webhook.


Preenche os seguintes campos:


Campo

Descrição

Etiqueta (opcional)

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

URL de destino

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

Eventos a subscrever

Os eventos a escutar (podes marcar vários)


É gerada automaticamente uma Chave secreta HMAC na criação. Copia-a imediatamente: não voltará a ser mostrada desta forma. 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 é alterado (dados, informações...)

project.created

Uma nova sessão é criada

project.status_changed

O estado 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 que falta 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 lista dos webhooks, abre o menu Ações de um webhook e depois Últimas entregas (50). Aí vês o histórico das chamadas com:


  • a data e a hora
  • o evento acionado
  • o estado (Entregue, Falhado ou Pendente)
  • o número de tentativas
  • o código HTTP de resposta
  • a mensagem de erro em caso de falha


Em caso de falha, o Fotostudio tenta novamente de forma automática até 3 vezes, com um intervalo exponencial. Também podes relançar uma chamada manualmente com o botão Tentar novamente.



Usar com o 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 esse URL e seleciona os eventos que queres
  4. Aciona um evento de teste no Fotostudio (cria um contacto, por exemplo)
  5. O Make recebe os dados. A seguir, podes construir a tua automatização



Usar com o Zapier


  1. No Zapier, cria um novo Zap e escolhe Webhooks by Zapier → Catch Hook como acionador
  2. Copia o URL fornecido pelo Zapier
  3. No Fotostudio, cria um webhook com esse URL
  4. Aciona um evento de teste. O Zapier deteta automaticamente a estrutura dos dados
  5. Configura a tua ação (Google Sheets, Notion, Slack...)



Perguntas frequentes


O que acontece se o meu servidor estiver indisponível?
O Fotostudio tenta novamente 3 vezes, com um intervalo crescente. Depois de 3 tentativas, a entrega fica marcada como falhada, mas continua no histórico. Podes relançá-la manualmente.


Em quanto tempo deve o meu webhook responder?
O teu endpoint tem de responder em 10 segundos. Para lá disso, o pedido é considerado falhado.


Posso ter vários webhooks?
Sim, podes criar quantos webhooks quiseres, cada um com os seus eventos e o seu URL.


Como desativar temporariamente um webhook?
Na lista, abre o menu Ações do webhook e escolhe Inativo (ou Ativo para o reativar): fica em pausa sem ser eliminado.


O que acontece se eu desativar o módulo Webhooks?
Os teus webhooks são mantidos, mas deixa de ser enviada qualquer chamada e a entrada Webhooks de saída desaparece do menu. Reativa o módulo para retomar os envios.

Actualizado em: 23/10/2026

Esse artigo foi útil?

Partilhe o seu feedback

Cancelar

Obrigado!