Skip to main content
The API requires 115 environment variables. These are validated at test time by tests/Unit/EnvTest.php — if any are missing, the env test fails.
In production and staging, the .env file is stored in S3 at s3://tutorbloc-app/env-configurations/{environment}/.env and loaded into ECS containers at startup.

Application

VariablePurposeDefault
APP_NAMEApplication nameLaravel
APP_ENVEnvironment (local, staging, production)production
APP_KEYEncryption key (AES-256-CBC)
APP_DEBUGEnable debug modefalse
APP_URLBase API URLhttp://localhost
APP_BASE_DOMAINBase domain for routing
APP_SUB_DOMAINSubdomain for routing
WEBSITE_URLFrontend website URL (used in emails, redirects)
SERVER_ENVServer environment identifier
BLACK_BOX_SERVICE_URLBlackBox distance microservice URL
TRUSTED_ORIGINSComma-separated allowed CORS origins (exact match)
WHITELISTED_ORIGINSComma-separated CORS origins (substring match)
BUSINESS_PROFILE_MCC_CODEStripe merchant category code

Database

VariablePurposeDefault
DB_CONNECTIONDatabase drivermysql
DB_HOSTMySQL host127.0.0.1
DB_PORTMySQL port3306
DB_DATABASEDatabase namehomestead
DB_USERNAMEDatabase userhomestead
DB_PASSWORDDatabase passwordsecret

Test database

VariablePurpose
DB_TEST_HOSTTest MySQL host
DB_TEST_PORTTest MySQL port
DB_TEST_DATABASETest database name
DB_TEST_USERNAMETest database user
DB_TEST_PASSWORDTest database password

Redis

VariablePurposeDefault
REDIS_HOSTRedis host127.0.0.1
REDIS_PORTRedis port6379
REDIS_PASSWORDRedis passwordnull

Infrastructure drivers

VariablePurposeDefault
BROADCAST_DRIVERBroadcasting drivernull
CACHE_DRIVERCache driverredis
SESSION_DRIVERSession driverfile
SESSION_LIFETIMESession lifetime (minutes)120
QUEUE_DRIVERQueue driversync
FILESYSTEM_DRIVERDefault filesystempublic
LOG_CHANNELLogging channelstack

Stripe

VariablePurpose
STRIPE_SECRETStripe secret API key
STRIPE_SIGNING_SECRETWebhook signing secret (payment events)
STRIPE_SUBSCRIPTION_SIGNING_SECRETWebhook signing secret (subscription events)
STRIPE_VERSIONStripe API version

Identity verification

Onfido

VariablePurpose
ONFIDO_API_TOKENOnfido API token
ONFIDO_WEBHOOK_TOKENOnfido webhook verification token

Yoti

VariablePurpose
YOTI_BASE_URLYoti API base URL
YOTI_SDK_IDYoti SDK identifier
YOTI_PEM_NAMEYoti PEM certificate filename
YOTI_HEADER_TOKENYoti API header token

Communication

Zoom

VariablePurpose
ZOOM_CLIENT_SECRETZoom OAuth client secret
ZOOM_CLIENT_IDZoom OAuth client ID
ZOOM_REDIRECT_URIZoom OAuth callback URL
ZOOM_VERIFICATION_TOKENZoom webhook verification token

Google

VariablePurpose
GOOGLE_CLIENT_SECRETGoogle OAuth client secret
GOOGLE_CLIENT_IDGoogle OAuth client ID
GOOGLE_REDIRECT_URIGoogle OAuth callback URL
GOOGLE_MAPS_BASE_URLGoogle Maps API base URL
GOOGLE_MAPS_API_KEYGoogle Maps API key

Twilio

VariablePurpose
TWILIO_ACCOUNT_SIDTwilio account SID
TWILIO_AUTH_TOKENTwilio auth token
TWILIO_VERIFICATION_SIDTwilio Verify service SID

Daily.co

VariablePurpose
DAILY_API_KEYDaily.co API key for video meetings

Email

VariablePurposeDefault
MAIL_DRIVERMail transport driversmtp
MAIL_HOSTSMTP hostsmtp.mailgun.org
MAIL_PORTSMTP port587
MAIL_USERNAMESMTP username
MAIL_PASSWORDSMTP password
MAIL_ENCRYPTIONSMTP encryptiontls
MAIL_FROM_ADDRESSDefault sender addresshello@example.com
MAIL_FROM_NAMEDefault sender nameExample
MAIL_TO_INTERNAL_TEAM_ADDRESSESInternal team email recipients (BCC on many emails)

AWS

VariablePurpose
AWS_ACCESS_KEY_IDAWS access key
AWS_SECRET_ACCESS_KEYAWS secret key
AWS_DEFAULT_REGIONAWS region
AWS_BUCKETS3 bucket name

Push notifications

Apple (APNS)

VariablePurpose
APNS_KEY_FILEAPNS authentication key file path
APNS_KEY_IDAPNS key identifier
APNS_TEAM_IDApple Developer team ID
APNS_BUNDLE_IDiOS app bundle identifier
APNS_CERTIFICATION_FILEAPNS certificate file path
APNS_URLAPNS endpoint URL

Firebase (FCM)

VariablePurpose
FCM_API_ACCESS_KEYFirebase Cloud Messaging API key
FCM_URLFCM endpoint URL
GOOGLE_CONTENT_TYPEFCM content type header
Socket_Time_To_LiveFCM message TTL
No FCM service class was found in the codebase — the FCM integration may be incomplete or handled via a package not visible in the code. Confirm with team.