Creator FAQ

For module authors & publishers

Customer? See the User FAQ instead.

Getting started

How do I become a creator on OEV?

Fill out the creator application. Include a brief pitch and any links to existing work (GitHub, Foundry package page, etc.). The OEV team reviews all applications and responds by email within a few days.

What happens after my application is approved?

Your account role is upgraded to creator and a vendor profile is created for you. You'll receive a welcome email with next steps. The Creator link will appear in the navigation, giving you access to the Creator Dashboard at oevtt.com/creator.

What is the revenue split?

OEV charges a flat 20% platform fee on each sale. You receive 80% of every purchase. There are no listing fees or monthly charges.

Uploading modules manually

How do I submit a new module?

  1. Go to your Creator Dashboard and click the + Submit Module tab.
  2. Fill in the module name, Foundry package ID, FVTT version compatibility, module type, description, and optional preview image.
  3. Attach your module zip file. The zip must contain a valid module.json at the root or in a single subdirectory.
  4. Click Submit for Review.

Submissions are reviewed by the OEV admin team. You'll receive an email when your module is approved or if any changes are requested.

What should be inside the module zip?

The zip should contain a standard Foundry VTT module structure: a module.json manifest plus all supporting files (scripts, styles, packs, images, etc.). Maximum zip size is 100 MB by default. If your module legitimately requires more space, use the Request larger limit button on your product card in the dashboard.

What fields are required in module.json?

At minimum: id, title, version, and compatibility (or minimumCoreVersion). The id field must match the Foundry package ID you entered when listing the product, or the upload will be rejected.

Can I set a price for my module?

Pricing is set by the OEV admin team during the review process. If you have a price in mind, mention it in the submission or email [email protected]. Free modules (price = $0) are also supported.

Publishing updates & new releases

How do I publish a new version of my module?

You have two options:

  • Dashboard upload — use the API Keys tab (coming soon: dedicated release upload UI)
  • API / GitHub Actions — push a new zip programmatically using your creator API key (recommended for active development)

In both cases the new zip is reviewed before it goes live. License holders are not notified automatically until the release is approved.

What versioning scheme should I use?

You can use any versioning scheme you choose, as long as version numbers are strictly and correctly incremental. Foundry VTT's built-in update scanner compares the version string in module.json against the installed version to detect available updates. If a new release has a lower or equal version number, Foundry will not flag it as an update — so every release you push must have a higher version than the previous one.

We recommend incorporating the target Foundry VTT major version into your scheme to make compatibility immediately obvious to users and in the store listing:

  • 14.1.0, 14.1.1, 14.2.0 — patch and minor updates targeting Foundry v14
  • 15.0.0, 15.0.1 — a new separate product edition targeting Foundry v15

Module listings on the OEV store show the supported Foundry VTT version range and are ordered newest release first. There is no strict format requirement — 1.0.0, 2024.01, and 3.0-rc1 are all valid, as long as each new release increments from the last.

Important: never reuse a version number or upload a zip with the same version as an existing release. OEV and Foundry both key off the version string to determine whether an update is available. If in doubt, increment the patch segment (1.2.3 → 1.2.4).

How do I create a creator API key?

  1. Go to Creator DashboardAPI Keys tab.
  2. Click + New key and give it a descriptive name (e.g. GitHub Actions — my-module).
  3. Click Generate. The full key is shown once in a pop-up — copy it immediately and store it securely.
  4. The key is displayed as a short prefix (e.g. oev_abc12345…) in the dashboard; the full value is never shown again.

You can have up to 10 active keys per account. Revoke a key at any time from the same tab.

How do I submit a release using the API?

Send a multipart/form-data POST request:

curl -X POST https://oevtt.com/api/creator/releases \
  -H "Authorization: Bearer YOUR_OEV_API_KEY" \
  -F "[email protected]" \
  -F "product_id=YOUR_PRODUCT_UUID" \
  -F "changelog=What changed in this version" \
  -F "version=1.2.0"

The endpoint validates that the module.json inside the zip has an id matching the product's Foundry package ID. On success the product is re-queued for review with status: "pending_review".

GitHub Actions CI/CD workflow

How do I set up automated releases from GitHub?

  1. Go to your GitHub repository → Settings → Secrets and variables → Actions and add two repository secrets:
    • OEV_API_KEY — the full API key generated in your creator dashboard
    • OEV_PRODUCT_ID — the UUID of the product in OEV (find it in the URL of the product in the admin/creator dashboard, or in the Supabase products table)
  2. Create a workflow file at .github/workflows/release.yml in your repository:
on:
  push:
    tags: ['v*']

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Build zip
        run: zip -r module.zip . -x "*.git*"

      - name: Publish to OEV
        run: |
          curl -X POST https://oevtt.com/api/creator/releases \
            -H "Authorization: Bearer $${{ secrets.OEV_API_KEY }}" \
            -F "[email protected]" \
            -F "product_id=$${{ secrets.OEV_PRODUCT_ID }}" \
            -F "changelog=$(git log -1 --pretty=%B)" \
            -F "version=$${{ github.ref_name }}"

To trigger a release, push a version tag: git tag v1.2.0 && git push --tags. GitHub Actions will build the zip and POST it to OEV automatically.

What does the API do with my zip?

  • Validates your API key and confirms you own the target product
  • Extracts module.json and checks the id field matches the product
  • Reads the version number from module.json (or from the version form field)
  • Uploads the zip to OEV's R2 storage
  • Sets the product's approval status to pending_review for admin sign-off
  • Updates last_used_at on the API key

My workflow is failing — where do I start debugging?

  • Check the curl exit code and response body in the Actions log
  • 401 Invalid or revoked API key — the key was revoked or the secret is wrong; generate a new key
  • 404 Product not found or access denied — wrong OEV_PRODUCT_ID or the product belongs to a different account
  • 422 module.json id … does not match — the id in your module.json doesn't match the Foundry package ID registered on the product
  • 400 Zip too large — request a higher limit from the dashboard

Analytics

How do I view my sales data?

Go to Creator DashboardAnalytics tab. You'll see:

  • Gross revenue — total customer payments across all products
  • Your share (80%) — your estimated payout after the platform fee
  • Total sales — number of completed purchases
  • Active licenses — number of currently active license holders
  • A monthly bar chart showing revenue over the past 12 months
  • A per-product breakdown with individual charts

How often is analytics data updated?

Analytics are computed in real time on each page load — there is no caching delay. Data reflects all purchases recorded in the database at the moment you open the tab.

Managing your content

How do I edit my module listing?

Go to Creator DashboardProducts tab, then click the Edit button on any product card. You can update the name, description, preview image, tags, lifecycle status, and FVTT version compatibility. Changes take effect immediately (no re-review required for metadata-only edits).

How do I request deletion of a module or a specific release?

Email [email protected] with:

  • The module name and product ID
  • Whether you want the entire product removed or only a specific release
  • The reason for removal

For full product deletion, existing license holders will receive an email notification. Refunds for active license holders are assessed case-by-case.

What lifecycle statuses can I set?

You can set a lifecycle status on each product to communicate its support level to buyers:

  • Stable — actively developed; you are shipping new features and updates. This is the default status for a freshly approved module.
  • Maintained — bug fixes and compatibility patches only; you are keeping the module working but no longer adding new features.
  • Archived — you have stopped all active work. The module is frozen at its last release but remains fully available for download. License holders retain access and can continue installing it; you are not expected to push further updates.
  • Abandoned — set automatically by OEV when a creator closes their account or is removed from the platform. The product is delisted from the storefront; only existing license holders can see and download it.

Only you (or OEV admins) can change a product's status. The status badge is shown to buyers on the product page and in their account.

Leaving the platform

Can I close my creator account?

Yes. You may leave and close your creator account at any time. Under the OEV Terms of Service and Creator Agreement, the following applies when you do:

  • All your products are removed from the storefront immediately — no new licenses will be sold.
  • You retain full copyright over all your modules. OEV makes no claim to your intellectual property.
  • Existing license holders retain their access. Your products are marked as Abandoned and remain visible and downloadable to anyone who already holds a license. They will not be visible to the general public or new shoppers.
  • License holders are notified by email that the creator has left and the module is no longer actively maintained.
  • OEV will not modify, resell, or redistribute your modules beyond providing existing license holders continued access to what they have already paid for.

To initiate account closure, email [email protected] with the subject line "Creator account closure request". We may discuss options — such as transferring ownership of a popular module — before processing.

Payouts & Stripe Connect

How do payouts work?

Payouts are processed via Stripe Connect. Once connected, your 80% share of each sale is transferred to your Stripe account on the next payout cycle.

How do I connect my Stripe account?

Stripe Connect onboarding is currently being finalised and requires Stripe live mode to be enabled on the platform. Until then, payouts are processed manually on request. Email [email protected] to arrange a payout.

Do I need a business account to receive payouts?

No. Stripe accepts both individual and business accounts. You will need to complete Stripe's identity verification (KYC) before your first payout, which typically takes a few minutes.

Additional information

What is the review process for new modules?

Every new module submission and release update is reviewed by the OEV admin team before going live. We check that the zip is a valid Foundry module, that the description is accurate, and that the content meets our content guidelines. Reviews typically complete within a few business days. You'll receive an email with the outcome.

Can I offer a free module?

Yes. Set the price to $0 when requesting a listing. Free modules still go through the same review process and are issued licenses the same way, so download tracking and license management all work identically.

Releasing a new major-version edition of your module

When Foundry VTT releases a new major version (e.g. v14 → v15), you may choose to create a new, separate product listing for the updated edition. You are not required to do this — you may also continue updating your existing module in-place.

If you publish a new edition as a separate product, OEV will automatically notify all existing license holders of the old edition and issue each of them a one-time 50% discount code valid towards the new edition. This is handled by the platform; you do not need to take any additional action.

You are responsible for deciding the ongoing support status of the older edition:

  • Continue updating it alongside the new one (e.g. v14 maintenance releases)
  • Set it to Maintained — security and compatibility patches only
  • Set it to Archived — frozen final release, no further updates

Whichever you choose, existing license holders of the older edition retain full access to all releases of that edition.

Can I gift a license to a user directly?

Creator license gifting is on the roadmap. Once available, you'll be able to issue a free license for any of your products to any email address directly from the dashboard. In the meantime, contact [email protected] and we can issue one manually.

Where can I get help from other creators?

Join our Discord server and look for the creator channels. It's also a good place to get early feedback on module ideas and connect with the player community.

Still have questions?

Email [email protected] or reach out on Discord. We're happy to help.