Amazi API
Public data
Read plans, legal documents, banners and the questionnaire without authentication.
Available anonymous endpoints
Use these endpoints to display Amazi's current public information on your website or in an application. The external API base URL is https://api.amazi.ai/v1. The table shows full paths relative to https://api.amazi.ai; do not add an extra /api prefix or repeat /v1.
Update existing integrations from /public/plans, /public/privacy-policy, /public/terms-of-use, /public/chat-banners, /public/chat-banners/page-top and /public/poll to the corresponding /v1 paths below. The previous URLs are removed and return HTTP 404; there are no redirects or compatibility aliases.
| Method and path | Response | Browser access from another website |
|---|---|---|
| GET /v1/plans | Object with freePlan and plans | Any origin, without cookies |
| GET /v1/privacy-policy | Privacy policy | Any origin, without cookies |
| GET /v1/terms-of-use | Terms of use | Any origin, without cookies |
| GET /v1/chat-banners | Array of active chat banners | Any origin, without cookies |
| GET /v1/chat-banners/page-top | Array of active page-top banners | Any origin, without cookies |
| GET /v1/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, Accept-Language: es, 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 with a language suffix, such as titleEn, titleRu and titleEs, contain authored translations. The plain field, such as title, contains the requested language. If that text is empty, the API uses English and then another available translation. Responses vary by Accept-Language; keep language-specific cache entries separate.
Plans: GET /v1/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 |
|---|---|
| title, titleEn, titleRu, titleEs | Plan name |
| descriptionLineOne, descriptionLineOneEn, descriptionLineOneRu, descriptionLineOneEs, descriptionLineTwo, descriptionLineTwoEn, descriptionLineTwoRu, descriptionLineTwoEs | Two description lines; each name denotes a separate field |
| includedSections | Array of sections with title, titleEn, titleRu, titleEs and contentMarkdown, contentMarkdownEn, contentMarkdownRu, contentMarkdownEs |
| 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 /v1/privacy-policy for the privacy policy or GET /v1/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, contentMarkdownEs | The requested document in Russian, English and Spanish |
| contentMarkdown | 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 /v1/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, contentMarkdownEs, contentMarkdown | 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 /v1/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 /v1/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 |
|---|---|
| title, titleEn, titleRu, titleEs, iconName | Invitation title and icon identifier |
| iconColor | Optional #RRGGBB icon color; null or omission uses the interface's default icon color |
| previewTitle, previewTitleEn, previewTitleRu, previewTitleEs, previewDescription, previewDescriptionEn, previewDescriptionRu, previewDescriptionEs | 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, title, titleEn, titleRu, titleEs, type (single or multiple), options, and nextQuestionId (UUID or null). Each option has id, label, labelEn, labelRu, labelEs, 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.ai/v1/plans -H 'Accept-Language: en'
curl --fail --silent --show-error https://api.amazi.ai/v1/privacy-policy -H 'Accept-Language: en'
curl --fail --silent --show-error https://api.amazi.ai/v1/terms-of-use -H 'Accept-Language: en'
curl --fail --silent --show-error https://api.amazi.ai/v1/chat-banners -H 'Accept-Language: en'
curl --fail --silent --show-error https://api.amazi.ai/v1/chat-banners/page-top -H 'Accept-Language: en'
curl --fail --silent --show-error https://api.amazi.ai/v1/poll -H 'Accept-Language: en'
For all six endpoints, a browser can request the API directly:
const response = await fetch("https://api.amazi.ai/v1/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.title, plans.map((plan) => plan.title));
Browser access and errors
All six public endpoints, including legal documents, allow cross-origin GET, HEAD, and OPTIONS from any website without credentials. Use credentials: "omit" and do not send cookies or Authorization for these reads. Legal documents still use no-store so visitors receive the current text.
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.