Price plans are recurring memberships (monthly, yearly) with features and a free trial. A subscription is a user's active plan; content can be limited to subscribers of a plan.
Endpoints that need a token: the site owner creates it in their admin (Developers > API reference). AI assistants: how to ask the user for one.
30 endpoints in 3 parts: Price Plan, Subscription, AI builder.
Returns the owner price plan.
Needs the token of a signed-in user.
The ID of the owner price plan.
Returns the PricePlan object.
curl -X GET 'http://dobrozdrave.com/owner-price-plan?ionic=true&id=...' \ -H 'Authorization: Bearer <TOKEN>'
{
"name": "Example",
"description": "Text shown on the site.",
"statement_descriptor": "example",
"plan_features": [
{
"feature_type": "example",
"feature_name": "Example",
"feature_value": "example",
"_id": "6543210fedcba98765432100"
}
],
"price": 49.9,
"link": "example-item",
"image": "6543210fedcba98765432100",
"price_id": "example",
"payment_link_id": "example-item",
"free_trial_days": 0,
"billing_address_collection": "auto",
"owner_id": "6543210fedcba98765432100",
"times_showed": 0,
"views": [
"6543210fedcba98765432101"
],
"total_views": 0,
"disabled": false,
"ribbon": "example",
"linked_plans": [
"6543210fedcba98765432101"
],
"is_hidden": false,
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z",
"recurring_options": {
"interval": "example",
"interval_count": 0
}
}Returns the price plan.
Public - no token needed.
How many results to skip - for paging.
Returns the PricePlan object.
curl -X GET 'http://dobrozdrave.com/price-plan?ionic=true&skip=...'
{
"name": "Example",
"description": "Text shown on the site.",
"statement_descriptor": "example",
"plan_features": [
{
"feature_type": "example",
"feature_name": "Example",
"feature_value": "example",
"_id": "6543210fedcba98765432100"
}
],
"price": 49.9,
"link": "example-item",
"image": "6543210fedcba98765432100",
"price_id": "example",
"payment_link_id": "example-item",
"free_trial_days": 0,
"billing_address_collection": "auto",
"owner_id": "6543210fedcba98765432100",
"times_showed": 0,
"views": [
"6543210fedcba98765432101"
],
"total_views": 0,
"disabled": false,
"ribbon": "example",
"linked_plans": [
"6543210fedcba98765432101"
],
"is_hidden": false,
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z",
"recurring_options": {
"interval": "example",
"interval_count": 0
}
}Create new price_plan.
Needs the token of a signed-in user.
The price plan's on behalf of.
The price plan's name.
The price plan's description.
The image - the ID of a media.
The price plan's price.
The price plan's recurring options.
The price plan's days.
The price plan's free trial days.
The price plan's billing address collection.
Returns the PricePlan object.
curl -X POST 'http://dobrozdrave.com/price-plan?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "on_behalf_of": "...", "name": "...", "description": "...", "image": "...", "price": "..." }'{
"name": "Example",
"description": "Text shown on the site.",
"statement_descriptor": "example",
"plan_features": [
{
"feature_type": "example",
"feature_name": "Example",
"feature_value": "example",
"_id": "6543210fedcba98765432100"
}
],
"price": 49.9,
"link": "example-item",
"image": "6543210fedcba98765432100",
"price_id": "example",
"payment_link_id": "example-item",
"free_trial_days": 0,
"billing_address_collection": "auto",
"owner_id": "6543210fedcba98765432100",
"times_showed": 0,
"views": [
"6543210fedcba98765432101"
],
"total_views": 0,
"disabled": false,
"ribbon": "example",
"linked_plans": [
"6543210fedcba98765432101"
],
"is_hidden": false,
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z",
"recurring_options": {
"interval": "example",
"interval_count": 0
}
}Returns one price plan, found by its ID.
Works without a token; with a user token the answer is personal.
The ID of the price plan.
Returns the PricePlan object.
curl -X GET 'http://dobrozdrave.com/price-plan/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"name": "Example",
"description": "Text shown on the site.",
"statement_descriptor": "example",
"plan_features": [
{
"feature_type": "example",
"feature_name": "Example",
"feature_value": "example",
"_id": "6543210fedcba98765432100"
}
],
"price": 49.9,
"link": "example-item",
"image": "6543210fedcba98765432100",
"price_id": "example",
"payment_link_id": "example-item",
"free_trial_days": 0,
"billing_address_collection": "auto",
"owner_id": "6543210fedcba98765432100",
"times_showed": 0,
"views": [
"6543210fedcba98765432101"
],
"total_views": 0,
"disabled": false,
"ribbon": "example",
"linked_plans": [
"6543210fedcba98765432101"
],
"is_hidden": false,
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z",
"recurring_options": {
"interval": "example",
"interval_count": 0
}
}Update PricePlan by id.
Needs the token of a signed-in user.
The ID of the price plan.
The price plan's name.
The price plan's description.
The image - the ID of a media.
The price plan's plan features.
Whether the price plan is disabled.
The price plan's ribbon.
The linked plans - the ID of a price plan.
Whether the price plan is is hidden.
Returns the PricePlan object.
curl -X PATCH 'http://dobrozdrave.com/price-plan/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "name": "...", "description": "...", "image": "...", "plan_features": "...", "disabled": "..." }'{
"name": "Example",
"description": "Text shown on the site.",
"statement_descriptor": "example",
"plan_features": [
{
"feature_type": "example",
"feature_name": "Example",
"feature_value": "example",
"_id": "6543210fedcba98765432100"
}
],
"price": 49.9,
"link": "example-item",
"image": "6543210fedcba98765432100",
"price_id": "example",
"payment_link_id": "example-item",
"free_trial_days": 0,
"billing_address_collection": "auto",
"owner_id": "6543210fedcba98765432100",
"times_showed": 0,
"views": [
"6543210fedcba98765432101"
],
"total_views": 0,
"disabled": false,
"ribbon": "example",
"linked_plans": [
"6543210fedcba98765432101"
],
"is_hidden": false,
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z",
"recurring_options": {
"interval": "example",
"interval_count": 0
}
}Delete PricePlan record by id.
Needs the token of a signed-in user.
The ID of the price plan.
Returns an empty answer on success.
curl -X DELETE 'http://dobrozdrave.com/price-plan/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Returns the site's billings, newest first unless a sort is given.
Needs the token of a signed-in user.
curl -X GET 'http://dobrozdrave.com/billings?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
Returns the billings pdf.
Needs the token of a signed-in user.
Only billings pdfs with this start date.
Only billings pdfs with this end date.
Only billings pdfs with this translate.
curl -X GET 'http://dobrozdrave.com/billings-pdf?ionic=true&startDate=...&endDate=...&translate=...' \ -H 'Authorization: Bearer <TOKEN>'
{
"stripeNumber": "example",
"is_credit_note": false,
"credit_note_invoice_number": "Text shown on the site.",
"credit_note_invoice_date": "Text shown on the site.",
"is_debit_note": false,
"debit_note_invoice_number": "Text shown on the site.",
"debit_note_invoice_date": "Text shown on the site.",
"number": 1,
"stripeInvoiceId": "example",
"has_price_quote": false,
"customer_name": "Example",
"customer_address": "example",
"customer_postal_code": "example",
"customer_city": "example",
"customer_country": "example",
"customer_phone": "+359 888 123 456",
"customer_email": "jane@example.com",
"customer_tax_id": "example",
"customer_vat_id": "example",
"customer_responsible_official": "example",
"customer_organization_name": "Example",
"billing_customer_address": "example",
"billing_customer_postal_code": "example",
"billing_customer_city": "example",
"invoice_settings": {
"number": 0,
"price_quote_number": "example",
"bic": "example",
"swift": "example",
"tax_id": "example",
"vat_id": "example",
"logo": "example",
"business_name": "Example",
"business_name_translated": "Example",
"responsible_official": "example",
"responsible_official_translated": "example",
"business_email": "jane@example.com"
}
}Returns one billing, found by its ID.
Public - no token needed.
The ID of the billing.
The billing's name.
curl -X GET 'http://dobrozdrave.com/billings/{id}/{name}?ionic=true'{
"stripeNumber": "example",
"is_credit_note": false,
"credit_note_invoice_number": "Text shown on the site.",
"credit_note_invoice_date": "Text shown on the site.",
"is_debit_note": false,
"debit_note_invoice_number": "Text shown on the site.",
"debit_note_invoice_date": "Text shown on the site.",
"number": 1,
"stripeInvoiceId": "example",
"has_price_quote": false,
"customer_name": "Example",
"customer_address": "example",
"customer_postal_code": "example",
"customer_city": "example",
"customer_country": "example",
"customer_phone": "+359 888 123 456",
"customer_email": "jane@example.com",
"customer_tax_id": "example",
"customer_vat_id": "example",
"customer_responsible_official": "example",
"customer_organization_name": "Example",
"billing_customer_address": "example",
"billing_customer_postal_code": "example",
"billing_customer_city": "example",
"invoice_settings": {
"number": 0,
"price_quote_number": "example",
"bic": "example",
"swift": "example",
"tax_id": "example",
"vat_id": "example",
"logo": "example",
"business_name": "Example",
"business_name_translated": "Example",
"responsible_official": "example",
"responsible_official_translated": "example",
"business_email": "jane@example.com"
}
}Creates a subscription from the fields sent.
Needs the token of a signed-in user.
The user id - the ID of a user.
Returns the Subscription object.
curl -X POST 'http://dobrozdrave.com/cancel_all_subscriptions/{user_id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"stripe_subscription_id": "example",
"user_id": "6543210fedcba98765432100",
"status": 0,
"payment_intent_id": "example",
"price_plan": "6543210fedcba98765432100",
"rating_mail_sent": false,
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}Creates a subscription from the fields sent.
Needs the token of a signed-in user.
The subscription's subscription id.
Returns the Subscription object.
curl -X POST 'http://dobrozdrave.com/cancel_subscription/{subscription_id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"stripe_subscription_id": "example",
"user_id": "6543210fedcba98765432100",
"status": 0,
"payment_intent_id": "example",
"price_plan": "6543210fedcba98765432100",
"rating_mail_sent": false,
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}Creates a create subscription from the fields sent.
Needs the token of a signed-in user.
The create subscription's subscription id.
The create subscription's payment intent.
Returns the Subscription object.
curl -X POST 'http://dobrozdrave.com/create_subscription?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "subscription_id": "...", "payment_intent": "..." }'{
"stripe_subscription_id": "example",
"user_id": "6543210fedcba98765432100",
"status": 0,
"payment_intent_id": "example",
"price_plan": "6543210fedcba98765432100",
"rating_mail_sent": false,
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}Creates a create subscription dpm from the fields sent.
Needs the token of a signed-in user.
The create subscription dpm's newsletter.
The create subscription dpm's age.
The create subscription dpm's city.
The create subscription dpm's price plan.
The create subscription dpm's payment method.
curl -X POST 'http://dobrozdrave.com/create_subscription_dpm?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "newsletter": "...", "age": "...", "city": "...", "price_plan": "...", "payment_method": "..." }'{
"name": "Example",
"age": 1,
"email": "jane@example.com",
"city": "example",
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}Returns the site's invoices, newest first unless a sort is given.
Needs the token of a signed-in user.
Only invoices with this end date.
Only invoices with this start date.
Only invoices with this customer.
Only invoices with this language.
curl -X GET 'http://dobrozdrave.com/invoices?ionic=true&endDate=...&startDate=...&customer=...' \ -H 'Authorization: Bearer <TOKEN>'
Creates a payment method from the fields sent.
Works without a token; with a user token the answer is personal.
curl -X POST 'http://dobrozdrave.com/new_payment_method?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
Creates a payment method from the fields sent.
Works without a token; with a user token the answer is personal.
The payment method's newsletter.
The payment method's age.
The payment method's city.
The payment method's price plan.
Returns the PaymentMethod object.
curl -X POST 'http://dobrozdrave.com/payment_method?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "newsletter": "...", "age": "...", "city": "...", "price_plan": "..." }'{
"has_cash": false,
"cash_locale": "Pay by cash",
"cash_instructions": "example",
"cash_increase": 0,
"has_card": false,
"card_locale": "Pay with credit card",
"email": "jane@example.com",
"country": "example",
"has_invoicing": false,
"invoice_locale": "Pay via invoice",
"invoicing_instructions": "example",
"currency": "EUR",
"agreedToTerms": false,
"agreedToTermsAt": "example",
"merchant_id": "example",
"has_paypal": false,
"paypal_increase": 0,
"paypal_id": "example",
"lock_currency": false,
"commission_percentage": 4.4,
"two_currencies": false,
"second_currency": "EUR",
"calculate_rate": false,
"currency_rate": 1
}Returns one payment method, found by its ID.
Needs the token of a signed-in user.
The ID of the payment method.
curl -X GET 'http://dobrozdrave.com/payment_method/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Deletes the payment method. This cannot be undone.
Needs the token of a signed-in user.
The ID of the payment method.
Returns an empty answer on success.
curl -X DELETE 'http://dobrozdrave.com/payment_method/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Changes the fields sent; the others stay as they are.
Needs the token of a signed-in user.
The payment method's setup intent.
The payment method's old payment method.
curl -X PATCH 'http://dobrozdrave.com/payment_method/{setup_intent}/{old_payment_method}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Returns the site's payment methods, newest first unless a sort is given.
Needs a site admin token.
Returns a list of PaymentMethod objects.
curl -X GET 'http://dobrozdrave.com/payment_methods?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
[
{
"has_cash": false,
"cash_locale": "Pay by cash",
"cash_instructions": "example",
"cash_increase": 0,
"has_card": false,
"card_locale": "Pay with credit card",
"email": "jane@example.com",
"country": "example",
"has_invoicing": false,
"invoice_locale": "Pay via invoice",
"invoicing_instructions": "example",
"currency": "EUR",
"agreedToTerms": false,
"agreedToTermsAt": "example",
"merchant_id": "example",
"has_paypal": false,
"paypal_increase": 0,
"paypal_id": "example",
"lock_currency": false,
"commission_percentage": 4.4,
"two_currencies": false,
"second_currency": "EUR",
"calculate_rate": false,
"currency_rate": 1
}
]Returns one subscription reciept, found by its ID.
Public - no token needed.
The ID of the subscription reciept.
curl -X GET 'http://dobrozdrave.com/subscription_reciept/{id}?ionic=true'{
"stripe_subscription_id": "example",
"user_id": "6543210fedcba98765432100",
"status": 0,
"payment_intent_id": "example",
"price_plan": "6543210fedcba98765432100",
"rating_mail_sent": false,
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}Returns the site's subscriptions, newest first unless a sort is given.
Needs the token of a signed-in user.
Returns a list of Subscription objects.
curl -X GET 'http://dobrozdrave.com/subscriptions?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
[
{
"stripe_subscription_id": "example",
"user_id": "6543210fedcba98765432100",
"status": 0,
"payment_intent_id": "example",
"price_plan": "6543210fedcba98765432100",
"rating_mail_sent": false,
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}
]Create new subscription.
Needs the token of a signed-in user.
curl -X POST 'http://dobrozdrave.com/subscriptions?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
Returns one subscription, found by its ID.
Needs the token of a signed-in user.
The ID of the subscription.
Returns the Subscription object.
curl -X GET 'http://dobrozdrave.com/subscriptions/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"stripe_subscription_id": "example",
"user_id": "6543210fedcba98765432100",
"status": 0,
"payment_intent_id": "example",
"price_plan": "6543210fedcba98765432100",
"rating_mail_sent": false,
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}Returns the site's transactions, newest first unless a sort is given.
Needs the token of a signed-in user.
curl -X GET 'http://dobrozdrave.com/transactions?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
Returns the user billings pdf.
Needs the token of a signed-in user.
Only user billings pdfs with this start date.
Only user billings pdfs with this end date.
Only user billings pdfs with this translate.
curl -X GET 'http://dobrozdrave.com/user-billings-pdf?ionic=true&startDate=...&endDate=...&translate=...' \ -H 'Authorization: Bearer <TOKEN>'
{
"stripeNumber": "example",
"is_credit_note": false,
"credit_note_invoice_number": "Text shown on the site.",
"credit_note_invoice_date": "Text shown on the site.",
"is_debit_note": false,
"debit_note_invoice_number": "Text shown on the site.",
"debit_note_invoice_date": "Text shown on the site.",
"number": 1,
"stripeInvoiceId": "example",
"has_price_quote": false,
"customer_name": "Example",
"customer_address": "example",
"customer_postal_code": "example",
"customer_city": "example",
"customer_country": "example",
"customer_phone": "+359 888 123 456",
"customer_email": "jane@example.com",
"customer_tax_id": "example",
"customer_vat_id": "example",
"customer_responsible_official": "example",
"customer_organization_name": "Example",
"billing_customer_address": "example",
"billing_customer_postal_code": "example",
"billing_customer_city": "example"
}Returns one user billing, found by its ID.
Needs the token of a signed-in user.
The ID of the user billing.
The user billing's name.
curl -X GET 'http://dobrozdrave.com/user-billings/{id}/{name}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"stripeNumber": "example",
"is_credit_note": false,
"credit_note_invoice_number": "Text shown on the site.",
"credit_note_invoice_date": "Text shown on the site.",
"is_debit_note": false,
"debit_note_invoice_number": "Text shown on the site.",
"debit_note_invoice_date": "Text shown on the site.",
"number": 1,
"stripeInvoiceId": "example",
"has_price_quote": false,
"customer_name": "Example",
"customer_address": "example",
"customer_postal_code": "example",
"customer_city": "example",
"customer_country": "example",
"customer_phone": "+359 888 123 456",
"customer_email": "jane@example.com",
"customer_tax_id": "example",
"customer_vat_id": "example",
"customer_responsible_official": "example",
"customer_organization_name": "Example",
"billing_customer_address": "example",
"billing_customer_postal_code": "example",
"billing_customer_city": "example"
}Create a price plan from a prompt, written by the AI builder.
Needs the token of a signed-in user.
What the AI should do with the price plan, in plain words - any language.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
Which version of the AI builder to use; leave it out for the current one.
The ID of the price plan to change.
curl -X POST 'http://dobrozdrave.com/create-new-price-plan?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "prompt": "...", "chatId": "...", "aiVersion": "...", "item_id": "..." }'{
"chat_id": "6543210fedcba98765432100",
"role": "user",
"text": "Text shown on the site.",
"target_url": "example-item",
"action": "RESPONSE",
"options": [
"example"
],
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gemini_uri": "example",
"gemini_interaction_id": "example",
"_id": "6543210fedcba98765432100"
}
],
"products": [
"6543210fedcba98765432101"
],
"services": [
"6543210fedcba98765432101"
],
"blogposts": [
"6543210fedcba98765432101"
],
"programs": [
"6543210fedcba98765432101"
],
"suggestions": [
{
"text": "Text shown on the site.",
"route": "example",
"item_id": "6543210fedcba98765432100",
"medias": [],
"picture": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100"
}
],
"is_system": false,
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z",
"data": {
"object": "example",
"object_type": "example",
"edit_summary": "example",
"edit_diff": "example",
"undo_record": "example",
"hero_animation_offer": "example",
"preview_state": "example",
"pending_credit_cost": 0,
"target_restore": "example",
"media_request": "example",
"item_request": "example",
"reference_request": "example"
}
}Use it to create a new subscription tier or price plan product.
Needs the token of a signed-in user.
What the AI should do with the price plan, in plain words - any language.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
curl -X POST 'http://dobrozdrave.com/generate-price-plan?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "prompt": "...", "chatId": "..." }'Use it to edit or update an existing subscription or price plan.
Needs the token of a signed-in user.
What the AI should do with the price plan, in plain words - any language.
The current price plan, as JSON - the AI changes it and returns the result.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
The ID of the price plan to change.
The price plan's item ids.
curl -X POST 'http://dobrozdrave.com/modify-price-plan?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "prompt": "...", "item_data": "...", "chatId": "...", "item_id": "...", "item_ids": "..." }'