Leads are the enquiries visitors send - contact forms, custom forms and lead forms on pages - with where they came from.
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 6 parts: Custom Form, Form, Lead, Newsletter Contact, Price Quote, Unsubscribed.
The custom forms. Answers an array of every record.
Needs a site admin token.
Returns a list of CustomForm objects.
curl -X GET 'http://hristovtintdetailng.com/custom_forms?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
[
{
"obj": {},
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}
]One custom form. 404 when there is no such record.
Needs a site admin token.
The ID of the custom form.
Returns the CustomForm object.
curl -X GET 'http://hristovtintdetailng.com/custom_forms/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"obj": {},
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}Updates a custom form. Fields outside the allowed list are silently ignored. Answers the updated record, or 404.
Needs a site admin token.
The ID of the custom form.
Returns the CustomForm object.
curl -X PATCH 'http://hristovtintdetailng.com/custom_forms/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"obj": {},
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}Deletes a custom form. Answers the deleted record, or 404. Records that point to it are not changed.
Needs a site admin token.
The ID of the custom form.
Returns an empty answer on success.
curl -X DELETE 'http://hristovtintdetailng.com/custom_forms/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Form submissions. Answers an array of every record.
Needs a site admin token.
Returns a list of Form objects.
curl -X GET 'http://hristovtintdetailng.com/forms?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
[
{
"name": "Example",
"email": "jane@example.com",
"subject": "example",
"body": "Text shown on the site.",
"medias": [],
"additional": [
{
"title": "Example",
"option": "example",
"_id": "6543210fedcba98765432100"
}
],
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}
]Creates a form submission. Multipart with up to 5 files (medias), behind reCAPTCHA. Emails the business; a sender who ticks newsletter (with name and email) is signed up. A website form is sent back to the page it came from.
Needs a reCAPTCHA token from the site form.
Body of text.
An email address.
Returns the Form object.
curl -X POST 'http://hristovtintdetailng.com/forms?ionic=true' \
-H 'Content-Type: application/json' \
-d '{ "body": "...", "email": "..." }'{
"name": "Example",
"email": "jane@example.com",
"subject": "example",
"body": "Text shown on the site.",
"medias": [],
"additional": [
{
"title": "Example",
"option": "example",
"_id": "6543210fedcba98765432100"
}
],
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}One form submission. 404 when there is no such record.
Needs a site admin token.
The ID of the form.
Returns the Form object.
curl -X GET 'http://hristovtintdetailng.com/forms/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"name": "Example",
"email": "jane@example.com",
"subject": "example",
"body": "Text shown on the site.",
"medias": [],
"additional": [
{
"title": "Example",
"option": "example",
"_id": "6543210fedcba98765432100"
}
],
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}Updates a form submission. Fields outside the allowed list are silently ignored. Answers the updated record, or 404.
Needs a site admin token.
The ID of the form.
Returns the Form object.
curl -X PATCH 'http://hristovtintdetailng.com/forms/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"name": "Example",
"email": "jane@example.com",
"subject": "example",
"body": "Text shown on the site.",
"medias": [],
"additional": [
{
"title": "Example",
"option": "example",
"_id": "6543210fedcba98765432100"
}
],
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}Deletes a form submission. Answers the deleted record, or 404. Records that point to it are not changed.
Needs a site admin token.
The ID of the form.
Returns an empty answer on success.
curl -X DELETE 'http://hristovtintdetailng.com/forms/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'The customers. Answers an array of every record.
Needs a site admin token.
Returns a list of Lead objects.
curl -X GET 'http://hristovtintdetailng.com/leads?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
[
{
"seq": 0,
"organization_name": "Example",
"firstname": "Example",
"lastname": "Example",
"email": "jane@example.com",
"phone_number": "+359 888 123 456",
"address": "example",
"city": "example",
"state": "example",
"country": "example",
"zip_code": "example",
"tax_identification_number": "example",
"vat_id": "example",
"notes": "Text shown on the site.",
"products": [
"example"
],
"products_obj": [
{
"product_id": "6543210fedcba98765432100",
"name": "Example",
"options": "example",
"price": 49.9,
"quantity": 1,
"_id": "6543210fedcba98765432100"
}
],
"programs": [
"example"
],
"programs_obj": [
{
"program_id": "6543210fedcba98765432100",
"title": "Example",
"price": 49.9,
"_id": "6543210fedcba98765432100"
}
],
"tickets": [
"6543210fedcba98765432101"
],
"donations": [
"6543210fedcba98765432101"
],
"donations_obj": [
{
"donation_id": "6543210fedcba98765432100",
"name": "Example",
"options": "example",
"price": 49.9,
"quantity": 1,
"_id": "6543210fedcba98765432100"
}
],
"lifetime_value": 0,
"last_order_value": 49.9,
"services": [
"6543210fedcba98765432101"
]
}
]Creates or updates a customer from a checkout or form, signing them up to the newsletter when asked. Matched by email, then by phone number, so a returning customer is updated rather than duplicated. Reads no token.
Public - no token needed.
The lead's owner id.
The lead's split.
An email address.
Customer's phone number.
Customer's company name.
Customer's first name.
Customer's last name.
Customer's address.
Customer's city.
Customer's state or region.
Customer's country.
Customer's postal code.
Customer's tax number.
Notes kept on the customer.
Ticket ids.
Product ids the customer bought.
Program ids the customer bought.
Donation ids.
The lead's newsletter.
The lead's name.
The lead's age.
The products bought, as they were when ordered.
The programs bought, as they were when ordered.
The lead's value.
The lead's donations str.
Returns the Lead object.
curl -X POST 'http://hristovtintdetailng.com/leads?ionic=true' \
-H 'Content-Type: application/json' \
-d '{ "owner_id": "...", "split": "...", "email": "...", "phone_number": "...", "organization_name": "..." }'{
"seq": 0,
"organization_name": "Example",
"firstname": "Example",
"lastname": "Example",
"email": "jane@example.com",
"phone_number": "+359 888 123 456",
"address": "example",
"city": "example",
"state": "example",
"country": "example",
"zip_code": "example",
"tax_identification_number": "example",
"vat_id": "example",
"notes": "Text shown on the site.",
"products": [
"example"
],
"products_obj": [
{
"product_id": "6543210fedcba98765432100",
"name": "Example",
"options": "example",
"price": 49.9,
"quantity": 1,
"_id": "6543210fedcba98765432100"
}
],
"programs": [
"example"
],
"programs_obj": [
{
"program_id": "6543210fedcba98765432100",
"title": "Example",
"price": 49.9,
"_id": "6543210fedcba98765432100"
}
],
"tickets": [
"6543210fedcba98765432101"
],
"donations": [
"6543210fedcba98765432101"
],
"donations_obj": [
{
"donation_id": "6543210fedcba98765432100",
"name": "Example",
"options": "example",
"price": 49.9,
"quantity": 1,
"_id": "6543210fedcba98765432100"
}
],
"lifetime_value": 0,
"last_order_value": 49.9,
"services": [
"6543210fedcba98765432101"
]
}One customer. 404 when there is no such record.
Public - no token needed.
The ID of the lead.
Returns the Lead object.
curl -X GET 'http://hristovtintdetailng.com/leads/{id}?ionic=true'{
"seq": 0,
"organization_name": "Example",
"firstname": "Example",
"lastname": "Example",
"email": "jane@example.com",
"phone_number": "+359 888 123 456",
"address": "example",
"city": "example",
"state": "example",
"country": "example",
"zip_code": "example",
"tax_identification_number": "example",
"vat_id": "example",
"notes": "Text shown on the site.",
"products": [
"example"
],
"products_obj": [
{
"product_id": "6543210fedcba98765432100",
"name": "Example",
"options": "example",
"price": 49.9,
"quantity": 1,
"_id": "6543210fedcba98765432100"
}
],
"programs": [
"example"
],
"programs_obj": [
{
"program_id": "6543210fedcba98765432100",
"title": "Example",
"price": 49.9,
"_id": "6543210fedcba98765432100"
}
],
"tickets": [
"6543210fedcba98765432101"
],
"donations": [
"6543210fedcba98765432101"
],
"donations_obj": [
{
"donation_id": "6543210fedcba98765432100",
"name": "Example",
"options": "example",
"price": 49.9,
"quantity": 1,
"_id": "6543210fedcba98765432100"
}
],
"lifetime_value": 0,
"last_order_value": 49.9,
"services": [
"6543210fedcba98765432101"
]
}Updates a customer. Fields outside the allowed list are silently ignored. Answers the updated record, or 404.
Needs a site admin token.
The ID of the lead.
Returns the Lead object.
curl -X PATCH 'http://hristovtintdetailng.com/leads/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"seq": 0,
"organization_name": "Example",
"firstname": "Example",
"lastname": "Example",
"email": "jane@example.com",
"phone_number": "+359 888 123 456",
"address": "example",
"city": "example",
"state": "example",
"country": "example",
"zip_code": "example",
"tax_identification_number": "example",
"vat_id": "example",
"notes": "Text shown on the site.",
"products": [
"example"
],
"products_obj": [
{
"product_id": "6543210fedcba98765432100",
"name": "Example",
"options": "example",
"price": 49.9,
"quantity": 1,
"_id": "6543210fedcba98765432100"
}
],
"programs": [
"example"
],
"programs_obj": [
{
"program_id": "6543210fedcba98765432100",
"title": "Example",
"price": 49.9,
"_id": "6543210fedcba98765432100"
}
],
"tickets": [
"6543210fedcba98765432101"
],
"donations": [
"6543210fedcba98765432101"
],
"donations_obj": [
{
"donation_id": "6543210fedcba98765432100",
"name": "Example",
"options": "example",
"price": 49.9,
"quantity": 1,
"_id": "6543210fedcba98765432100"
}
],
"lifetime_value": 0,
"last_order_value": 49.9,
"services": [
"6543210fedcba98765432101"
]
}Deletes a customer. Answers the deleted record, or 404. Records that point to it are not changed.
Needs a site admin token.
The ID of the lead.
Returns an empty answer on success.
curl -X DELETE 'http://hristovtintdetailng.com/leads/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Newsletter subscribers. Answers an array of every record.
Needs the token of a signed-in user.
Returns a list of NewsletterContact objects.
curl -X GET 'http://hristovtintdetailng.com/newsletter_contacts?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
[
{
"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"
}
]Creates a newsletter subscriber. Behind reCAPTCHA. Answers 200, or 200 { already_subscribed: true }; a new subscriber gets the welcome email.
Needs a reCAPTCHA token from the site form.
Subscriber's name.
An email address.
Subscriber's age.
Subscriber's city.
Returns the NewsletterContact object.
curl -X POST 'http://hristovtintdetailng.com/newsletter_contacts?ionic=true' \
-H 'Content-Type: application/json' \
-d '{ "name": "...", "email": "...", "age": "...", "city": "..." }'{
"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"
}One newsletter subscriber. 404 when there is no such record.
Needs the token of a signed-in user.
The ID of the newsletter contact.
Returns the NewsletterContact object.
curl -X GET 'http://hristovtintdetailng.com/newsletter_contacts/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"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"
}Updates a newsletter subscriber. Fields outside the allowed list are silently ignored. Answers the updated record, or 404.
Needs the token of a signed-in user.
The ID of the newsletter contact.
Returns the NewsletterContact object.
curl -X PATCH 'http://hristovtintdetailng.com/newsletter_contacts/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"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"
}Deletes a newsletter subscriber. Answers the deleted record, or 404. Records that point to it are not changed.
Needs the token of a signed-in user.
The ID of the newsletter contact.
Returns an empty answer on success.
curl -X DELETE 'http://hristovtintdetailng.com/newsletter_contacts/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Download price quote pdf. Answers the PDF; translate picks the second language. Reads no token.
Public - no token needed.
The ID of the download price quote.
The download price quote's translate.
The download price quote's filename.
curl -X GET 'http://hristovtintdetailng.com/download-price-quote/{id}/{translate}/{filename}?ionic=true'The price quotes. Answers an array.
Needs a site admin token.
Returns the PriceQuote object.
curl -X GET 'http://hristovtintdetailng.com/price-quote?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
{
"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",
"billing_customer_country": "example",
"billing_customer_phone": "+359 888 123 456",
"subtotal": 49.9,
"amount": 49.9,
"day_of_issue": "example",
"number": 1,
"foreign": false,
"home_tax": 0,
"foreign_tax": 0,
"items": [
{
"id": "example",
"name": "Example",
"qty": 1,
"unit_price": 49.9,
"discount": 1,
"amount": 49.9,
"_id": "6543210fedcba98765432100"
}
],
"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 price quote. Numbered from the invoice settings and emailed to the customer when asked. Answers 201 { id }.
Needs a site admin token.
The price quote's send.
Returns the PriceQuote object.
curl -X POST 'http://hristovtintdetailng.com/price-quote?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "send": "..." }'{
"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",
"billing_customer_country": "example",
"billing_customer_phone": "+359 888 123 456",
"subtotal": 49.9,
"amount": 49.9,
"day_of_issue": "example",
"number": 1,
"foreign": false,
"home_tax": 0,
"foreign_tax": 0,
"items": [
{
"id": "example",
"name": "Example",
"qty": 1,
"unit_price": 49.9,
"discount": 1,
"amount": 49.9,
"_id": "6543210fedcba98765432100"
}
],
"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 price quote. 404 when there is no such record.
Needs a site admin token.
The ID of the price quote.
Returns the PriceQuote object.
curl -X GET 'http://hristovtintdetailng.com/price-quote/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"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",
"billing_customer_country": "example",
"billing_customer_phone": "+359 888 123 456",
"subtotal": 49.9,
"amount": 49.9,
"day_of_issue": "example",
"number": 1,
"foreign": false,
"home_tax": 0,
"foreign_tax": 0,
"items": [
{
"id": "example",
"name": "Example",
"qty": 1,
"unit_price": 49.9,
"discount": 1,
"amount": 49.9,
"_id": "6543210fedcba98765432100"
}
],
"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"
}
}Deletes a price quote. Answers the deleted record, or 404. Records that point to it are not changed.
Needs a site admin token.
The ID of the price quote.
Returns an empty answer on success.
curl -X DELETE 'http://hristovtintdetailng.com/price-quote/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'The unsubscribe page. Opened from the link in emails.
Works without a token; with a user token the answer is personal.
curl -X GET 'http://hristovtintdetailng.com/unsubscribe?ionic=true'
Emails that opted out. Answers an array of every record.
Needs a site admin token.
Returns the Unsubscribed object.
curl -X GET 'http://hristovtintdetailng.com/unsubscribed-list?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
{
"email": "jane@example.com",
"_id": "6543210fedcba98765432100"
}Creates an opted-out email. Reads no token: the unsubscribe page calls it. 409 when the email has already opted out.
Public - no token needed.
An email address.
Returns the Unsubscribed object.
curl -X POST 'http://hristovtintdetailng.com/unsubscribed-list?ionic=true' \
-H 'Content-Type: application/json' \
-d '{ "email": "..." }'{
"email": "jane@example.com",
"_id": "6543210fedcba98765432100"
}One opted-out email. 404 when there is no such record.
Needs a site admin token.
The ID of the unsubscribed.
Returns the Unsubscribed object.
curl -X GET 'http://hristovtintdetailng.com/unsubscribed-list/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"email": "jane@example.com",
"_id": "6543210fedcba98765432100"
}Updates an opted-out email. Fields outside the allowed list are silently ignored. Answers the updated record, or 404.
Needs a site admin token.
The ID of the unsubscribed.
Returns the Unsubscribed object.
curl -X PATCH 'http://hristovtintdetailng.com/unsubscribed-list/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"email": "jane@example.com",
"_id": "6543210fedcba98765432100"
}Deletes an opted-out email. Answers the deleted record, or 404. Records that point to it are not changed.
Needs a site admin token.
The ID of the unsubscribed.
Returns an empty answer on success.
curl -X DELETE 'http://hristovtintdetailng.com/unsubscribed-list/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'