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?
- Go to your Creator Dashboard and click the + Submit Module tab.
- Fill in the module name, Foundry package ID, FVTT version compatibility, module type, description, and optional preview image.
- Attach your module zip file. The zip must contain a valid
module.jsonat the root or in a single subdirectory. - 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 support@oevtt.com. 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 v1415.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?
- Go to Creator Dashboard → API Keys tab.
- Click + New key and give it a descriptive name (e.g. GitHub Actions — my-module).
- Click Generate. The full key is shown once in a pop-up — copy it immediately and store it securely.
- 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 "zip=@module.zip" \ -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?
-
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 dashboardOEV_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 Supabaseproductstable)
-
Create a workflow file at
.github/workflows/release.ymlin 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 "zip=@module.zip" \
-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.jsonand checks theidfield matches the product - Reads the version number from
module.json(or from theversionform field) - Uploads the zip to OEV's R2 storage
- Sets the product's approval status to
pending_reviewfor admin sign-off - Updates
last_used_aton 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 key404 Product not found or access denied— wrongOEV_PRODUCT_IDor the product belongs to a different account422 module.json id … does not match— theidin yourmodule.jsondoesn't match the Foundry package ID registered on the product400 Zip too large— request a higher limit from the dashboard
Analytics
How do I view my sales data?
Go to Creator Dashboard → Analytics 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 Dashboard → Products 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 support@oevtt.com 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 support@oevtt.com 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 support@oevtt.com 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 support@oevtt.com 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 support@oevtt.com or reach out on Discord. We're happy to help.