66biolinks documentation

✍️ New blog post: Keep MaxMind IP databases updated automatically on Ubuntu servers.
✍️ Blog post: Improve MaxMind IP to location lookups by 80x on Ubuntu servers.

Get started

This page describes the installation & update process of 66biolinks, as well as technical features.

Most features inside 66biolinks are self-explanatory and have helper texts near them.

Installation steps are straight-forward, minimum web related knowledge is required.

Support is exclusively handled through email. Ensure to attach proof of purchase when requesting support.

Requirements

Ensure your server meets the specified requirements prior to installation or purchase.

These requirements assume you're running on a decent, up-to-date server with the essential extensions already in place.

PHP PHP 8.4 - 8.5
Extensions cURL, OpenSSL, mbstring, MySQLi
Database MySQL 5.7.3+ or MariaDB equivalent
Server Apache or Nginx

Installation Services

We offer fast & reliable installation services at an affordable price.

Software installation - $35

  • Uploading the product files on your server (requires a fully configured and ready to go server).
  • Creating and configuring the database that is going to be used.
  • Full installation of the product.
You must own a server with a control panel like Plesk, cPanel, etc.

Server configuration & software installation - $69

  • Setting up a new server (Ubuntu OS) on one of those platforms: Hetzner, Cloudways, Vultr, DigitalOcean
  • Setting up the domain for the server
  • Free SSL Certificate Installation (Let's Encrypt)
  • Installation of Apache, MySQL with MySQLi, PHP
  • Installation and configuration of PHP's necessary modules / extensions
  • Full installation of the product

Product Update - $30

  • Backup of the files & database (upon request).
  • Update of the product to the latest version (no matter which version you are currently on).
  • Update of all the plugins you own (if any).
You are responsible for reintegrating any custom modifications to the original product files after an update.
Get in touch via email

Installation

The installation takes approximately 10 minutes.

Prepare the database

  1. Create a new database user (optional).
  2. Create a new database.
  3. Keep the database Host, Name, Username and Password available for the installation.

Upload the product

  1. Upload the contents of the product/ folder to your web host.
  2. Install it on a domain, subdomain or subfolder, depending on your needs.
  3. Apache: Ensure the .htaccess file is uploaded. It may be hidden on your computer.
  4. Nginx: Complete the Nginx setup after installation.

Run the installation

  1. Open domain.com/install in your browser.
  2. Set the required file and folder permissions to 755, 775 or 777, depending on your server configuration.
  3. Follow the installation steps.
  4. After a successful installation, your admin login credentials will be displayed.

Set up cron jobs

Cron jobs are required for background tasks.

  1. Go to Admin Panel → Settings → Cron.
  2. Create a cron job for each command displayed there.
  3. If needed, refer to your hosting provider's documentation for instructions on creating cron jobs.

Set up email

Configure SMTP if you want the site to send emails.

  1. Go to Admin Panel → Settings → SMTP (Email).
  2. Enter your SMTP provider credentials.
  3. Save the settings and send a test email.

Update

Follow these steps to update your current installation to the latest version.

Before updating, review the latest changes in the changelog and demo.

Create a backup

Back up your installation before starting the update.

  1. Back up your database.
  2. Back up your product files.

Update the files

  1. Download and extract the latest version of the product.
  2. Open the product/ folder and upload its contents over your existing installation.
  3. Do not overwrite the config.php file.

Update the database

  1. Open domain.com/update in your browser.
  2. Follow the update steps.
  3. After the update is complete, delete the update/ folder from your server.

Update plugins

  1. Go to Admin Panel → Plugins and update any plugins with newer versions available.
  2. If you use the Offload plugin, also replace the assets in your offloaded storage with the latest files from the themes/assets/ folder.

Caching

Caching is used throughout the application to reduce database load and improve response times.

By default, caching is enabled and uses the file system to store selected database query results.

Caching can be disabled if needed (not recommended) by opening index.php and setting the CACHE constant to 0. This disables caching across the entire application.

To change the cache driver, edit config.php and set the CACHE_DRIVER constant to files, apcu, or redis.

You can switch caching from the file system to Redis if your host supports it.

To enable Redis, edit config.php, configure your Redis connection settings, and set the REDIS_IS_ENABLED constant to 1.

Recommendation: Redis > APCu > File system > No caching. Use Redis when available and memory allows; otherwise, use APCu or the default file system caching.

NGINX Setup

Use the following NGINX rewrite rule to ensure proper functionality of the URLs:

if (!-e $request_filename) {
    rewrite ^\/(.+)$ /index.php?altum=$1 last;
}

This command should be added in your domain.conf nginx file in the location / { ... } field.

Docker

Docker is optional and intended for users who prefer container-based deployment instead of the standard shared hosting or VPS installation.

Requirements

Make sure Docker and Docker Compose are installed and running on your system.

Start the application

  1. The Dockerfile and docker-compose.yml files are included in the root folder of the product.
  2. Open a terminal and navigate to the product folder.
  3. Start the Docker containers:
    docker compose up -d
  4. Open http://localhost/install in your browser and follow the installation process.

Database configuration

Use the following database credentials during installation:

  • Host: db
  • Port: 3306
  • Username: root
  • Password: root
  • Database: app

SSL configuration

SSL should be configured at the server level using a reverse proxy in front of the Docker container.

Social Logins

Follow these updated steps to set up additional login methods via popular social networks. Make sure to use HTTPS for all redirect URIs and verify your domains when required.

Facebook Login

  1. Go to the Meta for Developers page and log in.
  2. From the top-right menu, click My AppsCreate App and select the app type (usually Consumer).
  3. Fill out the required details (app name, contact email, business account) and click Create App.
  4. On your app dashboard, under Add Product, select Facebook Login and click Set Up.
  5. Go to Settings → Basic and complete required fields:
    • App Domains
    • Privacy Policy URL
    • Terms of Service URL
    • App Icon (recommended)
    Your domain must be verified if requested.
  6. Go to Facebook Login → Settings and:
    • Enable Client OAuth Login and Web OAuth Login.
    • In Valid OAuth Redirect URIs, add:
      https://yourdomain.com/login/facebook
  7. Switch the app from Development mode to Live so that non-admin users can log in.
  8. Go to Settings → Basic and copy your App ID and App Secret.
  9. In your Admin PanelSettings → Facebook Login Tab, paste the keys, enable Facebook Login, and Submit.

Google Login

  1. Go to the Google Cloud Console and log in.
  2. Create a New Project or select an existing one.
  3. Navigate to APIs & Services → OAuth consent screen:
    • Choose External user type for public access.
    • Fill in app name, support email, app logo, privacy policy URL, and terms of service URL.
    • Add your domain under Authorized domains (must be verified).
  4. Add required scopes: openid, email, profile.
  5. Save and publish the consent screen.
  6. Go to Credentials → Create Credentials → OAuth Client ID:
    • Application type: Web Application.
    • In Authorized redirect URIs, add:
      https://yourdomain.com/login/google
  7. Copy the generated Client ID and Client Secret.
  8. In your Admin PanelSettings → Google Login Tab, paste the keys, enable Google Login, and Submit.

Twitter (X) Login

  1. Go to the Twitter Developer Portal and log in.
  2. Apply for a developer account if you don’t have one.
  3. From the dashboard, go to Projects & Apps → Overview and click Create App.
  4. Fill out the app details and save.
  5. In App Settings → Authentication Settings:
    • Enable Web App, Automated App or Bot Type of App.
    • Enable Request email addresses from users.
    • In Callback URLs, add:
      https://yourdomain.com/login/twitter
    • In Website URL, add:
      https://yourdomain.com/
  6. Go to Keys and Tokens to copy the API Key and API Secret.
  7. In your Admin PanelSettings → Twitter Login Tab, paste the keys, enable Twitter Login, and Submit.
  8. If required, request Elevated Access for your Twitter API project.

Discord Login

  1. Go to the Discord Developer Portal and log in.
  2. Click New Application and fill in the app details.
  3. Go to the OAuth2 page from the sidebar.
  4. In the Redirects section, add:
    https://yourdomain.com/login/discord
  5. Copy the Client ID and Client Secret from the Client information section.
  6. In your Admin PanelSettings → Discord Login Tab, paste the keys, enable Discord Login, and Submit.

LinkedIn Login

  1. Go to the LinkedIn Developer Portal and log in.
  2. Click Create App and complete the details.
  3. On the app dashboard, go to Products and request access for Sign In with LinkedIn.
  4. Navigate to Auth → OAuth 2.0 Settings and add the redirect URL:
    https://yourdomain.com/login/linkedin
  5. Copy the Client ID and Client Secret.
  6. In your Admin PanelSettings → LinkedIn Login Tab, paste the keys, enable LinkedIn Login, and Submit.

Microsoft Login

  1. Go to the Microsoft Azure Portal and log in.
  2. Navigate to Azure Active Directory → App Registrations → New Registration.
  3. Fill in these details:
    • App Name
    • Supported account types: Accounts in any organizational directory and personal Microsoft accounts
    • Redirect URI → Web: https://yourdomain.com/login/microsoft
  4. Click Register to create the app.
  5. Copy the Application (Client) ID for later use.
  6. Go to Certificates & SecretsNew client secret → copy the Value immediately.
  7. Go to Authentication and:
    • Check Access tokens (used for implicit flow).
    • Save changes.
  8. In your Admin PanelSettings → Microsoft Login Tab, paste the Application ID and Secret Value, enable Microsoft Login, and Submit.

Apple Login

  1. Go to the Apple Developer portal and log in.
  2. Under Certificates, Identifiers & Profiles → Identifiers, create or select an App ID, enable Sign in with Apple, and configure it as the primary App ID.
  3. Create a new Services ID. Use a unique reverse-domain identifier, such as com.yourdomain.web. This Services ID is the Client ID that you will enter in the Admin Panel.
  4. Select the newly created Services ID, enable Sign in with Apple, and click Configure:
    • Select the primary App ID created in the previous step.
    • Under Domains and Subdomains, add your domain without the protocol, for example: yourdomain.com.
    • Under Return URLs, add:
      https://yourdomain.com/login/apple
    Save the configuration.
  5. Go to Keys, create a new private key, enable Sign in with Apple, and associate it with the same primary App ID.
  6. Register the key and download the .p8 private key file. Apple only allows this file to be downloaded once, so store it securely.
  7. Copy the Key ID shown for the newly created key and your Team ID from your Apple Developer membership details.
  8. Open the downloaded .p8 file with a text editor and copy its full contents, including the BEGIN PRIVATE KEY and END PRIVATE KEY lines.
  9. In your Admin PanelSettings → Apple Login Tab, enter:
    • Client ID – the Services ID identifier.
    • Team ID – your Apple Developer Team ID.
    • Key ID – the identifier of the downloaded private key.
    • Private Key – the complete contents of the .p8 file.
    Enable Apple Login and Submit.

If you send emails to users who choose Apple’s private relay address, configure Apple’s email relay service for your sending domain as well. See Apple’s private email relay documentation.

GitHub Login

  1. Log in to GitHub, open Settings → Developer settings → OAuth Apps, and click New OAuth App or Register a new application.
  2. Enter an Application name and set the Homepage URL to your full website URL, for example: https://yourdomain.com/.
  3. In Authorization callback URL, add:
    https://yourdomain.com/login/github
  4. Click Register application.
  5. Copy the generated Client ID, then click Generate a new client secret and copy the generated Client Secret.
  6. In your Admin PanelSettings → GitHub Login Tab, paste the Client ID and Client Secret, enable GitHub Login, and Submit.

Captchas

These are the steps to integrate more advanced and powerful captcha codes for your system.

Cloudflare Turnstile

  1. In your Admin PanelSettings → Captcha page, set the captcha type to Cloudflare Turnstile.
  2. Log in to your Cloudflare Dashboard.
  3. In the sidebar, go to Turnstile and click Add Widget.
  4. Fill in the form:
    • Widget Name – a descriptive name (e.g., "Website Login").
    • Domain – your actual website domain (e.g., yourdomain.com).
    • Widget Mode – choose Managed for the simplest setup.
  5. Click Create to generate the widget.
  6. Cloudflare will now provide a Site Key and Secret Key.
  7. Go back to your Admin Panel and paste these keys into the fields under the Captcha settings.
  8. Click Save to apply the new settings.

Google reCAPTCHA

  1. In your Admin PanelSettings → Captcha page, set the captcha type to Google reCAPTCHA v2 Checkbox.
  2. Log in to the Google reCAPTCHA Admin Console.
  3. Register a new site:
    • Label – a name for your site.
    • Select reCAPTCHA v2.
    • Add your website domain.
  4. Once created, copy the Site Key and Secret Key.
  5. Paste these keys into the corresponding fields in your Admin Panel.
  6. Click Save to enable Google reCAPTCHA on your site.

hCaptcha

  1. In your Admin PanelSettings → Captcha page, set the captcha type to hCaptcha.
  2. Go to the hCaptcha Website and log in or create an account.
  3. Navigate to Sites → Add New Site.
  4. Fill out the required details:
    • Site Name
    • Domains – your actual website domain.
  5. After saving, hCaptcha will generate a Site Key.
  6. Go to Settings → Account and copy your Secret Key.
  7. Paste both the Site Key and Secret Key into the corresponding fields in your Admin Panel.
  8. Click Save to activate hCaptcha on your site.

Payment Processors

Follow these steps to connect your system with available payment gateways. Only available for Extended License holders.

PayPal

  1. Go to the PayPal Developer Dashboard and log in.
  2. Go to My Apps & Credentials → REST API Apps and click Create App.
  3. Enter an app name and other required details, then create it.
  4. Switch the app to Live Mode using the toggle near the app name.
  5. Copy the Client ID and Secret.
  6. In your Admin Panel → Settings → Processors → PayPal page, paste the Client ID and Secret. Set the Mode to Live and Submit the settings.
  7. Back in PayPal Dashboard, open the created app and go to the Webhooks section.
  8. Click Add Webhook and set the URL:
    https://yourdomain.com/webhook-paypal
  9. Select the events:
    • Payment sale completed
    • Checkout order approved
  10. Save the webhook.

Stripe

  1. Log in to the Stripe Dashboard.
  2. Go to Developers → API Keys.
  3. Ensure your keys are set to Live Mode to accept real payments.
  4. Copy the Publishable Key and Secret Key.
  5. In your Admin Panel → Settings → Processors → Stripe page, paste the keys and save.
  6. From the Stripe sidebar, go to Developers → Webhooks and click Add Endpoint.
  7. Set the Endpoint URL:
    https://yourdomain.com/webhook-stripe
  8. Select events to send:
    • checkout.session.completed
    • invoice.paid
    • invoice.upcoming
  9. Save the webhook and copy the Signing Secret.
  10. In your Admin Panel, paste the Signing Secret into the Webhook Secret field under the Stripe tab.

Offline Payments

  1. Enable offline payments in your Admin Panel → Settings → Processors → Offline payment page.
  2. In the Instructions field, add clear details about how customers should complete offline payments (e.g., bank account details).
  3. When customers check out, they can select offline payment as a method.
  4. They will see the instructions and must upload proof of payment.
  5. As an admin, go to Admin Panel → Payments, review proofs, and approve valid payments.
  6. Upon approval, the plan is activated for the customer.
  7. If proof is invalid or fake, delete the payment to reject it.

Coinbase Commerce

  1. Log in to the Coinbase Dashboard.
  2. Go to Settings.
  3. Under API Keys, generate and copy your API Key.
  4. In your Admin Panel → Settings → Processors → Coinbase page, paste the API Key.
  5. Under Webhook Subscriptions, click Add Endpoint and enter:
    https://yourdomain.com/webhook-coinbase
  6. Save the webhook and copy the Shared Secret.
  7. In your Admin Panel, paste the Shared Secret into the Webhook Secret field under the Coinbase tab.

Crypto.com

  1. Log in to the Crypto.com Merchant Dashboard.
  2. Go to Developers → API Keys.
  3. Copy your Publishable Key and Secret Key.
  4. In your Admin Panel → Settings → Processors → Crypto.com page, paste the keys.
  5. Go to Webhooks in the Crypto.com dashboard and click Add Webhook.
  6. Set the URL:
    https://yourdomain.com/webhook-crypto-com
  7. Copy the Signature Secret and paste it into the Webhook Secret field in your Admin Panel.

PayU

  1. Log in to your PayU account.
  2. Create a new shop and fill in all required details.
  3. In your Admin Panel → Settings → Processors → PayU page, paste the provided API keys.

Iyzico

  1. Log in to the Iyzico Merchant Dashboard.
  2. Go to Merchant Settings.
  3. Copy your API Key and Secret Key.
  4. In your Admin Panel → Settings → Processors → Iyzico page, paste the keys.
  5. Scroll to the Merchant Notifications section and add:
    https://yourdomain.com/webhook-iyzico
  6. Save the configuration.

Paystack

  1. Log in to your Paystack Dashboard.
  2. Go to Settings → API Keys & Webhooks.
  3. In your Admin Panel → Settings → Processors → Paystack page, paste the API keys.
  4. In Paystack, set your Webhook URL to:
    https://yourdomain.com/webhook-paystack
  5. Save changes.

Razorpay

  1. Log in to your Razorpay Dashboard.
  2. Go to Settings → API Keys and generate keys.
  3. In your Admin Panel → Settings → Processors → Razorpay page, paste the keys.
  4. Go to Settings → Webhooks and click Add New Webhook.
  5. Set the Webhook URL:
    https://yourdomain.com/webhook-razorpay
  6. Create a new Webhook Secret (like a password).
  7. Enable these events:
    • subscription.charged
    • payment_link.paid
  8. Save the webhook, then paste the secret into the Razorpay tab in your Admin Panel.

Mollie

  1. Log in to your Mollie Dashboard.
  2. Go to Developers → API Keys and copy your Live API Key.
  3. In your Admin Panel → Settings → Processors → Mollie page, paste the key.
  4. Activate allowed payment methods in your Mollie account.

Yookassa

  1. Log in to your Yookassa Dashboard.
  2. Go to Developers → API Keys and generate keys.
  3. In your Admin Panel → Settings → Processors → Yookassa page, paste the keys.
  4. Go to Integration → HTTP Notifications and add:
    https://yourdomain.com/webhook-yookassa
  5. Ensure receipts/invoices are enabled for compliance.

Paddle Classic

  1. Log in to the Paddle Vendors Dashboard.
  2. Go to Developer Tools → Authentication and copy your Vendor ID and API Key.
  3. In your Admin Panel → Settings → Processors → Paddle page, paste the Vendor ID and API Key.
  4. Go to Developer Tools → Public Key and copy it into the Public Key field in your Admin Panel.

Paddle Billing

  1. Log in to your Paddle Billing Dashboard.
  2. Go to Developer Tools → Authentication:
    • Under the API Keys tab, click New API Key.
    • Enable All permissions for Write.
    • Copy the generated API Key.
    • In your Admin Panel → Settings → Processors → Paddle Billing page, paste the key and save.
  3. Still under Authentication:
    • Go to the Client-side Tokens tab.
    • Click New Client-side Token and copy the Token.
    • In your Admin Panel → Settings → Payment Processors → Paddle, paste the token and save.
  4. Next, go to Developer Tools → Notifications:
    • Click New Destination.
    • In the URL field, enter your webhook endpoint:
      https://yourdomain.com/webhook-paddle
    • In the Events section, select only:
      • subscription.created
      • subscription.updated
      • transaction.paid
    • Save the destination, then click Edit and copy the Secret Key.
    • In your Admin Panel → Settings → Payment Processors → Paddle, paste the Secret Key and save.
  5. Finally, go to Checkout → Checkout Settings and set your website URL in the Default Payment Link field.

Midtrans

  1. Log in to the Midtrans Dashboard.
  2. Go to Settings → Access Keys and copy your Server Key.
  3. In your Admin Panel → Settings → Processors → Midtrans page, paste the Server Key.

Flutterwave

  1. Log in to the Flutterwave Dashboard.
  2. Go to Settings → API Keys and copy your Secret Key.
  3. In your Admin Panel → Settings → Processors → Flutterwave page, paste the Secret Key.
  4. Go to the Flutterwave Webhooks page and add:
    https://yourdomain.com/webhook-flutterwave

LemonSqueezy

  1. Log in to LemonSqueezy.
  2. Create a product in LemonSqueezy.
  3. Create variants for:
    • One-time Payments (Monthly, Quarterly, Biannual, Annual, Lifetime)
    • Recurring Payments (Monthly, Annual)
  4. Go to Settings → API Keys and generate an API key.
  5. In your Admin Panel → Settings → Processors → LemonSqueezy page, paste:
    • API Key
    • Store ID (found in store settings)
    • Each Variant ID for your products
  6. Go to Settings → Webhooks and create a webhook with URL:
    https://yourdomain.com/webhook-lemonsqueezy
  7. Select events:
    • order_created
    • subscription_payment_success
  8. Copy the Signing Secret and paste it into the LemonSqueezy tab in your Admin Panel.

Klarna

  1. Log in to the Klarna Portal or Klarna Playground Portal (development).
  2. Go to SettingsKlarna API Keys page.
  3. Generate your new Klarna API key & make sure to copy both the Username and Password.
  4. In your Admin Panel → Settings → Processors → Klarna page, paste the keys and save.

Plisio

  1. Log in to your Plisio Dashboard.
  2. Ensure your domain is connected and your crypto wallets are properly configured.
  3. Navigate to the API page, then click on the Site Settings button for your connected domain.
  4. Copy the generated Secret Key and paste it into your Admin Panel → Settings → Processors → Plisio page.
  5. Specify the list of cryptocurrencies you wish to accept, choose your default currency, and save the settings.

1pay

  1. Log in to your 1pay account.
  2. Find your checkout instance name. If your checkout domain is yourname.1pay.ch, use only yourname.
  3. Go to the API settings page and copy your API Key.
  4. In your Admin Panel → Settings → Processors → 1pay page, enable 1pay payments, paste the instance name and API key.
  5. Select the currencies that you want to accept through 1pay.
  6. Create a new webhook in your 1pay account and set the webhook URL to:
    https://yourdomain.com/webhook-onepay
  7. Make sure the webhook sends JSON requests.
  8. Copy the Webhook Signing Key and paste it into your Admin Panel → Settings → Processors → 1pay page.
  9. Optionally add a Look&Feel Profile ID if you want to use a custom 1pay checkout design.
  10. Optionally add a Subscription Cancellation Interval if you want to use a custom cancellation period for recurring payments. Use the PHP interval format, such as P1M for one month.
  11. Save the settings and make a test payment to confirm the integration works properly.

Revolut

  1. Log in to your Revolut Business dashboard.
  2. Navigate to the Settings page, then click on the APIs sidebar link, then in the Merchant API section.
  3. Copy the generated API secret Key, paste it into your Admin Panel → Settings → Processors → Revolut page, and save the settings.

Taxes & Billing

Use the Taxes & Billing system to collect billing information and apply taxes to paid plans.

Enable taxes & billing

  1. Go to Admin Panel → Settings → Payment.
  2. Enable the Taxes & Billing system.

Create a tax

  1. Go to Admin Panel → Taxes.
  2. Select Create Tax.
  3. Configure the tax according to your requirements and save it.

Assign a tax to a plan

  1. Go to Admin Panel → Plans.
  2. Select the paid plan you want to configure.
  3. Assign the desired tax and save the plan.

Multicurrency

Multicurrency allows users to choose from the currencies you make available.

Enable multicurrency

Go to Admin Panel → Settings → Payment and configure the currencies you want to support.

Configure plan prices

Go to Admin Panel → Plans, select a plan and set its price for each supported currency.

Configure payment processors

Go to Admin Panel → Settings and enable or disable currencies individually for each payment processor.

Configure exchange rates

For automatic currency conversion, obtain an API key from FreeCurrencyAPI.com and add it under Admin Panel → Settings → Payment.

The API key is optional, but recommended. It converts transactions to your default currency so administrative statistics remain consistent across multiple currencies.

Webhook verification

Each webhook which comes from the Admin panelSettingsWebhooks page, includes a unique ID, a timestamp, and a signature in each request. These values are sent as HTTP headers and are required for verification.

On your endpoint, you must read the raw request body, rebuild the signed payload, and verify the signature using your webhook secret key.

The signed payload is created in the following order:

webhook_id.webhook_timestamp.raw_body

The signature is generated using HMAC SHA-256, base64-encoded, and sent in the Webhook-Signature header with a v1, prefix.

You must also validate the timestamp and reject requests outside a 5-minute window to prevent replay attacks.

Use the following PHP example to verify incoming webhooks:

/* Get webhook related headers */
$webhook_id = $_SERVER['HTTP_WEBHOOK_ID'] ?? null;
$webhook_timestamp = $_SERVER['HTTP_WEBHOOK_TIMESTAMP'] ?? null;
$webhook_signature = $_SERVER['HTTP_WEBHOOK_SIGNATURE'] ?? null;

if (!$webhook_id || !$webhook_timestamp || !$webhook_signature) {
    http_response_code(400);
    die();
}

/* 5 minute tolerance replay window */
if (abs(time() - (int) $webhook_timestamp) > 300) {
    http_response_code(400);
    die();
}

/* Get raw posted body of the request */
$raw_body = file_get_contents('php://input');

/* Start regenerating the signature */
$signed_payload = $webhook_id . '.' . $webhook_timestamp . '.' . $raw_body;

/* Webhook secret key from the admin panel */
$secret_key = settings()→webhooks→secret_key;

/* Strip the version from the webhook signature */
$signature_key = substr($webhook_signature, strlen('v1,'));

/* Generate expected signature to compare */
$expected_signature = base64_encode(
    hash_hmac('sha256', $signed_payload, $secret_key, true)
);

/* Compare the signatures */
if (!hash_equals($expected_signature, $signature_key)) {
    http_response_code(401);
    die();
}

/* Continue with your own processing */

OpenAI integration

Connect your system to the OpenAI API to enable AI-powered features such as AI translation.

Create an API key

  1. Log in to the OpenAI API Platform.
  2. Open the API Keys page for the project you want to use.
  3. Create a new secret key and optionally give it a descriptive name, such as Production Website.
  4. Copy and securely store the generated API key. The full secret key is only displayed when it is created.

Configure 66biolinks

  1. Go to Admin Panel → Settings → Main → Other settings.
  2. Paste the API key into the OpenAI API key field.
  3. Save the settings.

API billing

OpenAI API usage is billed separately from ChatGPT subscriptions. Configure API billing in your OpenAI API Platform account if required.

Google Safe Browsing

Google Safe Browsing checks submitted URLs against Google's lists of unsafe web resources, including phishing, malware and unwanted software.

Create an API key

  1. Go to the Google Cloud Console and log in to your Google account.
  2. Create a new project or select an existing one.
  3. Open APIs & Services → Library, search for Safe Browsing API and enable it.
  4. Go to APIs & Services → Credentials.
  5. Select Create credentials → API key.
  6. Copy the generated API key.

Configure the integration

  1. Go to Admin Panel → Settings → Links.
  2. Paste the API key into the Google Safe Browsing API Key field.
  3. Save the settings.

Secure the API key

Restrict the API key to the Safe Browsing API from your Google Cloud credentials settings to prevent it from being used with other Google APIs.

Google Static Maps

Google Static Maps allows users to display Google Maps through the Map block on their biolink pages.

Create an API key

  1. Go to the Google Cloud Console and log in to your Google account.
  2. Create a new project or select an existing one.
  3. Open APIs & Services → Library, search for Maps Static API and enable it.
  4. Go to APIs & Services → Credentials.
  5. Select Create credentials → API key.
  6. Copy the generated API key.

Configure the integration

  1. Go to Admin Panel → Settings → Links.
  2. Paste the API key into the Google Static Maps API Key field.
  3. Save the settings.

Secure the API key

Restrict the API key to the Maps Static API and limit its usage to the domains where your product is installed.

Google Geocoding

Google Geocoding allows users to enter a location as text in the Weather block and automatically converts it to latitude and longitude coordinates.

Create an API key

  1. Go to the Google Cloud Console and log in to your Google account.
  2. Create a new project or select an existing one.
  3. Make sure billing is enabled for the project.
  4. Open APIs & Services → Library, search for Geocoding API and enable it.
  5. Go to APIs & Services → Credentials.
  6. Select Create credentials → API key.
  7. Copy the generated API key.

Configure the integration

  1. Go to Admin Panel → Settings → Links.
  2. Paste the API key into the Google Geocoding API Key field.
  3. Save the settings.

Secure the API key

Restrict the API key to the Geocoding API from your Google Cloud credentials settings. You can also configure an application restriction appropriate for your server setup.

Custom domains

Custom domains allow you and your users to use additional domains when creating supported resources.

Add a custom domain

  1. Go to Admin Panel → Domains and add the domain or subdomain you want to use.
  2. Configure its DNS records so it points to the same server as your main product installation.
  3. Make sure the domain is configured on your hosting platform or web server.
  4. Issue an SSL certificate for the domain.

Configure DNS

Configure the domain with one of the following methods, depending on your setup:

  • A record: point the domain to your server's IPv4 address.
  • CNAME record: for subdomains, point them to the hostname of your main installation, such as example.com.

DNS configuration varies between providers and changes may take some time to propagate.

Shared hosting

If you use a shared hosting control panel such as cPanel:

  1. Open the Domains or Addon Domains section.
  2. Add the new domain or subdomain.
  3. Set its Document Root to the same directory as your existing product installation.
  4. Enable or issue an SSL certificate for the new domain.

VPS or dedicated server

Configure your web server so the new domain points to the same product installation.

  1. Make sure the domain's DNS records point to your server.
  2. Add the domain to your Apache or Nginx virtual host configuration.
  3. Configure it to use the same product installation directory.
  4. Issue an SSL certificate for the new domain.

The exact configuration depends on your server setup and may require assistance from a server administrator.

Notification handlers

Twilio notification handler (SMS & Call)

  1. Go to Twilio Console and make sure to login to your account.
  2. Get a phone number from Twilio and then scroll down in the Console Dashboard to see the Account info section.
  3. Go to your product installationAdmin panelSettingsNotification handlers page.
  4. Enable the Twilio notification handler while also copying the Account SID, Account token & Phone number from Twilio and pasting it their respective fields.
  5. To enable different regions for Twilio SMS, go to Twilio ConsoleMessagingSettingsGeo Permissions page.
  6. To enable different regions for Twilio calling, go to Voice Geographic Permissions page.

WhatsApp notification handler (WhatsApp message)

  1. Go to Facebook Developers page.
  2. Make sure to login to your Facebook account.
  3. Click on the My Apps menu dropdown and click on Create app.
  4. Select the Other use case and continue.
  5. Select the Business app type and continue.
  6. Fill the other needed fields and continue (Make sure to attach your Business Account).
  7. After finishing it up, choose Add Product from the sidebar of your dashboard.
  8. Make sure you add the WhatsApp product to your app.
  9. After that, go to WhatsAppAPI Setup page.
  10. Add your own business From phone number and confirm it.
  11. Copy your Phone number ID and paste it into the product installationAdmin panelSettingsNotification handlers page.
  12. Open the Auth token documentation from Facebook and get your Permanent Access token, so that you can paste it into the same page in your installation as above.
  13. After that, go to WhatsAppQuickstart pageMessage templates page.
  14. Now you must create a template for each type of notification you will send out, do it as per the data below.

Name test_notification_handler
Language English
Category Utility
Content
This is a test message.

Name guest_payment
Language English
Category Utility
Content
You sold '{{1}}' for {{2}} {{3}} 💰.
View all details at {{4}} 🔗
Sample {{1}} Example
Sample {{2}} 55
Sample {{3}} USD
Sample {{4}} https://YOUR_DOMAIN_HERE/url/1

Name caught_data
Language English
Category Utility
Content
Caught new submitted data to your biolink block '{{1}}' for '{{2}}' url.
View all details at {{3}} 🔗
Sample {{1}} Example
Sample {{2}} Sample
Sample {{3}} https://YOUR_DOMAIN_HERE/data/1

AIX plugin

The AIX plugin adds AI-powered features such as document generation, image generation, speech-to-text and chat.

Install the plugin

  1. Download and extract the plugin files.
  2. Upload the aix folder to the plugins/ folder of your product installation.
  3. Go to Admin Panel → Plugins, find the AIX plugin and enable it.

Configure OpenAI

OpenAI powers the document, image, speech-to-text and chat features of the AIX plugin.

  1. Log in to the OpenAI API Platform.
  2. Open the API Keys page for the project you want to use.
  3. Create a new secret key and copy it securely.
  4. Go to Admin Panel → Settings → AIX and paste it into the OpenAI API Key field.
  5. Enable and configure the OpenAI features you want to provide, then save the settings.

Configure plan limits

Go to Admin Panel → Plans to configure the AIX features and usage limits available for each plan.

Clipdrop integration

Clipdrop is used for additional AI image generation functionality.

  1. Go to the Clipdrop API page.
  2. Obtain your API key if your account and AIX plugin version support the Clipdrop API.
  3. Go to Admin Panel → Settings → AIX and paste it into the Clipdrop API Key field.
  4. Save the settings.

Chrome Extension plugin

This is the installation documentation for the Chrome Extension plugin.

Chrome Extension files

  1. Go inside of the Chrome Extension folder from the downloaded product files.
  2. These are the actual files of the Chrome Extension that must be provided to your users or submitted to the Chrome Web Store.
  3. You can edit the extension-config.js & manifest.js files in case you wish to change any of the extension strings or default configuration values.
  4. You are also free to edit the extension icons for a more personalized experience.

Extension distribution

You now must decide how you want to provide the Chrome Extension to your users.

  1. Submit the extension to the Chrome Web Store
    This is the recommended option if you want users to easily install the extension directly from the official Chrome Web Store.
  2. Provide the extension files manually
    You can create a ZIP archive of the Chrome Extension folder and provide it directly to your users without submitting it to the official Chrome Web Store.

Manual Chrome installation

If you decide to provide the extension files manually, your users can install the extension in Chrome by following the steps below.

  1. Download the Chrome Extension ZIP file that you provide.
  2. Unzip the downloaded file on their computer.
  3. Open Chrome and go to chrome://extensions/.
  4. Click on Manage Extensions if they are not already on that page.
  5. Enable Developer mode by using the toggle from the top right corner.
  6. Click on Load unpacked.
  7. Select the unzipped Chrome Extension folder.
  8. The extension icon should now appear in the Chrome toolbar.

Plugin installation

  1. Download the product files after purchasing & unzip them.
  2. Upload the chrome-extension folder to your main product installation, inside of the plugins folder.
  3. Go to your installation websiteAdmin panelPlugins page.
  4. Find the Chrome Extension plugin and install / enable it.
  5. After the plugin is enabled, go to Admin panelSettingsChrome Extension page.
  6. Configure the needed settings and make sure to save the changes.
Important: If you submit the extension to the Chrome Web Store, your users will be able to install it much easier. If you provide the files manually, users must install it through Developer mode.

Digital Wallets plugin

This is the installation documentation for the Digital Wallets plugin, which allows your users to create digital wallet cards that can be added to Google Wallet and Apple Wallet.

Google Wallet API setup

  1. Go to the Google Pay & Wallet Console and make sure to login to your Google account.
  2. Create a new Google Wallet API Issuer account or use an already existing one.
  3. Copy your Issuer ID, as it will be needed later in your product installation.
  4. Go to the Google Cloud Console and create a new project or select an already existing project that you want to use.
  5. Go to the APIs & ServicesLibrary page.
  6. Search for Google Wallet API and enable it for your selected project.
  7. Go to the IAM & AdminService Accounts page.
  8. Create a new service account with a descriptive name, such as digital-wallets-api.
  9. After creating the service account, go to the Keys tab.
  10. Click on Add keyCreate new key and select the JSON key type.
  11. Download the generated JSON key file and keep it safe, as it will be needed in your product installation.
  12. Copy the service account email address, as it will also be needed in the Google Wallet Console.

Google Wallet Console permissions

  1. Go back to the Google Pay & Wallet Console.
  2. Navigate to the Users section.
  3. Invite the service account email address that you created in Google Cloud Console.
  4. Give the service account Developer access.
  5. Save the changes and make sure the service account is listed as an active user in your Google Wallet issuer account.

Apple Wallet requirements

  1. Enroll in the Apple Developer Program. Apple Wallet pass certificates require an active membership.
  2. Make sure your product installation uses HTTPS in production.
  3. Use an Apple Account with access to Certificates, Identifiers & Profiles.
  4. Have an iPhone or a Mac with Apple Wallet available for the final pass installation test.

An iOS application, App Store submission, Apple Pay merchant account, and payment processing integration are not required.

Create the Apple Pass Type ID

  1. Go to the Apple Developer Identifiers page.
  2. Click the + button and select Pass Type IDs.
  3. Enter a description for your installation.
  4. Enter an identifier using the reverse-domain format, such as pass.com.example.digitalwallets.
  5. Register the identifier and save the exact Pass Type ID for the product settings.
  6. Copy your Apple Team ID from the Apple Developer membership details page.

Create and export the Apple pass certificate

  1. Open Keychain Access on macOS.
  2. Go to Certificate AssistantRequest a Certificate From a Certificate Authority.
  3. Enter your Apple Developer email address, select Saved to disk, and generate the certificate signing request file.
  4. Return to the Pass Type ID in the Apple Developer portal and click Create Certificate.
  5. Upload the certificate signing request and download the generated Pass Type ID certificate.
  6. Open the downloaded certificate to install it in Keychain Access.
  7. In Keychain Access, locate the pass certificate and its private key, then export both together as a password-protected .p12 file.
  8. Keep the .p12 file and password private. They can be used to sign passes for your Pass Type ID.

Download the Apple WWDR certificate

  1. Go to Apple's Certificate Authority page.
  2. Download the current Worldwide Developer Relations intermediate certificate used for Apple Wallet pass signing.
  3. Keep the downloaded .cer file for the Digital Wallets settings page.

Plugin installation

  1. Download the product files after purchasing & unzip them.
  2. Upload the digital-wallets folder to your main product installation, inside of the plugins folder.
  3. Go to your installation websiteAdmin panelPlugins page.
  4. Find the Digital Wallets plugin and install / enable it.
  5. After the plugin is enabled, go to Admin panelSettingsDigital Wallets page.
  6. Enable the Google Wallet integration.
  7. Paste your Google Wallet Issuer ID into the provided field.
  8. Upload or paste the contents of your Google service account JSON key into the provided field.
  9. To use Apple Wallet, enable the Apple Wallet integration.
  10. Enter the Apple Pass Type ID, Team ID, and organization name.
  11. Upload the password-protected .p12 pass certificate and enter its export password.
  12. Upload the Apple WWDR .cer or .pem certificate.
  13. Save the changes.
  14. Make sure to change your plan features access from the product installationAdmin panelPlans page as well.

Using Digital Wallets

  1. After the plugin is configured, users will be able to create wallet cards from their account dashboard.
  2. Each wallet card can contain details such as a title, subtitle, logo, cover image, background color, QR code destination, phone number, email address, website, and other custom fields.
  3. The QR code destination can point to an existing biolink page, vCard link, event link, short URL, or any custom URL.
  4. Users can display their wallet cards on their biolink pages by using the dedicated wallet card biolink block.
  5. The biolink block can display Google Wallet, Apple Wallet, or both wallet buttons.
  6. Visitors can save the card by clicking the matching Add to Google Wallet or Add to Apple Wallet button.
  7. The existing wallet URL remains compatible. Google Wallet is used by default when both integrations are enabled.

Google Wallet production access

New Google Wallet API issuer accounts start in Demo Mode. While in demo mode, wallet cards can only be saved by users with Administrator or Developer access to your issuer account, or by users added as test accounts.

To make your Google Wallet cards publicly available to all users, you must request publishing access from Google.

  1. Go to the Google Pay & Wallet Console.
  2. Make sure your Business Profile is completed.
  3. Make sure you have created at least one Passes Class for your issuer account.
  4. Open the Google Wallet API section.
  5. Find the Get publishing access section.
  6. Click Request publishing access and submit the request.
  7. Google will review your issuer account and notify you when publishing access has been approved.
Important: Until Google approves publishing access, your issuer account will remain in Demo Mode and generated passes will display the [TEST ONLY] label.

Apple certificate renewal

  1. Apple Wallet pass certificates expire and must be renewed through the Apple Developer portal.
  2. Create or renew the certificate for the same Pass Type ID.
  3. Export the renewed certificate and private key as a new .p12 file.
  4. Upload the new file and password in the Apple Wallet settings, then save the changes.

Hosting & Domains

Managed Cloud Hosting

Easy, intermediate

Shared Hosting

Easy

Self-managed VPS Hosting

Advanced

Domains

We recommend Cloudways for beginners or intermediates. We currently use Hetzner for hosting and Namecheap for domains for all AltumCode websites.

Frequently asked questions

Answers to common questions and troubleshooting issues.

This is usually caused by an incorrect server rewrite configuration.

Nginx: Make sure you completed the Nginx setup.

Apache:

  • Make sure the .htaccess file was uploaded.
  • Make sure the .htaccess file has the correct permissions, usually 644.
  • Make sure mod_rewrite is enabled on your server.
  • Restore the original .htaccess file if it was modified.

  • If your server uses .htaccess, try removing its first line. Some server configurations do not support it.
  • If the error occurs when submitting a form, your web host may be blocking the request. Try disabling mod_security or contact your hosting provider.

SMTP issues are usually caused by incorrect credentials, an unavailable SMTP server or your web host blocking the connection. Verify your SMTP settings first, then contact your SMTP or hosting provider if the issue persists.

The Bearer Authentication header is either not being sent correctly or your hosting provider is removing it before it reaches the application. Contact your hosting provider or, for Apache servers, try this authorization header fix.

This usually means part of the payment processor configuration is missing or incorrect. Review its setup and verify all required credentials, callbacks and settings.

Spam registrations cannot be completely eliminated, but the available protection features can significantly reduce them.

  • Email confirmation - Admin Panel → Settings → Users
  • Captcha - Admin Panel → Settings → Captcha
  • Country blocking - Admin Panel → Settings → Users
  • Email domain blocking - Admin Panel → Settings → Users
  • Automatically delete unconfirmed or old users - Admin Panel → Settings → Users
  • Bulk delete users - Admin Panel → Users
  • Email Shield plugin - adds blacklist and additional signup protection

  1. Open your product database using a database manager such as phpMyAdmin.
  2. Open the users table and find your admin account.
  3. Set its password to $2y$10$uFNO0pQKEHSFcus1zSFlveiPCB3EvG9ZlES7XKgJFTAl5JbRGFCWy. This temporarily sets the password to admin.
  4. Delete the folder inside uploads/cache/ to clear the cache.
  5. Log in and immediately change your password.

  1. Open your product database using a database manager such as phpMyAdmin.
  2. Open the settings table and find the captcha key.
  3. Edit its value and change "login_is_enabled":true to "login_is_enabled":false.
  4. Delete the folder inside uploads/cache/ to clear the cache.

Go to Admin Panel → Languages → {language name} → Translate app to change static website text.

It is recommended to create a new language instead of editing the original one, so your changes are not overwritten during future updates.

Advanced users can also edit the language files directly:

  • User side: app/languages/english#en.php
  • Admin side: app/languages/admin/english#en.php

Create a new language from Admin Panel → Languages → Create language, then use Translate app to translate its strings.

Advanced users can also duplicate the original language files and follow the same naming format: language_name#language_code.php.

Your server is limiting the number of form fields that can be submitted at once.

Increase the PHP max_input_vars setting to the value displayed under Admin Panel → Languages → {language name} → Translate app.

Contact your hosting provider if you cannot change this setting yourself.

  • Page structure and components: edit themes/altum/views/index/index.php.
  • Text: use the language system.
  • Images: go to Admin Panel → Settings → Custom images.
  • Custom landing page: go to Admin Panel → Settings and configure the Custom landing page URL.

Choose the method that best matches what you want to customize:

  • Theme colors: Admin Panel → Settings → Theme
  • Custom CSS: Admin Panel → Settings → Custom CSS
  • CSS files: edit the files in themes/altum/assets/css/
  • SCSS: edit and recompile the source files (advanced)

Support for custom design work is not included.

Go to Admin Panel → Resources, Pages to customize the footer branding.

  1. Back up your product files and database.
  2. Move both to the new server.
  3. Update the config.php file with the new server and database details.
  4. Verify that all configuration values are correct for the new hosting environment.