Pular para o conteúdo principal

Subscriptions

Gerenciamento de webhook subscriptions para receber notificações de eventos.

Endpoints

MétodoEndpointDescriçãoPermissão
POST/api/v1/subscriptionsCriar subscriptionWEBHOOKS_SUBSCRIPTIONS_CREATE
GET/api/v1/subscriptionsListar subscriptionsWEBHOOKS_SUBSCRIPTIONS_READ
GET/api/v1/subscriptions/:idObter subscription por IDWEBHOOKS_SUBSCRIPTIONS_READ
PATCH/api/v1/subscriptions/:idAtualizar subscriptionWEBHOOKS_SUBSCRIPTIONS_UPDATE
DELETE/api/v1/subscriptions/:idExcluir subscriptionWEBHOOKS_SUBSCRIPTIONS_DELETE
POST/api/v1/subscriptions/:id/pausePausar subscriptionWEBHOOKS_SUBSCRIPTIONS_UPDATE
POST/api/v1/subscriptions/:id/resumeRetomar subscriptionWEBHOOKS_SUBSCRIPTIONS_UPDATE
POST/api/v1/subscriptions/:id/testTestar endpointWEBHOOKS_SUBSCRIPTIONS_READ

Atributos

CampoTipoDescrição
namestringNome identificador da subscription
endpointUrlstringURL do endpoint para receber eventos
eventFiltersarrayLista de tipos de eventos a receber
statusenumStatus: ACTIVE, PAUSED, DISABLED
timeoutMsnumberTimeout da requisição em ms (padrão: 30000)
retryConfigobjectConfiguração de retry
customHeadersobjectHeaders customizados a enviar
descriptionstringDescrição da subscription
createdAtdatetimeData de criação
updatedAtdatetimeData da última atualização
createdBystringID do usuário que criou
updatedBystringID do usuário que atualizou

Configuração de Retry (retryConfig)

CampoTipoPadrãoDescrição
maxRetriesnumber5Número máximo de tentativas
retryBackoffMsnumber1000Tempo inicial de espera (ms)
retryBackoffMultipliernumber2.0Multiplicador do backoff

Status da Subscription

StatusDescrição
ACTIVESubscription ativa, recebendo eventos
PAUSEDPausada temporariamente pelo usuário
DISABLEDDesabilitada automaticamente (muitas falhas)

Criar Subscription

POST /api/v1/subscriptions

Cria uma nova webhook subscription.

Atributos

CampoTipoObrigatórioDescrição
namestringSimNome da subscription
endpointUrlstringSimURL do endpoint (HTTPS)
eventFiltersarraySimTipos de eventos
timeoutMsnumberNãoTimeout (padrão: 30000)
retryConfigobjectNãoConfiguração de retry
customHeadersobjectNãoHeaders customizados
descriptionstringNãoDescrição
curl -X POST 'https://webhooks-engine.stg.catalisa.app/api/v1/subscriptions' \
-H 'Authorization: Bearer SEU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"name": "Notificações de Billing",
"endpointUrl": "https://minha-app.com/webhooks/billing",
"eventFilters": [
"billing.invoice.created",
"billing.invoice.paid",
"billing.payment.completed"
],
"timeoutMs": 30000,
"retryConfig": {
"maxRetries": 5,
"retryBackoffMs": 1000,
"retryBackoffMultiplier": 2.0
},
"customHeaders": {
"X-App-Secret": "meu-segredo"
},
"description": "Webhook para eventos de faturamento"
}'

Response (201 Created)

{
"data": {
"type": "webhook-subscriptions",
"id": "550e8400-e29b-41d4-a716-446655440070",
"links": {
"self": "/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440070"
},
"attributes": {
"name": "Notificações de Billing",
"endpointUrl": "https://minha-app.com/webhooks/billing",
"eventFilters": [
"billing.invoice.created",
"billing.invoice.paid",
"billing.payment.completed"
],
"status": "ACTIVE",
"timeoutMs": 30000,
"retryConfig": {
"maxRetries": 5,
"retryBackoffMs": 1000,
"retryBackoffMultiplier": 2.0
},
"customHeaders": {
"X-App-Secret": "meu-segredo"
},
"description": "Webhook para eventos de faturamento",
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T10:30:00Z",
"createdBy": "550e8400-e29b-41d4-a716-446655440001"
}
},
"links": {
"self": "/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440070"
}
}

Listar Subscriptions

GET /api/v1/subscriptions

Lista todas as webhook subscriptions com suporte a paginação e filtros.

Query Parameters

ParâmetroTipoDescrição
page[number]integerNúmero da página
page[size]integerItens por página
filter[status]enumFiltrar por status
curl 'https://webhooks-engine.stg.catalisa.app/api/v1/subscriptions?filter[status]=ACTIVE' \
-H 'Authorization: Bearer SEU_TOKEN'

Response (200 OK)

{
"data": [
{
"type": "webhook-subscriptions",
"id": "550e8400-e29b-41d4-a716-446655440070",
"links": {
"self": "/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440070"
},
"attributes": {
"name": "Notificações de Billing",
"endpointUrl": "https://minha-app.com/webhooks/billing",
"eventFilters": ["billing.invoice.created", "billing.invoice.paid"],
"status": "ACTIVE",
"timeoutMs": 30000,
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T10:30:00Z"
}
}
],
"meta": {
"totalItems": 3,
"totalPages": 1,
"currentPage": 1,
"itemsPerPage": 20
},
"links": {
"self": "/api/v1/subscriptions?page[number]=1&page[size]=20"
}
}

Obter Subscription por ID

GET /api/v1/subscriptions/:id

Obtém os detalhes de uma subscription específica.

curl 'https://webhooks-engine.stg.catalisa.app/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440070' \
-H 'Authorization: Bearer SEU_TOKEN'

Response (200 OK)

{
"data": {
"type": "webhook-subscriptions",
"id": "550e8400-e29b-41d4-a716-446655440070",
"links": {
"self": "/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440070"
},
"attributes": {
"name": "Notificações de Billing",
"endpointUrl": "https://minha-app.com/webhooks/billing",
"eventFilters": [
"billing.invoice.created",
"billing.invoice.paid",
"billing.payment.completed"
],
"status": "ACTIVE",
"timeoutMs": 30000,
"retryConfig": {
"maxRetries": 5,
"retryBackoffMs": 1000,
"retryBackoffMultiplier": 2.0
},
"customHeaders": {
"X-App-Secret": "meu-segredo"
},
"description": "Webhook para eventos de faturamento",
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T10:30:00Z",
"createdBy": "550e8400-e29b-41d4-a716-446655440001"
}
},
"links": {
"self": "/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440070"
}
}

Atualizar Subscription

PATCH /api/v1/subscriptions/:id

Atualiza os dados de uma subscription.

Atributos Atualizáveis

CampoTipoDescrição
namestringNome da subscription
endpointUrlstringURL do endpoint
eventFiltersarrayTipos de eventos
timeoutMsnumberTimeout em ms
retryConfigobjectConfiguração de retry
customHeadersobjectHeaders customizados
descriptionstringDescrição
curl -X PATCH 'https://webhooks-engine.stg.catalisa.app/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440070' \
-H 'Authorization: Bearer SEU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"eventFilters": [
"billing.invoice.created",
"billing.invoice.paid",
"billing.invoice.overdue",
"billing.payment.completed",
"billing.payment.failed"
],
"retryConfig": {
"maxRetries": 10
}
}'

Response (200 OK)

{
"data": {
"type": "webhook-subscriptions",
"id": "550e8400-e29b-41d4-a716-446655440070",
"attributes": {
"name": "Notificações de Billing",
"endpointUrl": "https://minha-app.com/webhooks/billing",
"eventFilters": [
"billing.invoice.created",
"billing.invoice.paid",
"billing.invoice.overdue",
"billing.payment.completed",
"billing.payment.failed"
],
"status": "ACTIVE",
"timeoutMs": 30000,
"retryConfig": {
"maxRetries": 10,
"retryBackoffMs": 1000,
"retryBackoffMultiplier": 2.0
},
"updatedAt": "2024-01-15T11:00:00Z",
"updatedBy": "550e8400-e29b-41d4-a716-446655440001"
}
}
}

Excluir Subscription

DELETE /api/v1/subscriptions/:id

Remove uma webhook subscription.

curl -X DELETE 'https://webhooks-engine.stg.catalisa.app/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440070' \
-H 'Authorization: Bearer SEU_TOKEN'

Response (204 No Content)

Sem corpo de resposta.


Pausar Subscription

POST /api/v1/subscriptions/:id/pause

Pausa uma subscription temporariamente. Eventos não serão entregues enquanto pausada.

curl -X POST 'https://webhooks-engine.stg.catalisa.app/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440070/pause' \
-H 'Authorization: Bearer SEU_TOKEN'

Response (200 OK)

{
"data": {
"type": "webhook-subscriptions",
"id": "550e8400-e29b-41d4-a716-446655440070",
"attributes": {
"name": "Notificações de Billing",
"status": "PAUSED",
"updatedAt": "2024-01-15T12:00:00Z"
}
}
}

Retomar Subscription

POST /api/v1/subscriptions/:id/resume

Retoma uma subscription que estava pausada.

curl -X POST 'https://webhooks-engine.stg.catalisa.app/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440070/resume' \
-H 'Authorization: Bearer SEU_TOKEN'

Response (200 OK)

{
"data": {
"type": "webhook-subscriptions",
"id": "550e8400-e29b-41d4-a716-446655440070",
"attributes": {
"name": "Notificações de Billing",
"status": "ACTIVE",
"updatedAt": "2024-01-15T13:00:00Z"
}
}
}

Testar Subscription

POST /api/v1/subscriptions/:id/test

Envia um evento de teste para verificar se o endpoint está funcionando.

curl -X POST 'https://webhooks-engine.stg.catalisa.app/api/v1/subscriptions/550e8400-e29b-41d4-a716-446655440070/test' \
-H 'Authorization: Bearer SEU_TOKEN'

Response (200 OK) - Sucesso

{
"data": {
"type": "webhook-test-result",
"attributes": {
"success": true,
"responseStatusCode": 200,
"responseTimeMs": 145
}
}
}

Response (200 OK) - Falha

{
"data": {
"type": "webhook-test-result",
"attributes": {
"success": false,
"responseStatusCode": 500,
"responseTimeMs": 2500,
"errorMessage": "Internal Server Error"
}
}
}

Filtros de Eventos

Usando Wildcards

Você pode usar wildcards para assinar múltiplos eventos:

{
"eventFilters": [
"billing.*", // Todos os eventos de billing
"billing.invoice.*", // Todos os eventos de invoice
"*" // Todos os eventos (use com cuidado)
]
}

Exemplos de Configuração

Notificações Financeiras

{
"eventFilters": [
"billing.invoice.created",
"billing.invoice.paid",
"billing.invoice.overdue",
"billing.payment.completed",
"billing.payment.failed"
]
}

Alterações de Usuários

{
"eventFilters": [
"iam.user.created",
"iam.user.updated",
"iam.user.deleted"
]
}

Eventos de Produtos

{
"eventFilters": [
"products.product.created",
"products.product.updated",
"customers.person.created"
]
}

Erros Comuns

CódigoErroDescrição
400VALIDATIONDados inválidos (URL, eventFilters, etc.)
400VALIDATIONURL deve usar HTTPS
404NOT_FOUNDSubscription não encontrada
409CONFLICTSubscription não está ativa (para pausar)
409CONFLICTSubscription não está pausada (para retomar)
409CONFLICTLimite de subscriptions atingido