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.
26 endpoints in 2 parts: Price Plan, Subscription.
One of the signed-in user's price plans (?id). 404 when there is no such plan.
Needs the token of a signed-in user.
The ID of the owner price plan.
Returns the PricePlan object.
curl -X GET 'http://hristovtintdetailng.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
}
}The price plans page, or the plans as JSON with ?ionic. Paged with ?skip. Cached for an hour.
Public - no token needed.
How many results to skip - for paging.
Returns the PricePlan object.
curl -X GET 'http://hristovtintdetailng.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
}
}Creates a price plan. Also creates its Stripe product, recurring price (recurring_options: interval, interval_count) and payment link. Answers 201 with the payment link. 403 without a professional account where social mode requires one.
Needs the token of a signed-in user.
The price plan's on behalf of.
The plan's name.
What the plan gives.
Media.id.
Price per period.
The price plan's recurring options.
The price plan's days.
Days free before the first payment.
Wheter to collect billing information.
Returns the PricePlan object.
curl -X POST 'http://hristovtintdetailng.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
}
}A price plan's page, with the user's saved cards. Answers { price_plan, payment_methods } in the app.
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://hristovtintdetailng.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
}
}Updates a price plan and its Stripe product. The Stripe product's name, description and picture follow. Answers the plan, or 404.
Needs the token of a signed-in user.
The ID of the price plan.
Media.id.
Returns the PricePlan object.
curl -X PATCH 'http://hristovtintdetailng.com/price-plan/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "image": "..." }'{
"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
}
}Deletes a price plan. Deactivates its Stripe price, product and payment link; existing subscribers are not cancelled. Answers the deleted plan.
Needs the token of a signed-in user.
The ID of the price plan.
Returns an empty answer on success.
curl -X DELETE 'http://hristovtintdetailng.com/price-plan/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'The signed-in user's Stripe invoices. Answers { billings } from Stripe.
Needs the token of a signed-in user.
curl -X GET 'http://hristovtintdetailng.com/billings?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
The site's invoices between ?startDate and ?endDate as one PDF (?translate for the second language). Invoices are read from Stripe and put into one 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://hristovtintdetailng.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"
}
}One invoice as a PDF. A missing invoice renders the missing-invoice page with 404.
Public - no token needed.
The ID of the billing.
The billing's name.
curl -X GET 'http://hristovtintdetailng.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"
}
}Cancels every subscription of a user. Cancels each one in Stripe at once and deletes the records.
Needs the token of a signed-in user.
Id of user who subscribet to price plan.
Returns the Subscription object.
curl -X POST 'http://hristovtintdetailng.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"
}Cancels one of the signed-in user's subscriptions. Cancels it in Stripe at once. Answers true, or 404 false when it is not found.
Needs the token of a signed-in user.
The subscription's subscription id.
Returns the Subscription object.
curl -X POST 'http://hristovtintdetailng.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"
}Subscribes the signed-in user to a price plan with a saved card, replacing their subscription to another plan of the same owner. Answers 201 true. A current subscription to another plan of the same owner is cancelled in Stripe first, so the user moves between plans rather than paying twice.
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://hristovtintdetailng.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"
}Subscribes the signed-in user to a price plan, creating the Stripe customer and payment, and answers what the card form needs. 403 when the plan is disabled or the user already has it. The Stripe subscription waits on the first payment, which the card form completes.
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://hristovtintdetailng.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"
}Stripe invoices between ?startDate and ?endDate, for ?customer, as PDFs. Read from Stripe.
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://hristovtintdetailng.com/invoices?ionic=true&endDate=...&startDate=...&customer=...' \ -H 'Authorization: Bearer <TOKEN>'
Starts saving a new card: answers a Stripe setup intent. Answers 201 { clientSecret }; then call PATCH /payment_method/:setup_intent/:old_payment_method.
Works without a token; with a user token the answer is personal.
curl -X POST 'http://hristovtintdetailng.com/new_payment_method?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
Saves the signed-in user's card and subscribes them, signing them up to the newsletter when asked. Answers 201 { clientSecret } of the first invoice's payment. 403 when the plan is disabled.
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://hristovtintdetailng.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
}One saved card. Read from Stripe.
Needs the token of a signed-in user.
The ID of the payment method.
curl -X GET 'http://hristovtintdetailng.com/payment_method/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Removes a saved card. Answers true.
Needs the token of a signed-in user.
The ID of the payment method.
Returns an empty answer on success.
curl -X DELETE 'http://hristovtintdetailng.com/payment_method/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Replaces a saved card with the one a setup intent saved, and makes it the default. The old card is detached from the Stripe customer.
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://hristovtintdetailng.com/payment_method/{setup_intent}/{old_payment_method}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'A subscription's receipt page. With the plan and the Stripe customer's details.
Public - no token needed.
The ID of the subscription reciept.
curl -X GET 'http://hristovtintdetailng.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"
}The signed-in user's subscriptions.
Needs the token of a signed-in user.
Returns a list of Subscription objects.
curl -X GET 'http://hristovtintdetailng.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"
}
]Creates a subscription. Subscriptions are normally made through checkout; this writes a record directly. Answers 201.
Needs the token of a signed-in user.
curl -X POST 'http://hristovtintdetailng.com/subscriptions?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
One subscription. 404 when there is no such subscription.
Needs the token of a signed-in user.
The ID of the subscription.
Returns the Subscription object.
curl -X GET 'http://hristovtintdetailng.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"
}The signed-in user's Stripe subscriptions. Answers { subscriptions } from Stripe.
Needs the token of a signed-in user.
curl -X GET 'http://hristovtintdetailng.com/transactions?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
The signed-in user's invoices to their customers between ?startDate and ?endDate as one PDF. Invoices are read from Stripe and put into one 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://hristovtintdetailng.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"
}One of the signed-in user's invoices as a PDF. A missing invoice renders the missing-invoice page with 404.
Needs the token of a signed-in user.
The ID of the user billing.
The user billing's name.
curl -X GET 'http://hristovtintdetailng.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"
}