Connections

Public API

Read current Amazi plans, legal documents, chat and page-top banners, and the questionnaire from an external website or application.

Available endpoints

Use these endpoints to display Amazi's current public information on your website or in an application. The API base URL is https://api.amazi.pro. Append the paths directly, without an extra /api prefix.

Method and pathResponseBrowser access from another website
GET /public/plansObject with freePlan and plansAny origin, without cookies
GET /public/privacy-policyPrivacy policyOnly allowed origins; use your backend otherwise
GET /public/terms-of-useTerms of useOnly allowed origins; use your backend otherwise
GET /public/chat-bannersArray of active chat bannersAny origin, without cookies
GET /public/chat-banners/page-topArray of active page-top bannersAny origin, without cookies
GET /public/pollObject with the enabled questionnaire in poll, or poll: nullAny origin, without cookies

All six requests require no login, API key, request body, or query parameters. They read information and do not change it. They have no documented pagination or filtering parameters. HEAD returns headers without a body. OPTIONS handles browser preflight; it does not retrieve data.

Language and format

Successful GET requests return HTTP 200 with JSON. Send Accept-Language: en or Accept-Language: ru. Missing or unsupported languages fall back to English. A locale query parameter does not select the language on these endpoints.

Fields ending in Ru and En contain the respective translations. Fields ending in CurrentLocale contain the requested language, with a fallback to the other translation when the preferred text is empty. Responses vary by Accept-Language; keep language-specific cache entries separate.

Plans: GET /public/plans

The response contains freePlan, an object describing the free plan, and plans, an array of active paid plans in catalog order. Archived durations and credit options are excluded; durations with no remaining options are excluded too. Arrays may be empty. Read current values from the API instead of embedding prices or limits in your application.

Both free and paid plans contain:

FieldsMeaning
titleRu, titleEn, titleCurrentLocalePlan name
descriptionLineOneRu/En/CurrentLocale, descriptionLineTwoRu/En/CurrentLocaleTwo description lines; each slash-separated suffix denotes a separate field
includedSectionsArray of sections with titleRu/En/CurrentLocale and contentMarkdownRu/En/CurrentLocale
availableFunctionsArray of feature keys, such as canManageProjectCode or canShareProject
maxProjects, maxAppsPerProjectInteger plan limits; null means the plan does not set that limit
mainColorPlan display color

freePlan also has integer credit amounts: monthlyCredits, registrationCredits, paidPlanCompletionCredits, and phoneVerificationCredits. These describe catalog values, not a visitor's balance. See Plans and credits for how credits work.

Each item in plans also contains id (UUID), order (integer), isActive, isPopular, creditsDoNotExpire (booleans), and durations (array).

Each duration has id, months, creditAccumulationMonths, creditsDoNotExpire, creditOptions, and optional isArchived. Each credit option has id, credits, price, isNegotiatedPrice, and optional isArchived. For fixed options, credits and price are nonnegative integers. On api.amazi.pro, price is the total price in rubles for the selected duration, not kopecks or a monthly price. If isNegotiatedPrice is true, credits and price are null: display negotiated terms instead of zero. Use the selected duration's credit-expiration settings.

For fixed options, credits is the monthly credit allowance, while months is the purchased term length. creditAccumulationMonths describes the credit carry-over period; creditsDoNotExpire marks credits without expiration.

This endpoint does not return a signed-in user's subscription, balance, personal discounts, or a checkout result.

Use GET /public/privacy-policy for the privacy policy or GET /public/terms-of-use for the terms of use. Each endpoint returns only the requested document as an object with string fields:

FieldsMeaning
contentMarkdownRu, contentMarkdownEnThe requested document in Russian and English
contentMarkdownCurrentLocaleThe requested document selected for the request language
acceptanceUpdateTitleTitle of the latest request to accept updated documents; may be empty

Document bodies are Markdown. An empty body means that text has not been published. Reading the endpoint does not record anyone's acceptance. The response uses Cache-Control: no-store; do not retain it as a cached copy of the current policy.

Replace calls to the former /public/documents route with the endpoint for the document you need. The former route is no longer available.

Chat banners: GET /public/chat-banners

The response is an array, without a wrapping object. It contains non-archived chat banners in their stored order. An empty array means there are no active chat banners. It does not include page-top banners or a visitor's dismissal state.

Fields on each bannerMeaning
idBanner UUID
contentMarkdownRu, contentMarkdownEn, contentMarkdownCurrentLocaleMarkdown text and its language-selected value
iconNameIcon identifier
iconColorOptional #RRGGBB icon color; null or omission uses the interface's default icon color
linkUrlHTTP(S) URL or root-relative path
openInNewTabWhether to open the link in a new tab
archivedOptional boolean; archived banners are filtered out
bannerOptional display settings: backgroundColor and textColor as #RRGGBB strings, weight as an integer

Root-relative linkUrl values refer to the Amazi web application. Resolve them against https://app.amazi.pro, so /settings does not send visitors to your own website's settings page.

Page-top banners: GET /public/chat-banners/page-top

The response is an array of non-archived page-top banners in stored order, or an empty array. Fields match chat banners, except linkUrl may be an empty string (no destination) and banner is required with backgroundColor, textColor, and weight. Stored weight does not determine display order. Language selection works the same way.

This endpoint contains configured page-top announcements. It does not include maintenance notices, questionnaire invitations, inbox messages, or a visitor's dismissal state. Reading it does not dismiss a banner.

Questionnaire: GET /public/poll

The response is { "poll": null } when the questionnaire is disabled or has not been configured. Otherwise, poll contains revision (nonnegative integer), optional completionEpoch (nonnegative integer), and definition, the enabled questionnaire. The response uses Cache-Control: no-store.

Fields in definitionMeaning
titleRu/En/CurrentLocale, iconNameInvitation title and icon identifier
iconColorOptional #RRGGBB icon color; null or omission uses the interface's default icon color
previewTitleRu/En/CurrentLocale, previewDescriptionRu/En/CurrentLocaleIntroduction title and description; may be empty
enabled, bonusCreditsEnabled flag; completion reward in credits, or null for no reward
bannerOptional backgroundColor and textColor as #RRGGBB strings, and integer weight
startQuestionId, questionsFirst question UUID and array of questions

Each question has id, titleRu/En/CurrentLocale, type (single or multiple), options, and nextQuestionId (UUID or null). Each option has id, labelRu/En/CurrentLocale, optional isCustom, and nextQuestionId (UUID, end, or null). Single-choice answers follow the option's transition, falling back to the question's transition; multiple-choice answers use the question's transition. A null final transition or end finishes the questionnaire. A custom option allows a visitor to enter text.

The response contains no answers, completion status, or other user data, including when the request has a user session. It does not submit answers or grant credits. Answer submission and completion rewards require a signed-in account through the existing questionnaire workflow; there is no public submission endpoint.

Request examples

These terminal or backend requests work without credentials:

curl --fail --silent --show-error https://api.amazi.pro/public/plans -H 'Accept-Language: en'
curl --fail --silent --show-error https://api.amazi.pro/public/privacy-policy -H 'Accept-Language: en'
curl --fail --silent --show-error https://api.amazi.pro/public/terms-of-use -H 'Accept-Language: en'
curl --fail --silent --show-error https://api.amazi.pro/public/chat-banners -H 'Accept-Language: en'
curl --fail --silent --show-error https://api.amazi.pro/public/chat-banners/page-top -H 'Accept-Language: en'
curl --fail --silent --show-error https://api.amazi.pro/public/poll -H 'Accept-Language: en'

For plans, both banner endpoints, and the questionnaire, a browser can request the API directly:

const response = await fetch("https://api.amazi.pro/public/plans", {
  headers: { "Accept-Language": "en" },
  credentials: "omit",
});
if (!response.ok) throw new Error("Unable to load plans: " + response.status);
const { freePlan, plans } = await response.json();
console.log(freePlan.titleCurrentLocale, plans.map((plan) => plan.titleCurrentLocale));

Browser access and errors

Plans, both banner endpoints, and the questionnaire allow cross-origin GET, HEAD, and OPTIONS without credentials. Do not send cookies or Authorization for these reads. Legal documents are also unauthenticated, but browser access is restricted by origin. If your website is not allowed, request /public/privacy-policy or /public/terms-of-use from your backend and serve the result through your own application, respecting no-store. A successful curl request does not establish that browser CORS access is allowed.

Check the HTTP status before reading a response as successful data. Distinguish HTTP errors from network or CORS failures, and show an unavailable state when a request fails. Render returned Markdown with a safe Markdown renderer. Accept unknown JSON fields and variable catalog sizes; optional fields and empty arrays are normal. Public catalog data does not grant account or project permissions.