Security Whitepaper
Version 1.0 | December 2025
This document provides a comprehensive overview of Ledly’s security architecture, practices, and compliance considerations for higher education institutions evaluating our lead management platform.
Executive Summary
Ledly is a lead management platform purpose-built for higher education institutions. We understand that colleges and universities handle sensitive prospective student information that requires the highest levels of protection. This whitepaper details our comprehensive approach to security, covering infrastructure, data protection, access controls, and compliance considerations.
Key Security Highlights
| Area | Implementation |
|---|---|
| Infrastructure | Hosted on Railway with automated scaling and redundancy |
| Encryption | TLS 1.3 in transit, AES-256 at rest |
| Authentication | JWT-based with OAuth 2.0 for integrations |
| Access Control | Role-based access control (RBAC) with organization isolation |
| Compliance | FERPA-aware practices, GDPR considerations |
| API Security | Rate limiting, input validation, HMAC-SHA256 webhook signatures |
For questions about this whitepaper or to request additional security documentation, contact [email protected].
Security Architecture
Infrastructure Overview
Ledly operates on a modern, cloud-native infrastructure designed for reliability, scalability, and security.
Hosting Platform
Ledly is hosted on Railway, a Platform-as-a-Service (PaaS) provider that offers:
- Automated deployments with zero-downtime updates
- Horizontal scaling to handle traffic spikes during enrollment periods
- Geographic redundancy for high availability
- Managed infrastructure with security patches applied automatically
- Private networking between application services
- DDoS protection at the infrastructure level
Database Infrastructure
| Component | Technology | Security Features |
|---|---|---|
| Primary Database | PostgreSQL | Encrypted connections, automated backups |
| Backup Retention | 30 days | Point-in-time recovery capability |
| Connection Security | TLS required | No unencrypted database connections |
| Access Control | Role-based | Principle of least privilege |
Database access is restricted to application services only. Direct database access is not available to customers or Ledly staff without explicit authorization and audit logging.
Network Security
Transport Layer Security
All data transmitted to and from Ledly is encrypted using industry-standard protocols:
- TLS 1.3 for all HTTPS connections (TLS 1.2 supported for legacy clients)
- HSTS (HTTP Strict Transport Security) enforced with 1-year max-age
- Forward secrecy using ephemeral key exchanges
- Strong cipher suites with weak ciphers disabled
Supported Cipher Suites:
- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
- TLS_AES_128_GCM_SHA256API Security Layers
Request Flow:
Client → TLS Termination → WAF → Rate Limiter → Authentication → Authorization → Application| Layer | Protection |
|---|---|
| TLS Termination | Encryption, certificate validation |
| WAF | SQL injection, XSS, common attack patterns |
| Rate Limiter | Brute force protection, abuse prevention |
| Authentication | Identity verification |
| Authorization | Permission enforcement |
Data Encryption
Encryption at Rest
All data stored by Ledly is encrypted at rest:
| Data Type | Encryption Method | Key Management |
|---|---|---|
| Database | AES-256 | Managed by infrastructure provider |
| File uploads | AES-256 | Unique keys per organization |
| Backups | AES-256 | Separate backup encryption keys |
| Logs | AES-256 | Rotated encryption keys |
Encryption in Transit
| Connection | Protocol | Minimum Version |
|---|---|---|
| Browser to Ledly | HTTPS/TLS | TLS 1.2 |
| API connections | HTTPS/TLS | TLS 1.2 |
| CRM integrations | HTTPS/TLS | TLS 1.2 |
| Webhook deliveries | HTTPS | TLS 1.2 |
| Internal services | mTLS | TLS 1.3 |
Ledly does not support unencrypted HTTP connections. All HTTP requests are automatically redirected to HTTPS.
Authentication and Authorization
JWT-Based Authentication
Ledly uses JSON Web Tokens (JWT) for user authentication, providing secure, stateless session management.
Token Architecture
JWT Structure:
{
"header": {
"alg": "HS256",
"typ": "JWT"
},
"payload": {
"sub": "user_id",
"org": "organization_id",
"role": "user_role",
"iat": 1703577600,
"exp": 1703664000
},
"signature": "HMAC-SHA256(header.payload, secret)"
}Token Security Measures
| Measure | Implementation |
|---|---|
| Expiration | Tokens expire after 24 hours |
| Refresh | Secure token refresh mechanism |
| Revocation | Immediate invalidation on logout |
| Signing | HMAC-SHA256 with rotating secrets |
| Storage | httpOnly cookies recommended |
Role-Based Access Control (RBAC)
Ledly implements granular role-based access control to ensure users only access data and functions appropriate to their responsibilities.
Available Roles
| Role | Description | Capabilities |
|---|---|---|
| Owner | Organization owner | Full access, billing, user management |
| Admin | Administrator | Configuration, all lead operations, integrations |
| User | Standard user | View and manage leads, limited settings |
| Viewer | Read-only access | View leads and analytics only |
| Vendor | External lead vendor | Submit leads via API, view own submissions |
Permission Matrix
| Action | Owner | Admin | User | Viewer | Vendor |
|---|---|---|---|---|---|
| View leads | Yes | Yes | Yes | Yes | Own only |
| Create leads | Yes | Yes | Yes | No | Yes |
| Edit leads | Yes | Yes | Yes | No | No |
| Delete leads | Yes | Yes | No | No | No |
| Configure integrations | Yes | Yes | No | No | No |
| Manage users | Yes | Limited | No | No | No |
| Access billing | Yes | No | No | No | No |
| View analytics | Yes | Yes | Yes | Yes | Own only |
| Configure webhooks | Yes | Yes | No | No | No |
OAuth 2.0 for CRM Integrations
Ledly uses OAuth 2.0 to securely connect with CRM systems like HubSpot and Microsoft Dynamics.
Integration Security Model
Authorization Request
User initiates CRM connection from Ledly dashboard
Secure Redirect
User is redirected to CRM provider’s authorization page
User Consent
User grants Ledly specific permissions on their CRM
Token Exchange
Authorization code exchanged for access and refresh tokens
Secure Storage
Tokens encrypted and stored with organization isolation
Automatic Refresh
Refresh tokens used to maintain connection without user intervention
CRM Integration Security
| Integration | OAuth Version | Token Storage | Scope Requested |
|---|---|---|---|
| HubSpot | OAuth 2.0 | Encrypted, per-org | contacts, forms |
| Microsoft Dynamics | OAuth 2.0 | Encrypted, per-org | leads, contacts |
| Salesforce | OAuth 2.0 | Encrypted, per-org | api, refresh_token |
Ledly requests only the minimum permissions necessary for lead synchronization. We do not request or store CRM credentials directly.
Data Protection
Personally Identifiable Information (PII) Handling
Ledly processes prospective student information that may include PII. We implement strict controls around this data:
PII Data Categories
| Category | Examples | Sensitivity Level |
|---|---|---|
| Contact Information | Name, email, phone | Standard |
| Demographic Data | Address, city, state, ZIP | Standard |
| Educational Interest | Program of interest, start date | Low |
| Marketing Attribution | UTM parameters, source | Low |
| Custom Fields | Varies by institution | Institution-defined |
PII Protection Measures
| Measure | Implementation |
|---|---|
| Access Logging | All PII access is logged with user ID and timestamp |
| Encryption | PII encrypted at rest and in transit |
| Minimization | Only required fields are collected |
| Retention Limits | Configurable data retention policies |
| Export Controls | Bulk exports require elevated permissions |
| Anonymization | Analytics use anonymized/aggregated data |
Data Retention Policies
Ledly provides configurable data retention to meet institutional policies and regulatory requirements.
Default Retention Periods
| Data Type | Default Retention | Configurable |
|---|---|---|
| Lead data | 3 years | Yes (1-7 years) |
| Analytics | 2 years | Yes (1-5 years) |
| Audit logs | 1 year | No (minimum) |
| Webhook logs | 30 days | No |
| API request logs | 90 days | No |
Data Deletion
When leads are deleted, they are soft-deleted for 30 days (recoverable), then permanently removed from all systems including backups within 90 days.
Multi-Tenant Data Isolation
Ledly is a multi-tenant platform serving multiple higher education institutions. We implement strict data isolation:
Isolation Architecture
Organization A Organization B
| |
v v
[API Gateway with Org Validation]
| |
v v
[Org A Data Partition] [Org B Data Partition]
| |
v v
[Org A Encryption Key] [Org B Encryption Key]Isolation Guarantees
| Layer | Isolation Method |
|---|---|
| Application | Organization ID validated on every request |
| Database | Row-level security with organization filtering |
| Encryption | Per-organization encryption keys |
| Backups | Logical isolation with encrypted storage |
| Logging | Organization-scoped log access |
Cross-organization data access is architecturally impossible. There is no administrative override that allows viewing another organization’s data.
API Security
Rate Limiting
Ledly implements rate limiting to prevent abuse and ensure fair resource allocation.
Rate Limit Tiers
| Endpoint Category | Limit | Window | Burst Allowed |
|---|---|---|---|
| Authentication | 10 requests | Per minute | No |
| Lead Ingestion | 100 requests | Per minute | Yes (150) |
| Lead Queries | 200 requests | Per minute | Yes (300) |
| Bulk Operations | 10 requests | Per minute | No |
| Analytics | 60 requests | Per minute | Yes (90) |
Rate Limit Headers
HTTP/1.1 200 OK
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1703577660When rate limited:
HTTP/1.1 429 Too Many Requests
Retry-After: 60
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests. Please retry after 60 seconds.",
"retry_after": 60
}
}Input Validation
All API inputs are validated before processing to prevent injection attacks and data corruption.
Validation Layers
| Layer | Validation Type | Purpose |
|---|---|---|
| Schema Validation | JSON Schema | Structure enforcement |
| Type Validation | TypeScript/Zod | Type safety |
| Business Rules | Custom validators | Domain logic |
| Sanitization | Input cleaning | XSS prevention |
Validated Fields
| Field | Validation Rules |
|---|---|
| RFC 5322 format, domain verification | |
| Phone | E.164 format normalization |
| URLs | Valid URL format, HTTPS for webhooks |
| Names | Alphanumeric, reasonable length limits |
| Custom fields | Type-specific validation |
CORS Policies
Cross-Origin Resource Sharing (CORS) is configured to allow only authorized origins.
CORS Configuration:
{
"origin": ["https://app.ledly.io", "https://*.ledly.io"],
"methods": ["GET", "POST", "PUT", "DELETE", "PATCH"],
"allowedHeaders": ["Authorization", "Content-Type", "Authorization"],
"credentials": true,
"maxAge": 86400
}API requests from unauthorized origins are rejected. For embedded forms, use server-side integration or contact support for custom CORS configuration.
Webhook Signature Verification
All outgoing webhooks are signed using HMAC-SHA256 to ensure authenticity and integrity.
Signature Generation
Signature = HMAC-SHA256(timestamp + "." + payload, webhook_secret)Verification Headers
| Header | Purpose |
|---|---|
X-Ledly-Signature | HMAC-SHA256 signature |
X-Ledly-Timestamp | Unix timestamp of request |
X-Ledly-Webhook-Id | Webhook configuration ID |
X-Ledly-Delivery-Id | Unique delivery attempt ID |
Replay Attack Prevention
- Timestamp must be within 5 minutes of current time
- Each delivery ID is unique and can be used for idempotency
- Signature includes timestamp to prevent reuse
Compliance Considerations
FERPA Awareness
The Family Educational Rights and Privacy Act (FERPA) governs the handling of student education records. While Ledly processes prospective student inquiries (typically before enrollment), we design our platform with FERPA principles in mind.
FERPA-Aligned Practices
| Principle | Ledly Implementation |
|---|---|
| Access Control | Role-based access limits who can view lead data |
| Audit Logging | All data access is logged and auditable |
| Data Minimization | Collect only necessary information |
| Consent Awareness | Support for consent tracking fields |
| Vendor Oversight | Subprocessor agreements available |
Ledly can execute a Data Processing Addendum (DPA) that addresses FERPA requirements upon request.
Education Records Considerations
| Data Type | FERPA Status | Ledly Handling |
|---|---|---|
| Pre-enrollment inquiries | Generally not covered | Standard protection |
| Applicant data | May be covered | Enhanced controls available |
| Enrolled student data | Covered | Not typically processed by Ledly |
GDPR Considerations
For institutions with prospective students from the European Union, Ledly supports GDPR compliance requirements.
Lawful Basis Support
| Basis | Ledly Support |
|---|---|
| Consent | Consent tracking fields, withdrawal support |
| Legitimate Interest | Documentation templates available |
| Contract | Applicant processing support |
Data Subject Rights
Ledly provides tools to support data subject rights:
| Right | Implementation |
|---|---|
| Right to Access | Export all data for an individual via API or dashboard |
| Right to Rectification | Edit lead data at any time |
| Right to Erasure | Delete leads with full removal from backups |
| Right to Portability | Export data in machine-readable JSON format |
Data Transfer Mechanisms
| Mechanism | Status |
|---|---|
| Standard Contractual Clauses (SCCs) | Available on request |
| Data Processing Addendum | Available on request |
| Subprocessor List | Published and maintained |
Additional Frameworks
| Framework | Status |
|---|---|
| SOC 2 Type II | Planned |
| ISO 27001 | Under consideration |
| CCPA | Compliant practices |
| State Privacy Laws | Monitored and addressed |
Incident Response
Monitoring and Logging
Ledly maintains comprehensive monitoring and logging to detect and respond to security incidents.
Monitoring Coverage
| System | Monitoring Type | Alert Threshold |
|---|---|---|
| Application | Error rates, latency | 1% error rate |
| Database | Query performance, connections | 80% capacity |
| API | Request rates, authentication failures | 5 failures/minute |
| Infrastructure | CPU, memory, disk | 85% utilization |
Log Retention
| Log Type | Retention | Purpose |
|---|---|---|
| Security events | 1 year | Incident investigation |
| Access logs | 90 days | Audit trail |
| Application logs | 30 days | Debugging |
| Performance metrics | 90 days | Capacity planning |
Breach Notification Procedures
Ledly maintains a documented incident response plan with defined notification procedures.
Incident Classification
| Severity | Definition | Response Time |
|---|---|---|
| Critical | Active data breach, system compromise | Immediate |
| High | Potential data exposure, vulnerability exploited | 4 hours |
| Medium | Suspicious activity, minor vulnerability | 24 hours |
| Low | Policy violation, minor security issue | 72 hours |
Notification Timeline
Detection
Incident identified through monitoring or report
Assessment (Within 4 hours)
Security team assesses scope and impact
Containment (Immediate)
Threat contained, evidence preserved
Notification (Within 72 hours)
Affected organizations notified per DPA terms and legal requirements
Remediation
Root cause addressed, systems hardened
Post-Incident Review
Lessons learned documented, procedures updated
In the event of a confirmed data breach affecting your organization, you will be notified via email to your designated security contact within 72 hours of confirmation.
Vendor Security
Third-Party Integrations
Ledly integrates with various third-party services to provide CRM synchronization and webhook delivery.
Integration Security Requirements
| Integration | Authentication | Data Transmitted |
|---|---|---|
| HubSpot | OAuth 2.0 | Lead data for sync |
| Microsoft Dynamics | OAuth 2.0 | Lead data for sync |
| Salesforce | OAuth 2.0 | Lead data for sync |
| Custom Webhooks | HMAC-SHA256 signatures | Lead events |
Integration Data Flow
Ledly → Encrypted Connection (TLS 1.2+) → CRM/Webhook Endpoint
↓
OAuth Token or
HMAC Signature
↓
Lead Data (PII)Subprocessor Management
Ledly maintains a list of subprocessors that may handle customer data.
Current Subprocessors
| Subprocessor | Purpose | Data Processed | Location |
|---|---|---|---|
| Railway | Infrastructure hosting | All application data | USA |
| PostgreSQL (Managed) | Database | All stored data | USA |
| Postmark | Transactional email | Email addresses | USA |
| Sentry | Error monitoring | Error context (no PII) | USA |
Subprocessor Changes
- 30-day advance notice for new subprocessors
- Customer objection process available
- Updated list published at docs.ledly.io/security/subprocessors
Enterprise customers can request custom subprocessor notification preferences.
Security Practices
Secure Development Lifecycle
Ledly follows secure development practices throughout the software development lifecycle.
Development Security
| Phase | Security Practice |
|---|---|
| Design | Threat modeling, security requirements |
| Development | Secure coding standards, linting |
| Code Review | Mandatory peer review, security checklist |
| Testing | SAST, DAST, dependency scanning |
| Deployment | Automated pipelines, no manual deployments |
| Operations | Monitoring, incident response |
Dependency Management
Third-party dependencies are monitored for vulnerabilities:
| Tool | Purpose | Frequency |
|---|---|---|
| Dependabot | Automated dependency updates | Daily |
| npm audit | Node.js vulnerability scanning | Every build |
| Snyk | Deep dependency analysis | Weekly |
Vulnerability Response
| Severity | Response Time | Action |
|---|---|---|
| Critical | 24 hours | Immediate patch or mitigation |
| High | 7 days | Prioritized fix |
| Medium | 30 days | Scheduled update |
| Low | Next release | Bundled with updates |
Code Review Practices
All code changes require review before deployment:
Pull Request
Developer creates PR with changes
Automated Checks
Linting, tests, security scans run automatically
Peer Review
At least one team member reviews code
Security Review
Security-sensitive changes flagged for security team
Approval
PR approved and merged to main branch
Deployment
Automated deployment with rollback capability
Security Contact
For security-related inquiries, vulnerability reports, or to request additional documentation:
| Purpose | Contact |
|---|---|
| Security questions | [email protected] |
| Vulnerability reports | [email protected] |
| DPA requests | [email protected] |
| General support | [email protected] |
Vulnerability Disclosure
If you discover a security vulnerability in Ledly:
- Email [email protected] with details
- Include steps to reproduce if possible
- Allow reasonable time for remediation before public disclosure
- We commit to acknowledging reports within 48 hours
Ledly does not currently operate a formal bug bounty program, but we appreciate responsible disclosure and will acknowledge researchers who report valid vulnerabilities.
Document History
| Version | Date | Changes |
|---|---|---|
| 1.0 | December 2025 | Initial publication |
Request Additional Information
For enterprise customers, additional documentation is available upon request:
- Penetration test reports (under NDA)
- SOC 2 readiness assessment
- Custom security questionnaire completion
- Technical architecture diagrams
- Data flow documentation
Contact [email protected] to request access.