Skip to content

Organization & Domain Verification Policy

Document ID: PLCY-ORG-001
Version: 1.0
Effective Date: December 22, 2025
Last Review: December 22, 2025
Owner: Hop And Haul Team


CONFIDENTIAL

This document is CONFIDENTIAL and for internal use only. Do not distribute outside the organization.

1. Purpose

This document establishes the policies and procedures for organization onboarding, domain verification, and multi-tenant user registration within the Hop And Haul platform.


2. Scope

This policy applies to:

  • Organization account creation and management
  • Email domain verification for user self-registration
  • Multi-domain configurations
  • User provisioning and access control
  • Tenant data isolation

3. Multi-Tenant Architecture

3.1 Tenant Model

ConceptDescription
OrganizationTop-level tenant entity (company, fleet operator)
DomainVerified email domain linked to organization
UserIndividual account, belongs to one organization
RolePermission set assigned to user within organization

3.2 Data Isolation

Isolation LevelImplementation
DatabaseAll tables include org_id foreign key
QueriesApplication enforces org_id filter on all queries
APIJWT contains org_id claim, validated on every request
AuditAll audit logs tagged with org_id

3.3 Database Schema

sql
-- Organizations table
CREATE TABLE organizations (
    id UUID PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    status VARCHAR(50) NOT NULL DEFAULT 'active',
    created_at TIMESTAMP NOT NULL DEFAULT NOW(),
    settings JSONB
);

-- Verified domains table
CREATE TABLE organization_domains (
    id UUID PRIMARY KEY,
    org_id UUID NOT NULL REFERENCES organizations(id),
    domain VARCHAR(255) NOT NULL UNIQUE,
    verification_status VARCHAR(50) NOT NULL DEFAULT 'pending',
    verification_method VARCHAR(50),
    verified_at TIMESTAMP,
    created_at TIMESTAMP NOT NULL DEFAULT NOW()
);

-- Users table
CREATE TABLE users (
    id UUID PRIMARY KEY,
    org_id UUID NOT NULL REFERENCES organizations(id),
    email VARCHAR(255) NOT NULL UNIQUE,
    role VARCHAR(50) NOT NULL,
    status VARCHAR(50) NOT NULL DEFAULT 'active',
    created_at TIMESTAMP NOT NULL DEFAULT NOW()
);

4. Organization Onboarding

4.1 Onboarding Process

StepActionOwnerRequirements
1Business inquiry receivedSalesCompany name, contact info
2Contract and terms executedLegalSigned agreement
3Organization record createdOperationsUnique org name
4Admin user provisionedOperationsVerified admin email
5Primary domain submittedOrg AdminDomain ownership
6Domain verification completedSystemSee Section 5
7Additional domains added (optional)Org AdminVerification per domain
8User self-registration enabledSystemVerified domain(s)

4.2 Organization Settings

SettingDefaultDescription
allow_self_registrationtrueUsers can register with verified domain email
require_email_verificationtrueNew users must verify email
default_user_roledriverRole assigned to self-registered users
allowed_domains[]List of verified domains
max_users1000Maximum users per organization

5. Domain Verification

5.1 Verification Requirements

RequirementDescription
Domain ownershipRegistrant must control the domain
Unique domainEach domain can only be linked to one organization
Valid formatMust be valid domain (e.g., company.com)
No public domainsCannot verify gmail.com, outlook.com, etc.

5.2 Blocked Public Domains

The following domains cannot be verified:

gmail.com, googlemail.com, outlook.com, hotmail.com,
live.com, msn.com, yahoo.com, ymail.com, aol.com,
icloud.com, me.com, mac.com, protonmail.com,
proton.me, zoho.com, mail.com, gmx.com, fastmail.com

5.3 Verification Methods

MethodProcessVerification Time
DNS TXT RecordAdd TXT record with verification token< 24 hours
Email to adminSend verification link to admin@ or webmaster@< 1 hour
Meta TagAdd meta tag to website root< 24 hours
StepAction
1System generates unique verification token
2Org admin adds TXT record: fleetlink-verification=[token]
3System polls DNS for verification (hourly for 72 hours)
4On match, domain marked as verified
5TXT record can be removed after verification

Example DNS Record:

Type: TXT
Host: @
Value: fleetlink-verification=a1b2c3d4e5f6g7h8i9j0

5.5 Verification Status

StatusDescription
pendingVerification initiated, awaiting confirmation
verifiedDomain ownership confirmed
failedVerification unsuccessful after 72 hours
revokedDomain verification revoked (ownership changed)

5.6 Re-verification

TriggerAction
Domain transferAutomatic re-verification required
Annual reviewOptional periodic re-verification
Security incidentManual re-verification initiated

6. Multi-Domain Support

6.1 Multiple Domains per Organization

Organizations may verify multiple email domains:

Use CaseExample
Primary domainacmelogistics.com
Subsidiaryacmetransport.com
Regionalacme.co.uk, acme.de
Acquisitionformercompany.com

6.2 Domain Management

ActionWho Can PerformAudit Logged
Add domainOrg AdminYes
Initiate verificationOrg AdminYes
Remove domainOrg AdminYes
View domainsOrg Admin, OperationsYes

6.3 Domain Limits

LimitValueRationale
Max domains per org10Prevent abuse
Min domains per org1At least one for registration
Concurrent verifications3Rate limiting

7. User Self-Registration

7.1 Registration Flow

User visits signup → Enters email → System checks domain →
Domain verified? → Yes → Send verification email →
User clicks link → Account created with default role
StepValidation
Email enteredValid email format
Domain checkDomain belongs to verified org
Duplicate checkEmail not already registered
Email verificationUser clicks verification link (expires 24 hours)
Account creationUser assigned to org, default role applied

7.2 Registration Constraints

ConstraintEnforcement
Verified domain requiredRegistration blocked for unverified domains
Email uniquenessGlobal uniqueness across all organizations
Rate limitingMax 10 registrations per domain per hour
Organization capacityRegistration blocked if org at max_users

7.3 Default Roles

RolePermissions
driverCreate rides, update GPS, view own history
dispatcherView all org rides, assign drivers
adminManage users, view reports, configure org
ownerFull org access, manage admins, billing

8. JWT Claims and Organization Context

8.1 JWT Payload Structure

json
{
  "sub": "user-uuid",
  "org_id": "org-uuid",
  "role": "driver",
  "email": "user@company.com",
  "iat": 1703203200,
  "exp": 1703289600
}

8.2 Authorization Flow

StepAction
1Request received with JWT
2JWT signature validated
3Expiration checked
4org_id extracted from claims
5All database queries filtered by org_id
6Response contains only org-scoped data

8.3 Cross-Organization Access

ScenarioAllowed
User viewing own org dataYes
User viewing other org dataNo
Admin viewing own org dataYes
Super-admin (Hop And Haul staff)Yes, with audit

9. Organization Lifecycle

9.1 Status Transitions

FromToTrigger
activesuspendedNon-payment, policy violation
suspendedactiveIssue resolved
activedeactivatedContract termination
deactivateddeletedData retention period expired

9.2 Suspension Effects

ComponentBehavior When Suspended
User loginBlocked
API accessBlocked
DataPreserved, not accessible
BillingPaused or continued per contract

9.3 Deactivation and Data Retention

Data TypeRetention After Deactivation
User accounts30 days, then anonymized
Ride historyPer PLCY-RET-001 retention schedule
Audit logsPer PLCY-RET-001 retention schedule
Organization recordRetained for audit purposes

10. Security Controls

10.1 Domain Verification Security

ControlImplementation
Token entropy256-bit random tokens
Token expiration72 hours
Rate limiting5 verification attempts per domain per day
Audit loggingAll verification attempts logged

10.2 Cross-Tenant Protection

Attack VectorMitigation
Parameter tamperingorg_id from JWT, not request
SQL injectionParameterized queries, ORM
IDORorg_id enforced at query level
Session hijackingStateless JWT, short expiration

10.3 Domain Takeover Prevention

ScenarioProtection
Domain expiresRe-verification required on transfer
Domain soldNew owner cannot inherit verification
Subdomain takeoverOnly root domains verified

11. API Endpoints

11.1 Organization Management

EndpointMethodDescriptionAuth Required
/api/v1/organizationsPOSTCreate organizationHop And Haul Admin
/api/v1/organizations/{id}GETGet organization detailsOrg Admin
/api/v1/organizations/{id}PATCHUpdate organizationOrg Admin
/api/v1/organizations/{id}/domainsGETList verified domainsOrg Admin
/api/v1/organizations/{id}/domainsPOSTAdd domainOrg Admin
/api/v1/organizations/{id}/domains/{domain}DELETERemove domainOrg Admin

11.2 Domain Verification

EndpointMethodDescriptionAuth Required
/api/v1/domains/verify/initiatePOSTStart verificationOrg Admin
/api/v1/domains/verify/statusGETCheck verification statusOrg Admin
/api/v1/domains/verify/confirmPOSTManual confirmation (email method)None (token)

11.3 User Registration

EndpointMethodDescriptionAuth Required
/api/v1/auth/registerPOSTSelf-register with verified domainNone
/api/v1/auth/verify-emailPOSTConfirm email verificationNone (token)

12. Audit Requirements

12.1 Logged Events

EventData Captured
Organization createdorg_id, name, creator
Domain addedorg_id, domain, added_by
Domain verifiedorg_id, domain, method, timestamp
Domain removedorg_id, domain, removed_by
User registeredorg_id, user_id, email domain
User role changedorg_id, user_id, old_role, new_role, changed_by

12.2 Retention

See PLCY-RET-001 Records Retention Policy for audit log retention requirements.


13. Document References

DocumentRelevance
PLCY-ACC-001 Access Control MatrixRole definitions
PLCY-SEC-001 Security ControlsAuthentication requirements
PLCY-RET-001 Records RetentionData retention requirements
PLCY-DATA-001 Data ClassificationPII handling

14. Revision History

VersionDateAuthorChanges
1.0December 22, 2025Operations DirectorInitial release

CONFIDENTIAL - Internal Use Only - Hop And Haul Policy Documentation