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 path | Response | Browser access from another website |
|---|---|---|
| GET /public/plans | Object with freePlan and plans | Any origin, without cookies |
| GET /public/privacy-policy | Privacy policy | Only allowed origins; use your backend otherwise |
| GET /public/terms-of-use | Terms of use | Only allowed origins; use your backend otherwise |
| GET /public/chat-banners | Array of active chat banners | Any origin, without cookies |
| GET /public/chat-banners/page-top | Array of active page-top banners | Any origin, without cookies |
| GET /public/poll | Object with the enabled questionnaire in poll, or poll: null | Any 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:
| Fields | Meaning |
|---|---|
| titleRu, titleEn, titleCurrentLocale | Plan name |
| descriptionLineOneRu/En/CurrentLocale, descriptionLineTwoRu/En/CurrentLocale | Two description lines; each slash-separated suffix denotes a separate field |
| includedSections | Array of sections with titleRu/En/CurrentLocale and contentMarkdownRu/En/CurrentLocale |
| availableFunctions | Array of feature keys, such as canManageProjectCode or canShareProject |
| maxProjects, maxAppsPerProject | Integer plan limits; null means the plan does not set that limit |
| mainColor | Plan 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.
Legal documents
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:
| Fields | Meaning |
|---|---|
| contentMarkdownRu, contentMarkdownEn | The requested document in Russian and English |
| contentMarkdownCurrentLocale | The requested document selected for the request language |
| acceptanceUpdateTitle | Title 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 banner | Meaning |
|---|---|
| id | Banner UUID |
| contentMarkdownRu, contentMarkdownEn, contentMarkdownCurrentLocale | Markdown text and its language-selected value |
| iconName | Icon identifier |
| iconColor | Optional #RRGGBB icon color; null or omission uses the interface's default icon color |
| linkUrl | HTTP(S) URL or root-relative path |
| openInNewTab | Whether to open the link in a new tab |
| archived | Optional boolean; archived banners are filtered out |
| banner | Optional 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 definition | Meaning |
|---|---|
| titleRu/En/CurrentLocale, iconName | Invitation title and icon identifier |
| iconColor | Optional #RRGGBB icon color; null or omission uses the interface's default icon color |
| previewTitleRu/En/CurrentLocale, previewDescriptionRu/En/CurrentLocale | Introduction title and description; may be empty |
| enabled, bonusCredits | Enabled flag; completion reward in credits, or null for no reward |
| banner | Optional backgroundColor and textColor as #RRGGBB strings, and integer weight |
| startQuestionId, questions | First 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.