Where Intelligence Meets Imagination

Developer Docs

Everything you need to publish plugins, desktop apps, and games to Solviony Labs, and to integrate with the Solvionyx OS App Store.

Getting started

  1. Apply. Submit a developer application — tell us what you want to build. Every application is reviewed by our team.
  2. Get approved. Once approved, you'll be prompted to subscribe.
  3. Subscribe. A $60/year developer subscription unlocks unlimited plugin, app, and game submissions.
  4. Submit. From your developer dashboard, create a submission with your app's details, icon, and either a download URL or an uploaded package file.
  5. Review. Submit for review when it's ready. Our team reviews the listing and the app itself.
  6. Go live. Once approved, your app appears in the Labs marketplace and the Solvionyx OS App Store feed — immediately if "auto release" was checked, or whenever you hit Publish now if you held it back.
Solviony employees publishing official first-party apps are exempt from the $60/year fee.

Submission types

Every submission is one of three types, set when you create it:

TypeValueNotes
PluginpluginExtends Solvionyx OS itself. Listed as an "addon" in the AppStream feed.
Desktop Appdesktop_appA standalone application for the Solvionyx OS environment.
GamegameSame distribution path as a desktop app, categorized separately.

Fields

  • Title, tagline, description, category, keywords — what people see in the marketplace and search.
  • Version — a free-text version string (e.g. 1.2.0). Compared with standard version-comparison rules by the updates endpoint below.
  • Download URL or package file — provide one. A URL for externally-hosted downloads, or upload a file directly (50MB max) to host it yourself.
  • Icon and screenshots — icon is a single image; screenshots supports multiple.
  • Support URL, marketing URL, copyright — optional, shown on your app's public page.
  • App review information — a reviewer contact email/phone, demo account credentials if your app requires login to test, and any notes for the reviewer. Never shown publicly.
Your app's ID in the ecosystem is always com.solviony.labs.{slug}, where {slug} is generated from your title the first time you save.

Pricing & visibility

Each submission has its own price and visibility, independent of your $60/year developer subscription (which is a publishing fee, not a per-app charge):

  • Price — set to $0.00 for a free app. Any other amount requires purchase via the app before it can be downloaded through the API.
  • Visibilitypublic apps are listed in the marketplace and the AppStream feed. private apps are reachable only by direct link or granted entitlement — they won't appear in search or browsing.

Review process

A submission moves through these statuses:

StatusMeaning
DraftBeing edited, not yet submitted.
Pending reviewSubmitted — waiting on our team.
ApprovedPassed review. Live immediately unless you unchecked "auto release," in which case it's held until you publish it yourself from the dashboard.
RejectedNot approved this round. The reason is shown on your dashboard — fix it and resubmit.
UnpublishedWas live, automatically taken down because your subscription lapsed. Restored automatically if you resubscribe.

Beta testing

Each submission has a TestFlight tab for pre-release builds, separate from the published version:

  • Upload a beta build with its own version string and release notes.
  • Invite testers by email — they're tracked per-app, and you can remove them at any time.
Testers are currently invited by email only. An in-app acceptance and install flow is planned.

In-app purchases

Define products your app sells after install, from the Distribution tab of an existing submission:

TypeValue
Consumableconsumable
Non-consumablenon_consumable
Auto-renewable subscriptionauto_renewable_subscription
Non-renewing subscriptionnon_renewing_subscription

Each product has a product_identifier your app uses to reference it, a display name, and a price. Subscription-type products automatically get a matching recurring Stripe Price behind the scenes.

Payouts

Paid apps and in-app purchases are paid out via Stripe Connect. From the Business tab of your dashboard, connect a Stripe Express account — Stripe handles identity verification, tax forms, and bank details directly; we never see or store them.

Solviony ID authentication

The endpoints below marked Bearer require a Solviony ID OAuth 2.0 access token — the same identity provider used across the Solviony ecosystem. It's plain OAuth 2.0 with PKCE, not OpenID Connect: there's no id_token and no /oauth/userinfo, just an access token you exchange for a code, and a REST profile endpoint.

  1. Register an app. Get a client_id / client_secret and register your redirect_uri — see the Solviony ID developer page for the full PKCE walkthrough (generating a code verifier/challenge, etc.).
  2. Send the user to authorize. Redirect to /oauth/authorize with your client_id, redirect_uri, and response_type=code.
  3. Exchange the code. Your app's backend (or the Solvionyx OS App Store client, for install/download/purchase calls) posts to /oauth/token and gets back an access token.
  4. Call the Labs API. Send that token as Authorization: Bearer <access_token> on any endpoint below marked Bearer. Unauthenticated requests to those return 401.
curl
# Step 1: send the user to authorize
GET https://solviony.com/oauth/authorize?
  client_id=YOUR_CLIENT_ID&
  redirect_uri=https://yourapp.com/callback&
  response_type=code

# Step 2: exchange the code for a token
curl -X POST https://solviony.com/oauth/token \
  -d "grant_type=authorization_code" \
  -d "code=$CODE" \
  -d "client_id=$CLIENT_ID" \
  -d "client_secret=$CLIENT_SECRET"

# Step 3: use it against the Labs API
curl "https://solviony.com/api/labs/apps/3/download" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
Need the user's profile (name, email, avatar) rather than a Labs endpoint? That's GET /api/user with the same Bearer token — covered on the Solviony ID developer page, along with PHP and Node examples of the full PKCE flow.

API reference

This is the same API the Solvionyx OS App Store client uses. All endpoints are under /api/labs and return JSON.

EndpointAuthDescription
GET/api/labs/appsPaginated list of public, approved, published apps. Supports ?search=, ?category=, ?per_page=.
GET/api/labs/apps/{id}Full detail for one app, including description, screenshots, and developer info.
GET/api/labs/apps/{id}/updatesPass ?installed_version= to check if a newer version is available.
GET/api/labs/apps/{id}/downloadBearerReturns a download URL. For paid apps, requires an active entitlement — otherwise responds 402.
POST/api/labs/apps/{id}/install-eventBearerRecords an install, update, or uninstall event for analytics shown on the developer's Trends tab.
POST/api/labs/apps/{id}/purchaseBearerCreates a Stripe Checkout session for a paid app and returns its URL.
GET/api/labs/user/entitlementsBearerLists the current user's active purchases.
Auth — endpoints marked Bearer require a Solviony ID access token. See Solviony ID authentication above for the full flow.

Example — list apps

curl
curl "https://solviony.com/api/labs/apps?category=Productivity"
200 response
{
  "data": [
    {
      "id": 3,
      "slug": "solviony-hub",
      "title": "Solviony Hub",
      "tagline": "See What's Next.",
      "category": "Entertainment",
      "type": "desktop_app",
      "icon_url": null,
      "version": "1.0.0",
      "price_cents": 0,
      "visibility": "public",
      "download_count": 0
    }
  ],
  "...standard Laravel pagination fields (current_page, total, etc.)"
}

Example — download a free app

curl
curl "https://solviony.com/api/labs/apps/3/download" \
  -H "Authorization: Bearer <access_token>"
200 response
{
  "download_url": "https://solviony.com/storage/labs/files/...",
  "expires_in": null,
  "package_format": "deb",
  "version": "1.0.0"
}

Solvionyx OS integration

Every public, approved, published app also appears in an AppStream Collection XML feed at:

https://solviony.com/labs/appstream.xml

This is the feed the Solvionyx OS App Store (a GNOME Software-based client) consumes via its external-appstream-urls configuration, so approved apps show up in the OS's native app store automatically — no separate submission needed. Price is included as informational metadata only; actual purchase and download access is always enforced through the API above, not the feed.