How can we help?

Search our knowledge base or browse categories below.

Table of Contents


Getting Started

Creating Your Account

You can sign up for AstroLink in two ways:

  1. Email & Password -- Enter your email, choose a username (3+ characters, letters, numbers, underscores, and hyphens), and set a password.
  2. Google Sign-In -- Click "Sign in with Google" to create your account instantly. A username will be generated from your Google profile.

After signing up, you'll receive a welcome email and be taken to your dashboard.

Your Profile URL

Every AstroLink user gets a public profile at:

https://app.astrolink.io/u/your-username

This is the link you share everywhere -- your social media bios, email signatures, business cards, and more. Anyone who visits this URL will see your profile, links, and store (if enabled).

Getting Started Checklist

When you first sign up, here's what we recommend:

  1. Set your display name and bio -- Tell visitors who you are
  2. Upload a profile photo -- Add a face to your page
  3. Add your social links -- Connect your Instagram, Twitter, YouTube, etc.
  4. Add your first links -- Share your most important URLs
  5. Pick a theme -- Customise your page's look and feel
  6. Share your profile URL -- Add it to your social media bios

Your Profile

Display Name & Bio

Your display name and bio are the first things visitors see on your profile.

  • Display Name -- Your name as shown on your profile (doesn't need to match your username)
  • Bio -- A short description about yourself (up to 600 characters)

Edit both from Dashboard > Profile > Details.

Profile Photo

Upload a profile photo to personalise your page.

  • Supported formats: JPEG, PNG, WebP
  • Images are automatically compressed and resized to 400x400px for optimal loading
  • Your photo appears on your public profile and in the dashboard

To upload or change your photo, go to Dashboard > Profile > Details and click on your avatar.

Username

Your username determines your profile URL (app.astrolink.io/u/your-username).

Username rules:

  • Minimum 3 characters
  • Letters, numbers, underscores, and hyphens only
  • Must be unique (the app checks availability in real-time)
  • Can be changed at any time from Dashboard > Settings > Account

Changing your username immediately updates your profile URL. Your old URL will stop working, so update it wherever you've shared it.

Profile Visibility Options

Control what shows on your public profile:

Option Description
Show Profile Image Toggle your avatar on/off
Show Bio Toggle your bio on/off
Show Social Links Toggle the social links section on/off

These are managed from your profile appearance settings.


Appearance & Themes

Customise how your profile looks to visitors. All appearance settings are in Dashboard > Profile > Appearance.

Theme Modes

Choose your base theme:

Mode Description
Default Light background with clean styling
Dark Dark background with light text
Gradient Background with a color gradient between two colors you choose
Colors & Gradients
  • Background Color -- Set a solid background color (hex color picker)
  • Text Color -- Choose your text color (with contrast checking to ensure readability)
  • Gradient From / To -- When using gradient mode, pick the start and end colors for your background gradient
Button Styles

Choose the shape of your link buttons:

Style Description
Rounded Softly rounded corners
Square Sharp, straight corners
Pill Fully rounded, capsule-shaped buttons
Background Images

Upload a custom background image for your profile (Pro feature).

  • Supported formats: JPEG, PNG, WebP
  • Images are automatically compressed and resized (max 1920x1080px, quality 85%)
  • You can also select from previously uploaded images in your media library
Video Embeds

Add a video to the top of your profile (Pro feature).

  • Supports YouTube and Vimeo URLs
  • Thumbnails are auto-generated from the video platform
  • Toggle video visibility on/off with the Show Video setting
Hide Branding

Pro users can hide the "Powered by AstroLink" branding from their public profile for a completely white-labelled experience.


Theme Marketplace

Browse and apply pre-designed themes created for the AstroLink community. The theme marketplace is available to Pro users.

Browsing Themes
  1. Go to Dashboard > Themes
  2. Browse available themes -- each shows a preview of colors and style
  3. Filter by tags: Neon, Gradient, Dark, Minimal, Luxury, Tech, Launch-ready, and more
  4. Click a theme to see full details (name, tagline, description, preview colors)
  5. Click Add to Library to save it, or Apply to use it immediately

Example themes:

  • Nova Pulse -- Neon purples to orange, pill buttons, gradient mode
  • Carbon Luxe -- Matte black with champagne accents, dark mode
  • Solar Flare -- Sunset gradients (amber to orange to red), pill buttons
  • Aqua Fusion -- Teal spectrum (cyan to teal), rounded buttons
  • Midnight Sonar -- Deep navy with indigo accents, square buttons
  • Obsidian Circuit -- Black with purple neon, pill buttons
  • Velvet Eclipse -- Purple to gold, rounded buttons
  • Pacific Orbit -- Sky blues, pill buttons
Theme Bundles

Theme bundles are curated collections of multiple themes grouped by style. Add an entire bundle to your library at once instead of adding themes one by one.

Your Theme Library

Themes you add are saved to your personal library. Switch between saved themes at any time without losing your collection. Your currently active theme is tracked separately, so you can experiment freely.


Visitor Messages

Let visitors leave messages directly on your profile -- like a built-in contact form. This feature is available on Pro plans.

Enabling Messages
  1. Go to Dashboard > Profile > Messages
  2. Toggle Enable Messages on
  3. Customise your form (see below)
  4. Save

When enabled, a message form appears at the bottom of your public profile.

Customising the Message Form
Setting Description
Headline The heading above the form (default: "Leave a message")
Description Optional text below the headline explaining what the form is for
Message Placeholder Placeholder text inside the message box (default: "Write your message here...")
Consent Text Optional text for a consent checkbox (e.g., "I agree to be contacted"). If set, visitors must check the box before sending.
Message Fields

Configure which fields appear on your message form. Each field can be toggled on/off and set as required or optional.

Field Type Default
Name Text Enabled, optional
Email Email Enabled, required
Social handle / website URL Disabled, optional
Custom field Custom Disabled, optional

Each field has a configurable label and placeholder. You can also add additional custom fields with your own labels.

Limits:

  • Message body: 600 characters max
  • Field values: 200 characters max
Managing Your Inbox

Go to Dashboard > Messages to see all visitor messages.

  • Messages arrive with the visitor's name, email, and any other fields you configured
  • Mark as read -- Track which messages you've reviewed
  • Archive -- Move messages out of your main inbox
  • Messages include metadata like submission time
Rate Limiting

To prevent spam, visitor messages are rate-limited to 5 messages per IP address per 15 minutes. If a visitor exceeds this limit, they'll see a friendly message asking them to try again later.


Analytics

Track how your profile and links are performing. Analytics are visible from your dashboard.

Profile Views

Every time someone visits your public profile page, it's counted as a view. You can see:

  • Total views -- All-time profile view count
  • Last viewed -- When your profile was most recently viewed
Profile Shares

Track when visitors share your profile:

  • Total shares -- All-time share count
  • Share methods tracked -- Copy link, share to X/Twitter, share to LinkedIn, and other methods
  • Last shared -- When your profile was most recently shared

Plans & Billing

Free Plan

Price: £0/month

Includes:

  • Public profile page
  • Up to 5 active links
  • Social links
  • Theme colors and gradients
  • Profile photo and bio
  • Basic link analytics
Pro Plan

Price: £5/month or £49/year (save with annual billing)

Everything in Free, plus:

  • Unlimited links
  • Video embeds
  • Background images
  • Hide AstroLink branding
  • Visitor message inbox
  • Pro theme marketplace
  • Store access (upon approval)
  • Priority support
Managing Your Subscription
  • Upgrade -- Go to Dashboard > Settings > Subscription and click Upgrade to Pro
  • Billing portal -- Click Manage Billing to open the Stripe customer portal where you can update payment methods, view invoices, or cancel
  • Plan status -- See your current plan, billing period, and next renewal date from the subscription settings page

Subscription statuses:

Status Description
Active Your subscription is current and active
Cancelled You've cancelled but can still use Pro features until the end of your billing period
Past Due A payment failed -- update your payment method to keep your Pro features
Expired Your subscription has ended
What Happens When You Downgrade

If you cancel your Pro plan or it expires:

  • Your profile remains live and accessible
  • Links beyond the 5-link limit are automatically deactivated (not deleted)
  • Pro-only features (video embeds, background images, visitor messages, theme marketplace, branding removal) become unavailable
  • Store access is paused
  • If you re-subscribe, everything is restored -- your deactivated links come back, and your store picks up where you left off

Your Store

Sell digital products directly from your AstroLink profile. The store is available to Pro plan users with approved store access.

Requesting Store Access
  1. Go to Dashboard > Settings > Store
  2. Click Request Store Access
  3. Our team will review and approve your request (usually within 24 hours)
  4. Once approved, you'll see the full store dashboard
Connecting Stripe

AstroLink uses Stripe Connect to process payments securely. Your buyers pay through Stripe, and funds are deposited directly into your bank account.

To connect your Stripe account:

  1. Go to Dashboard > Settings > Store
  2. Click Connect Stripe Account
  3. You'll be redirected to Stripe to complete identity verification and banking setup
  4. Once verification is complete, your account status will show as Active

You can check your Stripe account status at any time. You'll see indicators for:

  • Charges enabled -- You can accept payments
  • Payouts enabled -- Stripe can send money to your bank
  • Onboarding complete -- All verification steps are done

If any of these are not enabled, click the link to complete your Stripe setup.

Creating Products
  1. Go to Dashboard > Store > Products
  2. Click New Product
  3. Fill in the product details:
    • Title -- The name of your product
    • Description -- What buyers will see
    • Price -- Set in your chosen currency (USD, EUR, or GBP)
    • Accent Color -- Customise the product card appearance with a color or gradient
    • Category -- Optional tags to organise your products
  4. Click Save to create the product as a draft

Product management features:

  • Search products by name
  • Filter by status (All / Live / Draft)
  • Sort by creation date, name, or price
  • View sales metrics (total sales, net revenue) per product
Digital Products & File Uploads

Sell digital files (PDFs, ZIPs, images, videos, etc.) directly through AstroLink. When a buyer completes their purchase, they get instant access to download the file.

To attach a digital file to a product:

  1. Edit your product
  2. In the Digital File section, click Upload File or select from your file library
  3. Choose your file (max 100 MB per file)
  4. Save the product

Managing your file library:

  • Go to Dashboard > Store > Files to see all your uploaded digital files
  • Upload new files, view file details (name, size, type), or remove files
  • Files can be reused across multiple products

Supported file types: Any file type is supported -- PDF, ZIP, MP4, PNG, PSD, and more.

Product Status (Draft vs Live)

Products have two statuses:

  • Draft -- Only visible to you in the dashboard. Not shown on your public storefront.
  • Live -- Visible to everyone on your storefront and available for purchase.

Toggle between draft and live at any time from the product list. This is useful for preparing products before launch or temporarily hiding a product without deleting it.

Product Images

Each product can have a cover image displayed on your storefront.

  • Upload an image from the product editor
  • Add alt text for accessibility
  • Images are displayed on your storefront product cards and product detail views
Categories

Organise your products with categories:

  • Add one or more category tags to each product
  • Buyers can filter your storefront by category
  • Categories are free-form text -- use whatever makes sense for your store

Checkout & Payments

How Checkout Works

When a buyer clicks Buy on your storefront:

  1. They're taken to a secure Stripe Checkout page
  2. They enter their payment details (card, Apple Pay, Google Pay, etc.)
  3. If you've set up custom checkout fields, they fill those in too
  4. Payment is processed through your connected Stripe account
  5. They're redirected to a thank-you page with order details
  6. If the product is digital, they get immediate download access
  7. Both you and the buyer receive email confirmations
  8. If you have webhooks configured, a webhook is sent to your endpoint

The entire payment flow is handled by Stripe -- AstroLink never sees or stores card details.

Custom Checkout Fields

Collect additional information from buyers at checkout (e.g., licence name, Discord username, preferred format, special instructions).

To set up custom checkout fields:

  1. Go to Dashboard > Settings > Store
  2. Under Checkout Fields, add your custom fields
  3. For each field, configure:
    • Label -- The field name buyers see (e.g., "License Name")
    • Placeholder -- Helper text (e.g., "Enter the name for your licence")
    • Required -- Whether the field must be filled in

Custom field responses are included in:

  • Your order details in the dashboard
  • Your seller notification email
  • Webhook payloads (in the checkoutFields array)
Custom Thank-You Message

Personalise the post-purchase experience:

  1. Go to Dashboard > Settings > Store
  2. Under Thank-You Message, enter your custom message
  3. This message is displayed on the thank-you page after a successful purchase

Use this to thank buyers, provide instructions, share community links, or set expectations for delivery.

Currencies

AstroLink supports three currencies:

  • USD (US Dollar)
  • EUR (Euro)
  • GBP (British Pound)

Set your default currency in store settings. All products in a single checkout must use the same currency.

Fees & Pricing

AstroLink charges a 5% platform fee on each sale. This fee is automatically deducted from the payment before funds reach your Stripe account.

Example:

  • You sell a product for £20.00
  • Platform fee (5%): £1.00
  • Stripe processing fee: ~£0.88 (varies by payment method and region)
  • You receive: ~£18.12

The platform fee is non-refundable even if you issue a refund to the buyer.


Orders

Viewing Orders

Go to Dashboard > Store > Orders to see all your orders. Each order shows:

  • Order ID
  • Product purchased
  • Buyer email
  • Amount (gross, fees, and net)
  • Status
  • Date
Order Statuses
Status Description
Pending Checkout session created, awaiting payment
Succeeded Payment completed successfully
Failed Payment was declined or failed
Expired Checkout session expired before payment
Refunded You issued a refund for this order
Disputed Buyer filed a chargeback with their bank
Refunding an Order

You can refund any order with a succeeded status:

  1. Go to Dashboard > Store > Orders
  2. Find the order and click Refund
  3. Confirm the refund

Important notes about refunds:

  • The buyer receives a full refund of the purchase amount
  • The 5% platform fee is not refunded to you
  • Stripe's processing fees may or may not be returned depending on your Stripe settings
  • Refund details are recorded in the order history

Digital Downloads

How Downloads Work for Buyers

After a successful purchase of a digital product:

  1. The buyer is redirected to the thank-you page
  2. A Download button appears for each digital file in their order
  3. Clicking the button generates a secure, time-limited download link
  4. The file downloads directly to their device

Buyers can return to the thank-you page using the link in their receipt email to download again (within limits).

Download Limits

To prevent abuse, digital downloads have these limits:

Limit Value
Max downloads per file 5
Download link expiry 7 days after purchase

Once a buyer has reached 5 downloads or 7 days have passed, they will no longer be able to download the file. If a buyer needs additional access, they will need to contact you directly.


Payouts

Viewing Your Balance

Go to Dashboard > Store to see your current Stripe balance, including:

  • Available balance -- Funds ready to be paid out
  • Pending balance -- Funds from recent sales (typically takes 2-7 business days to become available)

Balances are shown per currency if you've sold in multiple currencies.

How Payouts Work

Payouts are handled entirely by Stripe:

  • Stripe automatically transfers your available balance to your connected bank account
  • Payout frequency depends on your Stripe settings (daily, weekly, or monthly)
  • You can manage payout settings directly in your Stripe Dashboard
  • Payout statuses (paid, failed, cancelled) are synced back to your AstroLink dashboard

Webhooks

What Are Webhooks?

Webhooks let you receive real-time notifications when events happen in your store. When an order is placed, refunded, or disputed, AstroLink sends an HTTP POST request to your specified URL with details about the event.

This is useful for:

  • Custom fulfilment -- Trigger your own delivery system when an order succeeds
  • CRM integration -- Add buyers to your email list or CRM
  • Inventory management -- Update stock counts in external systems
  • Analytics -- Track sales in your own dashboards
  • Automation -- Trigger Zapier, Make, n8n, or custom workflows
Setting Up Webhooks
  1. Go to Dashboard > Settings > Store
  2. Under Webhooks, enter your Webhook URL (must be HTTPS)
  3. Set a Webhook Secret -- a random string used to verify that webhooks are genuinely from AstroLink
  4. Select which events you want to receive
  5. Save your settings

Generating a webhook secret:

Use any random string generator, or run this in your terminal:

openssl rand -hex 32

Keep your webhook secret safe -- treat it like a password.

Webhook Events
Event Trigger
store.order.succeeded A buyer completed payment successfully
store.order.failed A payment attempt failed
store.order.expired A checkout session expired without payment
store.order.disputed A buyer filed a chargeback
store.order.refunded You refunded an order
store.webhook.test You clicked "Send Test Webhook" in settings

Select only the events you need. Most integrations only need store.order.succeeded.

Webhook Payload

Every webhook sends a JSON POST request with this structure:

{
  "id": "store.order.ord_abc123",
  "type": "store.order.succeeded",
  "createdAt": "2025-01-15T10:30:00.000Z",
  "data": {
    "order": {
      "id": "ord_abc123",
      "userId": "user_xyz",
      "productId": "prod_456",
      "buyerEmail": "buyer@example.com",
      "quantity": 1,
      "grossCents": 2000,
      "applicationFeeCents": 100,
      "stripeFeeCents": 88,
      "netCreatorCents": 1812,
      "currency": "usd",
      "status": "succeeded",
      "checkoutSessionId": "cs_xxx",
      "chargeId": "ch_xxx",
      "paymentIntentId": "pi_xxx",
      "createdAt": "2025-01-15T10:30:00.000Z"
    },
    "product": {
      "id": "prod_456",
      "title": "My Awesome E-Book",
      "description": "A comprehensive guide to...",
      "priceCents": 2000,
      "currency": "usd",
      "isDigital": true,
      "category": ["ebooks", "guides"]
    },
    "store": {
      "userId": "user_xyz",
      "username": "yourstore"
    },
    "checkoutFields": [
      {
        "label": "License Name",
        "value": "John Doe"
      }
    ],
    "lineItems": [
      {
        "productId": "prod_456",
        "title": "My Awesome E-Book",
        "quantity": 1,
        "unitPriceCents": 2000
      }
    ]
  }
}

Key fields explained:

Field Description
id Unique webhook delivery ID
type The event type (e.g., store.order.succeeded)
createdAt ISO 8601 timestamp of the event
data.order Full order details including amounts and status
data.product The product that was purchased
data.store Your store/profile information
data.checkoutFields Buyer responses to your custom checkout fields
data.lineItems Itemised list of products in the order

Amount fields are in the smallest currency unit (e.g., 2000 = £20.00). Divide by 100 to get the full amount.

Verifying Webhook Signatures

Every webhook request includes signature headers so you can verify it genuinely came from AstroLink (and not a malicious third party).

Headers included with every webhook:

Header Description
X-Astrolink-Webhook-Event The event type (e.g., store.order.succeeded)
X-Astrolink-Webhook-Timestamp Unix timestamp (milliseconds) when the webhook was sent
X-Astrolink-Webhook-Signature The HMAC-SHA256 signature

Signature format:

t=1705312200000,v1=5a4b3c2d1e...

How to verify:

  1. Extract the timestamp (t) and signature (v1) from the X-Astrolink-Webhook-Signature header
  2. Construct the signed payload: {timestamp}.{raw_json_body}
  3. Compute HMAC-SHA256 using your webhook secret as the key
  4. Compare your computed signature with v1 from the header
  5. Always check that the timestamp is recent (within 5 minutes) to prevent replay attacks
Testing Webhooks

Before going live, test your webhook integration:

  1. Go to Dashboard > Settings > Store
  2. Make sure your webhook URL and secret are configured
  3. Click Send Test Webhook
  4. AstroLink sends a store.webhook.test event to your URL
  5. Check your endpoint received and processed the webhook correctly

Tips for testing:

  • Use a service like webhook.site or RequestBin to inspect webhook payloads during development
  • Use ngrok to expose your local development server to receive webhooks
  • Check your server logs for any errors processing the webhook
Webhook Best Practices
  1. Always verify signatures -- Never trust a webhook without verifying the HMAC signature
  2. Respond quickly -- Return a 200 status code within 5 seconds. Do heavy processing asynchronously.
  3. Handle duplicates -- Use the webhook id field to deduplicate. The same event may be sent more than once.
  4. Use HTTPS -- Your webhook URL must use HTTPS for security
  5. Store the raw body -- Parse the JSON body only after signature verification to avoid tampering
  6. Monitor failures -- Webhook delivery status is tracked in your order metadata so you can see if deliveries failed
Example: Node.js Webhook Handler
const express = require("express");
const crypto = require("crypto");

const app = express();

// IMPORTANT: Use raw body for signature verification
app.post(
  "/webhooks/astrolink",
  express.raw({ type: "application/json" }),
  (req, res) => {
    const secret = process.env.ASTROLINK_WEBHOOK_SECRET;

    // 1. Extract signature components
    const signature = req.headers["x-astrolink-webhook-signature"];
    const timestamp = req.headers["x-astrolink-webhook-timestamp"];
    const event = req.headers["x-astrolink-webhook-event"];

    if (!signature || !timestamp) {
      return res.status(400).send("Missing signature headers");
    }

    // 2. Parse the signature header
    const parts = {};
    signature.split(",").forEach((part) => {
      const [key, value] = part.split("=");
      parts[key] = value;
    });

    // 3. Verify timestamp is recent (within 5 minutes)
    const now = Date.now();
    if (Math.abs(now - parseInt(parts.t)) > 5 * 60 * 1000) {
      return res.status(400).send("Webhook timestamp too old");
    }

    // 4. Compute expected signature
    const body = req.body.toString();
    const signedPayload = `${parts.t}.${body}`;
    const expectedSignature = crypto
      .createHmac("sha256", secret)
      .update(signedPayload)
      .digest("hex");

    // 5. Compare signatures
    if (
      !crypto.timingSafeEqual(
        Buffer.from(parts.v1),
        Buffer.from(expectedSignature)
      )
    ) {
      return res.status(400).send("Invalid signature");
    }

    // 6. Signature verified! Process the webhook
    const payload = JSON.parse(body);
    console.log(`Received event: ${payload.type}`);

    switch (payload.type) {
      case "store.order.succeeded":
        const { order, product, checkoutFields } = payload.data;
        console.log(
          `New order: ${order.id} for ${product.title} from ${order.buyerEmail}`
        );
        console.log(`Amount: $${(order.grossCents / 100).toFixed(2)}`);

        // Your fulfilment logic here:
        // - Send to your CRM
        // - Trigger email sequence
        // - Update inventory
        // - Grant access to a course
        break;

      case "store.order.refunded":
        console.log(`Order refunded: ${payload.data.order.id}`);
        // Revoke access, update records, etc.
        break;

      case "store.order.disputed":
        console.log(`Dispute on order: ${payload.data.order.id}`);
        // Alert your team, gather evidence, etc.
        break;

      case "store.webhook.test":
        console.log("Test webhook received successfully!");
        break;
    }

    // 7. Always respond with 200
    res.status(200).json({ received: true });
  }
);

app.listen(3000, () => {
  console.log("Webhook server running on port 3000");
});
Example: Python Webhook Handler
import os
import hmac
import hashlib
import json
import time
from flask import Flask, request, jsonify

app = Flask(__name__)

# Never hardcode your secret -- always use environment variables
WEBHOOK_SECRET = os.environ["ASTROLINK_WEBHOOK_SECRET"]


def verify_signature(payload_body, signature_header, timestamp_header):
    """Verify the webhook signature from AstroLink."""
    if not signature_header or not timestamp_header:
        return False

    # Parse signature header: t=123,v1=abc...
    parts = {}
    for part in signature_header.split(","):
        key, value = part.split("=", 1)
        parts[key] = value

    # Check timestamp is within 5 minutes
    ts = int(parts.get("t", 0))
    if abs(time.time() * 1000 - ts) > 5 * 60 * 1000:
        return False

    # Compute expected signature
    signed_payload = f"{parts['t']}.{payload_body}"
    expected = hmac.new(
        WEBHOOK_SECRET.encode(),
        signed_payload.encode(),
        hashlib.sha256,
    ).hexdigest()

    # Constant-time comparison
    return hmac.compare_digest(parts.get("v1", ""), expected)


@app.route("/webhooks/astrolink", methods=["POST"])
def handle_webhook():
    body = request.get_data(as_text=True)

    # Verify signature
    if not verify_signature(
        body,
        request.headers.get("X-Astrolink-Webhook-Signature"),
        request.headers.get("X-Astrolink-Webhook-Timestamp"),
    ):
        return jsonify({"error": "Invalid signature"}), 400

    # Parse and process
    payload = json.loads(body)
    event_type = payload["type"]

    if event_type == "store.order.succeeded":
        order = payload["data"]["order"]
        product = payload["data"]["product"]
        checkout_fields = payload["data"].get("checkoutFields", [])

        print(f"New order: {order['id']}")
        print(f"Product: {product['title']}")
        print(f"Buyer: {order['buyerEmail']}")
        print(f"Amount: ${order['grossCents'] / 100:.2f}")

        # Your fulfilment logic here
        for field in checkout_fields:
            print(f"  {field['label']}: {field['value']}")

    elif event_type == "store.order.refunded":
        print(f"Refund: {payload['data']['order']['id']}")

    elif event_type == "store.order.disputed":
        print(f"Dispute: {payload['data']['order']['id']}")

    elif event_type == "store.webhook.test":
        print("Test webhook received!")

    return jsonify({"received": True}), 200


if __name__ == "__main__":
    app.run(port=3000)

Email Notifications

AstroLink sends automatic email notifications for key events:

For all users:

  • Welcome email -- Sent when you create your account, with a link to your dashboard

For buyers:

  • Purchase receipt -- Sent immediately after successful payment, includes order details, line items, total amount, and a link to download digital files (if applicable)

For sellers:

  • Order notification -- Sent when a buyer completes a purchase, includes order details, buyer email, amounts (gross/net after fees), and custom checkout field responses

Email notifications are enabled by default for all accounts.


Account Settings

All account settings are in Dashboard > Settings.

Changing Your Username
  1. Go to Dashboard > Settings > Account
  2. Edit the Username field
  3. The app checks availability in real-time
  4. Save to apply the change

Remember: changing your username changes your profile URL. Update it wherever you've shared it.

Email Verification

Verifying your email helps secure your account.

  • Check status -- Your verification status is shown in account settings
  • Send verification email -- Click the button to receive a verification link
  • Check verification -- After clicking the link in the email, click "Check verification" to update your status
Password Reset

If you've forgotten your password:

  1. Go to the login page
  2. Click Forgot password?
  3. Enter your email address
  4. Check your email for a reset link
  5. Click the link and set a new password
Deleting Your Account

To permanently delete your account:

  1. Go to Dashboard > Settings > Danger Zone
  2. Click Delete Account
  3. Confirm the deletion

This action is irreversible. All your data -- profile, links, store products, orders, messages, and analytics -- will be permanently deleted.


Sharing Your Profile

Share your AstroLink profile anywhere to drive traffic.

Your profile URL: https://app.astrolink.io/u/your-username

Built-in sharing options:

  • Copy link -- Copy your profile URL to clipboard
  • Share to X / Twitter -- Opens a pre-filled tweet with your profile link
  • Share to LinkedIn -- Opens a pre-filled LinkedIn post

All sharing activity is tracked in your analytics.

Where to use your link:

  • Instagram bio
  • TikTok bio
  • Twitter / X bio
  • YouTube channel description
  • Email signature
  • Business cards
  • Anywhere you want to share multiple links from one place

FAQ

General

What is AstroLink?

AstroLink is a link-in-bio platform with a built-in creator store. Create a single page with all your important links, social profiles, and digital products -- then share one link everywhere.

Is AstroLink free?

Yes. The Free plan includes a profile page, up to 5 links, social links, theme customisation, and basic analytics. The Pro plan (£5/mo) unlocks unlimited links, video embeds, background images, visitor messages, the theme marketplace, and store access.

What does my public profile URL look like?

Your profile is at https://app.astrolink.io/u/your-username. Share this link in your social media bios and anywhere else.

Profile & Appearance

Can I use a custom background image?

Yes, on the Pro plan. Upload any image (JPEG, PNG, or WebP) and it will be automatically optimised for your profile.

Can I add a video to my profile?

Yes, on the Pro plan. Add a YouTube or Vimeo URL and it will be embedded at the top of your profile.

Visitor Messages

How do visitor messages work?

When enabled (Pro plan), a contact form appears on your public profile. Visitors can leave their name, email, and a message. You'll find all messages in your Dashboard > Messages inbox.

Is there spam protection?

Yes. Messages are rate-limited to 5 per IP address per 15 minutes to prevent abuse.

Store

Do I need a Pro plan to use the store?

Yes. The store is available exclusively to Pro plan users. After upgrading, you'll need to request store access which is approved by our team.

What payment methods can my buyers use?

Buyers can pay with any method supported by Stripe, including:

  • Credit and debit cards (Visa, Mastercard, Amex, etc.)
  • Apple Pay
  • Google Pay
  • Other local payment methods (depending on your Stripe settings and region)

What happens if a buyer disputes a charge?

When a buyer files a chargeback:

  1. The order status changes to Disputed
  2. If you have webhooks configured, a store.order.disputed event is sent
  3. You can respond to the dispute through your Stripe Dashboard
  4. Stripe handles the dispute resolution process

Can I sell physical products?

AstroLink is optimised for digital products and services. While you can list physical products, there's no built-in shipping or inventory management. You can use webhooks to integrate with external fulfilment services.

What file types can I sell?

Any file type is supported for digital products -- PDFs, ZIPs, images, videos, audio files, design files, and more. The maximum file size is 100 MB per file.

Can buyers download files more than once?

Yes. Buyers get up to 5 downloads per file, and their download access expires 7 days after purchase. Each download link is valid for 1 hour.

How long until I receive my money?

After a successful sale:

  1. Funds are held by Stripe for a short settlement period (typically 2-7 business days for new accounts, shorter for established accounts)
  2. Once available, Stripe automatically pays out to your connected bank account
  3. Payout frequency depends on your Stripe settings (daily, weekly, or monthly)

Can I offer free products?

Product prices must be greater than zero. If you want to distribute free content, consider sharing download links directly through your AstroLink profile links.

What currencies are supported?

Currently USD, EUR, and GBP. All products in a single checkout session must use the same currency.

Webhooks

How do I integrate webhooks with Zapier / Make / n8n?

  1. Create a webhook trigger in your automation tool
  2. Copy the webhook URL it gives you
  3. Paste it into your AstroLink store webhook settings
  4. Set a webhook secret and configure it in your automation tool for verification
  5. Select the events you want to trigger automations
  6. Test with the Send Test Webhook button

My webhook isn't receiving events. What should I check?

  1. Verify your webhook URL is correct and uses HTTPS
  2. Make sure your server is publicly accessible (not behind a firewall or localhost)
  3. Check that you've selected the correct events in your webhook settings
  4. Use the Send Test Webhook button to diagnose issues
  5. Check your server logs for any errors
  6. Verify your endpoint returns a 200 status code within 5 seconds
Account

Can I change my username?

Yes, at any time from Dashboard > Settings > Account. Your profile URL will update immediately. Be sure to update it wherever you've shared the old URL.

How do I delete my account?

Go to Dashboard > Settings > Danger Zone and click Delete Account. This is irreversible -- all data will be permanently deleted.

How do I test my store before going live?

  1. Create a product and keep it in Draft status while you set everything up
  2. Configure and test your webhooks using the test button
  3. When ready, set the product to Live
  4. Make a real purchase to test the full flow end-to-end (you can refund yourself afterward)

Contact & Support

If you need help or have questions, get in touch:

We aim to respond to all enquiries within 24 hours.