Skip to main content

GET /api/v1/internal/projects/:projectUuid/apps/:appUuid/products

Returns a products resource.

This endpoint documentation is generated from the current Fastify route implementation and should be treated as the implementation-level contract for this version of the API.

Source route file: src/api/routes/internal/private/bearer/projects/apps/products/getAll.ts

Request Method​

GET

Base URL​

https://api.userdocks.local:5000

Endpoint​

/api/v1/internal/projects/:projectUuid/apps/:appUuid/products

Path Variables​

VariableTypeRequiredDescription
projectUuidstringtruePath variable from route pattern.
appUuidstringtruePath variable from route pattern.

Query Parameters​

VariableTypeRequiredDescription
pagestringfalseZero-based page index parsed by the route handler.
limitstringfalseMaximum number of products returned per page.
paymentProviderstripe | molliefalseOnly return products owned by the selected provider.

If paymentProvider is omitted, products from all payment providers are returned. Unsupported provider values return 400.

Products are selected by their own payment provider, so price-free products are included. The nested prices array contains only read-only legacy prices and may be empty.

HTTP Headers​

VariableTypeRequiredDescription
AuthorizationstringtrueBearer token in the form Bearer <jwt>.
Content-TypestringfalseUse application/json for JSON request bodies.

Successful Response​

Success status code(s): 200.

{
"kind": "products",
"totalItems": 1,
"itemsLength": 1,
"items": [
{
"uuid": "f119e8a1-aaaa-4a2d-9f1a-aaaaaaaaaaaa",
"name": "Pro Plan",
"description": "Subscription product",
"isActive": true,
"productPrices": [
{
"uuid": "price-1",
"currency": "usd",
"unitAmount": 1999,
"recurring": true,
"recurringInterval": "month",
"recurringIntervalCount": 1
}
],
"images": [
{
"uuid": "img-1",
"url": "https://cdn.example.com/product.png"
}
],
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
]
}

Error Responses​

HTTP StatusExample Error
401{"errors":[{"validation":"error","code":"[E4010]","message":"Unauthorized Token"}]}
403{"errors":[{"validation":"error","code":"[E4030]","message":"App Is Disabled"}]}
400{"errors":[{"validation":"error","code":"[E4000]","message":"Bad Request / validation error"}]}
500{"errors":[{"validation":"error","code":"[E0000]","message":"Internal Server Error"}]}

Example​

const query = new URLSearchParams({
page: 'page-value',
limit: 'limit-value',
paymentProvider: 'stripe',
});
const url = `https://api.userdocks.local:5000/api/v1/internal/projects/projectUuid-value/apps/appUuid-value/products?${query.toString()}`;

const response = await fetch(url, {
method: 'GET',
headers: {
Authorization: 'Bearer <jwt>',
},
});
const data = await response.json();
console.log(response.status, data);