Pular para o conteúdo principal

Medidores de Uso

Gerenciamento de medidores (usage meters) para cobrança baseada em consumo.

Endpoints

MétodoEndpointDescriçãoPermissão
POST/billing/api/v1/metersCriar medidorBILLING_METERS_CREATE
GET/billing/api/v1/metersListar medidoresBILLING_METERS_READ
GET/billing/api/v1/meters/:idObter medidorBILLING_METERS_READ
PATCH/billing/api/v1/meters/:idAtualizar medidorBILLING_METERS_UPDATE
DELETE/billing/api/v1/meters/:idExcluir medidorBILLING_METERS_DELETE

Atributos

CampoTipoDescrição
productIdstring (UUID)ID do produto de billing associado
namestringNome do medidor
eventNamestringNome do evento a ser medido
aggregationTypeenumTipo de agregação
propertyKeystringChave da propriedade para agregação
isActivebooleanSe o medidor está ativo
createdAtdatetimeData de criação
updatedAtdatetimeData da última atualização

Tipos de Agregação

TipoDescrição
SUMSoma de todas as quantidades
MAXValor máximo registrado
LASTÚltimo valor registrado
AVERAGEMédia dos valores
COUNT_DISTINCTContagem de valores distintos

Criar Medidor

POST /billing/api/v1/meters

Cria um novo medidor de uso associado a um produto.

Atributos

CampoTipoObrigatórioDescrição
productIdstringSimID do produto de billing
namestringSimNome descritivo do medidor
eventNamestringSimNome do evento a ser capturado
aggregationTypeenumSimTipo de agregação
propertyKeystringNãoChave para extrair valor do evento
isActivebooleanNãoSe está ativo (default: true)
curl -X POST 'https://billing.stg.catalisa.app/billing/api/v1/meters' \
-H 'Authorization: Bearer SEU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"type": "usage-meters",
"attributes": {
"productId": "550e8400-e29b-41d4-a716-446655440001",
"name": "API Calls",
"eventName": "api.request",
"aggregationType": "SUM",
"propertyKey": "count",
"isActive": true
}
}
}'

Response (201 Created)

{
"data": {
"type": "usage-meters",
"id": "550e8400-e29b-41d4-a716-446655440010",
"links": {
"self": "/billing/api/v1/meters/550e8400-e29b-41d4-a716-446655440010"
},
"attributes": {
"productId": "550e8400-e29b-41d4-a716-446655440001",
"name": "API Calls",
"eventName": "api.request",
"aggregationType": "SUM",
"propertyKey": "count",
"isActive": true,
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T10:30:00Z"
}
}
}

Listar Medidores

GET /billing/api/v1/meters

Lista todos os medidores 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[productId]UUIDFiltrar por produto
filter[isActive]booleanFiltrar por status ativo
curl 'https://billing.stg.catalisa.app/billing/api/v1/meters?filter[isActive]=true' \
-H 'Authorization: Bearer SEU_TOKEN'

Atualizar Medidor

PATCH /billing/api/v1/meters/:id

Atualiza um medidor existente.

curl -X PATCH 'https://billing.stg.catalisa.app/billing/api/v1/meters/550e8400-e29b-41d4-a716-446655440010' \
-H 'Authorization: Bearer SEU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"type": "usage-meters",
"id": "550e8400-e29b-41d4-a716-446655440010",
"attributes": {
"name": "API Calls - Updated",
"isActive": false
}
}
}'

Excluir Medidor

DELETE /billing/api/v1/meters/:id

Remove um medidor. O medidor não pode ter eventos de uso associados.

curl -X DELETE 'https://billing.stg.catalisa.app/billing/api/v1/meters/550e8400-e29b-41d4-a716-446655440010' \
-H 'Authorization: Bearer SEU_TOKEN'

Response (204 No Content)

Sem corpo de resposta.


Exemplos de Uso

Medidor de Requisições API

// Criar medidor para contar requisições
const apiCallsMeter = {
productId: 'produto-api-uuid',
name: 'API Requests',
eventName: 'api.request',
aggregationType: 'SUM',
propertyKey: 'count', // ou null para contar eventos
};

Medidor de Armazenamento

// Criar medidor para storage (último valor = uso atual)
const storageMeter = {
productId: 'produto-storage-uuid',
name: 'Storage Used',
eventName: 'storage.usage',
aggregationType: 'LAST',
propertyKey: 'bytesUsed',
};

Medidor de Usuários Ativos

// Criar medidor para contar usuários únicos
const activeUsersMeter = {
productId: 'produto-usuarios-uuid',
name: 'Active Users',
eventName: 'user.activity',
aggregationType: 'COUNT_DISTINCT',
propertyKey: 'userId',
};

Erros Comuns

CódigoErroDescrição
400VALIDATIONDados inválidos
404NOT_FOUNDMedidor ou produto não encontrado
409CONFLICTMedidor tem eventos associados (delete)