{"openapi":"3.0.0","info":{"title":"360studio Admin API","version":"1.0.0","description":"API de administracion global del proyecto, autenticada con Firebase Auth y rol super admin."},"servers":[{"url":"https://api.360studio.app/admin/v1","description":"Produccion"},{"url":"https://sandbox.api.360studio.app/admin/v1","description":"Sandbox"}],"tags":[{"name":"Businesses","description":"Gestion global de negocios."},{"name":"Workspaces","description":"Diagnóstico administrativo de Workspaces sin operar datos del Client."},{"name":"Business Config","description":"Configuracion por negocio."},{"name":"Settlements","description":"Gestion operativa de settlements."},{"name":"PaymentCoupons","description":"Consultas administrativas de cupones."},{"name":"Users","description":"Gestion de usuarios y asignacion de negocios."},{"name":"Platform Access","description":"Roles y permisos del personal interno."},{"name":"Platform Search","description":"Búsqueda exacta y acotada de recursos globales según permisos."},{"name":"Platform Reports","description":"Métricas agregadas y exportaciones privadas asíncronas."},{"name":"Security","description":"Sesiones administrativas locales y políticas de autenticación reforzada."},{"name":"Audit","description":"Auditoria global de operaciones internas y de negocio."},{"name":"Support","description":"Diagnóstico técnico sanitizado y acciones operativas seguras."},{"name":"Partners","description":"Gestion de partners y sus API keys."},{"name":"Commercial","description":"Planes, suscripciones, entitlements y consumo por Business."}],"components":{"securitySchemes":{"FirebaseBearer":{"type":"http","scheme":"bearer","bearerFormat":"Firebase ID Token"}},"parameters":{"IdPathParam":{"in":"path","name":"id","required":true,"schema":{"type":"string"}},"BusinessIdPathParam":{"in":"path","name":"businessId","required":true,"schema":{"type":"string"}},"BusinessIdUnderscorePathParam":{"in":"path","name":"business_id","required":true,"schema":{"type":"string"}},"UidPathParam":{"in":"path","name":"uid","required":true,"schema":{"type":"string"}},"KeyIdPathParam":{"in":"path","name":"keyId","required":true,"schema":{"type":"string"}},"AdminReasonHeader":{"in":"header","name":"x-admin-reason","required":true,"description":"Motivo operativo de 10 a 500 caracteres; no incluir datos personales, cuentas ni secretos.","schema":{"type":"string","minLength":10,"maxLength":500}},"AdminConfirmationHeader":{"in":"header","name":"x-admin-confirmation","required":true,"description":"Literal de doble confirmación indicado por la operación.","schema":{"type":"string"}}},"schemas":{"CommercialCapabilityDefinition":{"type":"object","required":["key","name","description","supported_kinds"],"properties":{"key":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"supported_kinds":{"type":"array","items":{"type":"string","enum":["boolean","limit","allocation"]}},"workspace_tool_id":{"type":"string"}}},"CommercialPlanCapability":{"type":"object","required":["capability_key","kind","value","enforcement","period"],"properties":{"capability_key":{"type":"string"},"kind":{"type":"string","enum":["boolean","limit","allocation"]},"value":{"oneOf":[{"type":"boolean"},{"type":"integer","minimum":0}]},"enforcement":{"type":"string","enum":["hard_limit","soft_limit","observe_only"]},"period":{"type":"string","enum":["none","daily","monthly","billing_period"]}}},"CommercialPlanDefinition":{"type":"object","required":["id","code","version","name","status","capabilities"],"properties":{"id":{"type":"string"},"code":{"type":"string"},"version":{"type":"integer","minimum":1},"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["draft","published","retired"]},"capabilities":{"type":"array","items":{"$ref":"#/components/schemas/CommercialPlanCapability"}},"effective_from":{"type":"string","format":"date-time"},"replaces_plan_version_id":{"type":"string"},"published_at":{"type":"string","format":"date-time"},"retired_at":{"type":"string","format":"date-time"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"CommercialSubscription":{"type":"object","required":["id","plan_version_id","status","provider","started_at","current_period_start","version"],"properties":{"id":{"type":"string"},"plan_version_id":{"type":"string"},"status":{"type":"string","enum":["trial","active","grace_period","suspended","cancelled"]},"provider":{"type":"string","enum":["manual"]},"started_at":{"type":"string","format":"date-time"},"current_period_start":{"type":"string","format":"date-time"},"current_period_end":{"type":"string","format":"date-time"},"cancel_at":{"type":"string","format":"date-time"},"scheduled_action":{"type":"string","enum":["change","cancel"]},"scheduled_plan_version_id":{"type":"string"},"scheduled_for":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":1}}},"CommercialEffectiveEntitlement":{"allOf":[{"$ref":"#/components/schemas/CommercialPlanCapability"},{"type":"object","required":["source","plan_version_id","used"],"properties":{"source":{"type":"string","enum":["plan","override"]},"plan_version_id":{"type":"string"},"override_id":{"type":"string"},"valid_until":{"type":"string","format":"date-time"},"used":{"type":"integer","minimum":0},"remaining":{"type":"integer","minimum":0}}}]},"CommercialUsage":{"type":"object","required":["capability_key","used","limit","remaining","period","enforcement"],"properties":{"capability_key":{"type":"string"},"used":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":0},"remaining":{"type":"integer","minimum":0},"period":{"type":"string","enum":["none","daily","monthly","billing_period"]},"enforcement":{"type":"string","enum":["hard_limit","soft_limit","observe_only"]}}},"CommercialSnapshot":{"type":"object","properties":{"subscription":{"$ref":"#/components/schemas/CommercialSubscription","nullable":true},"plan":{"$ref":"#/components/schemas/CommercialPlanDefinition","nullable":true},"entitlements":{"type":"array","items":{"$ref":"#/components/schemas/CommercialEffectiveEntitlement"}},"usage":{"type":"array","items":{"$ref":"#/components/schemas/CommercialUsage"}}}},"CommercialSnapshotSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/CommercialSnapshot"}}},"CommercialPlanSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/CommercialPlanDefinition"}}},"CommercialPlanListSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/CommercialPlanDefinition"}}}},"CommercialCapabilityListSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/CommercialCapabilityDefinition"}}}},"CommercialPlanCreateInput":{"type":"object","properties":{"code":{"type":"string","minLength":2,"maxLength":50},"name":{"type":"string","minLength":2,"maxLength":120},"description":{"type":"string","maxLength":500},"capabilities":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"capability_key":{"type":"string","minLength":3,"maxLength":100,"pattern":"^[a-z0-9][a-z0-9._-]+$"},"kind":{"type":"string","enum":["boolean","limit","allocation"]},"value":{"anyOf":[{"type":"boolean"},{"type":"integer","minimum":0,"maximum":9007199254740991}]},"enforcement":{"type":"string","enum":["hard_limit","soft_limit","observe_only"]},"period":{"type":"string","enum":["none","daily","monthly","billing_period"]}},"required":["capability_key","kind","value","enforcement","period"],"additionalProperties":false}},"effective_from":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["code","name","capabilities"],"additionalProperties":false},"CommercialPlanUpdateInput":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":120},"description":{"type":"string","maxLength":500},"capabilities":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"capability_key":{"type":"string","minLength":3,"maxLength":100,"pattern":"^[a-z0-9][a-z0-9._-]+$"},"kind":{"type":"string","enum":["boolean","limit","allocation"]},"value":{"anyOf":[{"type":"boolean"},{"type":"integer","minimum":0,"maximum":9007199254740991}]},"enforcement":{"type":"string","enum":["hard_limit","soft_limit","observe_only"]},"period":{"type":"string","enum":["none","daily","monthly","billing_period"]}},"required":["capability_key","kind","value","enforcement","period"],"additionalProperties":false}},"effective_from":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"additionalProperties":false},"CommercialSubscriptionInput":{"type":"object","properties":{"plan_version_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"status":{"type":"string","enum":["trial","active","grace_period","suspended","cancelled"]},"current_period_start":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"current_period_end":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["plan_version_id","status","current_period_start"],"additionalProperties":false},"CommercialSubscriptionScheduleInput":{"type":"object","properties":{"action":{"type":"string","enum":["change","cancel"]},"effective_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"plan_version_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},"required":["action","effective_at"],"additionalProperties":false},"CommercialEntitlementOverrideInput":{"type":"object","properties":{"kind":{"type":"string","enum":["boolean","limit","allocation"]},"value":{"anyOf":[{"type":"boolean"},{"type":"integer","minimum":0,"maximum":9007199254740991}]},"enforcement":{"type":"string","enum":["hard_limit","soft_limit","observe_only"]},"period":{"type":"string","enum":["none","daily","monthly","billing_period"]},"valid_from":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"valid_until":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["kind","value","enforcement","period"],"additionalProperties":false},"GenericError":{"type":"object","properties":{"success":{"type":"boolean","example":false},"error":{"type":"string","example":"Error message"}},"required":["success","error"],"example":{"success":false,"error":"Cliente no encontrado"}},"GenericSuccess":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"type":"object","additionalProperties":{}},"message":{"type":"string"}},"required":["success","data"]},"GenericListSuccess":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"type":"object","additionalProperties":{}}},"meta":{"type":"object","properties":{"total":{"type":"number","example":15},"page":{"type":"number","example":1},"limit":{"type":"number","example":10},"total_pages":{"type":"number","example":2}},"required":["total","page","limit","total_pages"]}},"required":["success","data","meta"]},"AdminPaginationMeta":{"type":"object","required":["page","limit"],"properties":{"page":{"type":"integer","minimum":1},"limit":{"type":"integer","minimum":1,"maximum":100},"total":{"type":"integer","minimum":0},"total_pages":{"type":"integer","minimum":0}}},"AdminPartnerScope":{"type":"string","enum":["businesses:read","businesses:write","customers:read","customers:write","customers:delete","customers:bulk","payment_coupons:read","payment_coupons:write","payment_coupons:delete","payment_coupons:import","settlements:read"]},"AdminPartnerStatus":{"type":"string","enum":["active","suspended"]},"AdminPartnerFeeConfig":{"type":"object","additionalProperties":false,"required":["percentage","min_fixed_amount"],"properties":{"percentage":{"type":"number","minimum":0,"maximum":100},"min_fixed_amount":{"type":"number","minimum":0}}},"AdminPartnerCommissionTier":{"type":"object","additionalProperties":false,"required":["limit","amount"],"properties":{"limit":{"type":"number","exclusiveMinimum":0},"amount":{"type":"number","minimum":0}}},"AdminPartnerConfig":{"type":"object","additionalProperties":false,"required":["partner_fee"],"properties":{"partner_fee":{"$ref":"#/components/schemas/AdminPartnerFeeConfig"},"platform_fixed_fee":{"type":"number","minimum":0},"platform_commission_tiers":{"type":"array","maxItems":20,"items":{"$ref":"#/components/schemas/AdminPartnerCommissionTier"}}}},"AdminPartnerAuthorizedBusiness":{"type":"object","additionalProperties":false,"required":["id","name","status"],"properties":{"id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"name":{"type":"string"},"status":{"type":"string"}}},"AdminPartner":{"type":"object","additionalProperties":false,"required":["_id","name","status","business_ids","scopes"],"properties":{"_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"name":{"type":"string"},"code":{"type":"string"},"status":{"$ref":"#/components/schemas/AdminPartnerStatus"},"business_ids":{"type":"array","maxItems":100,"items":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},"authorized_businesses":{"type":"array","items":{"$ref":"#/components/schemas/AdminPartnerAuthorizedBusiness"}},"scopes":{"type":"array","items":{"$ref":"#/components/schemas/AdminPartnerScope"}},"config":{"$ref":"#/components/schemas/AdminPartnerConfig"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"AdminPartnerCreateInput":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","minLength":2,"maxLength":120},"code":{"type":"string","minLength":2,"maxLength":40,"pattern":"^[A-Z0-9_-]+$"},"business_ids":{"type":"array","maxItems":100,"items":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},"scopes":{"type":"array","items":{"$ref":"#/components/schemas/AdminPartnerScope"}},"config":{"$ref":"#/components/schemas/AdminPartnerConfig"}}},"AdminPartnerUpdateInput":{"type":"object","additionalProperties":false,"minProperties":1,"properties":{"name":{"type":"string","minLength":2,"maxLength":120},"code":{"type":"string","minLength":2,"maxLength":40,"pattern":"^[A-Z0-9_-]+$"},"status":{"$ref":"#/components/schemas/AdminPartnerStatus"},"business_ids":{"type":"array","maxItems":100,"items":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},"scopes":{"type":"array","items":{"$ref":"#/components/schemas/AdminPartnerScope"}},"config":{"$ref":"#/components/schemas/AdminPartnerConfig"}}},"AdminPartnerSuccess":{"type":"object","additionalProperties":false,"required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/AdminPartner"},"message":{"type":"string"}}},"AdminPartnerListSuccess":{"type":"object","additionalProperties":false,"required":["success","data","meta"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/AdminPartner"}},"meta":{"$ref":"#/components/schemas/AdminPaginationMeta"}}},"AdminPartnerKey":{"type":"object","additionalProperties":false,"required":["_id","partner_id","prefix","name","status","created_at"],"properties":{"_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"partner_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"prefix":{"type":"string"},"name":{"type":"string"},"scopes":{"type":"array","items":{"$ref":"#/components/schemas/AdminPartnerScope"}},"status":{"type":"string","enum":["active","revoked"]},"created_at":{"type":"string","format":"date-time"},"last_used_at":{"type":"string","format":"date-time"},"revoked_at":{"type":"string","format":"date-time"}}},"AdminPartnerKeyCreateInput":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","minLength":2,"maxLength":100},"scopes":{"type":"array","items":{"$ref":"#/components/schemas/AdminPartnerScope"}}}},"AdminPartnerKeyRotateInput":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","minLength":2,"maxLength":100},"scopes":{"type":"array","items":{"$ref":"#/components/schemas/AdminPartnerScope"}}}},"AdminPartnerCredential":{"type":"object","additionalProperties":false,"required":["key","_id","partner_id","prefix","name","status","created_at"],"properties":{"key":{"type":"string","description":"Secreto devuelto únicamente al crear o rotar la credencial."},"_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"partner_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"prefix":{"type":"string"},"name":{"type":"string"},"scopes":{"type":"array","items":{"$ref":"#/components/schemas/AdminPartnerScope"}},"status":{"type":"string","enum":["active"]},"created_at":{"type":"string","format":"date-time"}}},"AdminPartnerCredentialSuccess":{"type":"object","additionalProperties":false,"required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/AdminPartnerCredential"}}},"AdminPartnerKeyListSuccess":{"type":"object","additionalProperties":false,"required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/AdminPartnerKey"}}}},"AdminSettlementStatus":{"type":"string","enum":["IN_PROCESS","COMPLETED","REJECTED"]},"AdminSettlementBusinessSummary":{"type":"object","required":["_id","name"],"properties":{"_id":{"type":"string"},"name":{"type":"string"}}},"AdminSettlementGroup":{"type":"object","required":["_id","is_batch","status","currency","destination_banks","total_amount","commission_amount","total_paid","payment_coupons_count","settlement_count","business_count","label"],"properties":{"_id":{"type":"string"},"batch_id":{"type":"string","nullable":true},"is_batch":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"},"status":{"$ref":"#/components/schemas/AdminSettlementStatus"},"currency":{"type":"string","enum":["PEN"]},"destination_banks":{"type":"array","items":{"type":"string"}},"total_amount":{"type":"number","format":"double"},"commission_amount":{"type":"number","format":"double"},"total_paid":{"type":"number","format":"double"},"payment_coupons_count":{"type":"integer","minimum":0},"settlement_count":{"type":"integer","minimum":1},"business":{"allOf":[{"$ref":"#/components/schemas/AdminSettlementBusinessSummary"}],"nullable":true},"business_count":{"type":"integer","minimum":0},"label":{"type":"string"}}},"AdminSettlementListSuccess":{"type":"object","required":["success","data","meta"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/AdminSettlementGroup"}},"meta":{"$ref":"#/components/schemas/AdminPaginationMeta"}}},"AdminSettlement":{"type":"object","required":["_id","business_id","source_account","destination_account","destination_bank","payment_coupons_count","total_amount","commission_amount","total_paid","currency","status"],"properties":{"_id":{"type":"string"},"business_id":{"type":"string"},"source_account":{"type":"string"},"destination_account":{"type":"string"},"destination_bank":{"type":"string"},"payment_coupons_count":{"type":"integer","minimum":0},"total_amount":{"type":"number","format":"double"},"commission_amount":{"type":"number","format":"double"},"partner_fee_amount":{"type":"number","format":"double"},"total_paid":{"type":"number","format":"double"},"currency":{"type":"string","enum":["PEN"]},"status":{"$ref":"#/components/schemas/AdminSettlementStatus"},"batch_id":{"type":"string"},"bank_transaction_id":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"transaction_date":{"type":"string","format":"date-time"},"business":{"allOf":[{"$ref":"#/components/schemas/AdminSettlementBusinessSummary"}],"nullable":true}}},"AdminSettlementDetailSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/AdminSettlement"}}}},"AdminSettlementCreateInput":{"type":"object","additionalProperties":false,"required":["target_banks"],"properties":{"business_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"target_banks":{"type":"array","minItems":1,"maxItems":4,"uniqueItems":true,"items":{"type":"string","enum":["BCP","SCOTIABANK","INTERBANK","BBVA"]}}}},"AdminSettlementCreationItem":{"type":"object","required":["business_id","success"],"properties":{"business_id":{"type":"string"},"success":{"type":"boolean"},"settlement_id":{"type":"string"},"error":{"type":"string"}}},"AdminSettlementCreationResult":{"type":"object","required":["processed","successes","failures","results"],"properties":{"batch_id":{"type":"string"},"processed":{"type":"integer","minimum":0},"successes":{"type":"integer","minimum":0},"failures":{"type":"integer","minimum":0},"results":{"type":"array","items":{"$ref":"#/components/schemas/AdminSettlementCreationItem"}}}},"AdminSettlementCreationSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/AdminSettlementCreationResult"}}},"AdminSettlementStatusInput":{"type":"object","additionalProperties":false,"required":["status"],"properties":{"status":{"$ref":"#/components/schemas/AdminSettlementStatus"}}},"AdminSettlementStatusResult":{"type":"object","required":["matched_count","modified_count"],"properties":{"matched_count":{"type":"integer","minimum":0},"modified_count":{"type":"integer","minimum":0}}},"AdminSettlementStatusSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/AdminSettlementStatusResult"}}},"AdminSettlementImportResult":{"type":"object","required":["success","preview","message","currency","processed_count","detected_count","duplicate_count","unpaid_count","mismatched_count","total_amount_declared","total_amount_calculated","difference_amount"],"properties":{"success":{"type":"boolean"},"preview":{"type":"boolean"},"message":{"type":"string"},"currency":{"type":"string","enum":["PEN"]},"processed_count":{"type":"integer","minimum":0},"detected_count":{"type":"integer","minimum":0},"duplicate_count":{"type":"integer","minimum":0},"unpaid_count":{"type":"integer","minimum":0},"mismatched_count":{"type":"integer","minimum":0},"total_amount_declared":{"type":"number","format":"double"},"total_amount_calculated":{"type":"number","format":"double"},"difference_amount":{"type":"number","format":"double"}}},"AdminSettlementBankSummary":{"type":"object","required":["bank","settlements_count"],"properties":{"bank":{"type":"string"},"settlements_count":{"type":"integer","minimum":0}}},"AdminSettlementBankSummarySuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/AdminSettlementBankSummary"}}}},"AdminSettlementFeeSummary":{"type":"object","required":["business_id","payment_coupons_count","total_platform_fee","total_partner_fee","total_commission"],"properties":{"business_id":{"type":"string"},"business_name":{"type":"string"},"partner_id":{"type":"string","nullable":true},"partner_name":{"type":"string","nullable":true},"payment_coupons_count":{"type":"integer","minimum":0},"total_platform_fee":{"type":"number","format":"double"},"total_partner_fee":{"type":"number","format":"double"},"total_commission":{"type":"number","format":"double"}}},"AdminSettlementFeeSummaryListSuccess":{"type":"object","required":["success","data","meta"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/AdminSettlementFeeSummary"}},"meta":{"$ref":"#/components/schemas/AdminPaginationMeta"}}},"AdminCouponBankSummary":{"type":"object","required":["bank","payment_coupons_count"],"properties":{"bank":{"type":"string"},"payment_coupons_count":{"type":"integer","minimum":0}}},"AdminCouponBankSummaryListSuccess":{"type":"object","required":["success","data","meta"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/AdminCouponBankSummary"}},"meta":{"$ref":"#/components/schemas/AdminPaginationMeta"}}},"AdminPaymentCoupon":{"type":"object","required":["_id","business_id","amount","currency","status"],"properties":{"_id":{"type":"string"},"business_id":{"type":"string"},"workspace_id":{"type":"string"},"amount":{"type":"number","format":"double"},"currency":{"type":"string","enum":["PEN"]},"status":{"type":"string","enum":["active","paid","voided"]},"payment_coupon_code":{"type":"string"},"payment_reference":{"type":"string"},"operation_number":{"type":"string"},"settlement_id":{"type":"string"},"settlement_status":{"type":"string"},"settlement_date":{"type":"string","format":"date-time"},"paid_at":{"type":"string","format":"date-time"},"created_at":{"type":"string","format":"date-time"},"fee_platform":{"type":"number","format":"double"},"fee_partner":{"type":"number","format":"double"},"bank_tx_id":{"type":"string"}}},"AdminPaymentCouponListSuccess":{"type":"object","required":["success","data","meta"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/AdminPaymentCoupon"}},"meta":{"$ref":"#/components/schemas/AdminPaginationMeta"}}},"AdminBusinessConfig":{"type":"object","properties":{"_id":{"type":"string"},"business_id":{"type":"string"},"source_account":{"type":"string"},"destination_account":{"type":"string"},"destination_bank":{"type":"string"}}},"AdminBusiness":{"type":"object","required":["_id","name","payment_prefix","status"],"properties":{"_id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"address":{"type":"string"},"payment_prefix":{"type":"string"},"status":{"type":"string","enum":["active","pending_activation","suspended","archived"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"config":{"allOf":[{"$ref":"#/components/schemas/AdminBusinessConfig"}],"nullable":true},"lifecycle":{"$ref":"#/components/schemas/AdminBusinessLifecycleSummary"}}},"AdminBusinessLifecycleConsequences":{"type":"object","required":["workspaces","active_business_memberships","active_workspace_memberships","integration_connections","automation_definitions","pending_jobs"],"properties":{"workspaces":{"type":"integer","minimum":0},"active_business_memberships":{"type":"integer","minimum":0},"active_workspace_memberships":{"type":"integer","minimum":0},"integration_connections":{"type":"integer","minimum":0},"automation_definitions":{"type":"integer","minimum":0},"pending_jobs":{"type":"integer","minimum":0}}},"AdminBusinessLifecycleSummary":{"type":"object","required":["status","allowed_transitions","consequences"],"properties":{"status":{"type":"string","enum":["active","pending_activation","suspended","archived"]},"allowed_transitions":{"type":"array","items":{"type":"string","enum":["activate","suspend","reactivate","archive","restore"]}},"consequences":{"$ref":"#/components/schemas/AdminBusinessLifecycleConsequences"}}},"AdminBusinessLifecycleResult":{"type":"object","required":["business_id","from_status","status","transition","lifecycle"],"properties":{"business_id":{"type":"string"},"from_status":{"type":"string","enum":["active","pending_activation","suspended","archived"]},"status":{"type":"string","enum":["active","pending_activation","suspended","archived"]},"transition":{"type":"string","enum":["activate","suspend","reactivate","archive","restore"]},"lifecycle":{"$ref":"#/components/schemas/AdminBusinessLifecycleSummary"}}},"AdminBusinessLifecycleSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/AdminBusinessLifecycleResult"}}},"AdminBusinessCreateInput":{"type":"object","additionalProperties":false,"required":["name","payment_prefix","destination_account","destination_bank"],"properties":{"name":{"type":"string","minLength":1,"maxLength":160},"email":{"type":"string","format":"email"},"phone":{"type":"string","maxLength":40},"address":{"type":"string","maxLength":500},"payment_prefix":{"type":"string","pattern":"^[A-Za-z0-9]+$"},"destination_account":{"type":"string","minLength":1,"maxLength":80},"destination_bank":{"type":"string","enum":["BCP","SCOTIABANK","INTERBANK","BBVA"]}}},"AdminBusinessUpdateInput":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"maxLength":160},"email":{"type":"string","format":"email"},"phone":{"type":"string","maxLength":40},"address":{"type":"string","maxLength":500}}},"AdminWorkspaceProvision":{"type":"object","required":["id","name","status","onboarding_status","settings"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["pending_activation","active","inactive"]},"onboarding_status":{"type":"string","enum":["not_started","in_progress","completed"]},"settings":{"type":"object","additionalProperties":true}}},"AdminBusinessProvision":{"type":"object","required":["business_id","config_id","workspace"],"properties":{"business_id":{"type":"string"},"config_id":{"type":"string"},"workspace":{"$ref":"#/components/schemas/AdminWorkspaceProvision"}}},"AdminBusinessProvisionSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/AdminBusinessProvision"}}},"AdminBusinessSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/AdminBusiness"}}},"AdminBusinessListSuccess":{"type":"object","required":["success","data","meta"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/AdminBusiness"}},"meta":{"$ref":"#/components/schemas/AdminPaginationMeta"}}},"AdminWorkspaceDiagnosticCounts":{"type":"object","additionalProperties":false,"required":["warnings","errors"],"properties":{"warnings":{"type":"integer","minimum":0},"errors":{"type":"integer","minimum":0}}},"AdminWorkspaceSummary":{"type":"object","additionalProperties":false,"required":["id","business_id","name","status","onboarding_status","is_archived","active_memberships","enabled_tools","diagnostic_counts"],"properties":{"id":{"type":"string"},"business_id":{"type":"string"},"name":{"type":"string"},"purpose":{"type":"string"},"purpose_label":{"type":"string"},"status":{"type":"string","enum":["pending_activation","active","inactive"]},"onboarding_status":{"type":"string","enum":["in_progress","completed"]},"authorization_epoch":{"type":"integer","minimum":1},"is_archived":{"type":"boolean"},"active_memberships":{"type":"integer","minimum":0},"enabled_tools":{"type":"integer","minimum":0},"diagnostic_counts":{"$ref":"#/components/schemas/AdminWorkspaceDiagnosticCounts"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"archived_at":{"type":"string","format":"date-time"}}},"AdminWorkspaceDiagnostic":{"type":"object","additionalProperties":false,"required":["code","severity","message"],"properties":{"code":{"type":"string"},"severity":{"type":"string","enum":["info","warning","error"]},"message":{"type":"string"}}},"AdminWorkspaceMemberships":{"type":"object","additionalProperties":false,"required":["active","invited","suspended","orphaned_active"],"properties":{"active":{"type":"integer","minimum":0},"invited":{"type":"integer","minimum":0},"suspended":{"type":"integer","minimum":0},"orphaned_active":{"type":"integer","minimum":0}}},"AdminWorkspaceTool":{"type":"object","additionalProperties":false,"required":["tool_id","status","version"],"properties":{"tool_id":{"type":"string"},"status":{"type":"string","enum":["enabled","disabled"]},"version":{"type":"integer","minimum":0},"updated_at":{"type":"string","format":"date-time"}}},"AdminWorkspaceDetail":{"allOf":[{"$ref":"#/components/schemas/AdminWorkspaceSummary"},{"type":"object","required":["configuration","memberships","tools","diagnostics"],"properties":{"description":{"type":"string"},"primary_kanban_id":{"type":"string"},"default_case_funnel_id":{"type":"string"},"archive_reason":{"type":"string"},"configuration":{"type":"object","additionalProperties":false,"required":["settings_keys"],"properties":{"settings_keys":{"type":"array","items":{"type":"string"}}}},"memberships":{"$ref":"#/components/schemas/AdminWorkspaceMemberships"},"tools":{"type":"array","items":{"$ref":"#/components/schemas/AdminWorkspaceTool"}},"diagnostics":{"type":"array","items":{"$ref":"#/components/schemas/AdminWorkspaceDiagnostic"}}}}]},"AdminWorkspaceListSuccess":{"type":"object","additionalProperties":false,"required":["success","data","meta"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/AdminWorkspaceSummary"}},"meta":{"$ref":"#/components/schemas/AdminPaginationMeta"}}},"AdminWorkspaceDetailSuccess":{"type":"object","additionalProperties":false,"required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/AdminWorkspaceDetail"}}},"AdminUser":{"type":"object","required":["uid","email","business_ids","role","created_at"],"properties":{"uid":{"type":"string"},"email":{"type":"string","format":"email"},"display_name":{"type":"string"},"status":{"type":"string","enum":["active","suspended"]},"business_id":{"type":"string"},"preferred_business_id":{"type":"string"},"business_ids":{"type":"array","items":{"type":"string"}},"role":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"}}},"AdminUserCreateInput":{"type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"business_id":{"type":"string","pattern":"^[a-f\\d]{24}$"}},"required":["email","business_id"],"additionalProperties":false},"AdminUserBusinessAccessInput":{"type":"object","properties":{"uid":{"type":"string","minLength":1,"maxLength":128},"business_id":{"type":"string","pattern":"^[a-f\\d]{24}$"}},"required":["uid","business_id"],"additionalProperties":false},"AdminUserRoleState":{"type":"object","required":["id","key","name","system"],"properties":{"id":{"type":"string"},"key":{"type":"string"},"name":{"type":"string"},"system":{"type":"boolean"}}},"AdminUserMembershipState":{"type":"object","required":["id","status","deleted","roles"],"properties":{"id":{"type":"string"},"status":{"type":"string","enum":["invited","active","suspended"]},"deleted":{"type":"boolean"},"roles":{"type":"array","items":{"$ref":"#/components/schemas/AdminUserRoleState"}}}},"AdminUserWorkspaceAccess":{"type":"object","required":["id","name","status","membership"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"membership":{"$ref":"#/components/schemas/AdminUserMembershipState"}}},"AdminUserBusinessReference":{"type":"object","required":["id","name","status"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"}}},"AdminUserBusinessAccess":{"type":"object","required":["business","preferred","membership","workspaces"],"properties":{"business":{"$ref":"#/components/schemas/AdminUserBusinessReference"},"preferred":{"type":"boolean"},"membership":{"$ref":"#/components/schemas/AdminUserMembershipState"},"workspaces":{"type":"array","items":{"$ref":"#/components/schemas/AdminUserWorkspaceAccess"}}}},"AdminUserFirebaseState":{"type":"object","required":["exists","disabled","email_verified","business_ids"],"properties":{"exists":{"type":"boolean"},"disabled":{"type":"boolean"},"email_verified":{"type":"boolean"},"business_ids":{"type":"array","items":{"type":"string"}},"preferred_business_id":{"type":"string"}}},"AdminUserAccessDetail":{"type":"object","required":["uid","email","status","business_ids","role","created_at","firebase","consistency_issues","associations"],"properties":{"uid":{"type":"string"},"email":{"type":"string","format":"email"},"display_name":{"type":"string"},"status":{"type":"string","enum":["active","suspended"]},"business_id":{"type":"string"},"preferred_business_id":{"type":"string"},"business_ids":{"type":"array","items":{"type":"string"}},"role":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"},"firebase":{"$ref":"#/components/schemas/AdminUserFirebaseState"},"consistency_issues":{"type":"array","items":{"type":"string","enum":["user_projection_mismatch","firebase_claims_mismatch","preferred_business_invalid"]}},"associations":{"type":"array","items":{"$ref":"#/components/schemas/AdminUserBusinessAccess"}}}},"AdminUserAccessDetailSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/AdminUserAccessDetail"}}},"AdminUserMutationSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/AdminUser"}}},"AdminUserSuccess":{"type":"object","required":["success","data","result"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/AdminUser"},"result":{"type":"string","enum":["created","associated","already_associated"]}}},"AdminUserListSuccess":{"type":"object","required":["success","data","meta"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/AdminUser"}},"meta":{"$ref":"#/components/schemas/AdminPaginationMeta"}}},"PlatformRoleKey":{"type":"string","enum":["platform_admin","operations","finance","support","auditor"]},"PlatformRoleDefinition":{"type":"object","required":["key","label","description","permission_keys"],"properties":{"key":{"$ref":"#/components/schemas/PlatformRoleKey"},"label":{"type":"string"},"description":{"type":"string"},"permission_keys":{"type":"array","items":{"type":"string"}}}},"PlatformAccess":{"type":"object","required":["firebase_uid","role_keys","permission_keys","legacy_super_admin"],"properties":{"firebase_uid":{"type":"string"},"email":{"type":"string","format":"email"},"role_keys":{"type":"array","items":{"$ref":"#/components/schemas/PlatformRoleKey"}},"permission_keys":{"type":"array","items":{"type":"string"}},"legacy_super_admin":{"type":"boolean"}}},"PlatformRoleAssignment":{"type":"object","required":["firebase_uid","email","role_keys","status","created_at","updated_at"],"properties":{"firebase_uid":{"type":"string"},"email":{"type":"string","format":"email"},"role_keys":{"type":"array","items":{"$ref":"#/components/schemas/PlatformRoleKey"}},"status":{"type":"string","enum":["active","suspended"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"PlatformRoleAssignmentInput":{"type":"object","additionalProperties":false,"required":["email","role_keys","reason","confirmation"],"properties":{"email":{"type":"string","format":"email"},"role_keys":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/PlatformRoleKey"}},"status":{"type":"string","enum":["active","suspended"],"default":"active"},"reason":{"type":"string","minLength":10,"maxLength":500},"confirmation":{"type":"string","enum":["CHANGE_PLATFORM_ACCESS"]}}},"PlatformAccessSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/PlatformAccess"}}},"PlatformRoleCatalogSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/PlatformRoleDefinition"}}}},"PlatformRoleAssignmentSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/PlatformRoleAssignment"}}},"PlatformRoleAssignmentListSuccess":{"type":"object","required":["success","data","meta"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/PlatformRoleAssignment"}},"meta":{"$ref":"#/components/schemas/AdminPaginationMeta"}}},"AdminSession":{"type":"object","required":["id","current","status","assurance","authenticated_at","last_seen_at","idle_expires_at","absolute_expires_at"],"properties":{"id":{"type":"string"},"current":{"type":"boolean"},"status":{"type":"string","enum":["active","revoked","idle_expired","absolute_expired"]},"assurance":{"type":"string","enum":["password","mfa"]},"second_factor_type":{"type":"string"},"authenticated_at":{"type":"string","format":"date-time"},"last_seen_at":{"type":"string","format":"date-time"},"idle_expires_at":{"type":"string","format":"date-time"},"absolute_expires_at":{"type":"string","format":"date-time"},"revoked_at":{"type":"string","format":"date-time"},"risk_signals":{"type":"array","items":{"$ref":"#/components/schemas/AdminSessionRiskSignal"}}}},"AdminSessionRiskSignal":{"type":"object","required":["code","severity","detected_at"],"properties":{"code":{"type":"string","enum":["rapid_session_creation","many_active_sessions"]},"severity":{"type":"string","enum":["medium","high"]},"detected_at":{"type":"string","format":"date-time"}}},"AdminAccessAnomaly":{"type":"object","required":["id","firebase_uid","session_id","code","severity","detected_at","session_status"],"properties":{"id":{"type":"string"},"firebase_uid":{"type":"string"},"session_id":{"type":"string"},"code":{"type":"string","enum":["rapid_session_creation","many_active_sessions"]},"severity":{"type":"string","enum":["medium","high"]},"detected_at":{"type":"string","format":"date-time"},"session_status":{"type":"string","enum":["active","revoked","idle_expired","absolute_expired"]}}},"AdminAccessAnomalyListSuccess":{"type":"object","required":["success","data","meta"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/AdminAccessAnomaly"}},"meta":{"$ref":"#/components/schemas/AdminPaginationMeta"}}},"AdminSecurityPolicy":{"type":"object","required":["idle_timeout_seconds","absolute_timeout_seconds","step_up_max_age_seconds","step_up_assurance","mfa","session_identity"],"properties":{"idle_timeout_seconds":{"type":"integer","enum":[1200]},"absolute_timeout_seconds":{"type":"integer","enum":[28800]},"step_up_max_age_seconds":{"type":"integer","enum":[300]},"step_up_assurance":{"type":"string","enum":["password","mfa"]},"mfa":{"type":"object","required":["mode","enforced","capability_verified","capability"],"properties":{"mode":{"type":"string","enum":["disabled","required"]},"enforced":{"type":"boolean"},"capability_verified":{"type":"boolean"},"capability":{"type":"string","enum":["external_configuration_required","verified"]}}},"session_identity":{"type":"object","required":["source","granularity","known_limitation"],"properties":{"source":{"type":"string","enum":["firebase_auth_time"]},"granularity":{"type":"string","enum":["firebase_auth_session"]},"known_limitation":{"type":"string"}}}}},"AdminSecurityBootstrap":{"type":"object","required":["session","sessions","policy"],"properties":{"session":{"$ref":"#/components/schemas/AdminSession"},"sessions":{"type":"array","items":{"$ref":"#/components/schemas/AdminSession"}},"policy":{"$ref":"#/components/schemas/AdminSecurityPolicy"}}},"AdminSecurityBootstrapSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/AdminSecurityBootstrap"}}},"AdminSessionListSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/AdminSession"}}}},"AdminSessionRevokeInput":{"type":"object","additionalProperties":false,"required":["reason","confirmation"],"properties":{"reason":{"type":"string","minLength":10,"maxLength":500},"confirmation":{"type":"string","description":"ID canónico de la sesión a revocar."}}},"AdminSessionRevokeSuccess":{"type":"object","required":["success","data","result"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/AdminSession"},"result":{"type":"string","enum":["revoked","already_revoked"]}}},"AdminSessionRevokeOthersInput":{"type":"object","additionalProperties":false,"required":["reason","confirmation"],"properties":{"reason":{"type":"string","minLength":10,"maxLength":500},"confirmation":{"type":"string","enum":["REVOKE_OTHER_SESSIONS"]}}},"AdminSessionsRevokedSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","required":["revoked_count"],"properties":{"revoked_count":{"type":"integer","minimum":0}}}}},"AdminSessionsRevokeAllInput":{"type":"object","additionalProperties":false,"required":["reason","confirmation"],"properties":{"reason":{"type":"string","minLength":10,"maxLength":500},"confirmation":{"type":"string","minLength":12,"maxLength":160,"pattern":"^REVOKE_ALL:.+$","description":"Confirmación exacta REVOKE_ALL:<firebaseUid> ligada al operador objetivo."}}},"AdminSessionsRevokeAllSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","required":["revoked_count","firebase_tokens_revoked"],"properties":{"revoked_count":{"type":"integer","minimum":0},"firebase_tokens_revoked":{"type":"boolean","enum":[true]}}}}},"AdminAuditLogChange":{"type":"object","required":["path"],"properties":{"path":{"type":"string"},"before":{},"after":{}}},"AdminAuditLog":{"type":"object","required":["id","occurred_at","visibility","scope_kind","actor_kind","actor_id","action","resource_type","resource_id","business_ids","outcome","changed_fields"],"properties":{"id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"occurred_at":{"type":"string","format":"date-time"},"visibility":{"type":"string","enum":["business","workspace","platform"]},"scope_kind":{"type":"string","enum":["platform","business","workspace","multi_business"]},"actor_kind":{"type":"string","enum":["business_user","platform_user","partner","service"]},"actor_id":{"type":"string"},"action":{"type":"string"},"resource_type":{"type":"string"},"resource_id":{"type":"string"},"business_ids":{"type":"array","items":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},"workspace_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"outcome":{"type":"string","enum":["attempted","succeeded","failed","denied","indeterminate"]},"reason":{"type":"string"},"request_id":{"type":"string","format":"uuid"},"client_request_id":{"type":"string","format":"uuid"},"correlation_id":{"type":"string","format":"uuid"},"changed_fields":{"type":"array","items":{"type":"string"}},"changes":{"type":"array","items":{"$ref":"#/components/schemas/AdminAuditLogChange"}},"metadata":{"type":"object","additionalProperties":true}}},"AdminAuditCursorMeta":{"type":"object","required":["limit","has_more","effective_from","effective_to"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"},"effective_from":{"type":"string","format":"date-time"},"effective_to":{"type":"string","format":"date-time"}}},"AdminAuditLogListSuccess":{"type":"object","required":["success","data","meta"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/AdminAuditLog"}},"meta":{"$ref":"#/components/schemas/AdminAuditCursorMeta"}}},"AdminAuditLogSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/AdminAuditLog"}}},"AdminAuditExportFilters":{"type":"object","additionalProperties":false,"properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"},"actor_id":{"type":"string"},"business_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"workspace_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"action":{"type":"string"},"resource_type":{"type":"string"},"resource_id":{"type":"string"},"correlation_id":{"type":"string","format":"uuid"},"client_request_id":{"type":"string","format":"uuid"},"scope_kind":{"type":"string","enum":["platform","business","workspace","multi_business"]},"outcome":{"type":"string","enum":["attempted","succeeded","failed","denied","indeterminate"]}}},"AdminAuditExportInput":{"type":"object","additionalProperties":false,"required":["reason"],"properties":{"filters":{"$ref":"#/components/schemas/AdminAuditExportFilters"},"reason":{"type":"string","minLength":10,"maxLength":500},"format":{"type":"string","enum":["csv"],"default":"csv"}}},"PlatformDashboardAffectedBusiness":{"type":"object","additionalProperties":false,"required":["business_id","value"],"properties":{"business_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"value":{"type":"number"}}},"PlatformDashboardMetric":{"type":"object","additionalProperties":false,"required":["key","label","value","unit","affected_businesses"],"properties":{"key":{"type":"string"},"label":{"type":"string"},"value":{"type":"number"},"unit":{"type":"string","enum":["count","PEN"]},"affected_businesses":{"type":"array","maxItems":10,"items":{"$ref":"#/components/schemas/PlatformDashboardAffectedBusiness"}}}},"PlatformDashboardSection":{"type":"object","additionalProperties":false,"required":["key","title","status","required_permissions","metrics"],"properties":{"key":{"type":"string","enum":["businesses","users","payments","operations"]},"title":{"type":"string"},"status":{"type":"string","enum":["available","forbidden","unavailable"]},"required_permissions":{"type":"array","items":{"type":"string"}},"metrics":{"type":"array","items":{"$ref":"#/components/schemas/PlatformDashboardMetric"}},"source_unavailable":{"type":"string","enum":["source_unavailable"]}}},"PlatformDashboardSnapshot":{"type":"object","additionalProperties":false,"required":["generated_at","timezone","period_days","range","sections"],"properties":{"generated_at":{"type":"string","format":"date-time"},"timezone":{"type":"string","enum":["UTC"]},"period_days":{"type":"integer","enum":[7,30,90]},"range":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"sections":{"type":"array","items":{"$ref":"#/components/schemas/PlatformDashboardSection"}}}},"PlatformDashboardSnapshotSuccess":{"type":"object","additionalProperties":false,"required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/PlatformDashboardSnapshot"}}},"PlatformReportFilters":{"type":"object","additionalProperties":false,"properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"},"business_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"status":{"type":"string","maxLength":50}}},"PlatformReportMetric":{"type":"object","required":["key","label","definition","unit","granularity","value"],"properties":{"key":{"type":"string"},"label":{"type":"string"},"definition":{"type":"string"},"unit":{"type":"string","enum":["count","PEN"]},"granularity":{"type":"string","enum":["period_total","current_snapshot"]},"value":{"type":"number"}}},"PlatformReportSection":{"type":"object","required":["key","title","metrics"],"properties":{"key":{"type":"string","enum":["growth","payments","administration","support"]},"title":{"type":"string"},"metrics":{"type":"array","items":{"$ref":"#/components/schemas/PlatformReportMetric"}}}},"PlatformReportSnapshot":{"type":"object","required":["generated_at","timezone","filters","sections"],"properties":{"generated_at":{"type":"string","format":"date-time"},"timezone":{"type":"string","enum":["UTC"]},"filters":{"$ref":"#/components/schemas/PlatformReportFilters"},"sections":{"type":"array","items":{"$ref":"#/components/schemas/PlatformReportSection"}}}},"PlatformReportSnapshotSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/PlatformReportSnapshot"}}},"PlatformReportExport":{"type":"object","required":["id","format","sections","status","filters","created_at"],"properties":{"id":{"type":"string"},"format":{"type":"string","enum":["csv","xlsx"]},"sections":{"type":"array","items":{"type":"string","enum":["growth","payments","administration","support"]}},"status":{"type":"string","enum":["queued","processing","completed","failed","expired"]},"filters":{"$ref":"#/components/schemas/PlatformReportFilters"},"size_bytes":{"type":"integer"},"expires_at":{"type":"string","format":"date-time"},"created_at":{"type":"string","format":"date-time"},"completed_at":{"type":"string","format":"date-time"},"error_code":{"type":"string","enum":["generation_failed","storage_unavailable"]}}},"PlatformReportExportInput":{"type":"object","additionalProperties":false,"required":["format","sections","filters","reason"],"properties":{"format":{"type":"string","enum":["csv","xlsx"]},"sections":{"type":"array","minItems":1,"maxItems":4,"items":{"type":"string","enum":["growth","payments","administration","support"]}},"filters":{"$ref":"#/components/schemas/PlatformReportFilters"},"reason":{"type":"string","minLength":10,"maxLength":300}}},"PlatformReportExportSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/PlatformReportExport"}}},"PlatformReportExportListSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/PlatformReportExport"}}}},"SupportHealthIncident":{"type":"object","required":["id","component","severity","failure_kind","code","resource_type","resource_id","occurred_at"],"properties":{"id":{"type":"string"},"component":{"type":"string","enum":["business","workspace","module","channel","webhook","queue","integration"]},"severity":{"type":"string","enum":["warning","critical"]},"failure_kind":{"type":"string","enum":["code","configuration","infrastructure"]},"code":{"type":"string"},"resource_type":{"type":"string"},"resource_id":{"type":"string"},"workspace_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"correlation_id":{"type":"string"},"occurred_at":{"type":"string","format":"date-time"},"retry":{"type":"object","required":["action","hook_id"],"properties":{"action":{"type":"string","enum":["retry_webhook"]},"hook_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}}}}},"SupportHealthComponentSummary":{"type":"object","required":["component","status","healthy","warning","critical","checked"],"properties":{"component":{"type":"string","enum":["business","workspace","module","channel","webhook","queue","integration"]},"status":{"type":"string","enum":["healthy","warning","critical"]},"healthy":{"type":"integer","minimum":0},"warning":{"type":"integer","minimum":0},"critical":{"type":"integer","minimum":0},"checked":{"type":"integer","minimum":0}}},"SupportHealthSnapshot":{"type":"object","required":["business","status","generated_at","effective_from","retention_days","source_row_limit","components","incidents","pagination"],"properties":{"business":{"type":"object","required":["id","name","status"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"}}},"workspace":{"type":"object","required":["id","name","status","onboarding_status"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"onboarding_status":{"type":"string"}}},"status":{"type":"string","enum":["healthy","warning","critical"]},"generated_at":{"type":"string","format":"date-time"},"effective_from":{"type":"string","format":"date-time"},"retention_days":{"type":"integer","minimum":1,"maximum":7},"source_row_limit":{"type":"integer","minimum":1,"description":"Máximo de registros recientes inspeccionados por fuente canónica dentro de la ventana retenida."},"components":{"type":"array","items":{"$ref":"#/components/schemas/SupportHealthComponentSummary"}},"incidents":{"type":"array","items":{"$ref":"#/components/schemas/SupportHealthIncident"}},"pagination":{"type":"object","required":["limit","has_more"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"}}}}},"SupportHealthSuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/SupportHealthSnapshot"}}},"SupportWebhookRetryInput":{"type":"object","additionalProperties":false,"required":["hook_id"],"properties":{"hook_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}}},"PlatformSearchResult":{"type":"object","additionalProperties":false,"required":["type","id","title","matched_by"],"properties":{"type":{"type":"string","enum":["business","user","workspace","payment_coupon","settlement","partner"]},"id":{"type":"string"},"title":{"type":"string"},"subtitle":{"type":"string"},"business_id":{"type":"string"},"workspace_id":{"type":"string"},"status":{"type":"string"},"matched_by":{"type":"string"}}},"PlatformSearchGroup":{"type":"object","additionalProperties":false,"required":["type","results","truncated"],"properties":{"type":{"type":"string","enum":["business","user","workspace","payment_coupon","settlement","partner"]},"results":{"type":"array","maxItems":5,"items":{"$ref":"#/components/schemas/PlatformSearchResult"}},"truncated":{"type":"boolean"}}},"PlatformSearchResponse":{"type":"object","additionalProperties":false,"required":["groups","total"],"properties":{"groups":{"type":"array","items":{"$ref":"#/components/schemas/PlatformSearchGroup"}},"total":{"type":"integer","minimum":0}}},"PlatformSearchSuccess":{"type":"object","additionalProperties":false,"required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/PlatformSearchResponse"}}},"SupportWebhookRetrySuccess":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","required":["delivery_id","status","idempotent_replay"],"properties":{"delivery_id":{"type":"string"},"status":{"type":"string"},"idempotent_replay":{"type":"boolean"}}}}}}},"security":[{"FirebaseBearer":[]}],"paths":{"/commercial/capabilities":{"get":{"operationId":"listCommercialCapabilities","tags":["Commercial"],"summary":"Listar catálogo de capabilities","responses":{"200":{"description":"Capabilities soportadas.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommercialCapabilityListSuccess"}}}}}}},"/commercial/plans":{"get":{"operationId":"listCommercialPlans","tags":["Commercial"],"summary":"Listar versiones de planes","responses":{"200":{"description":"Planes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommercialPlanListSuccess"}}}}}},"post":{"operationId":"createCommercialPlan","tags":["Commercial"],"summary":"Crear plan en borrador","parameters":[{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommercialPlanCreateInput"}}}},"responses":{"201":{"description":"Plan creado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommercialPlanSuccess"}}}}}}},"/commercial/plans/{id}":{"get":{"operationId":"getCommercialPlan","tags":["Commercial"],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}}],"responses":{"200":{"description":"Plan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommercialPlanSuccess"}}}}}},"put":{"operationId":"updateCommercialPlanDraft","tags":["Commercial"],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommercialPlanUpdateInput"}}}},"responses":{"200":{"description":"Borrador actualizado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommercialPlanSuccess"}}}}}}},"/commercial/plans/{id}/versions":{"post":{"operationId":"createCommercialPlanVersion","tags":["Commercial"],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"responses":{"201":{"description":"Versión borrador creada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommercialPlanSuccess"}}}}}}},"/commercial/plans/{id}/publish":{"post":{"operationId":"publishCommercialPlan","tags":["Commercial"],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"responses":{"200":{"description":"Versión publicada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommercialPlanSuccess"}}}}}}},"/commercial/plans/{id}/retire":{"post":{"operationId":"retireCommercialPlan","tags":["Commercial"],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"responses":{"200":{"description":"Versión retirada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommercialPlanSuccess"}}}}}}},"/commercial/businesses/{businessId}":{"get":{"operationId":"getBusinessCommercialSnapshot","tags":["Commercial"],"parameters":[{"in":"path","name":"businessId","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}}],"responses":{"200":{"description":"Estado comercial visible según permisos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommercialSnapshotSuccess"}}}}}}},"/commercial/businesses/{businessId}/subscription":{"put":{"operationId":"setBusinessSubscription","tags":["Commercial"],"parameters":[{"in":"path","name":"businessId","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommercialSubscriptionInput"}}}},"responses":{"200":{"description":"Suscripción efectiva.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommercialSnapshotSuccess"}}}}}}},"/commercial/businesses/{businessId}/subscription/schedule":{"post":{"operationId":"scheduleBusinessSubscription","tags":["Commercial"],"parameters":[{"in":"path","name":"businessId","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommercialSubscriptionScheduleInput"}}}},"responses":{"200":{"description":"Cambio programado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommercialSnapshotSuccess"}}}}}}},"/commercial/businesses/{businessId}/entitlements/{capabilityKey}":{"put":{"operationId":"setBusinessEntitlementOverride","tags":["Commercial"],"parameters":[{"in":"path","name":"businessId","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},{"in":"path","name":"capabilityKey","required":true,"schema":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]+$"}},{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommercialEntitlementOverrideInput"}}}},"responses":{"200":{"description":"Override aplicado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommercialSnapshotSuccess"}}}}}},"delete":{"operationId":"revokeBusinessEntitlementOverride","tags":["Commercial"],"parameters":[{"in":"path","name":"businessId","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},{"in":"path","name":"capabilityKey","required":true,"schema":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]+$"}},{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"responses":{"200":{"description":"Override revocado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommercialSnapshotSuccess"}}}}}}},"/platform-search":{"post":{"operationId":"searchPlatformResources","summary":"Buscar recursos globales de plataforma","description":"Solo acepta identificadores, correos completos y valores textuales exactos. Cada grupo se omite si el actor no posee el permiso de lectura específico; los resultados están limitados y los correos se enmascaran.","tags":["Platform Search"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["q"],"properties":{"q":{"type":"string","minLength":3,"maxLength":120},"limit":{"type":"integer","minimum":1,"maximum":5,"default":5}}}}}},"responses":{"200":{"description":"Resultados exactos agrupados por tipo y filtrados por permiso.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformSearchSuccess"}}}},"400":{"description":"Consulta inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"429":{"description":"Límite de búsquedas excedido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/support/health/businesses/{businessId}":{"get":{"summary":"Consultar salud operativa de un Business","description":"Requiere support.health.read. Devuelve únicamente códigos, contadores e identificadores técnicos de los últimos siete días; nunca secretos, payloads, URLs, teléfonos ni mensajes libres. Cada fuente inspecciona como máximo los 100 registros más recientes y los incidentes resultantes se paginan con cursor.","tags":["Support"],"parameters":[{"$ref":"#/components/parameters/BusinessIdPathParam"},{"in":"query","name":"workspace_id","schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},{"in":"query","name":"from","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"component","schema":{"type":"string","enum":["business","workspace","module","channel","webhook","queue","integration"]}},{"in":"query","name":"severity","schema":{"type":"string","enum":["warning","critical"]}},{"in":"query","name":"cursor","schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"Snapshot sanitario paginado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportHealthSuccess"}}}},"400":{"description":"Filtros o cursor inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"403":{"description":"Falta support.health.read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"404":{"description":"Business o Workspace inexistente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/support/health/businesses/{businessId}/webhooks/{deliveryId}/retry":{"post":{"summary":"Reintentar una entrega webhook terminal","description":"Requiere support.actions.manage, step-up reciente, motivo, confirmación RETRY_WEBHOOK_DELIVERY e Idempotency-Key. Solo acepta estados dead o enqueue_failed; repetir la misma clave no vuelve a encolar y cada invocación queda auditada.","tags":["Support"],"parameters":[{"$ref":"#/components/parameters/BusinessIdPathParam"},{"in":"path","name":"deliveryId","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":16,"maxLength":160,"pattern":"^[A-Za-z0-9._:-]+$"}},{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportWebhookRetryInput"}}}},"responses":{"202":{"description":"Reintento aceptado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportWebhookRetrySuccess"}}}},"401":{"description":"Se requiere step-up reciente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"403":{"description":"Falta support.actions.manage.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"404":{"description":"Entrega inexistente en el Business.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"409":{"description":"La entrega no está en estado reintentable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/security/bootstrap":{"get":{"summary":"Inicializar la sesión administrativa local","description":"Verifica el Firebase ID token con revocación, crea o recupera la sesión local derivada de uid + auth_time y devuelve la política fija. Firebase emite auth_time con precisión de segundos: inicios del mismo operador dentro del mismo segundo comparten el límite local y una revocación puede afectar ambos. MFA/TOTP no se anuncia como disponible hasta verificar y configurar Firebase Identity Platform.","tags":["Security"],"responses":{"200":{"description":"Sesión y política efectivas.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSecurityBootstrapSuccess"}}}},"401":{"description":"Token ausente, inválido o revocado; sesión local revocada o expirada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"503":{"description":"Firebase Auth no está disponible temporalmente; incluye Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/security/sessions":{"get":{"summary":"Listar sesiones locales propias","description":"No expone tokens, IP ni user agent sin normalizar.","tags":["Security"],"responses":{"200":{"description":"Sesiones del operador autenticado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSessionListSuccess"}}}}}}},"/security/anomalies":{"get":{"summary":"Listar señales locales de acceso anómalo","description":"Requiere security.events.read. Detecta ráfagas y exceso de sesiones activas usando sólo tiempos y contadores; no persiste IP, user agent ni device ID crudos.","tags":["Security"],"responses":{"200":{"description":"Señales de riesgo locales.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminAccessAnomalyListSuccess"}}}},"403":{"description":"Falta security.events.read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/security/events":{"get":{"summary":"Listar eventos de seguridad del ledger de plataforma","description":"Requiere security.events.read. Devuelve únicamente acciones con prefijo security. desde el ledger auditado, sanitizado y con cursor estable.","tags":["Security"],"parameters":[{"in":"query","name":"cursor","schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Eventos de seguridad sanitizados.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminAuditLogListSuccess"}}}},"403":{"description":"Falta security.events.read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/security/operators/{firebaseUid}/sessions":{"get":{"summary":"Listar sesiones locales de otro operador","description":"Requiere security.sessions.read.","tags":["Security"],"parameters":[{"in":"path","name":"firebaseUid","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Sesiones del operador objetivo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSessionListSuccess"}}}},"403":{"description":"Falta security.sessions.read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/security/operators/{firebaseUid}/sessions/revoke-all":{"post":{"summary":"Revocar todas las sesiones y refresh tokens de un operador","description":"Requiere security.sessions.manage, un operador objetivo canónico distinto al actor, autenticación reciente, motivo seguro y confirmación ligada al UID. Revoca primero las sesiones administrativas locales conocidas y luego llama Firebase revokeRefreshTokens. Si Firebase falla, las sesiones locales permanecen revocadas y la respuesta 503 permite un retry idempotente.","tags":["Security"],"parameters":[{"in":"path","name":"firebaseUid","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSessionsRevokeAllInput"}}}},"responses":{"200":{"description":"Sesiones locales y refresh tokens revocados.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSessionsRevokeAllSuccess"}}}},"401":{"description":"Se requiere reautenticación reciente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"403":{"description":"Falta security.sessions.manage.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"404":{"description":"El UID no pertenece a un operador administrativo conocido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"409":{"description":"Confirmación inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"503":{"description":"Las sesiones locales quedaron revocadas pero Firebase no confirmó la revocación; incluye Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/security/sessions/revoke-others":{"post":{"summary":"Revocar las demás sesiones locales propias","description":"Requiere autenticación password o MFA de los últimos cinco minutos, motivo y confirmación literal. No revoca refresh tokens globales de Firebase.","tags":["Security"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSessionRevokeOthersInput"}}}},"responses":{"200":{"description":"Sesiones locales revocadas.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSessionsRevokedSuccess"}}}},"401":{"description":"Se requiere reautenticación reciente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"409":{"description":"Confirmación inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/security/sessions/{id}/revoke":{"post":{"summary":"Revocar una sesión administrativa local","description":"El propietario puede revocar su sesión. Para una sesión ajena, el propietario se resuelve en el servicio y se exige security.sessions.manage. Requiere step-up reciente, motivo e ID canónico como confirmación. No revoca refresh tokens globales de Firebase.","tags":["Security"],"parameters":[{"$ref":"#/components/parameters/IdPathParam"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSessionRevokeInput"}}}},"responses":{"200":{"description":"Estado final de la sesión.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSessionRevokeSuccess"}}}},"401":{"description":"Se requiere reautenticación reciente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"403":{"description":"Falta security.sessions.manage para una sesión ajena.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"404":{"description":"Sesión inexistente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"409":{"description":"Confirmación inválida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/audit-logs":{"get":{"summary":"Listar auditoria global","description":"Incluye eventos business, workspace y platform. Usa cursor estable por fecha e ID.","tags":["Audit"],"parameters":[{"in":"query","name":"from","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"to","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"actor_id","schema":{"type":"string"}},{"in":"query","name":"business_id","schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},{"in":"query","name":"workspace_id","schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},{"in":"query","name":"action","schema":{"type":"string"}},{"in":"query","name":"resource_type","schema":{"type":"string"}},{"in":"query","name":"resource_id","schema":{"type":"string"}},{"in":"query","name":"correlation_id","schema":{"type":"string","format":"uuid"}},{"in":"query","name":"client_request_id","schema":{"type":"string","format":"uuid"}},{"in":"query","name":"scope_kind","schema":{"type":"string","enum":["platform","business","workspace","multi_business"]}},{"in":"query","name":"outcome","schema":{"type":"string","enum":["attempted","succeeded","failed","denied","indeterminate"]}},{"in":"query","name":"cursor","schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Pagina de auditoria.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminAuditLogListSuccess"}}}},"400":{"description":"Cursor, filtros o rango invalidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"403":{"description":"Requiere platform.audit.read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/audit-logs/{id}":{"get":{"summary":"Obtener detalle de auditoria","tags":["Audit"],"parameters":[{"$ref":"#/components/parameters/IdPathParam"}],"responses":{"200":{"description":"Detalle sanitizado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminAuditLogSuccess"}}}},"403":{"description":"Requiere platform.audit.read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"404":{"description":"Evento inexistente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/audit-logs/exports":{"post":{"summary":"Exportar auditoria acotada a CSV","description":"Maximo siete dias, 5000 filas y 10 MiB. Registra la exportacion con motivo obligatorio.","tags":["Audit"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminAuditExportInput"}}}},"responses":{"200":{"description":"CSV UTF-8 protegido contra formula injection.","content":{"text/csv":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Filtros, motivo o rango invalidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"403":{"description":"Requiere platform.audit.export.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"422":{"description":"La exportacion supera 5000 filas.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/platform-access/me":{"get":{"summary":"Obtener permisos efectivos del operador","tags":["Platform Access"],"responses":{"200":{"description":"Acceso efectivo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformAccessSuccess"}}}}}}},"/platform-access/catalog":{"get":{"summary":"Listar catálogo de roles de plataforma","tags":["Platform Access"],"responses":{"200":{"description":"Catálogo explícito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformRoleCatalogSuccess"}}}}}}},"/platform-access/assignments":{"get":{"summary":"Listar asignaciones de plataforma","tags":["Platform Access"],"responses":{"200":{"description":"Asignaciones activas y suspendidas.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformRoleAssignmentListSuccess"}}}}}},"put":{"summary":"Crear o reemplazar una asignación de plataforma","tags":["Platform Access"],"description":"Mutación sensible: exige sesión/assignment activos al commit, step-up de cinco minutos, motivo y confirmación explícita.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformRoleAssignmentInput"}}}},"responses":{"200":{"description":"Asignación persistida y auditada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformRoleAssignmentSuccess"}}}},"403":{"description":"Autoasignación o delegación no permitida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"404":{"description":"Identidad inexistente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"409":{"description":"Identidad inconsistente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/businesses":{"post":{"summary":"Crear negocio","tags":["Businesses"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBusinessCreateInput"},"example":{"name":"Comercio Demo SAC","payment_prefix":"EMP","address":"Av. Primavera 1234, Lima","destination_account":"19123456789012","destination_bank":"BCP"}}}},"responses":{"201":{"description":"Negocio y Workspace inicial creados correctamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBusinessProvisionSuccess"}}}},"400":{"description":"Solicitud invalida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"409":{"description":"Conflicto de unicidad.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}},"get":{"summary":"Listar negocios","tags":["Businesses"],"parameters":[{"in":"query","name":"page","schema":{"type":"integer","minimum":1,"default":1}},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100,"default":10}}],"responses":{"200":{"description":"Listado de negocios.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBusinessListSuccess"}}}}}}},"/businesses/{id}":{"get":{"summary":"Obtener negocio por ID","tags":["Businesses"],"parameters":[{"$ref":"#/components/parameters/IdPathParam"}],"responses":{"200":{"description":"Negocio obtenido correctamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBusinessSuccess"}}}}}},"put":{"summary":"Actualizar negocio por ID","tags":["Businesses"],"parameters":[{"$ref":"#/components/parameters/IdPathParam"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBusinessUpdateInput"},"example":{"name":"Comercio Demo SAC Actualizado"}}}},"responses":{"200":{"description":"Operacion exitosa.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericSuccess"},"example":{"success":true,"data":{"_id":"665a9f9f0f8a4f0012c3d456","name":"Comercio Demo SAC Actualizado","legal_name":"Comercio Demo SAC","ruc":"20601234567","payment_prefix":"EMP","status":"active","created_at":"2026-06-01T10:00:00.000Z","updated_at":"2026-06-01T10:00:00.000Z","address":"Jr. Las Flores 321, Lima"},"message":"Operacion exitosa"}}}}}}},"/businesses/{id}/payment-prefix":{"patch":{"summary":"Actualizar prefijo de pago del negocio","tags":["Businesses"],"parameters":[{"$ref":"#/components/parameters/IdPathParam"},{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"payment_prefix":"NEW"}}}},"responses":{"200":{"description":"Operacion exitosa.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericSuccess"},"example":{"success":true,"data":{"_id":"665a9f9f0f8a4f0012c3d456","name":"Comercio Demo SAC","legal_name":"Comercio Demo SAC","ruc":"20601234567","payment_prefix":"NEW","status":"active","created_at":"2026-06-01T10:00:00.000Z","updated_at":"2026-06-01T10:00:00.000Z"},"message":"Operacion exitosa"}}}}}}},"/businesses/{id}/lifecycle/{transition}":{"post":{"summary":"Aplicar una transición explícita al ciclo de vida del negocio","tags":["Businesses"],"parameters":[{"$ref":"#/components/parameters/IdPathParam"},{"in":"path","name":"transition","required":true,"schema":{"type":"string","enum":["activate","suspend","reactivate","archive","restore"]}},{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"responses":{"200":{"description":"Transición aplicada y auditada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBusinessLifecycleSuccess"}}}},"409":{"description":"Transición inválida para el estado actual.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/workspaces":{"get":{"operationId":"listAdminWorkspaces","summary":"Listar Workspaces de un negocio para diagnóstico","tags":["Workspaces"],"parameters":[{"in":"query","name":"business_id","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},{"in":"query","name":"status","schema":{"type":"string","enum":["pending_activation","active","inactive","archived"]}},{"in":"query","name":"page","schema":{"type":"integer","minimum":1,"default":1}},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"Resumen sanitizado de Workspaces.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminWorkspaceListSuccess"}}}},"400":{"description":"Parámetros inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"404":{"description":"Business inexistente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/workspaces/{id}":{"get":{"operationId":"getAdminWorkspace","summary":"Obtener diagnóstico sanitizado de un Workspace","tags":["Workspaces"],"parameters":[{"$ref":"#/components/parameters/IdPathParam"},{"in":"query","name":"business_id","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}}],"responses":{"200":{"description":"Diagnóstico del Workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminWorkspaceDetailSuccess"}}}},"400":{"description":"Parámetros inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"404":{"description":"Workspace inexistente o ajeno al Business.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/business-config/{business_id}":{"get":{"summary":"Obtener configuracion por negocio","tags":["Business Config"],"parameters":[{"$ref":"#/components/parameters/BusinessIdUnderscorePathParam"}],"responses":{"200":{"description":"Operacion exitosa.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericSuccess"},"example":{"success":true,"data":{"_id":"665a9f9f0f8a4f0012c3d456","name":"Comercio Demo SAC","legal_name":"Comercio Demo SAC","ruc":"20601234567","payment_prefix":"EMP","status":"active","created_at":"2026-06-01T10:00:00.000Z","updated_at":"2026-06-01T10:00:00.000Z"},"message":"Operacion exitosa"}}}}}},"put":{"summary":"Actualizar configuracion por negocio","tags":["Business Config"],"parameters":[{"$ref":"#/components/parameters/BusinessIdUnderscorePathParam"},{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"settlement_frequency":"daily","fee_percentage":2.5,"webhook_enabled":true}}}},"responses":{"200":{"description":"Operacion exitosa.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericSuccess"},"example":{"success":true,"data":{"business_id":"665a9f9f0f8a4f0012c3d456","settlement_frequency":"daily","fee_percentage":2.5,"webhook_enabled":true,"updated_at":"2026-06-13T10:30:00.000Z"},"message":"Operacion exitosa"}}}}}}},"/settlements":{"get":{"operationId":"listAdminSettlements","summary":"Listar settlements","tags":["Settlements"],"parameters":[{"in":"query","name":"page","schema":{"type":"integer","minimum":1}},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100}},{"in":"query","name":"status","schema":{"$ref":"#/components/schemas/AdminSettlementStatus"}},{"in":"query","name":"bank","schema":{"type":"string","maxLength":80}},{"in":"query","name":"business_id","schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},{"in":"query","name":"start_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"end_date","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"Settlements paginados.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSettlementListSuccess"}}}}}},"post":{"operationId":"createAdminSettlement","summary":"Crear settlement","tags":["Settlements"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSettlementCreateInput"}}}},"responses":{"200":{"description":"Lote procesado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSettlementCreationSuccess"}}}},"201":{"description":"Settlement individual creado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSettlementCreationSuccess"}}}}}}},"/settlements/by-bank":{"get":{"operationId":"getAdminSettlementBankSummary","summary":"Contar settlements por banco","tags":["Settlements"],"responses":{"200":{"description":"Resumen por banco.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSettlementBankSummarySuccess"}}}}}}},"/settlements/payment-coupons/by-business-and-fee":{"get":{"operationId":"listAdminSettlementFees","summary":"Listar cupones por negocio y fee","tags":["Settlements"],"responses":{"200":{"description":"Fees paginados.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSettlementFeeSummaryListSuccess"}}}}}}},"/settlements/payment-coupons/by-business-and-fee/excel":{"get":{"operationId":"downloadAdminSettlementFees","summary":"Descargar cupones por negocio y fee en CSV","tags":["Settlements"],"responses":{"200":{"description":"Archivo CSV.","content":{"text/csv":{"schema":{"type":"string","format":"binary"}}}}}}},"/settlements/payment-coupons/by-bank":{"get":{"operationId":"listAdminCouponBankSummary","summary":"Listar cupones agrupados por banco","tags":["Settlements"],"responses":{"200":{"description":"Cupones agrupados por banco.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminCouponBankSummaryListSuccess"}}}}}}},"/settlements/import/preview":{"post":{"operationId":"previewAdminSettlementImport","summary":"Previsualizar importación de settlements sin escribir","tags":["Settlements"],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file","bankId"],"properties":{"file":{"type":"string","format":"binary"},"bankId":{"type":"string","enum":["1","2","3","4"]}}}}}},"responses":{"200":{"description":"Vista previa validada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSettlementImportResult"}}}}}}},"/settlements/import":{"post":{"operationId":"importAdminSettlements","summary":"Importar settlements","tags":["Settlements"],"parameters":[{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file","bankId"],"properties":{"file":{"type":"string","format":"binary"},"bankId":{"type":"string"}}}}}},"responses":{"200":{"description":"Importación procesada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSettlementImportResult"}}}}}}},"/settlements/{id}":{"get":{"operationId":"getAdminSettlement","summary":"Obtener detalle de settlement","tags":["Settlements"],"parameters":[{"$ref":"#/components/parameters/IdPathParam"}],"responses":{"200":{"description":"Detalle del settlement o lote.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSettlementDetailSuccess"}}}}}}},"/settlements/{id}/status":{"put":{"operationId":"updateAdminSettlementStatus","summary":"Actualizar estado del settlement","tags":["Settlements"],"parameters":[{"$ref":"#/components/parameters/IdPathParam"},{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSettlementStatusInput"}}}},"responses":{"200":{"description":"Estado actualizado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSettlementStatusSuccess"}}}}}}},"/settlements/{id}/excel":{"get":{"operationId":"downloadAdminSettlement","summary":"Descargar settlement en CSV","tags":["Settlements"],"parameters":[{"$ref":"#/components/parameters/IdPathParam"}],"responses":{"200":{"description":"Archivo CSV.","content":{"text/csv":{"schema":{"type":"string","format":"binary"}}}}}}},"/payment-coupons":{"get":{"operationId":"listAdminPaymentCoupons","summary":"Listar cupones","tags":["PaymentCoupons"],"parameters":[{"in":"query","name":"page","schema":{"type":"integer","minimum":1}},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100}},{"in":"query","name":"business_id","schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},{"in":"query","name":"status","schema":{"type":"string","enum":["active","paid","voided"]}},{"in":"query","name":"payment_coupon_code","schema":{"type":"string","maxLength":80}},{"in":"query","name":"start_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"end_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"date_field","schema":{"type":"string","enum":["created_at","paid_at","payment_date","settlement_date"]}}],"responses":{"200":{"description":"Cupones paginados.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPaymentCouponListSuccess"}}}}}}},"/payment-coupons/paid/{businessId}":{"get":{"operationId":"listAdminPaidPaymentCoupons","summary":"Listar cupones pagados por negocio","tags":["PaymentCoupons"],"parameters":[{"$ref":"#/components/parameters/BusinessIdPathParam"}],"responses":{"200":{"description":"Cupones pagados paginados.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPaymentCouponListSuccess"}}}}}}},"/dashboard":{"get":{"operationId":"getPlatformDashboard","tags":["Dashboard"],"summary":"Consultar el estado operativo global de la plataforma","description":"Devuelve un snapshot UTC agregado. Cada sección declara si está disponible, no autorizada o temporalmente no disponible; nunca expone PII ni detalles internos de las fuentes.","parameters":[{"in":"query","name":"days","schema":{"type":"integer","enum":[7,30,90],"default":30}}],"responses":{"200":{"description":"Snapshot operativo con autorización por sección.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformDashboardSnapshotSuccess"}}}},"400":{"description":"Periodo no soportado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"403":{"description":"Falta businesses.read para acceder al dashboard.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/platform-reports/summary":{"get":{"operationId":"getPlatformReportSummary","tags":["Platform Reports"],"summary":"Consultar métricas agregadas autorizadas","description":"Periodo máximo de 366 días. La respuesta omite secciones para las que el actor no conserva todos los permisos requeridos.","parameters":[{"in":"query","name":"from","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"to","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"business_id","schema":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},{"in":"query","name":"status","schema":{"type":"string","maxLength":50}}],"responses":{"200":{"description":"Métricas disponibles.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformReportSnapshotSuccess"}}}}}}},"/platform-reports/exports":{"get":{"operationId":"listPlatformReportExports","tags":["Platform Reports"],"summary":"Listar exportaciones propias","responses":{"200":{"description":"Jobs del actor actual.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformReportExportListSuccess"}}}}}},"post":{"operationId":"createPlatformReportExport","tags":["Platform Reports"],"summary":"Solicitar exportación asíncrona","description":"El job se procesa mediante Cloud Tasks, expira 24 horas después de completarse y revalida permisos al descargar.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformReportExportInput"}}}},"responses":{"202":{"description":"Job aceptado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformReportExportSuccess"}}}}}}},"/platform-reports/exports/{id}/download":{"get":{"operationId":"downloadPlatformReportExport","tags":["Platform Reports"],"summary":"Descargar exportación privada","parameters":[{"$ref":"#/components/parameters/IdPathParam"}],"responses":{"200":{"description":"CSV o XLSX privado.","content":{"text/csv":{"schema":{"type":"string","format":"binary"}},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"schema":{"type":"string","format":"binary"}}}}}}},"/users":{"post":{"summary":"Crear o asociar business admin","tags":["Users"],"parameters":[{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserCreateInput"},"example":{"email":"supervisor@empresa.com","business_id":"665a9f9f0f8a4f0012c3d456"}}}},"responses":{"200":{"description":"Identidad existente asociada o reconciliada de forma idempotente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserSuccess"}}}},"201":{"description":"Nueva identidad administradora creada y asociada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserSuccess"}}}},"404":{"description":"El Business no existe.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"409":{"description":"La identidad está inconsistente entre Auth y persistencia.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}},"get":{"summary":"Listar usuarios de un negocio","tags":["Users"],"parameters":[{"in":"query","name":"query","schema":{"type":"string","minLength":1,"maxLength":320}},{"in":"query","name":"business_id","schema":{"type":"string"}},{"in":"query","name":"page","schema":{"type":"integer","minimum":1,"default":1}},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}}],"responses":{"200":{"description":"Usuarios del negocio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserListSuccess"}}}}}}},"/users/{uid}":{"get":{"summary":"Obtener usuario por UID","tags":["Users"],"parameters":[{"$ref":"#/components/parameters/UidPathParam"}],"responses":{"200":{"description":"Estado canónico y proyecciones del usuario.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserAccessDetailSuccess"}}}},"404":{"description":"Usuario no encontrado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"503":{"description":"Firebase no disponible.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/users/businesses/add":{"post":{"summary":"Asignar negocio a usuario","tags":["Users"],"parameters":[{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserBusinessAccessInput"},"example":{"uid":"uid_supervisor_001","business_id":"665a9f9f0f8a4f0012c3d456"}}}},"responses":{"200":{"description":"Operacion exitosa.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericSuccess"},"example":{"success":true,"data":{"_id":"665a9f9f0f8a4f0012c3d456","name":"Comercio Demo SAC","legal_name":"Comercio Demo SAC","ruc":"20601234567","payment_prefix":"EMP","status":"active","created_at":"2026-06-01T10:00:00.000Z","updated_at":"2026-06-01T10:00:00.000Z"},"message":"Operacion exitosa"}}}}}}},"/users/businesses/remove":{"post":{"summary":"Remover negocio de usuario","tags":["Users"],"parameters":[{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserBusinessAccessInput"},"example":{"uid":"uid_supervisor_001","business_id":"665a9f9f0f8a4f0012c3d456"}}}},"responses":{"200":{"description":"Operacion exitosa.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericSuccess"},"example":{"success":true,"data":{"_id":"665a9f9f0f8a4f0012c3d456","name":"Comercio Demo SAC","legal_name":"Comercio Demo SAC","ruc":"20601234567","payment_prefix":"EMP","status":"active","created_at":"2026-06-01T10:00:00.000Z","updated_at":"2026-06-01T10:00:00.000Z"},"message":"Operacion exitosa"}}}}}}},"/users/businesses/suspend":{"post":{"summary":"Suspender acceso del usuario a un negocio","tags":["Users"],"parameters":[{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserBusinessAccessInput"}}}},"responses":{"200":{"description":"Acceso suspendido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserMutationSuccess"}}}}}}},"/users/businesses/reactivate":{"post":{"summary":"Reactivar acceso suspendido del usuario","tags":["Users"],"parameters":[{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserBusinessAccessInput"}}}},"responses":{"200":{"description":"Acceso reactivado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserMutationSuccess"}}}}}}},"/users/{uid}/reconcile":{"post":{"summary":"Reconciliar proyecciones de acceso desde memberships canónicas","tags":["Users"],"parameters":[{"$ref":"#/components/parameters/UidPathParam"},{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"responses":{"200":{"description":"Proyecciones reconciliadas.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserMutationSuccess"}}}}}}},"/partners":{"post":{"operationId":"createAdminPartner","summary":"Crear partner","tags":["Partners"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPartnerCreateInput"},"example":{"name":"Partner X","code":"PARTNER_X","business_ids":[],"scopes":["businesses:read","payment_coupons:read"]}}}},"responses":{"201":{"description":"Partner creado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPartnerSuccess"}}}},"400":{"description":"Payload o Business inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"409":{"description":"Business ya asignado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}},"get":{"operationId":"listAdminPartners","summary":"Listar partners","tags":["Partners"],"parameters":[{"in":"query","name":"page","schema":{"type":"integer","minimum":1,"default":1}},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"in":"query","name":"status","schema":{"$ref":"#/components/schemas/AdminPartnerStatus"}},{"in":"query","name":"search","schema":{"type":"string","minLength":2,"maxLength":80}}],"responses":{"200":{"description":"Partners paginados.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPartnerListSuccess"}}}}}}},"/partners/{id}":{"get":{"operationId":"getAdminPartner","summary":"Obtener partner por ID","tags":["Partners"],"parameters":[{"$ref":"#/components/parameters/IdPathParam"}],"responses":{"200":{"description":"Partner y Businesses autorizados.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPartnerSuccess"}}}},"404":{"description":"Partner inexistente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}},"put":{"operationId":"updateAdminPartner","summary":"Actualizar partner por ID","tags":["Partners"],"parameters":[{"$ref":"#/components/parameters/IdPathParam"},{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPartnerUpdateInput"},"example":{"name":"Partner X Updated","status":"suspended"}}}},"responses":{"200":{"description":"Partner actualizado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPartnerSuccess"}}}},"400":{"description":"Payload inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"404":{"description":"Partner inexistente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"409":{"description":"Business o scopes en conflicto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/partners/{id}/keys":{"post":{"operationId":"createAdminPartnerKey","summary":"Crear API key de partner","description":"Devuelve el secreto una sola vez y exige Cache-Control private, no-store.","tags":["Partners"],"parameters":[{"$ref":"#/components/parameters/IdPathParam"},{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPartnerKeyCreateInput"}}}},"responses":{"201":{"description":"Credencial creada; el secreto no podrá recuperarse.","headers":{"Cache-Control":{"schema":{"type":"string","enum":["private, no-store"]}},"Pragma":{"schema":{"type":"string","enum":["no-cache"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPartnerCredentialSuccess"}}}},"409":{"description":"Scopes no concedidos al Partner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}},"get":{"operationId":"listAdminPartnerKeys","summary":"Listar API keys de partner","description":"Nunca devuelve key ni key_hash.","tags":["Partners"],"parameters":[{"$ref":"#/components/parameters/IdPathParam"}],"responses":{"200":{"description":"Credenciales sanitizadas.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPartnerKeyListSuccess"}}}}}}},"/partners/{id}/keys/{keyId}/rotate":{"post":{"operationId":"rotateAdminPartnerKey","summary":"Rotar API key de partner","description":"Crea una credencial de reemplazo y revoca la anterior atómicamente. El nuevo secreto se muestra una sola vez.","tags":["Partners"],"parameters":[{"$ref":"#/components/parameters/IdPathParam"},{"$ref":"#/components/parameters/KeyIdPathParam"},{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPartnerKeyRotateInput"}}}},"responses":{"201":{"description":"Credencial rotada; el secreto no podrá recuperarse.","headers":{"Cache-Control":{"schema":{"type":"string","enum":["private, no-store"]}},"Pragma":{"schema":{"type":"string","enum":["no-cache"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPartnerCredentialSuccess"}}}},"404":{"description":"Credencial activa inexistente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}},"409":{"description":"Scopes no concedidos al Partner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}},"/partners/{id}/keys/{keyId}":{"delete":{"operationId":"revokeAdminPartnerKey","summary":"Revocar API key de partner","tags":["Partners"],"parameters":[{"$ref":"#/components/parameters/IdPathParam"},{"$ref":"#/components/parameters/KeyIdPathParam"},{"$ref":"#/components/parameters/AdminReasonHeader"},{"$ref":"#/components/parameters/AdminConfirmationHeader"}],"responses":{"200":{"description":"Credencial revocada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericSuccess"}}}},"404":{"description":"Credencial inexistente o ya revocada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericError"}}}}}}}}}