{"openapi":"3.1.0","paths":{"/health":{"get":{"operationId":"HealthController_check","parameters":[],"responses":{"200":{"description":"Estado del adapter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthStatusDto"}}}}},"summary":"Health check (conectividad HubSpot + Secret Manager)","tags":["health"]}},"/health/ready":{"get":{"operationId":"HealthController_ready","parameters":[],"responses":{"200":{"description":""}},"summary":"Readiness probe","tags":["health"]}},"/sync":{"post":{"description":"Recibe un CloudEvent envelope desde Cloud Tasks y sincroniza el contacto con HubSpot CRM.","operationId":"SyncController_sync","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncPayloadDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncResponseDto"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponseDto"}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponseDto"}}}}},"summary":"Sincronizar contacto a HubSpot","tags":["sync"]}}},"info":{"title":"CRM Adapter API","description":"Adapter de integracion HubSpot CRM para Rotoplas Bebbia. Recibe tareas de Cloud Tasks, transforma el payload e invoca la HubSpot REST API v3. NUNCA se expone directamente a internet.","version":"0.1.0","contact":{}},"tags":[{"name":"sync","description":"Sincronizacion de contactos a HubSpot CRM"},{"name":"health","description":"Liveness / readiness"}],"servers":[],"components":{"schemas":{"HealthChecksDto":{"type":"object","properties":{"hubspot_connectivity":{"type":"string","enum":["ok","error"]},"secret_manager":{"type":"string","enum":["ok","error"]}},"required":["hubspot_connectivity","secret_manager"]},"HealthStatusDto":{"type":"object","properties":{"status":{"type":"string","enum":["ok","degraded"]},"timestamp":{"type":"string","format":"date-time"},"version":{"type":"string"},"component":{"type":"string","enum":["csb-crm-adapter"]},"checks":{"$ref":"#/components/schemas/HealthChecksDto"}},"required":["status","timestamp","version","component","checks"]},"EventEnvelopeDto":{"type":"object","properties":{"id":{"type":"string","description":"UUID v4 — usado para deduplicacion idempotente"},"source":{"type":"string","example":"//bebbia/orders-service"},"type":{"type":"string","example":"com.bebbia.order.placed.v1"},"specversion":{"type":"string","example":"1.0"},"data":{"type":"object","additionalProperties":true},"entityid":{"type":"string","description":"ID de la entidad de negocio (ordering key)"},"datacontenttype":{"type":"string","default":"application/avro"},"time":{"type":"string","format":"date-time"}},"required":["id","source","type","specversion","data","entityid"]},"TaskMetadataDto":{"type":"object","properties":{"retryCount":{"type":"number","minimum":0},"taskName":{"type":"string"},"queueName":{"type":"string"}},"required":["retryCount"]},"SyncPayloadDto":{"type":"object","properties":{"envelope":{"$ref":"#/components/schemas/EventEnvelopeDto"},"taskMetadata":{"$ref":"#/components/schemas/TaskMetadataDto"}},"required":["envelope","taskMetadata"]},"SyncResponseDto":{"type":"object","properties":{"status":{"type":"string","example":"ok"}},"required":["status"]},"ErrorResponseDto":{"type":"object","properties":{"statusCode":{"type":"number"},"message":{"type":"string"},"error_code":{"type":"string","description":"Codigo de error del adapter","enum":["HUBSPOT_TIMEOUT","HUBSPOT_AUTH_FAILED","HUBSPOT_RATE_LIMITED","SCHEMA_VALIDATION_FAILED"]},"timestamp":{"type":"string","format":"date-time"}},"required":["statusCode","message"]}}}}