api.polyzon.org · v1

Polyzon API

Поиск 3D-моделей по каталогу Polyzon со всех площадок и карточки моделей — для ваших ботов, сайтов и приложений.

Как начать

  1. Войдите в аккаунт Polyzon, в разделе «API» создайте токен и сохраните его — второй раз он показан не будет.
  2. Передавайте токен в каждом запросе: Authorization: Bearer pzk_…
  3. Проверьте его методом GET /v1/me — здесь же, в песочнице ниже.
const res = await fetch('https://api.polyzon.org/v1/search?q=дракон&free=1', {
  headers: { Authorization: `Bearer ${process.env.POLYZON_TOKEN}` }
});
const { items, hasMore } = await res.json();
import os, requests

r = requests.get("https://api.polyzon.org/v1/search",
                 params={"q": "дракон", "sources": "printables"},
                 headers={"Authorization": f"Bearer {os.environ['POLYZON_TOKEN']}"})
r.raise_for_status()
print(r.json()["items"])

Лимиты

  • 200 запросов в сутки (сброс в 00:00 UTC) и 20 в минуту — на аккаунт, сколько бы токенов у него ни было.
  • /v1/me и /v1/limits суточную квоту не тратят, но входят в минутный лимит.
  • Каждый ответ несёт X-RateLimit-Limit, X-RateLimit-Remaining и X-RateLimit-Reset (секунды Unix) для суточной квоты; ответ 429 — ещё и Retry-After.
  • Отозванный в аккаунте токен перестаёт работать в течение минуты.

Ошибки

Ошибки приходят как application/problem+json: поле code стабильно, по нему и ветвитесь; detail — пояснение для человека.

СтатусcodeКогда
400bad_requestНеверный параметр; в поле param — какой
400page_too_deeppage × size больше 2400
401unauthorizedНет заголовка Authorization
401invalid_tokenТокен неверен или отозван
403account_action_requiredПримите действующие условия в аккаунте Polyzon
404not_foundНет такой модели или метода
410goneМодель удалена по требованию правообладателя
429rate_limitedПревышен минутный лимит
429quota_exceededИсчерпана суточная квота
503unavailableСервис временно недоступен — повторите позже

Правила

  • В v1 поля только добавляются: переименование или удаление — только в новой версии. Неизвестные поля игнорируйте.
  • Модель, на которую пришёл 410 gone, удалена по требованию правообладателя — удалите её и у себя.
  • Показывая модели, ссылайтесь на страницу площадки (url) и указывайте автора — данные принадлежат площадкам и авторам.
  • Не храните токен в коде сайта или приложения у пользователя: только на своём сервере.

Методы и песочница

Поиск моделей. Поиск по каталогу Polyzon: модели со всех площадок, с фильтрами и страницами. Глубина выдачи — не больше 2400 моделей (page × size).

ПараметрГдеОписание
q*запросПоисковый запрос на русском или английском, до 200 символов.
pageзапросНомер страницы, с 1. По умолчанию 1.
sizeзапросМоделей на странице. page × size — не больше 2400. По умолчанию 20.
sortзапросПорядок: relevant — по релевантности, popular — по популярности на своей площадке, newest — новые, likes, makes, downloads. По умолчанию relevant.
freeзапросТолько бесплатные модели.
sourcesзапросПлощадки через запятую: thingiverse, cults3d, printables, makerworld, 3dtoday, crealitycloud, myminifactory, thangs, youmagine, grabcad, sketchfab, threeding, nexprint, nasa, nih3d, smithsonian, pinshape, cgtrader, gambody, jewelmodel, makeronline, 3dexport.
formatsзапросФорматы файлов через запятую: stl, 3mf, obj, step, scad, gcode и другие.
licenseзапросЛицензии через запятую: cc0, cc-by, cc-by-sa, cc-by-nd, cc-by-nc, cc-by-nc-sa, cc-by-nc-nd, gpl, lgpl, mit, bsd, private-use, commercial, custom, unknown.
langзапросЯзык названий и тегов: ru или en. Если оригинал на другом языке, отдаётся машинный перевод. По умолчанию ru.
curl -G "https://api.polyzon.org/v1/search" \
  -H "Authorization: Bearer $POLYZON_TOKEN" \
  --data-urlencode "q=дракон" \
  --data-urlencode "page=1" \
  --data-urlencode "size=20" \
  --data-urlencode "sort=relevant" \
  --data-urlencode "lang=ru"
Пример ответа

Страница выдачи. hasMore — есть ли следующая страница в пределах 2400; partial — часть каталога не ответила, выдача неполная. В stats.collects — сохранения в коллекции, а если площадка их не считает — скачивания.

{
  "query": "дракон",
  "correctedQuery": null,
  "didYouMean": null,
  "total": 1873,
  "totalRelation": "eq",
  "page": 1,
  "size": 20,
  "hasMore": true,
  "partial": false,
  "items": [
    {
      "source": "thingiverse",
      "id": "tv-1234567",
      "title": "Дракон с подвижными сочленениями (пример)",
      "url": "https://www.thingiverse.com/thing:1234567",
      "thumbnail": "https://cdn.thingiverse.com/assets/dragon.jpg",
      "creator": "example_maker",
      "license": "cc-by-nc",
      "price": {
        "type": "free",
        "value": 0,
        "currency": null,
        "display": "Бесплатно"
      },
      "formats": [
        "stl"
      ],
      "tags": [
        "дракон",
        "игрушка"
      ],
      "stats": {
        "likes": 51234,
        "comments": 870,
        "makes": 3120,
        "collects": 61000
      },
      "publishedAt": "2021-01-17T10:21:00Z"
    }
  ]
}

GET /v1/models/{source}/{id}

Карточка модели. Модель по площадке и её id — те же, что в элементах поиска и в адресе страницы polyzon.org/model/{source}/{id}. Картинки — адреса на CDN самой площадки.

ПараметрГдеОписание
source*путьПлощадка, откуда модель.
id*путьИдентификатор модели на площадке с префиксом Polyzon, например tv-1234567.
langзапросЯзык названия, описания и тегов: ru или en. По умолчанию ru.
curl -G "https://api.polyzon.org/v1/models/thingiverse/tv-1234567" \
  -H "Authorization: Bearer $POLYZON_TOKEN" \
  --data-urlencode "lang=ru"
Пример ответа

Модель. copies — та же модель на других площадках.

{
  "source": "thingiverse",
  "id": "tv-1234567",
  "title": "Дракон с подвижными сочленениями (пример)",
  "url": "https://www.thingiverse.com/thing:1234567",
  "thumbnail": "https://cdn.thingiverse.com/assets/dragon.jpg",
  "creator": "example_maker",
  "license": {
    "id": "cc-by-nc",
    "raw": "Creative Commons - Attribution - Non-Commercial"
  },
  "price": {
    "type": "free",
    "value": 0,
    "currency": null,
    "display": "Бесплатно"
  },
  "formats": [
    "stl"
  ],
  "tags": [
    "дракон",
    "игрушка"
  ],
  "stats": {
    "likes": 51234,
    "comments": 870,
    "makes": 3120,
    "collects": 61000,
    "downloads": 410000,
    "views": 990000
  },
  "publishedAt": "2021-01-17T10:21:00Z",
  "description": "Дракон печатается целиком, без поддержек…",
  "images": [
    "https://cdn.thingiverse.com/assets/dragon.jpg"
  ],
  "creatorUrl": "https://www.thingiverse.com/example_maker",
  "category": "Toys & Games",
  "updatedAt": "2021-02-02T08:00:00Z",
  "copies": [
    {
      "source": "printables",
      "id": "pr-123456"
    }
  ]
}

GET /v1/me

Аккаунт и токен. Кому принадлежит токен, которым сделан запрос. Суточную квоту не тратит. Суточную квоту не тратит.

curl "https://api.polyzon.org/v1/me" \
  -H "Authorization: Bearer $POLYZON_TOKEN"
Пример ответа

Аккаунт и токен.

{
  "account": {
    "id": "0f8c2a4e-…",
    "displayName": "Алексей",
    "createdAt": "2026-03-14T10:00:00.000Z"
  },
  "token": {
    "id": "7d0e2f8a-…",
    "name": "Телеграм-бот",
    "prefix": "pzk_Q7xR2mVb",
    "createdAt": "2026-10-09T08:15:00.000Z"
  }
}

GET /v1/limits

Остаток лимитов. Минутное окно и сутки UTC: лимит, израсходовано, осталось и момент сброса (секунды Unix). Суточную квоту не тратит. Суточную квоту не тратит.

curl "https://api.polyzon.org/v1/limits" \
  -H "Authorization: Bearer $POLYZON_TOKEN"
Пример ответа

Окна квот аккаунта.

{
  "perMinute": {
    "limit": 20,
    "used": 1,
    "remaining": 19,
    "resetAt": 1791579180
  },
  "daily": {
    "limit": 200,
    "used": 37,
    "remaining": 163,
    "resetAt": 1791590400
  }
}