Products

List products

Retrieve a paginated list of products with powerful filtering options. Products are the core items available for sale. Each product can have multiple variants (different configurations) and offers (different pricing options). Results are sorted by creation date (newest first) by default.

Authorization

Public key
x-fngs-public-key<token>

In: header

Query Parameters

orderDirection?string

GET /v0/products/list Parameter

Value in

  • "ASC"
  • "DESC"
skip?|

GET /v0/products/list Parameter

Formatdouble
Range0 <= value <= 1.7976931348623157e+308
take?|

Maximum number of records to return (page size). Use with 'skip' for pagination (default: 20, max: 100). A larger value is clamped to 100 and still returns 200 — it is not rejected.

Range1 <= value <= 100
Default20
archived?|

GET /v0/products/list Parameter

withArchived?|

GET /v0/products/list Parameter

returnCount?|

GET /v0/products/list Parameter

ids?array<>

GET /v0/products/list Parameter

statuses?array<>

GET /v0/products/list Parameter

termOrId?string

Search term to filter products by name or description.

tagName?string

GET /v0/products/list Parameter

genres?array<>

GET /v0/products/list Parameter

systems?array<>

GET /v0/products/list Parameter

types?array<>

Return only products of these types. Omit to return every type. Values: DigitalDownload, Game, GiftCard, SoftwareKey, VirtualCurrency, VirtualItem, Subscription, OneTimePayment.

projectId?string

GET /v0/products/list Parameter

offers?|

GET /v0/products/list Parameter

orderBy?string

GET /v0/products/list Parameter

Value in

  • "createdAt"
  • "name"
  • "price"

Response Body

application/json

application/json

GET
/v0/products/list
curl -X GET "https://example.com/v0/products/list"
{  "status": "success",  "data": {    "products": [      {        "object": "product",        "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",        "type": "DigitalDownload",        "internalId": null,        "name": "",        "description": "",        "developer": null,        "publisher": null,        "pegiRating": "3",        "releaseDate": null,        "systems": null,        "genres": null,        "status": "DRAFT",        "customFields": null      }    ],    "count": -1.7976931348623157e+308  }}

Get Customer Portal URL GET

Resolve the deep-link path into a buyer's self-service portal for the given type. This only computes *where* a buyer would land — it does not authenticate them or mint a token. The buyer still needs to sign in to the portal separately (their own magic link) before the link resolves to anything. If the workspace has configured a custom subscription-management URL (Settings), every subscriptions-* type returns that URL instead of a Fungies portal path — checked before every other rule below, so the override stays reachable even when a rule below would otherwise refuse a Fungies portal link. Unless that override applies: refuses with 401 if called with a test-mode key — portal links are live-only, since the only way onto a test storefront is a preview token this endpoint has no merchant session to mint; refuses with 401 if the customer portal is disabled for the workspace (Settings). orderNumber accepts either the order number shown in the dashboard or the id returned by other v0 endpoints, and is resolved against this workspace's own orders — a value that does not exist returns 404. cartOfferId and offerId are not checked against the calling workspace's own data — a value that does not exist still returns a 200 with a plausible-looking link. The buyer's sign-in on the portal page itself is what actually confirms ownership.

Create a new product POST

Create a new product with the specified details. Set `type` to one of: DigitalDownload, Game, GiftCard, SoftwareKey, VirtualCurrency, VirtualItem, Subscription, OneTimePayment. The type determines which other fields the request body accepts. After creation, add offers to make the product purchasable.