Анализ сайта doc.yourpass.eu
Основное Готовность: 100%
Домен
doc.yourpass.eu
Состояние доменного имени
?
Проверяем корректность доменного имени и наличие технических проблем на уровне домена.
Используйте для продвижения только домен второго уровня.
Отличный запоминающийся домен.
Ответ сервера
200 Успешный ответ
HTTP-код ответа и цепочка редиректов
?
Код 200 — страница доступна. Коды 3xx — редиректы (цепочки замедляют загрузку и размывают ссылочный вес). Коды 4xx/5xx — ошибки, поисковик не сможет проиндексировать страницу.
Сервер настроен корректно.
Цепочка редиректов:
http://doc.yourpass.eu
302 Found
https://doc.yourpass.eu/
200 OK
Безопасность
Сайт безопасен
Использование HTTPS и SSL-сертификат
?
HTTPS — обязательный стандарт. Google и Яндекс отдают предпочтение защищённым сайтам. Отсутствие SSL или просроченный сертификат ведут к предупреждениям в браузере и снижению позиций.
На сайте работает защищенный протокол ssl и сайт открывается по https.
Ssl-сертификат действителен до 12.10.2026 15:34:30.
Включён HSTS (Strict-Transport-Security) — защита от подмены на http.
HTTP автоматически перенаправляется на HTTPS.
Поздравляем! Сайт не содержится в реестре РКН.
Кодировка
utf-8
Кодировка символов страницы
?
Стандарт — UTF-8. Неправильная кодировка вызывает нечитаемые символы и мешает поисковику корректно распознать текст страницы.
Указана кодировка на странице utf-8.
Язык
en
Атрибут lang в HTML-теге
?
Атрибут lang (<html lang="ru">) сообщает поисковикам и браузерам, на каком языке написана страница. Помогает при ранжировании в региональном поиске.
Язык документа указан явно: en.
Скорость загрузки
~0,53сек
Время отклика сервера (TTFB)
?
Time To First Byte — время до получения первого байта от сервера. Норма до 200 мс. Медленный отклик ухудшает пользовательский опыт и ранжирование: Яндекс и Google учитывают скорость страниц.
Скорость загрузки сайта 0,53сек оптимальна.
Объем документа
195Кб
Размер HTML-кода страницы
?
Слишком большой HTML замедляет парсинг браузером и сканирование поисковым роботом. Рекомендуется не более 200 Кб.
Объем html-документа 195Кб оптимален.
Структура html-документа корректна.
Ресурсы
Ресурсы: 3
Внешние ресурсы страницы (CSS, JS, изображения)
?
Количество и тип подключённых ресурсов влияют на скорость загрузки. Большое число запросов увеличивает время рендеринга страницы.
Кол-во файлов ресурсов 3 достаточно.
Показать полный список ресурсов
| Тип | Название | Значение |
|---|---|---|
| stylesheet | /styles/screen.min.48e06a604e04f204bd38ed485cc62a28f2adb73d75d4be1a060a5d63d2096e71.css | |
| stylesheet | /styles/print.min.a4fcf71764ac1b934636b90cc1a6c56e91cff599f7645da38933b5091202848d.css | |
| js | /js/index.230e3543e57b218d95f3bd208039d13917557f976820e881be1de3aa50ce72a2.js |
Серверные заголовки
Кол-во: 8
HTTP-заголовки ответа сервера
?
Заголовки сервера передают браузеру и поисковику служебную информацию: кеширование, безопасность (CSP, HSTS), сжатие (gzip). Правильная настройка ускоряет загрузку и повышает защищённость.
Найдены серверные заголовки 8шт. Подробнее про серверные заголовки.
Показать полный список серверных заголовков
| Ключ | Значение |
|---|---|
| Content-Security-Policy | script-src 'self' 'nonce-ZNOJ+pDj5zrupFkz' 'unsafe-eval' |
| Date | Thu, 20 Aug 2026 21:45:27 GMT |
| permissions-policy | accelerometer=(), camera=(), geolocation=(), microphone=(), payment=(), usb=() |
| Referrer-Policy | same-origin |
| Strict-Transport-Security | max-age=31536000; includeSubDomains |
| X-Content-Type-Options | nosniff |
| X-Frame-Options | DENY |
| X-XSS-Protection | 1; mode=block |
CMS
Не определена
Система управления сайтом (движок)
?
CMS — это движок, на котором работает сайт (WordPress, 1C-Bitrix, Tilda и др.). Знание CMS помогает понять возможности SEO-оптимизации и подобрать подходящие инструменты. «Не определена» — вероятно, самописный сайт или нестандартная сборка.
CMS не определена. Вероятно, сайт самописный либо движок надёжно скрыт. Это не ошибка.
Веб-сервер
Не определён
Программное обеспечение сервера
?
Веб-сервер — это ПО, которое отдаёт страницы посетителям (nginx, Apache, IIS, LiteSpeed и др.). Определяется по серверным заголовкам ответа (Server, X-Powered-By и т.п.). «Не определён» — сервер намеренно скрывает эти заголовки, это нормальная практика безопасности.
Веб-сервер не определён — заголовок Server скрыт. Это не ошибка: часто так настраивают из соображений безопасности.
Мета-теги Готовность: 32%
Title
Yourpass documentation
Заголовок страницы в браузере и поисковой выдаче
?
Title — главный SEO-заголовок страницы. Влияет на CTR в поиске и ранжирование. Оптимальная длина: 50–70 символов. Ключевые слова — ближе к началу.
Необходимо увеличить число символов в title (текущее значение мало: 22, минимум: 25, оптимально: от 40 до 45)
Дублей словоформ в title не найдено.
Description
Описание страницы в поисковой выдаче (сниппет)
?
Meta Description — текст под заголовком в выдаче. Напрямую на позиции не влияет, но влияет на CTR. Оптимальная длина: 120–160 символов.
Установите мета-тег description!
Keywords
Список ключевых слов страницы (устаревший тег)
?
Meta Keywords не учитывается Яндексом и Google для ранжирования с 2009–2012 годов. Заполнение не обязательно, но не вредит. Конкурент может использовать содержимое для анализа.
Установите мета-тег keywords!
Канонический Url
Указывает поисковику основную версию страницы
?
Canonical (rel=canonical) предотвращает проблему дублей страниц. Должен точно совпадать с URL проверяемой страницы. Неправильный canonical может передать ссылочный вес на другую страницу.
Рекомендуем прописать канонический Url.
Robots
Ошибок нет
Директивы для поисковых роботов на уровне страницы
?
Meta Robots управляет индексацией конкретной страницы: index/noindex — индексировать ли, follow/nofollow — следовать ли по ссылкам. Noindex полностью исключает страницу из поиска.
Meta-тег robots не указан. Страница свободна для индексации.
Адаптивность
width=device-width,initial-scale=1,maximum-scale=1
Настройка масштабирования на мобильных устройствах
?
Тег viewport (<meta name="viewport">) сообщает браузеру, как масштабировать страницу на мобильных. Стандарт: width=device-width, initial-scale=1. Отсутствие — признак отсутствия мобильной версии.
Meta-тег viewport со значением-константой width=device-width задаёт ширину страницы в соответствии с размером экрана.
Meta-тег viewport со значением initial-scale=1.0 определяет масштаб 1:1, т.е. «не масштабировать».
Meta-тег viewport со значением maximum-scale определяет максимальный масштаб области просмотра.
Разметка OpenGraph
Не найдено
Мета-теги для красивых превью в соцсетях
?
OpenGraph (og:title, og:description, og:image) управляет тем, как страница выглядит при репосте в социальных сетях и мессенджерах. Отсутствие OG-тегов — невзрачный превью при шеринге.
Разметка OpenGraph не задана. Страница не оптимизирована под социальные сети. Мета-теги с разметкой Og помогают социальным роботам лучше структурировать Ваш сайт.
Все мета-теги
Кол-во: 2
Полный список мета-тегов страницы
?
Таблица всех meta-тегов, включая нестандартные. Позволяет найти опечатки, дубли и лишние теги.
Найдены мета-теги 2шт. Мета-теги не видимы для человека и предназначены для обмена информацией между веб-страницей и поисковыми системами, браузерами и другими веб-службами. С ними роботы 🤖 и устройства ведут себя более ожидаемо.
Показать полный список мета-тегов
| Тип | Название | Значение |
|---|---|---|
| name | generator | Hugo 0.160.1 |
| name | viewport | width=device-width,initial-scale=1,maximum-scale=1 |
Оптимизация Готовность: 62%
Структура
Ошибок нет
Семантические HTML-элементы страницы
?
Проверяет наличие основных структурных элементов: nav, header, footer, main. Корректная семантическая структура помогает поисковику понять архитектуру страницы.
Структура документа корректна (теги <html> и <body> присутствуют по одному на документ).
Контент
Есть ошибки
Объём и качество текстового содержимого
?
Анализирует объём полезного текста на странице. Слишком мало — страница может считаться малополезной. Слишком много — ухудшается читаемость и восприятие.
Слова из title 2 встречаются в тексте редко. Добавьте в контент страницы слова из тега <title>!
Абзацев с текстом 184 достаточно.
Среднее число слов в абзаце 11 достаточно.
Кол-во знаков контента 48791 на странице оптимально.
Кол-во слов 7319 на странице оптимально.
Заголовки
Ошибок нет
Иерархия заголовков H1–H6
?
H1 должен быть один и содержать ключевой запрос. H2–H6 описывают подразделы. Пропуск уровней (H1 → H3) и несколько H1 — типичные ошибки, снижающие понятность страницы для поисковика.
На странице присутствуют заголовки <h1> 9. Это прекрасно.
На странице присутствуют заголовки <h2> 33. Это хорошо.
На странице присутствуют заголовки <h3> 53.
Тошнота
8,12
Насколько одно слово доминирует в тексте
?
Классическая тошнота = √(частота самого повторяющегося слова). Норма до 7–8: текст воспринимается естественно. Выше — поисковик может счесть страницу переспамленной.
Тошнота превышает норму 5. Измените текст страницы!
Академич. тошнота
21,90%
Насколько текст перенасыщен ключевыми словами
?
Академическая тошнота = (частота слова / общее количество слов) × 100%. Показывает долю конкретного слова в тексте. Норма 5–15%.
Академическая тошнота превышает норму 5-15%. Измените текст страницы!
Семантическое ядро
20
Наиболее часто встречающиеся слова на странице
?
Топ слов по частоте использования. Показывает, какие слова доминируют в тексте с точки зрения поисковика.
Контент страницы содержит осмысленный текст и слова.
Показать список слов
| Слово | Кол-во | Частота |
|---|---|---|
| function | 66 | 0,90% |
| chunks | 66 | 0,90% |
| request | 50 | 0,68% |
| access_token | 46 | 0,63% |
| bearer | 45 | 0,61% |
| options | 44 | 0,60% |
| string | 37 | 0,51% |
| authorization | 34 | 0,46% |
| object | 31 | 0,42% |
| console | 30 | 0,41% |
| template | 30 | 0,41% |
| number | 29 | 0,40% |
| response | 26 | 0,36% |
| datetime | 26 | 0,36% |
| api_url | 25 | 0,34% |
| headers | 25 | 0,34% |
| require | 24 | 0,33% |
| authorization: | 24 | 0,33% |
| method | 24 | 0,33% |
| required | 24 | 0,33% |
Индексация Готовность: 25%
Индексирование
Ошибок нет
Разрешено ли индексирование страницы
?
Проверяет, не закрыта ли страница от индексации через robots.txt, meta robots или X-Robots-Tag. Страница, закрытая от индексации, не появится в поисковой выдаче.
Анкоров на странице 42 оптимально. Поисковые роботы обязательно проиндексируют сайт.
Robots.txt
Найден корректный robots.txt
Файл управления сканированием сайта роботами
?
Robots.txt указывает поисковым роботам, какие страницы сканировать, а какие — нет. Ошибки в файле могут случайно закрыть важные разделы от индексации.
Robots.txt настроен корректно. Размер файла: 200445 байт. Загружен за: 1сек.
Проверяемая страница не запрещена в robots.txt.
Robots.txt доступен по постоянному адресу
Цепочка редиректов для файла robots.txt:
http://doc.yourpass.eu/robots.txt
302 Found
https://doc.yourpass.eu/robots.txt
200 OK
Показать содержимое robots.txt
<!doctype html><html lang=en><head><meta name=generator content="Hugo 0.160.1"><meta charset=utf-8><meta content="IE=edge,chrome=1" http-equiv=X-UA-Compatible><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1"><title>Yourpass documentation</title><link href=/styles/screen.min.48e06a604e04f204bd38ed485cc62a28f2adb73d75d4be1a060a5d63d2096e71.css rel=stylesheet media=screen integrity="sha256-SOBqYE4E8gS9OO1IXMYqKPKttz111L4aBgpdY9IJbnE="><link href=/styles/print.min.a4fcf71764ac1b934636b90cc1a6c56e91cff599f7645da38933b5091202848d.css rel=stylesheet media=print integrity="sha256-pPz3F2SsG5NGNrkMwabFbpHP9Zn3ZF2jiTO1CRIChI0="><script nonce="ogiUDmVx2YcJq0pT" src=/js/index.230e3543e57b218d95f3bd208039d13917557f976820e881be1de3aa50ce72a2.js integrity="sha256-Iw41Q+V7IY2V870ggDnRORdVf5doIOiBvh3jqlDOcqI=" defer></script><style>.content img{width:50%;padding:10px 0;margin:5px 0;background-color:#fff;object-fit:contain}.content aside>p:first-child{display:inline}.content aside>p+p{margin:1rem 0 0}</style><style>[x-cloak]{display:none!important}</style></head><body class=index x-data="{ navOpen: false }" x-cloak><a href=# id=nav-button @click="navOpen = !navOpen" :class="{'open': navOpen }"><span>NAV
<img src=/images/navbar.png></span></a><div class=toc-wrapper :class="{'open': navOpen }"><svg xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-40 -24 610 141"><g><path fill="#3C59A0" d="M107 60.5 79.5 44.7c-3.1-1.8-8-.6-9.7 2.4l-8.3 14.4h10.8c5 0 10.3 5.4 10.3 10.6v27.6l1.4.8c3.1 1.8 8 .6 9.6-2.4l16.2-28C111.5 67.2 110.1 62.3 107 60.5"/><path fill="#EA6C1B" d="M39.9 49.5c-5 0-10.3-5.4-10.3-10.6V12.3l-3.1-1.8c-3.1-1.8-8-.6-9.7 2.4l-16.2 28c-1.7 2.9-.3 7.8 2.8 9.5L31 66.3c3.1 1.8 8 .6 9.6-2.4L49 49.5H39.9z"/><path fill="#FFF" d="M63.3 52.6l4-7c1.6-2.8 5.1-4.6 8.8-4.6 1.8.0 3.4.4 4.8 1.2l20.2 11.7 5.8-3.4c3.1-1.8 4.5-6.6 2.8-9.5L93.5 13c-1.7-2.9-6.6-4.1-9.6-2.4L56.4 26.4c-3.1 1.8-4.5 6.6-2.8 9.5l9.7 16.7z"/><path fill="#F8B51D" d="M51.2 37.4C48.6 33 50.5 26.5 55 23.9l24.2-14V7.2c0-3.6-3.5-7.2-6.9-7.2H39.9C36.5.0 33 3.6 33 7.2V39c0 3.6 3.5 7.2 6.9 7.2h16.3l-5-8.8z"/><path fill="#009DDF" d="M72.3 64.9h-18l5 8.7c2.5 4.4.6 10.9-3.8 13.5l-22.5 13v3.7c0 3.6 3.5 7.2 6.9 7.2h32.4c3.4.0 6.9-3.6 6.9-7.2V72.1C79.2 68.5 75.7 64.9 72.3 64.9"/><path fill="#E21D1C" d="M47.2 58.4l-4 7c-1.6 2.8-5.1 4.6-8.8 4.6h0c-1.8.0-3.4-.4-4.8-1.2L9.4 57.2l-5.8 3.4c-3.1 1.8-4.5 6.6-2.8 9.5l16.2 28c1.7 2.9 6.6 4.1 9.6 2.4l27.5-15.9c3.1-1.8 4.5-6.6 2.8-9.5L47.2 58.4z"/></g><g fill="#FFF"><path d="M185.8 71.6c0-7-2.6-14.2-13.2-14.2-4.4.0-8.5 1.2-11.4 3.1l1.4 4.2c2.4-1.6 5.8-2.6 9-2.6 7.1.0 7.9 5.2 7.9 8v.7c-13.4-.1-20.8 4.5-20.8 12.9.0 5 3.6 10 10.6 10 4.9.0 8.7-2.4 10.6-5.2h.2l.5 4.4h5.7c-.4-2.4-.6-5.3-.6-8.3v-13zM179.7 81.2c0 .6-.2 1.4-.4 2-1 2.9-3.9 5.8-8.4 5.8-3.2.0-6-1.9-6-6 0-6.7 7.8-8 14.7-7.8v6z"/><path d="M207.1 72.7c-4.5-1.7-6.6-3-6.6-5.9.0-2.6 2.1-4.7 5.8-4.7 3.2.0 5.7 1.2 7.1 2l1.6-4.6c-1.9-1.1-5-2.2-8.5-2.2-7.5.0-12 4.6-12 10.2.0 4.2 2.9 7.6 9.2 9.8 4.7 1.7 6.5 3.4 6.5 6.4.0 2.9-2.1 5.2-6.7 5.2-3.2.0-6.5-1.3-8.3-2.5l-1.6 4.8c2.4 1.4 6 2.4 9.7 2.4 8.3.0 13-4.3 13-10.4C216.2 78 213.2 75 207.1 72.7z"/><path d="M235.5 72.7c-4.5-1.7-6.6-3-6.6-5.9.0-2.6 2.1-4.7 5.8-4.7 3.2.0 5.7 1.2 7.1 2l1.6-4.6c-1.9-1.1-5-2.2-8.5-2.2-7.5.0-12 4.6-12 10.2.0 4.2 2.9 7.6 9.2 9.8 4.7 1.7 6.5 3.4 6.5 6.4.0 2.9-2.1 5.2-6.7 5.2-3.2.0-6.5-1.3-8.3-2.5l-1.6 4.8c2.4 1.4 6 2.4 9.7 2.4 8.3.0 13-4.3 13-10.4C244.6 78 241.6 75 235.5 72.7z"/><path d="M138.7 57.4c-5.7.0-9.7 2.5-12.3 6.7h-.2l-.1-2.5c1.2-.6 2.4-1.3 3.5-2.3 4.3-3.7 7.4-9.8 11.9-21.7L151 13h-6.7l-6.9 20.4c-.9 2.5-1.6 5.2-2.2 7.2H135c-.6-2.1-1.4-4.8-2.2-7.1L125.2 13h-6.9l12.8 32c.3.8.4 1.3.4 1.6.0.4-.2.9-.5 1.5-1.4 3.2-3.6 5.7-5.3 7-1.9 1.6-3.9 2.6-5.5 3.1l.2 5.3s0 0 0 0c.1 1.8.1 3.8.1 6v32.9h6.2V88.2h.2c2.1 3.4 6.1 5.4 10.7 5.4 8.2.0 15.8-6.2 15.8-18.6C153.4 64.5 147.1 57.4 138.7 57.4zM136.6 88.7c-4.5.0-8.3-3-9.5-7.4-.1-.8-.3-1.6-.3-2.6v-6c0-.9.2-1.8.4-2.6 1.2-4.7 5.2-7.8 9.5-7.8 6.7.0 10.3 6 10.3 12.9C147.1 83.3 143.2 88.7 136.6 88.7z"/><path d="M170.7 12.2c-9.6.0-17.2 6.8-17.2 18.4.0 11 7.2 17.8 16.6 17.8 8.4.0 17.3-5.6 17.3-18.4C187.4 19.4 180.7 12.2 170.7 12.2zM170.4 43.7c-6.2.0-10.5-5.7-10.5-13.3.0-6.6 3.2-13.5 10.7-13.5 7.4.0 10.4 7.5 10.4 13.3C180.9 38 176.4 43.7 170.4 43.7z"/><path d="M224.4 38.2V13h-6.3v21.3c0 1.1-.2 2.3-.6 3.2-1.2 2.8-4.1 5.7-8.3 5.7-5.7.0-7.7-4.4-7.7-11V13h-6.3v20.3c0 12.2 6.5 15.2 12 15.2 6.2.0 9.8-3.7 11.5-6.5h.1l.4 5.7h5.6C224.5 44.9 224.4 41.8 224.4 38.2z"/><path d="M250.2 12.2c-4.2.0-8 2.9-9.6 7.6h-.3l-.2-6.8h-5.5c.2 3.2.3 6.7.3 10.8v23.9h6.2V29.2c0-1.1.1-2.1.3-2.9.9-4.7 4-8.1 8.5-8.1.9.0 1.5.1 2.1.2v-6C251.4 12.2 250.9 12.2 250.2 12.2z"/></g></svg><div class=search x-data=searchController><input x-model.debounce.100ms=query type=search class=search id=input-search placeholder=Search><ul class="search-results visible" x-show="results.length > 0" x-transition.duration.700ms><template x-for="item in results"><li><a x-text=item.title :href="`#${item.id}`"></a></li></template></ul></div><ul id=toc class=toc-list-h1 x-data=tocController x-init='load([{"id":"introduction","level":1,"sub":[{"id":"console","level":2,"title":"Console"},{"id":"environment-urls","level":2,"title":"Environment URLs"},{"id":"headers","level":2,"sub":[],"title":"Headers"}],"title":"Introduction"},{"id":"authentication","level":1,"sub":[{"id":"oauth2---resource-owner-password-credentials","level":2,"sub":[{"id":"debugging-authentication-errors","level":3,"title":"Debugging authentication errors"},{"id":"request","level":3,"title":"Request"},{"id":"response","level":3,"title":"Response"}],"title":"OAuth2 - Resource Owner Password Credentials"},{"id":"oauth2---authorization-code-grant","level":2,"title":"OAuth2 - Authorization Code Grant"},{"id":"authorize-your-api-request","level":2,"title":"Authorize your API request"},{"id":"permissions","level":2,"sub":[],"title":"Permissions"}],"title":"Authentication"},{"id":"project","level":1,"sub":[{"sub":[{"id":"properties","level":3,"title":"Properties"}]},{"id":"read-project","level":2,"sub":[{"id":"request-1","level":3,"title":"Request"},{"id":"response-1","level":3,"title":"Response"}],"title":"Read project"}],"title":"Project"},{"id":"image","level":1,"sub":[{"sub":[{"id":"properties-1","level":3,"title":"Properties"},{"id":"image-sizes","level":3,"title":"Sizes"}]},{"id":"create-image","level":2,"sub":[{"id":"request-2","level":3,"title":"Request"},{"id":"response-2","level":3,"title":"Response"}],"title":"Create image"},{"id":"read-image","level":2,"sub":[{"id":"request-1-1","level":3,"title":"Request"},{"id":"response-1-1","level":3,"title":"Response"}],"title":"Read image"},{"id":"delete-image","level":2,"sub":[{"id":"request-2-1","level":3,"title":"Request"},{"id":"response-2-1","level":3,"title":"Response"}],"title":"Delete image"},{"id":"list-image","level":2,"sub":[{"id":"request-3","level":3,"title":"Request"},{"id":"response-3","level":3,"title":"Response"}],"title":"List image"}],"title":"Image"},{"id":"template","level":1,"sub":[{"sub":[{"id":"properties-2","level":3,"title":"Properties"},{"id":"template-layout","level":3,"title":"Template layout"}]},{"id":"read-template","level":2,"sub":[{"id":"request-4","level":3,"title":"Request"},{"id":"response-4","level":3,"title":"Response"}],"title":"Read template"},{"id":"list-template","level":2,"sub":[{"id":"request-1-2","level":3,"title":"Request"},{"id":"response-1-2","level":3,"title":"Response"}],"title":"List template"},{"id":"push-template","level":2,"sub":[{"id":"request-2-2","level":3,"title":"Request"},{"id":"response-2-2","level":3,"title":"Response"}],"title":"Push template"}],"title":"Template"},{"id":"pass","level":1,"sub":[{"sub":[{"id":"properties-3","level":3,"title":"Properties"},{"id":"dynamic-data","level":3,"title":"Dynamic data"},{"id":"dynamic-images","level":3,"title":"Dynamic images"}]},{"id":"create-pass","level":2,"sub":[{"id":"request-5","level":3,"title":"Request"},{"id":"response-5","level":3,"title":"Response"}],"title":"Create pass"},{"id":"read-pass","level":2,"sub":[{"id":"request-1-3","level":3,"title":"Request"},{"id":"response-1-3","level":3,"title":"Response"}],"title":"Read pass"},{"id":"patch-pass","level":2,"sub":[{"id":"request-2-3","level":3,"title":"Request"},{"id":"response-2-3","level":3,"title":"Response"}],"title":"Patch pass"},{"id":"replace-pass","level":2,"sub":[{"id":"request-3-1","level":3,"title":"Request"},{"id":"response-3-1","level":3,"title":"Response"}],"title":"Replace pass"},{"id":"delete-pass","level":2,"sub":[{"id":"request-4-1","level":3,"title":"Request"},{"id":"response-4-1","level":3,"title":"Response"}],"title":"Delete pass"},{"id":"list-pass","level":2,"sub":[{"id":"request-5-1","level":3,"title":"Request"},{"id":"response-5-1","level":3,"title":"Response"}],"title":"List pass"},{"id":"batch-pass","level":2,"sub":[{"id":"request-6","level":3,"title":"Request"},{"id":"response-6","level":3,"title":"Response"}],"title":"Batch pass"},{"id":"anonymize-pass","level":2,"sub":[{"id":"patch-pass-1","level":3,"title":"Patch pass"},{"id":"replace-pass-1","level":3,"title":"Replace pass"}],"title":"Anonymize pass"}],"title":"Pass"},{"id":"general","level":1,"sub":[{"id":"paging","level":2,"sub":[{"id":"response-7","level":3,"title":"Response"}],"title":"Paging"},{"id":"ordering","level":2,"title":"Ordering"},{"id":"querying","level":2,"title":"Querying"},{"id":"type-definitions","level":2,"sub":[{"id":"datetime","level":3,"title":"datetime"}],"title":"Type definitions"}],"title":"General"},{"id":"pass-distribution","level":1,"sub":[{"id":"get-pass","level":2,"sub":[{"id":"request-7","level":3,"title":"Request"},{"id":"response-8","level":3,"title":"Response"}],"title":"Get pass"},{"id":"issue-link","level":2,"sub":[{"id":"request-1-4","level":3,"title":"Request"},{"id":"response-1-4","level":3,"title":"Response"}],"title":"Issue link"}],"title":"Pass distribution"},{"id":"webhooks","level":1,"sub":[{"id":"device-registration","level":2,"sub":[{"id":"properties-4","level":3,"title":"Properties"}],"title":"Device registration"},{"id":"device-unregistration","level":2,"sub":[{"id":"properties-1-1","level":3,"title":"Properties"}],"title":"Device unregistration"},{"id":"user-add","level":2,"sub":[{"id":"properties-2-1","level":3,"title":"Properties"}],"title":"User add"},{"id":"user-delete","level":2,"sub":[{"id":"properties-3-1","level":3,"title":"Properties"}],"title":"User delete"}],"title":"Webhooks"}])' @scroll.window=onScroll()><template x-for="row in rows"><li><a x-text=row.title @click=click(row) :href="`#${row.id}`" class=toc-link x-bind=rowClass(row)></a><ul x-show=row.open x-bind=transitions() class=da-toc-list-h2><template x-for="row in row.sub"><li><a x-text=row.title @click=click(row) :href="`#${row.id}`" class=toc-link x-bind=rowClass(row)></a></li></template></ul></li></template></ul><ul class=toc-footer><li><a href=http://www.yourpass.eu/>Yourpass</a></li></ul></div><div class=page-wrapper><div class=dark-box></div><div class=content><h1 id=introduction>Introduction</h1><p>This document describes how to use the Yourpass REST API.
It provides useful references and examples for all available endpoints.</p><h2 id=console>Console</h2><p>Yourpass provides a web-based tool for interacting with the API.</p><p>For the sandbox environment, which is intended for integration testing, you can access the Console at <a href=https://console.yourpass.space target=_blank><a href=https://console.yourpass.space>https://console.yourpass.space</a></a>.</p><p>For production environments, contact Yourpass support to receive the URL.</p><h2 id=environment-urls>Environment URLs</h2><table><thead><tr><th>URL</th><th>Production</th><th>Sandbox (integration testing only)</th></tr></thead><tbody><tr><td>API_URL</td><td>See below</td><td><a href=https://api.yourpass.space>https://api.yourpass.space</a></td></tr><tr><td>DISTRIBUTION_URL</td><td>See below</td><td><a href=https://get.yourpass.space>https://get.yourpass.space</a></td></tr><tr><td>ISSUE_URL</td><td>See below</td><td><a href=https://issue.yourpass.space>https://issue.yourpass.space</a></td></tr></tbody></table><aside class=notice><p>Production URLs are different for each Yourpass instance. You will find these URLs in the production Console in the left navigation panel: API → Endpoints.</p></aside><p>This documentation uses placeholders for these URLs.
Whenever you see <code><...></code>, you should replace it with one of the above URLs based on the selected environment.
For example <code><API_URL>/v1/pass</code> translates to <code>https://api.yourpass.space/v1/pass</code> for the sandbox environment.</p><h2 id=headers>Headers</h2><p>All endpoints expect the following headers, unless otherwise noted:</p><table><thead><tr><th>Name</th><th>Value</th></tr></thead><tbody><tr><td>Accept</td><td>application/json</td></tr><tr><td>Content-Type</td><td>application/json</td></tr></tbody></table><p>Optionally, an <code>Authorization</code> header can be specified.
See <a href=/#authorize-your-api-request>Authentication</a> for more information.</p><h1 id=authentication>Authentication</h1><p>Yourpass web services are secured via token-based authentication.
All requests that require authorization must contain a token in an <code>Authorization</code> header.</p><aside class=warning><p>A token can be used to authenticate multiple requests and should be used until it expires.
The authentication service must not be called before every request; excessive token creation will be rate-limited.</p></aside><h2 id=oauth2---resource-owner-password-credentials>OAuth2 - Resource Owner Password Credentials</h2><p>This service lets trusted applications that store user credentials obtain an access token.
For more details, see <a href=https://tools.ietf.org/html/rfc6749#section-1.3.3>RFC6749</a>.</p><ul><li>Client ID: <code>c36b6721-04d5-4dce-b1f2-4796d8fcc849</code></li><li>Client secret: <em>(there is no secret, use empty string)</em></li></ul><h3 id=debugging-authentication-errors>Debugging authentication errors</h3><p>This authentication flow is not available for federated identities.</p><p>Try your credentials at <code><CONSOLE_URL></code>.
If you cannot log in using the Console, try resetting your password first or contact support.</p><p>If you can authenticate using the Console, debug your issue with the curl commands provided in the right panel of this documentation.</p><aside class=notice><p>On Windows, you have to use <code>^</code> instead of <code>\</code> at the end of each line.</p></aside><p>If you use the curl command or create the authentication URL manually in your application, make sure all URL parameters, including the password, are URL-encoded.</p><h3 id=request>Request</h3><blockquote><p>Request:</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl --request POST <API_URL>/oauth2/token <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> --header <span style=color:#2aa198>"Authorization: Basic YzM2YjY3MjEtMDRkNS00ZGNlLWIxZjItNDc5NmQ4ZmNjODQ5Og=="</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> --header <span style=color:#2aa198>"Cache-Control: no-cache"</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> --header <span style=color:#2aa198>"Content-Type: application/x-www-form-urlencoded"</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> --data <span style=color:#2aa198>"grant_type=password&username=your@email.com&password=yourPassword"</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> qs <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"querystring"</span>);
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"POST"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> [<span style=color:#2aa198>"api"</span>, <span style=color:#2aa198>"yourpass"</span>, <span style=color:#2aa198>"eu"</span>],
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> [<span style=color:#2aa198>"oauth2"</span>, <span style=color:#2aa198>"token"</span>],
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> <span style=color:#2aa198>"Content-Type"</span><span style=color:#719e07>:</span> <span style=color:#2aa198>"application/x-www-form-urlencoded"</span>,
</span></span><span style=display:flex><span> Authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Basic YzM2YjY3MjEtMDRkNS00ZGNlLWIxZjItNDc5NmQ4ZmNjODQ5Og=="</span>,
</span></span><span style=display:flex><span> <span style=color:#2aa198>"Cache-Control"</span><span style=color:#719e07>:</span> <span style=color:#2aa198>"no-cache"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.write(
</span></span><span style=display:flex><span> qs.stringify({
</span></span><span style=display:flex><span> grant_type<span style=color:#719e07>:</span> <span style=color:#2aa198>"password"</span>,
</span></span><span style=display:flex><span> username<span style=color:#719e07>:</span> <span style=color:#2aa198>"your@email.com"</span>,
</span></span><span style=display:flex><span> password<span style=color:#719e07>:</span> <span style=color:#2aa198>"yourPassword"</span>,
</span></span><span style=display:flex><span> }),
</span></span><span style=display:flex><span>);
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p><code>POST <API_URL>/oauth2/token</code></p><p><em>Header parameters</em></p><table><thead><tr><th>Name</th><th>Note</th><th>Required</th></tr></thead><tbody><tr><td>Authorization</td><td><code>Basic xxx</code>, where xxx is the base64-encoded <em>clientID:clientSecret</em></td><td>Yes</td></tr><tr><td>Content-Type</td><td><code>application/x-www-form-urlencoded</code></td><td>Yes</td></tr></tbody></table><p><em>Body</em></p><table><thead><tr><th>Name</th><th>Note</th><th>Required</th></tr></thead><tbody><tr><td>grant_type</td><td>Contains the constant <code>password</code> for this OAuth2 grant type</td><td>Yes</td></tr><tr><td>username</td><td>The user’s email</td><td>Yes</td></tr><tr><td>password</td><td>The user’s password</td><td>Yes</td></tr></tbody></table><h3 id=response>Response</h3><blockquote><p>Response:</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#268bd2>"access_token"</span>: <span style=color:#2aa198>"supersecret2token....."</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"expires_in"</span>: <span style=color:#2aa198>21600</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"token_type"</span>: <span style=color:#2aa198>"Bearer"</span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><table><thead><tr><th>Name</th><th>Note</th></tr></thead><tbody><tr><td>access_token</td><td></td></tr><tr><td>expires_in</td><td>seconds until expiry</td></tr><tr><td>token_type</td><td></td></tr></tbody></table><aside class=notice><p>This service is intended for trusted applications.</p></aside><h2 id=oauth2---authorization-code-grant>OAuth2 - Authorization Code Grant</h2><p>This service lets users delegate access rights to a third-party application.
For more details, see <a href=https://tools.ietf.org/html/rfc6749#section-4.1>RFC6749</a>.</p><p><strong>Process description</strong></p><blockquote><p>Get authorization code</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-http data-lang=http><span style=display:flex><span><span style=color:#268bd2>GET</span> /oauth2/auth?client_id={client_id}&redirect_uri={redirect_uri}&response_type=code&scope={scope}&state={state} <span style=color:#268bd2>HTTP</span><span style=color:#719e07>/</span><span style=color:#2aa198>1.1</span>
</span></span><span style=display:flex><span>Host<span style=color:#719e07>:</span> <API_URL>
</span></span></code></pre></div><blockquote><p>Get an access token with an authorization code</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-http data-lang=http><span style=display:flex><span><span style=color:#268bd2>POST</span> /oauth2/token <span style=color:#268bd2>HTTP</span><span style=color:#719e07>/</span><span style=color:#2aa198>1.1</span>
</span></span><span style=display:flex><span>Host<span style=color:#719e07>:</span> <API_URL>
</span></span><span style=display:flex><span>Authorization<span style=color:#719e07>:</span> Basic base64(client_id:client_secret)
</span></span><span style=display:flex><span>Content-Type<span style=color:#719e07>:</span> application/x-www-form-urlencoded
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>code={your_received_code}&
</span></span><span style=display:flex><span>redirect_uri={redirect_uri}&
</span></span><span style=display:flex><span>grant_type=authorization_code
</span></span></code></pre></div><blockquote><p>Renew the access token with a refresh token</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-http data-lang=http><span style=display:flex><span><span style=color:#268bd2>POST</span> /oauth2/token <span style=color:#268bd2>HTTP</span><span style=color:#719e07>/</span><span style=color:#2aa198>1.1</span>
</span></span><span style=display:flex><span>Host<span style=color:#719e07>:</span> <API_URL>
</span></span><span style=display:flex><span>Authorization<span style=color:#719e07>:</span> Basic base64(client_id:client_secret)
</span></span><span style=display:flex><span>Content-Type<span style=color:#719e07>:</span> application/x-www-form-urlencoded
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>refresh_token={refresh_token}&
</span></span><span style=display:flex><span>grant_type=refresh_token
</span></span></code></pre></div><ul><li>The client (a third-party application) directs the user to the auth server and includes the <code>client_id</code>, <code>scope</code> (required permissions), <code>state</code> (opaque information sent to the third party after authorization) and <code>redirect_uri</code> (the URL where the user is redirected to finish the process).</li><li>The auth server validates or rejects the requested permissions.</li><li>If the request is valid and the user agrees, they are redirected back to the client interface (to the URL specified in <code>redirect_uri</code>).
The <code>code</code> query parameter will be appended to the <code>redirect_uri</code>.</li><li>Using <code>code</code>, <code>client_id</code> and <code>client_secret</code>, the client receives <code>access_token</code> and <code>refresh_token</code>.</li><li>The client can access the user’s data by sending <code>Authorization: Bearer <access_token></code> in the headers when calling the Yourpass API.</li><li>By using the stored <code>refresh_token</code>, the client can get a new <code>access_token</code> at any time until the user revokes the client’s access (not yet implemented).</li></ul><p><strong>Scopes:</strong></p><table><thead><tr><th>Scope</th><th>Description</th></tr></thead><tbody><tr><td>pass.c</td><td>pass create</td></tr><tr><td>pass.r</td><td>pass read</td></tr><tr><td>pass.u</td><td>pass update / pass patch</td></tr><tr><td>pass.d</td><td>pass delete</td></tr><tr><td>template.c</td><td>template create</td></tr><tr><td>template.r</td><td>template read</td></tr><tr><td>template.u</td><td>template update / template patch</td></tr><tr><td>template.d</td><td>template delete</td></tr><tr><td>image.c</td><td>image create</td></tr><tr><td>image.r</td><td>image read</td></tr><tr><td>image.u</td><td>image update / image patch</td></tr><tr><td>image.d</td><td>image delete</td></tr></tbody></table><aside class=notice><p>This service is intended for third-party applications that need to gain access to Yourpass without storing user credentials in a third-party system.</p></aside><h2 id=authorize-your-api-request>Authorize your API request</h2><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X GET <span style=color:#2aa198>'<API_URL>/v1/pass'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"GET"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/pass"</span>,
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p>All following endpoints accept the token in the <code>Authorization</code> header.</p><p><strong>Example:</strong></p><p><code>Authorization: Bearer <ACCESS_TOKEN></code></p><h2 id=permissions>Permissions</h2><p>The given authorization token is always issued on behalf of an existing Yourpass user.
The user’s permissions to perform API calls are managed on a per-project basis.</p><p>If you believe you lack a permission, please contact an administrator in your organization or Yourpass support directly.</p><h1 id=project>Project</h1><p>Projects organize templates, passes, images and other assets into groups.
These entities can be filtered by the project they belong to.
A user may be granted access to multiple projects or their subprojects.</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#268bd2>"id"</span>: <span style=color:#2aa198>"id-of-project"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"name"</span>: <span style=color:#2aa198>"project name"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"description"</span>: <span style=color:#2aa198>"project description"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"parentId"</span>: <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"createdAt"</span>: <span style=color:#2aa198>"2017-02-09T10:23:55.787232Z"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"updatedAt"</span>: <span style=color:#2aa198>"2017-02-17T08:52:01.971545Z"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"deletedAt"</span>: <span style=color:#cb4b16>null</span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h3 id=properties>Properties</h3><table><thead><tr><th>Name</th><th>Note</th><th style=text-align:center>filter&sort</th><th>Type</th></tr></thead><tbody><tr><td>id</td><td></td><td style=text-align:center>✓</td><td>string</td></tr><tr><td>name</td><td></td><td style=text-align:center>✓</td><td>string</td></tr><tr><td>description</td><td></td><td style=text-align:center>✓</td><td>string</td></tr><tr><td>parentId</td><td></td><td style=text-align:center>✓</td><td>string</td></tr><tr><td>createdAt</td><td></td><td style=text-align:center>✓</td><td>datetime</td></tr><tr><td>updatedAt</td><td></td><td style=text-align:center>✓</td><td>datetime</td></tr><tr><td>deletedAt</td><td></td><td style=text-align:center>✓</td><td>datetime</td></tr></tbody></table><h2 id=read-project>Read project</h2><h3 id=request-1>Request</h3><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X GET <span style=color:#2aa198>'<API_URL>/v1/project/:id'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"GET"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/project/:id"</span>,
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p><code>GET <API_URL>/v1/project/:id</code></p><p><em>Path parameter</em></p><table><thead><tr><th>Name</th><th>Note</th></tr></thead><tbody><tr><td>id</td><td>Project ID</td></tr></tbody></table><h3 id=response-1>Response</h3><p>Returns <a href=/#project>Project</a>.</p><h1 id=image>Image</h1><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#268bd2>"id"</span>: <span style=color:#2aa198>"image-id"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"name"</span>: <span style=color:#2aa198>"image-name"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"type"</span>: <span style=color:#2aa198>"strip"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"width"</span>: <span style=color:#2aa198>640</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"height"</span>: <span style=color:#2aa198>246</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"fileSize"</span>: <span style=color:#2aa198>164414</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"url"</span>: <span style=color:#2aa198>"data:image/png;base64,iVBOR...gg=="</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"projectId"</span>: <span style=color:#2aa198>"b7654e80-0b87-4c4c-a351-2fc55c86e9b9"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"createdAt"</span>: <span style=color:#2aa198>"2017-11-03T10:32:37.756841Z"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"updatedAt"</span>: <span style=color:#2aa198>"2017-11-03T10:32:37.756841Z"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"deletedAt"</span>: <span style=color:#cb4b16>null</span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h3 id=properties-1>Properties</h3><table><thead><tr><th>Name</th><th>Note</th><th style=text-align:center>filter&sort</th><th>Type</th></tr></thead><tbody><tr><td>id</td><td></td><td style=text-align:center>✓</td><td>string</td></tr><tr><td>name</td><td></td><td style=text-align:center>✓</td><td>string</td></tr><tr><td>type</td><td>image type [<code>logo</code>/<code>icon</code>/<code>strip</code>/<code>footer</code>/<code>background</code>/<code>thumbnail</code>]</td><td style=text-align:center></td><td>string</td></tr><tr><td>width</td><td>computed width</td><td style=text-align:center>✓</td><td>number</td></tr><tr><td>height</td><td>computed height</td><td style=text-align:center>✓</td><td>number</td></tr><tr><td>fileSize</td><td>computed file size</td><td style=text-align:center>✓</td><td>number</td></tr><tr><td>url</td><td></td><td style=text-align:center></td><td>string</td></tr><tr><td>projectId</td><td>Project ID</td><td style=text-align:center>✓</td><td>string</td></tr><tr><td>createdAt</td><td></td><td style=text-align:center>✓</td><td>datetime</td></tr><tr><td>updatedAt</td><td></td><td style=text-align:center>✓</td><td>datetime</td></tr><tr><td>deletedAt</td><td></td><td style=text-align:center>✓</td><td>datetime</td></tr></tbody></table><h3 id=image-sizes>Sizes</h3><ul><li>The background image <code>background.png</code> is displayed behind the entire front of the pass.
The expected dimensions are 360 x 440 points.
The image is slightly cropped on all sides and also blurred.
You can often provide an image at a smaller size.
It will be scaled up, but the blurring effect will hide the details of the image.
This lets you reduce the file size without users noticing the difference.</li><li>The footer image <code>footer.png</code> is displayed near the barcode.
The allotted space is 572 x 30 points.</li><li>The icon <code>icon.png</code> is displayed when a pass is shown on the lock screen and by apps such as Mail when the pass is attached to an email.
The icon should have dimensions of 58 x 58 points.</li><li>The logo image <code>logo.png</code> is displayed in the top left corner of the pass beside the logo text.
The allotted space is 320 x 100 points; in most cases it should be more narrow.</li><li>The strip image <code>strip.png</code> is displayed behind the primary fields.
The expected dimensions are 640 x 168-246 points.
The allotted space is 640 x 168 points for event tickets; 640 x 220 points for other pass styles with a square barcode on devices with 3.5-inch screens; 640 x 246 points for all other uses.</li><li>The thumbnail image <code>thumbnail.png</code> is displayed next to the fields on the front side of the pass.
The allotted space is 120-180 x 120-180 points.
The aspect ratio should be in the range of 2:3 to 3:2; otherwise, the image will be cropped.</li></ul><p><em>Pass styles and relevant image types:</em></p><table><thead><tr><th>Pass style</th><th>Supported images</th><th>Note</th></tr></thead><tbody><tr><td>Boarding pass</td><td>logo, icon, footer</td><td></td></tr><tr><td>Coupon</td><td>logo, icon, strip</td><td></td></tr><tr><td>Event ticket</td><td>logo, icon, strip, background, thumbnail</td><td>If you specify a strip image, do not specify a background image or a thumbnail.</td></tr><tr><td>Generic</td><td>logo, icon, thumbnail</td><td></td></tr><tr><td>Store card</td><td>logo, icon, strip</td><td></td></tr></tbody></table><h2 id=create-image>Create image</h2><p>Create an image.
This service requires an image URL.</p><p>There are two ways to provide an image URL:</p><ul><li>a public URL of a PNG image (a local copy is created)</li><li>a <a href=https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs>data URL</a> of a PNG image</li></ul><p>The image dimensions must conform to the <a href=/#image-sizes>sizes specified above</a>.
The size of the resulting image can differ from the original because of file encoding normalization.</p><h3 id=request-2>Request</h3><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X POST <API_URL>/v1/image <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'content-type: application/json'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -d <span style=color:#2aa198>'{"url": "public URL or data URL","type":"logo","name":"image name","projectId":"id-of-project"}'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"POST"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/image"</span>,
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> <span style=color:#2aa198>"content-type"</span><span style=color:#719e07>:</span> <span style=color:#2aa198>"application/json"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.write(
</span></span><span style=display:flex><span> <span style=color:#2aa198>'{"url": "public URL or data URL","type":"logo","name":"image name","projectId":"id-of-project"}'</span>,
</span></span><span style=display:flex><span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p><code>POST <API_URL>/v1/image</code></p><p><em>Body</em></p><table><thead><tr><th>Name</th><th>Note</th><th>Required</th><th>Type</th></tr></thead><tbody><tr><td>url</td><td>public URL or data URL</td><td>Yes</td><td>string</td></tr><tr><td>name</td><td>image name</td><td>Yes</td><td>string</td></tr><tr><td>type</td><td>image type</td><td>Yes</td><td>string</td></tr><tr><td>projectId</td><td>ID of the project</td><td>Yes</td><td>string</td></tr></tbody></table><h3 id=response-2>Response</h3><p>Returns <a href=/#image>Image</a>.</p><h2 id=read-image>Read image</h2><p>Read an image.</p><h3 id=request-1-1>Request</h3><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X GET <API_URL>/v1/image/:id <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"GET"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/image/:id"</span>,
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p><code>GET <API_URL>/v1/image/:id</code></p><p><em>Path parameters</em></p><table><thead><tr><th>Name</th><th>Note</th><th>Required</th><th>Type</th></tr></thead><tbody><tr><td>id</td><td></td><td>Yes</td><td>string</td></tr></tbody></table><h3 id=response-1-1>Response</h3><p>Returns <a href=/#image>Image</a>.</p><h2 id=delete-image>Delete image</h2><p>Mark an image as deleted.</p><h3 id=request-2-1>Request</h3><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X DELETE <span style=color:#2aa198>'<API_URL>/v1/image/:id'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"DELETE"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/image/:id"</span>,
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p><code>DELETE <API_URL>/v1/image/:id</code></p><p><em>Path parameter</em></p><table><thead><tr><th>Name</th><th>Note</th></tr></thead><tbody><tr><td>id</td><td>ID of image</td></tr></tbody></table><h3 id=response-2-1>Response</h3><p>Returns <a href=/#image>Image</a>.</p><h2 id=list-image>List image</h2><p>Return a list of images.
The list does not include all image properties. To retrieve all image data, use the <a href=/#read-image>Read image</a> service.
The list can be filtered and sorted using HTTP request query parameters.</p><h3 id=request-3>Request</h3><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X GET <span style=color:#2aa198>'<API_URL>/v1/image?page=1&limit=100'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"GET"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/image?page=1&limit=100"</span>,
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p><code>GET <API_URL>/v1/image</code></p><p><em>Query parameters</em></p><table><thead><tr><th>Name</th><th>Note</th><th>Default</th><th>Required</th></tr></thead><tbody><tr><td>limit</td><td>paging limit (max 1000)</td><td>100</td><td>No</td></tr><tr><td>page</td><td>page number</td><td>1</td><td>No</td></tr><tr><td>where</td><td>URL-encoded JSON query (see <a href=/#querying>Querying</a>)</td><td></td><td>No</td></tr><tr><td>order</td><td>(see <a href=/#ordering>Ordering</a>)</td><td></td><td>No</td></tr><tr><td>orderBy</td><td>(see <a href=/#ordering>Ordering</a>)</td><td></td><td>No</td></tr></tbody></table><h3 id=response-3>Response</h3><blockquote><p>Response</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#268bd2>"data"</span>: [
</span></span><span style=display:flex><span> {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"id"</span>: <span style=color:#2aa198>"id-of-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"name"</span>: <span style=color:#2aa198>"name"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"type"</span>: <span style=color:#2aa198>"logo"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"width"</span>: <span style=color:#2aa198>640</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"height"</span>: <span style=color:#2aa198>246</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"fileSize"</span>: <span style=color:#2aa198>164414</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"url"</span>: <span style=color:#2aa198>"http://....."</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"projectId"</span>: <span style=color:#2aa198>"b7654e80-0b87-4c4c-a351-2fc55c86e9b9"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"createdAt"</span>: <span style=color:#2aa198>"2017-11-03T10:32:37.756841Z"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"updatedAt"</span>: <span style=color:#2aa198>"2017-11-03T10:32:37.756841Z"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"deletedAt"</span>: <span style=color:#cb4b16>null</span>
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> ],
</span></span><span style=display:flex><span> <span style=color:#268bd2>"totalCount"</span>: <span style=color:#2aa198>1</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"page"</span>: <span style=color:#2aa198>1</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"limit"</span>: <span style=color:#2aa198>1000</span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p><em>Response body</em></p><table><thead><tr><th>Name</th><th>Note</th><th>Type</th></tr></thead><tbody><tr><td>data</td><td>array of <a href=/#image>Images</a></td><td>array</td></tr><tr><td>totalCount</td><td>total count of records</td><td>number</td></tr><tr><td>page</td><td>returned page</td><td>number</td></tr><tr><td>limit</td><td>page size</td><td>number</td></tr></tbody></table><h1 id=template>Template</h1><aside class=warning><p>The structure of the template is still evolving and the <code>jsonTemplate</code> key is highly experimental.
Use <a href=https://console.yourpass.eu>console.yourpass.eu</a> to create and update templates.</p></aside><p>Represents the template data model used to generate passes.</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#268bd2>"id"</span>: <span style=color:#2aa198>"ID OF TEMPLATE"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"name"</span>: <span style=color:#2aa198>"NAME OF TEMPLATE"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"jsonTemplate"</span>: {
</span></span><span style=display:flex><span> <span style=color:#586e75>// unstable, do not use
</span></span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"dynamicDataJsonSchema"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"type"</span>: [<span style=color:#2aa198>"object"</span>, <span style=color:#2aa198>"null"</span>],
</span></span><span style=display:flex><span> <span style=color:#268bd2>"title"</span>: <span style=color:#2aa198>"DynamicData"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"description"</span>: <span style=color:#2aa198>"Dynamic data values...."</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"properties"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"firstName"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"title"</span>: <span style=color:#2aa198>"First name"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"type"</span>: <span style=color:#2aa198>"string"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"lastName"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"title"</span>: <span style=color:#2aa198>"last name"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"type"</span>: <span style=color:#2aa198>"string"</span>
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"required"</span>: [<span style=color:#2aa198>"firstName"</span>, <span style=color:#2aa198>"lastName"</span>]
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"projectId"</span>: <span style=color:#2aa198>"8e99b56f-6599-42a5-b19b-31f9d0bb39c0"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"certificateId"</span>: <span style=color:#2aa198>"1529a6a1-ddca-497b-aa44-74c19433c440"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"images"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"icon"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"cs"</span>: <span style=color:#2aa198>"a5021600-9f29-4a05-91e4-5bbce2a4a21a"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"en"</span>: <span style=color:#2aa198>"a5021600-9f29-4a05-91e4-5bbce2a4a21a"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"logo"</span>: <span style=color:#2aa198>"9db7c521-9c23-463e-8ce6-67c5bc11e764"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"strip"</span>: <span style=color:#2aa198>"ff6b8d14-6e08-40c5-a480-1344cd0797c1"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"languages"</span>: [<span style=color:#2aa198>"cs"</span>],
</span></span><span style=display:flex><span> <span style=color:#268bd2>"distributable"</span>: <span style=color:#cb4b16>true</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"createdAt"</span>: <span style=color:#2aa198>"2017-10-17T11:27:04.113254Z"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"updatedAt"</span>: <span style=color:#2aa198>"2017-11-03T14:40:25.293086Z"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"deletedAt"</span>: <span style=color:#cb4b16>null</span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h3 id=properties-2>Properties</h3><table><thead><tr><th>Name</th><th>Note</th><th style=text-align:center>filter&sort</th><th>Type</th></tr></thead><tbody><tr><td>id</td><td></td><td style=text-align:center>✓</td><td>string</td></tr><tr><td>name</td><td></td><td style=text-align:center>✓</td><td>string</td></tr><tr><td>jsonTemplate</td><td>appearance definition, layout, fields, barcodes and other pass properties</td><td style=text-align:center></td><td>object</td></tr><tr><td>dynamicDataJsonSchema</td><td><a href=http://json-schema.org/>JSON Schema</a> definition for validating dynamic data used on the pass</td><td style=text-align:center></td><td>object</td></tr><tr><td>projectId</td><td>ID of the project the template belongs to</td><td style=text-align:center>✓</td><td>string</td></tr><tr><td>certificateId</td><td>ID of the certificate used for signing passes created with this template</td><td style=text-align:center></td><td>string</td></tr><tr><td>images</td><td>object mapping an image type to an image ID</td><td style=text-align:center></td><td>object</td></tr><tr><td>languages</td><td>at least one language in ISO 639-1 format</td><td style=text-align:center></td><td>array</td></tr><tr><td>distributable</td><td>allows distribution via <a href=/#issue-link>issue link</a></td><td style=text-align:center></td><td>boolean</td></tr><tr><td>createdAt</td><td></td><td style=text-align:center>✓</td><td>datetime</td></tr><tr><td>updatedAt</td><td></td><td style=text-align:center>✓</td><td>datetime</td></tr><tr><td>deletedAt</td><td></td><td style=text-align:center>✓</td><td>datetime</td></tr></tbody></table><h3 id=template-layout>Template layout</h3><p><strong>Boarding passes</strong> are specified by a <code>boardingPass</code> key.</p><p>Appropriate for: passes used with transit systems, such as train tickets, airline boarding passes and other types of transit.</p><p>Each pass typically corresponds to a single trip with specific start and end points.</p><img alt="Boarding Pass" src=./images/pkpass_layout_boarding_pass_2x.png style=max-height:340px><p><strong>Coupons</strong> are specified by a <code>coupon</code> key.</p><p>Appropriate for: coupons, special offers and other discounts.</p><img alt=Coupon src=./images/pkpass_layout_coupon_2x.png style=max-height:339.5px><p><strong>Event tickets</strong> are specified by an <code>eventTicket</code> key.</p><p>Appropriate for: passes used to gain entry to an event, such as concerts, movies, plays or sporting events.</p><p>Each pass typically corresponds to a specific event, but you can also use a single pass for several events, such as a season ticket.</p><img alt="Event ticket" src=./images/pkpass_layout_event_ticket_2x.png style=max-height:369.5px><p><strong>Store cards</strong> are specified by a <code>storeCard</code> key.</p><p>Appropriate for: store loyalty cards, discount cards, points cards and gift cards.</p><p>A store card typically identifies the user’s account within your company, which can then be used to make payments or receive discounts.
If the account carries a balance, it shows the current balance on the pass.</p><img alt="Store card" src=./images/pkpass_layout_store_card_2x.png style=max-height:334.5px><p><strong>Generic passes</strong> are specified by the <code>generic</code> key.</p><p>Appropriate for: any pass that does not fit into one of the more specific categories above, e.g. gym membership cards, coat-check claim tickets and metro passes that carry a balance.</p><img alt=Generic src=./images/pkpass_layout_generic_2x.png style=max-height:369.5px><p>PKPass documentation is available in the <a href=https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/PassKit_PG/index.html>Wallet Developer Guide</a>.
Individual fields are described in the <a href=https://developer.apple.com/library/content/documentation/UserExperience/Reference/PassKit_Bundle/Chapters/Introduction.html>PassKit Package Format Reference</a>.</p><p><strong>Fields</strong></p><ul><li>In general, a pass can have up to three header fields, a single primary field, up to four secondary fields and up to four auxiliary fields.</li><li>Boarding passes can have up to two primary fields and up to five auxiliary fields.</li><li>Coupons, store cards and generic passes with a square barcode can have a total of up to four secondary and auxiliary fields, combined.</li><li>The number of fields displayed on the pass also depends on the length of the text in each field.
If the text is too long, some fields may not be displayed.</li></ul><p><strong>Relevance</strong></p><table><thead><tr><th>Pass style</th><th>Relevant date</th><th>Relevant locations</th><th>Relevance</th><th></th></tr></thead><tbody><tr><td>Boarding pass</td><td>Recommended.</td><td>Include the relevant date unless the pass is relevant for an extended period of time, such as for a month-long bus pass.</td><td>Optional. Interpreted with a large radius.</td><td>Relevant if the date and any location matches. Prior to iOS 6.1, relevant if the date or any location matches. Without a relevant date, pass is relevant if the location matches.</td></tr><tr><td>Coupon</td><td>Not supported.</td><td>Required if relevance information is provided.</td><td>Interpreted with a small radius.</td><td>Relevant if any location matches.</td></tr><tr><td>Event ticket</td><td>Recommended. Include the relevant date unless the pass is relevant for an extended period of time, such as for a multi-day event. Prior to iOS 7.1, required if relevance information is provided.</td><td>Optional. Interpreted with a large radius.</td><td>Relevant if the date and any location matches. Without a relevant location, relevant if the date matches.</td><td></td></tr><tr><td>Generic</td><td>Optional.</td><td>Required if relevance information is provided. Interpreted with a small radius.</td><td>Relevant if the date and any location matches. Without a relevant date, relevant if any location matches.</td><td></td></tr><tr><td>Store card</td><td>Not supported.</td><td>Required if relevance information is provided. Interpreted with a small radius.</td><td>Relevant if any location matches.</td><td></td></tr></tbody></table><aside class=notice><p>Do not include more fields than are displayed on the front of your pass.
Although additional fields may not be shown today, layouts may change in the future and previously hidden fields may suddenly become visible to users.</p></aside><h2 id=read-template>Read template</h2><h3 id=request-4>Request</h3><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X GET <span style=color:#2aa198>'<API_URL>/v1/template/:id'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"GET"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/template/:id"</span>,
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p><code>GET <API_URL>/v1/template/:id</code></p><p><em>Path parameter</em></p><table><thead><tr><th>Name</th><th>Note</th></tr></thead><tbody><tr><td>id</td><td>ID of template</td></tr></tbody></table><h3 id=response-4>Response</h3><p>Returns <a href=/#template>Template</a>.</p><h2 id=list-template>List template</h2><h3 id=request-1-2>Request</h3><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X GET <span style=color:#2aa198>'<API_URL>/v1/template?page=1&limit=100'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"GET"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/template?page=1&limit=100"</span>,
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p><code>GET <API_URL>/v1/template</code></p><p><em>Query parameters</em></p><table><thead><tr><th>Name</th><th>Note</th><th>Required</th></tr></thead><tbody><tr><td>limit</td><td>maximum number of returned records; default 100, maximum 1000</td><td>No</td></tr><tr><td>page</td><td>returned page; default 1</td><td>No</td></tr><tr><td>where</td><td>URL-encoded JSON query (see <a href=/#querying>Querying</a>)</td><td>No</td></tr><tr><td>order</td><td>(see <a href=/#ordering>Ordering</a>)</td><td>No</td></tr><tr><td>orderBy</td><td>(see <a href=/#ordering>Ordering</a>)</td><td>No</td></tr></tbody></table><h3 id=response-1-2>Response</h3><blockquote><p>Response:</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#268bd2>"limit"</span>: <span style=color:#2aa198>10</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"page"</span>: <span style=color:#2aa198>1</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"totalCount"</span>: <span style=color:#2aa198>1</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"data"</span>: [
</span></span><span style=display:flex><span> {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"id"</span>: <span style=color:#2aa198>"0a088428-40ec-4166-8271-05658e87ad8f"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"name"</span>: <span style=color:#2aa198>"TemplateName"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"certificationId"</span>: <span style=color:#2aa198>"b7654e80-0b87-4c4c-a351-2fc55c86e9b9"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"projectId"</span>: <span style=color:#2aa198>"b7654e80-0b87-4c4c-a351-2fc55c86e9b9"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"createdAt"</span>: <span style=color:#2aa198>"2016-11-04T15:07:21.703676+01:00"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"deletedAt"</span>: <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"updatedAt"</span>: <span style=color:#2aa198>"2016-12-13T11:55:59.813897+01:00"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"jsonSchema"</span>: {}
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> ]
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><table><thead><tr><th>Name</th><th>Note</th><th>Type</th></tr></thead><tbody><tr><td>data</td><td>array of templates</td><td>array</td></tr><tr><td>totalCount</td><td>total count of records</td><td>Number</td></tr><tr><td>page</td><td>returned page</td><td>Number</td></tr><tr><td>limit</td><td>page size</td><td>Number</td></tr></tbody></table><h2 id=push-template>Push template</h2><p>Send a push notification to all devices with a pass issued from this template.
A device that receives a push notification then checks for changes and fetches updated passes, if available.</p><h3 id=request-2-2>Request</h3><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X GET <span style=color:#2aa198>'<API_URL>/v1/template/:id/push'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"GET"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/template/:id/push"</span>,
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p><code>GET <API_URL>/v1/template/:id/push</code></p><p><em>Path parameter</em></p><table><thead><tr><th>Name</th><th>Note</th></tr></thead><tbody><tr><td>id</td><td>ID of template</td></tr></tbody></table><h3 id=response-2-2>Response</h3><p>Returns an empty JSON object or an error.</p><h1 id=pass>Pass</h1><p>Represents an individual pass composed of a template and dynamic data.</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#268bd2>"id"</span>: <span style=color:#2aa198>"id-of-pass"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"url"</span>: <span style=color:#2aa198>"https://..."</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"templateId"</span>: <span style=color:#2aa198>"id-of-template"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"projectId"</span>: <span style=color:#2aa198>"id-of-project"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"dynamicData"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"lastName"</span>: <span style=color:#2aa198>"Jedno"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"firstName"</span>: <span style=color:#2aa198>"Tomáš"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"dynamicImages"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"logo"</span>: <span style=color:#2aa198>"id-of-logo-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"icon"</span>: <span style=color:#2aa198>"id-of-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"strip"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"cs"</span>: <span style=color:#2aa198>"id-of-czech-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"en"</span>: <span style=color:#2aa198>"id-of-english-image"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"background"</span>: <span style=color:#2aa198>"id-of-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"footer"</span>: <span style=color:#2aa198>"id-of-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"thumbnail"</span>: <span style=color:#2aa198>"id-of-image"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"expirationDate"</span>: <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"voided"</span>: <span style=color:#cb4b16>false</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"devices"</span>: <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"lastRegisterAt"</span>: <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"firstRegisterAt"</span>: <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"lastUnregisterAt"</span>: <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"firstUnregisterAt"</span>: <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"updatedAt"</span>: <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"createdAt"</span>: <span style=color:#2aa198>"2016-10-10T21:48:01.565Z"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"deletedAt"</span>: <span style=color:#cb4b16>null</span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h3 id=properties-3>Properties</h3><table><thead><tr><th>Name</th><th>Note</th><th style=text-align:center>filter&sort</th><th>Type</th></tr></thead><tbody><tr><td>id</td><td></td><td style=text-align:center>✓</td><td>string</td></tr><tr><td>url</td><td>URL for pass distribution</td><td style=text-align:center></td><td>string</td></tr><tr><td>templateId</td><td></td><td style=text-align:center>✓</td><td>string</td></tr><tr><td>projectId</td><td></td><td style=text-align:center>✓</td><td>string</td></tr><tr><td>dynamicData</td><td>validated against template’s dynamicDataJsonSchema</td><td style=text-align:center></td><td>object</td></tr><tr><td>dynamicImages</td><td>object mapping an image type to an image ID</td><td style=text-align:center></td><td>object</td></tr><tr><td>expirationDate</td><td>end of the pass validity</td><td style=text-align:center>✓</td><td>datetime</td></tr><tr><td>voided</td><td>set to true to deactivate the pass (default false)</td><td style=text-align:center>✓</td><td>boolean</td></tr><tr><td>devices</td><td>number of active installations on devices (grouped by platform)</td><td style=text-align:center></td><td>object</td></tr><tr><td>lastRegisterAt</td><td>timestamp of last registration (addition) to a wallet</td><td style=text-align:center>✓</td><td>datetime</td></tr><tr><td>firstRegisterAt</td><td>timestamp of first registration (addition) to a wallet</td><td style=text-align:center>✓</td><td>datetime</td></tr><tr><td>lastUnregisterAt</td><td>timestamp of last deregistration (removal) from a wallet</td><td style=text-align:center>✓</td><td>datetime</td></tr><tr><td>firstUnregisterAt</td><td>timestamp of first deregistration (removal) from a wallet</td><td style=text-align:center>✓</td><td>datetime</td></tr><tr><td>createdAt</td><td></td><td style=text-align:center>✓</td><td>datetime</td></tr><tr><td>updatedAt</td><td></td><td style=text-align:center>✓</td><td>datetime</td></tr><tr><td>deletedAt</td><td></td><td style=text-align:center>✓</td><td>datetime</td></tr></tbody></table><h3 id=dynamic-data>Dynamic data</h3><blockquote><p>Dynamic data object example:</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#268bd2>"firstName"</span>: <span style=color:#2aa198>"Tomáš"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"lastName"</span>: <span style=color:#2aa198>"Jedno"</span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>Dynamic data consists of variable values that, together with the template and images, make up the content of the pass.</p><h3 id=dynamic-images>Dynamic images</h3><blockquote><p>Dynamic images object example:</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#268bd2>"images"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"logo"</span>: <span style=color:#2aa198>"id-of-logo-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"icon"</span>: <span style=color:#2aa198>"id-of-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"strip"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"cs"</span>: <span style=color:#2aa198>"id-of-image-for-czech"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"sk"</span>: <span style=color:#2aa198>"id-of-image-for-slovak"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"en"</span>: <span style=color:#2aa198>"id-of-image-for-english"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"background"</span>: <span style=color:#2aa198>"id-of-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"footer"</span>: <span style=color:#2aa198>"id-of-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"thumbnail"</span>: <span style=color:#2aa198>"id-of-image"</span>
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>The <code>images</code> object stored in a pass overrides the <code>images</code> object stored in a template.</p><p>Do not specify an <code>images</code> object if you want to use the one from the template.</p><h2 id=create-pass>Create pass</h2><p>Create a single pass.</p><h3 id=request-5>Request</h3><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X POST <span style=color:#2aa198>'<API_URL>/v1/pass'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'content-type: application/json'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -d <span style=color:#2aa198>'{"dynamicData":{"qrcode":"12345678","fullName":"Mr. Tomáš Dvě","cardNumber":"12345678"},"dynamicImages":{"logo":"id-of-logo-image","icon":"id-of-image","strip":{"cs":"id-of-image-for-czech","sk":"id-of-image-for-slovak","en":"id-of-image-for-english"},"background":"id-of-image","footer":"id-of-image","thumbnail":"id-of-image"},"templateId":"id-of-template"}'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"POST"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/pass"</span>,
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> <span style=color:#2aa198>"content-type"</span><span style=color:#719e07>:</span> <span style=color:#2aa198>"application/json"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.write(
</span></span><span style=display:flex><span> <span style=color:#2aa198>'{"dynamicData":{"qrcode":"12345678","fullName":"Mr. Tomáš Dvě","cardNumber":"12345678"},"dynamicImages":{"logo":"id-of-logo-image","icon":"id-of-image","strip":{"cs":"id-of-image-for-czech","sk":"id-of-image-for-slovak","en":"id-of-image-for-english"},"background":"id-of-image","footer":"id-of-image","thumbnail":"id-of-image"},"templateId":"id-of-template"}'</span>,
</span></span><span style=display:flex><span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p><code>POST <API_URL>/v1/pass</code></p><p><em>Body</em></p><table><thead><tr><th>Name</th><th>Note</th><th>Required</th><th>Type</th></tr></thead><tbody><tr><td>dynamicData</td><td>validated against template’s dynamicDataJsonSchema (default null)</td><td>No</td><td>object</td></tr><tr><td>dynamicImages</td><td>object with image IDs (default null)</td><td>No</td><td>object</td></tr><tr><td>expirationDate</td><td>end of the pass validity</td><td>No</td><td>datetime</td></tr><tr><td>templateId</td><td></td><td>Yes</td><td>string</td></tr></tbody></table><h3 id=response-5>Response</h3><p>Returns <a href=/#pass>Pass</a>.</p><h2 id=read-pass>Read pass</h2><p>Pass details.</p><h3 id=request-1-3>Request</h3><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X GET <span style=color:#2aa198>'<API_URL>/v1/pass/:id'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"GET"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/pass/:id"</span>,
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p><code>GET <API_URL>/v1/pass/:id</code></p><p><em>Path parameter</em></p><table><thead><tr><th>Name</th><th>Note</th></tr></thead><tbody><tr><td>id</td><td>pass ID</td></tr></tbody></table><h3 id=response-1-3>Response</h3><p>Returns <a href=/#pass>Pass</a>.</p><h2 id=patch-pass>Patch pass</h2><p>Patch an existing pass by updating only the specified properties.</p><p><code>PATCH</code> is the recommended way to update a pass in most cases. It preserves all unspecified data, which makes it safer when multiple systems or integrations update different parts of the same pass. For example, one integration can update customer data while another updates loyalty points or images without overwriting each other’s fields.</p><p>Use <code>PUT</code> only when you want to replace the pass data with a complete representation.</p><blockquote><p>Pass before patching</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#268bd2>"id"</span>: <span style=color:#2aa198>"id-of-pass"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"templateId"</span>: <span style=color:#2aa198>"id-of-template"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"dynamicData"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"qrcode"</span>: <span style=color:#2aa198>"12345678"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"fullName"</span>: <span style=color:#2aa198>"Mr. Tomáš Jedno"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"cardNumber"</span>: <span style=color:#2aa198>"12345678"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"dynamicImages"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"logo"</span>: <span style=color:#2aa198>"id-of-logo-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"icon"</span>: <span style=color:#2aa198>"id-of-icon-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"strip"</span>: <span style=color:#2aa198>"id-of-strip-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"background"</span>: <span style=color:#2aa198>"id-of-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"footer"</span>: <span style=color:#2aa198>"id-of-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"thumbnail"</span>: <span style=color:#2aa198>"id-of-image"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"voided"</span>: <span style=color:#cb4b16>false</span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>To delete a property, set its value to <code>null</code>.</p><h3 id=request-2-3>Request</h3><blockquote><p>Patch pass</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X PATCH <span style=color:#2aa198>'<API_URL>/v1/pass/:id'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'content-type: application/json'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -d <span style=color:#2aa198>'{"dynamicData":{"fullName":"Mr. Tomáš Tři"},"dynamicImages":{"strip":{"cs":"id-of-image-for-czech","en":"id-of-image-for-english"}},"templateId":"id-of-another-template"}'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"PATCH"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/pass/:id"</span>,
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> <span style=color:#2aa198>"content-type"</span><span style=color:#719e07>:</span> <span style=color:#2aa198>"application/json"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.write(
</span></span><span style=display:flex><span> <span style=color:#2aa198>'{"dynamicData":{"fullName":"Mr. Tomáš Tři"},"dynamicImages":{"strip":{"cs":"id-of-image-for-czech","en":"id-of-image-for-english"}},"templateId":"id-of-another-template"}'</span>,
</span></span><span style=display:flex><span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p><code>PATCH <API_URL>/v1/pass/:id</code></p><p><em>Body</em></p><table><thead><tr><th>Name</th><th>Note</th><th>Required</th><th>Type</th></tr></thead><tbody><tr><td>dynamicData</td><td>validated against template’s dynamicDataJsonSchema</td><td>No</td><td>object</td></tr><tr><td>dynamicImages</td><td>object with image IDs</td><td>No</td><td>object</td></tr><tr><td>templateId</td><td></td><td>No</td><td>string</td></tr><tr><td>expirationDate</td><td>end of the pass validity</td><td>No</td><td>datetime</td></tr><tr><td>voided</td><td></td><td>No</td><td>boolean</td></tr></tbody></table><h3 id=response-2-3>Response</h3><blockquote><p>Patched pass</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#268bd2>"id"</span>: <span style=color:#2aa198>"id-of-pass"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"templateId"</span>: <span style=color:#2aa198>"id-of-another-template"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"dynamicData"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"qrcode"</span>: <span style=color:#2aa198>"12345678"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"fullName"</span>: <span style=color:#2aa198>"Mr. Tomáš Tři"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"cardNumber"</span>: <span style=color:#2aa198>"12345678"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"dynamicImages"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"logo"</span>: <span style=color:#2aa198>"id-of-logo-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"icon"</span>: <span style=color:#2aa198>"id-of-icon-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"strip"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"cs"</span>: <span style=color:#2aa198>"id-of-czech-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"en"</span>: <span style=color:#2aa198>"id-of-english-image"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"background"</span>: <span style=color:#2aa198>"id-of-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"footer"</span>: <span style=color:#2aa198>"id-of-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"thumbnail"</span>: <span style=color:#2aa198>"id-of-image"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"voided"</span>: <span style=color:#cb4b16>false</span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>Returns the JSON object described in the <a href=/#pass>Pass section</a>.</p><h2 id=replace-pass>Replace pass</h2><p><code>PUT</code> replaces the pass data with the provided request body. Use it when you intentionally want to send the complete desired state of the pass. For most partial updates, prefer <a href=/pass/#patch-pass>Patch pass</a>, because <code>PATCH</code> preserves unspecified properties and is safer when multiple integrations update different data.</p><p>If <code>templateId</code> is changed, the dynamic data must validate against the JSON schema stored with the new template.</p><h3 id=request-3-1>Request</h3><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X PUT <span style=color:#2aa198>'<API_URL>/v1/pass/:id'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'content-type: application/json'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -d <span style=color:#2aa198>'{"dynamicData":{"qrcode":"12345678","fullName":"Mr. Tomáš Dvě","cardNumber":"12345678"},"dynamicImages":{"logo":"id-of-logo-image","icon":"id-of-image","strip":{"cs":"id-of-image-for-czech","sk":"id-of-image-for-slovak","en":"id-of-image-for-english"},"background":"id-of-image","footer":"id-of-image","thumbnail":"id-of-image"},"templateId":"id-of-template"}'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"PUT"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/pass/:id"</span>,
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> <span style=color:#2aa198>"content-type"</span><span style=color:#719e07>:</span> <span style=color:#2aa198>"application/json"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.write(
</span></span><span style=display:flex><span> <span style=color:#2aa198>'{"dynamicData":{"qrcode":"12345678","fullName":"Mr. Tomáš Dvě","cardNumber":"12345678"},"dynamicImages":{"logo":"id-of-logo-image","icon":"id-of-image","strip":{"cs":"id-of-image-for-czech","sk":"id-of-image-for-slovak","en":"id-of-image-for-english"},"background":"id-of-image","footer":"id-of-image","thumbnail":"id-of-image"},"templateId":"id-of-template"}'</span>,
</span></span><span style=display:flex><span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p><code>PUT <API_URL>/v1/pass/:id</code></p><p><em>Path parameter</em></p><table><thead><tr><th>Name</th><th>Note</th><th>Required</th></tr></thead><tbody><tr><td>id</td><td></td><td>Yes</td></tr></tbody></table><p><em>Body</em></p><table><thead><tr><th>Name</th><th>Note</th><th>Required</th><th>Type</th></tr></thead><tbody><tr><td>dynamicData</td><td>validated against template’s dynamicDataJsonSchema (default null)</td><td>No</td><td>object</td></tr><tr><td>dynamicImages</td><td>object with image IDs (default null)</td><td>No</td><td>object</td></tr><tr><td>templateId</td><td></td><td>Yes</td><td>string</td></tr><tr><td>expirationDate</td><td>end of the pass validity</td><td>No</td><td>datetime</td></tr><tr><td>voided</td><td></td><td>No</td><td>boolean</td></tr></tbody></table><h3 id=response-3-1>Response</h3><p>Returns <a href=/#pass>Pass</a>.</p><h2 id=delete-pass>Delete pass</h2><p>Mark a pass as deleted and set the <code>voided</code> property to true.
All pass data (<code>dynamicData</code>) is removed from the pass.</p><h3 id=request-4-1>Request</h3><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X DELETE <span style=color:#2aa198>'<API_URL>/v1/pass/:id'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"DELETE"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/pass/:id"</span>,
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p><code>DELETE <API_URL>/v1/pass/:id</code></p><p><em>Path parameter</em></p><table><thead><tr><th>Name</th><th>Note</th></tr></thead><tbody><tr><td>id</td><td>ID of pass</td></tr></tbody></table><h3 id=response-4-1>Response</h3><p>Returns <a href=/#pass>Pass</a>.</p><h2 id=list-pass>List pass</h2><h3 id=request-5-1>Request</h3><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X GET <span style=color:#2aa198>'<API_URL>/v1/pass?page=1&limit=100'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"GET"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/pass?page=1&limit=100"</span>,
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p><code>GET <API_URL>/v1/pass</code></p><p><em>Query parameters</em></p><table><thead><tr><th>Name</th><th>Note</th><th>Default</th><th>Required</th></tr></thead><tbody><tr><td>limit</td><td>paging limit (max 1000)</td><td>100</td><td>No</td></tr><tr><td>page</td><td>page number</td><td>1</td><td>No</td></tr><tr><td>where</td><td>URL-encoded JSON query (see <a href=/#querying>Querying</a>)</td><td></td><td>No</td></tr><tr><td>order</td><td>(see <a href=/#ordering>Ordering</a>)</td><td></td><td>No</td></tr><tr><td>orderBy</td><td>(see <a href=/#ordering>Ordering</a>)</td><td></td><td>No</td></tr></tbody></table><h3 id=response-5-1>Response</h3><blockquote><p>Response:</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#268bd2>"limit"</span>: <span style=color:#2aa198>1000</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"page"</span>: <span style=color:#2aa198>1</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"totalCount"</span>: <span style=color:#2aa198>1</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"data"</span>: [
</span></span><span style=display:flex><span> {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"id"</span>: <span style=color:#2aa198>"id-of-pass"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"url"</span>: <span style=color:#2aa198>"https://..."</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"templateId"</span>: <span style=color:#2aa198>"id-of-template"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"dynamicData"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"qrcode"</span>: <span style=color:#2aa198>"12345678"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"fullName"</span>: <span style=color:#2aa198>"Mr. Tomáš Dvě"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"cardNumber"</span>: <span style=color:#2aa198>"12345678"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"dynamicImages"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"logo"</span>: <span style=color:#2aa198>"id-of-logo-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"icon"</span>: <span style=color:#2aa198>"id-of-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"strip"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"cs"</span>: <span style=color:#2aa198>"id-of-image-for-czech"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"sk"</span>: <span style=color:#2aa198>"id-of-image-for-slovak"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"en"</span>: <span style=color:#2aa198>"id-of-image-for-english"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"background"</span>: <span style=color:#2aa198>"id-of-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"footer"</span>: <span style=color:#2aa198>"id-of-image"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"thumbnail"</span>: <span style=color:#2aa198>"id-of-image"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"voided"</span>: <span style=color:#cb4b16>false</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"devices"</span>: <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"lastRegisterAt"</span>: <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"firstRegisterAt"</span>: <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"lastUnregisterAt"</span>: <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"firstUnregisterAt"</span>: <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"updatedAt"</span>: <span style=color:#2aa198>"2017-11-06T13:21:31.815Z"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"createdAt"</span>: <span style=color:#2aa198>"2016-10-10T21:48:01.565Z"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"deletedAt"</span>: <span style=color:#cb4b16>null</span>
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> ]
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p><em>Response body</em></p><table><thead><tr><th>Name</th><th>Note</th><th>Type</th></tr></thead><tbody><tr><td>limit</td><td>page size</td><td>number</td></tr><tr><td>page</td><td>returned page</td><td>number</td></tr><tr><td>totalCount</td><td>total count of records</td><td>number</td></tr><tr><td>data</td><td>array of passes</td><td>array</td></tr></tbody></table><h2 id=batch-pass>Batch pass</h2><p>The batch size is limited to 1000 unique passes.
The batch may be processed asynchronously.
Each ID can be used only once per batch.
The service always returns an HTTP 200 status code. The status of each individual operation is provided through the <code>status</code> property in the returned data, preserving order.</p><h3 id=request-6>Request</h3><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X POST <span style=color:#2aa198>'<API_URL>/v1/pass/batch'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'content-type: application/json'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -d <span style=color:#2aa198>'[{"method":"POST","data":{"templateId":"YourtemplateId","dynamicData":{"property":"..."},"dynamicImages":{"logo":"..."}}},{"method":"GET","id":"id-of-pass"},{"method":"PUT","id":"id-of-pass","data":{"id":"id-of-pass","templateId":"YourtemplateId","dynamicData":{"property":"..."},"dynamicImages":{"logo":"..."}}},{"method":"DELETE","id":"id-of-pass"}]'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"POST"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/pass/batch"</span>,
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> <span style=color:#2aa198>"content-type"</span><span style=color:#719e07>:</span> <span style=color:#2aa198>"application/json"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.write(
</span></span><span style=display:flex><span> <span style=color:#2aa198>'[{"method":"POST","data":{"templateId":"YourtemplateId","dynamicData":{"property":"..."},"dynamicImages":{"logo":"..."}}},{"method":"GET","id":"id-of-pass"},{"method":"PUT","id":"id-of-pass","data":{"id":"id-of-pass","templateId":"YourtemplateId","dynamicData":{"property":"..."},"dynamicImages":{"logo":"..."}}},{"method":"DELETE","id":"id-of-pass"}]'</span>,
</span></span><span style=display:flex><span>);
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p><code>POST <API_URL>/v1/pass/batch</code></p><p><em>Body</em></p><p>JSON-encoded array of objects with the following structure:</p><table><thead><tr><th>Name</th><th>Note</th><th>Required</th><th>Type</th></tr></thead><tbody><tr><td>method</td><td><code>GET</code>/<code>POST</code>/<code>PUT</code>/<code>DELETE</code></td><td>Yes</td><td>string</td></tr><tr><td>id</td><td></td><td>only for <code>GET</code>, <code>PUT</code> and <code>DELETE</code></td><td>string</td></tr><tr><td>data</td><td>request data</td><td>only for <code>POST</code> and <code>PUT</code></td><td>object</td></tr></tbody></table><h3 id=response-6>Response</h3><blockquote><p>Response:</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>[
</span></span><span style=display:flex><span> {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"status"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"code"</span>: <span style=color:#2aa198>201</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"message"</span>: <span style=color:#2aa198>"created"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"data"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"id"</span>: <span style=color:#2aa198>"id-of-pass"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"templateId"</span>: <span style=color:#2aa198>"YourtemplateId"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"dynamicData"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"property"</span>: <span style=color:#2aa198>"..."</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"dynamicImages"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"logo"</span>: <span style=color:#2aa198>"..."</span>
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"status"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"code"</span>: <span style=color:#2aa198>200</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"message"</span>: <span style=color:#2aa198>"ok"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"data"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"templateId"</span>: <span style=color:#2aa198>"YourtemplateId"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"id"</span>: <span style=color:#2aa198>"id-of-pass"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"dynamicData"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"property"</span>: <span style=color:#2aa198>"..."</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"dynamicImages"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"logo"</span>: <span style=color:#2aa198>"..."</span>
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"status"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"code"</span>: <span style=color:#2aa198>200</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"message"</span>: <span style=color:#2aa198>"ok"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"data"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"id"</span>: <span style=color:#2aa198>"id-of-pass"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"templateId"</span>: <span style=color:#2aa198>"YourtemplateId"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"dynamicData"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"property"</span>: <span style=color:#2aa198>"..."</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"dynamicImages"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"logo"</span>: <span style=color:#2aa198>"..."</span>
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"status"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"code"</span>: <span style=color:#2aa198>200</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"message"</span>: <span style=color:#2aa198>"ok"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"data"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"id"</span>: <span style=color:#2aa198>"id-of-pass"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"templateId"</span>: <span style=color:#2aa198>"YourtemplateId"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"dynamicData"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"property"</span>: <span style=color:#2aa198>"..."</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"dynamicImages"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"logo"</span>: <span style=color:#2aa198>"..."</span>
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>]
</span></span></code></pre></div><p>Returns a JSON-encoded array of responses.</p><table><thead><tr><th>Property</th><th>Note</th></tr></thead><tbody><tr><td>status</td><td>object with message and code properties</td></tr><tr><td>data</td><td></td></tr></tbody></table><h2 id=anonymize-pass>Anonymize pass</h2><blockquote><p>Pass before updating</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#268bd2>"id"</span>: <span style=color:#2aa198>"id-of-pass"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"templateId"</span>: <span style=color:#2aa198>"id-of-template"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"dynamicData"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"name"</span>: <span style=color:#2aa198>"Batman"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"realName"</span>: <span style=color:#2aa198>"Bruce Wayne"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"voided"</span>: <span style=color:#cb4b16>false</span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>You can anonymize a pass by replacing or patching the pass resource with anonymized data or by deleting the data altogether.
In both cases, the data is no longer stored in Yourpass.
Therefore, the process is irreversible.</p><h3 id=patch-pass-1>Patch pass</h3><blockquote><p>Patch request</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X PATCH <span style=color:#2aa198>'<API_URL>/v1/pass/:id?anonymize=true'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'content-type: application/json'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -d <span style=color:#2aa198>'{"dynamicData":{"realName":"unknown"}}'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"PATCH"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/pass/:id?anonymize=true"</span>,
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> <span style=color:#2aa198>"content-type"</span><span style=color:#719e07>:</span> <span style=color:#2aa198>"application/json"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.write(<span style=color:#2aa198>'{"dynamicData":{"realName":"unknown"}}'</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p>You can patch an existing pass, overriding only the specified properties.</p><blockquote><p>Patch response</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#268bd2>"id"</span>: <span style=color:#2aa198>"id-of-pass"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"templateId"</span>: <span style=color:#2aa198>"id-of-template"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"dynamicData"</span>: {
</span></span><span style=display:flex><span> <span style=color:#268bd2>"name"</span>: <span style=color:#2aa198>"Batman"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"realName"</span>: <span style=color:#2aa198>"unknown"</span>
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span> <span style=color:#268bd2>"voided"</span>: <span style=color:#cb4b16>false</span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h3 id=replace-pass-1>Replace pass</h3><blockquote><p>Update request</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X PUT <span style=color:#2aa198>'<API_URL>/v1/pass/:id?anonymize=true'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'content-type: application/json'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -d <span style=color:#2aa198>'{"dynamicData":{},"templateId":"id-of-template"}'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"PUT"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/pass/:id?anonymize=true"</span>,
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> <span style=color:#2aa198>"content-type"</span><span style=color:#719e07>:</span> <span style=color:#2aa198>"application/json"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.write(<span style=color:#2aa198>'{"dynamicData":{},"templateId":"id-of-template"}'</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p>You can also update the pass, replacing all data with the provided data.
Setting <code>dynamicData</code> to an empty object deletes all keys within it.</p><blockquote><p>Update response</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#268bd2>"id"</span>: <span style=color:#2aa198>"id-of-pass"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"templateId"</span>: <span style=color:#2aa198>"id-of-template"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"dynamicData"</span>: {},
</span></span><span style=display:flex><span> <span style=color:#268bd2>"voided"</span>: <span style=color:#cb4b16>false</span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>If there is no <code>dynamicData</code>, a fallback will be used when rendering the pass.</p><h1 id=general>General</h1><h2 id=paging>Paging</h2><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X GET <span style=color:#2aa198>'<API_URL>/v1/pass?page=1&limit=100'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"GET"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/pass?page=1&limit=100"</span>,
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p><code>GET <API_URL>/v1/pass?page=1&limit=100</code></p><p><em>Query parameters</em></p><table><thead><tr><th>Name</th><th>Note</th><th>Default</th><th>Required</th></tr></thead><tbody><tr><td>page</td><td>page number</td><td>1</td><td>No</td></tr><tr><td>limit</td><td>page size (max 1000)</td><td>100</td><td>No</td></tr></tbody></table><h3 id=response-7>Response</h3><blockquote><p>Paged list response</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#268bd2>"data"</span>: [],
</span></span><span style=display:flex><span> <span style=color:#268bd2>"limit"</span>: <span style=color:#2aa198>100</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"page"</span>: <span style=color:#2aa198>1</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"totalCount"</span>: <span style=color:#2aa198>0</span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h2 id=ordering>Ordering</h2><p>Ordering/sorting of resources.</p><blockquote><p>List pass ordered by updatedAt</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X GET <span style=color:#2aa198>'<API_URL>/v1/pass?order=asc&orderBy=updatedAt'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"GET"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/pass?order=asc&orderBy=updatedAt"</span>,
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><p><code>GET <API_URL>/v1/pass?order=asc&orderBy=updatedAt</code></p><p><em>Query parameters</em></p><table><thead><tr><th>Name</th><th>Note</th><th>Required</th></tr></thead><tbody><tr><td>order</td><td><code>asc</code>/<code>desc</code></td><td>No</td></tr><tr><td>orderBy</td><td>queried object scalar property</td><td>No</td></tr></tbody></table><h2 id=querying>Querying</h2><p>Querying/filtering of resources.</p><p><code>GET <API_URL>/v1/pass?where={"voided":{"$eq":true}}</code></p><blockquote><p>List of voided passes created in July 2017</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X GET <span style=color:#2aa198>'<API_URL>/v1/pass?where={"voided":{"$eq":true},"createdAt":{"$gte":"2017-07-01","$lt":"2017-08-01"}}'</span> <span style=color:#cb4b16>\
</span></span></span><span style=display:flex><span> -H <span style=color:#2aa198>'authorization: Bearer <ACCESS_TOKEN>'</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-javascript data-lang=javascript><span style=display:flex><span><span style=color:#268bd2>var</span> http <span style=color:#719e07>=</span> require(<span style=color:#2aa198>"https"</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> where <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> voided<span style=color:#719e07>:</span> { $eq<span style=color:#719e07>:</span> <span style=color:#cb4b16>true</span> },
</span></span><span style=display:flex><span> createdAt<span style=color:#719e07>:</span> { $gte<span style=color:#719e07>:</span> <span style=color:#2aa198>"2017-07-01"</span>, $lt<span style=color:#719e07>:</span> <span style=color:#2aa198>"2017-08-01"</span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> options <span style=color:#719e07>=</span> {
</span></span><span style=display:flex><span> method<span style=color:#719e07>:</span> <span style=color:#2aa198>"GET"</span>,
</span></span><span style=display:flex><span> hostname<span style=color:#719e07>:</span> <span style=color:#2aa198>"<API_URL>"</span>,
</span></span><span style=display:flex><span> port<span style=color:#719e07>:</span> <span style=color:#cb4b16>null</span>,
</span></span><span style=display:flex><span> path<span style=color:#719e07>:</span> <span style=color:#2aa198>"/v1/pass?where="</span> <span style=color:#719e07>+</span> <span style=color:#b58900>encodeURIComponent</span>(JSON.stringify(where)),
</span></span><span style=display:flex><span> headers<span style=color:#719e07>:</span> {
</span></span><span style=display:flex><span> authorization<span style=color:#719e07>:</span> <span style=color:#2aa198>"Bearer <ACCESS_TOKEN>"</span>,
</span></span><span style=display:flex><span> },
</span></span><span style=display:flex><span>};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>var</span> req <span style=color:#719e07>=</span> http.request(options, <span style=color:#268bd2>function</span> (res) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> chunks <span style=color:#719e07>=</span> [];
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"data"</span>, <span style=color:#268bd2>function</span> (chunk) {
</span></span><span style=display:flex><span> chunks.push(chunk);
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> res.on(<span style=color:#2aa198>"end"</span>, <span style=color:#268bd2>function</span> () {
</span></span><span style=display:flex><span> <span style=color:#268bd2>var</span> body <span style=color:#719e07>=</span> Buffer.concat(chunks);
</span></span><span style=display:flex><span> console.log(body.toString());
</span></span><span style=display:flex><span> });
</span></span><span style=display:flex><span>});
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>req.end();
</span></span></code></pre></div><ul><li>When you request a list, you can filter objects by setting the <code>where</code> query parameter.</li><li>The <code>where</code> parameter accepts an object with attribute-value pairs, where the value can be a primitive (for equality matches) or an object specifying an operator and a value.</li><li>An invalid <code>where</code> parameter is discarded as if it were not sent with the request.</li></ul><aside class=notice><p>The <code>where</code> parameter should be URL-encoded.
The examples do not use a URL-encoded <code>where</code> parameter for better readability.</p></aside><table><thead><tr><th>Operator</th><th>Description</th></tr></thead><tbody><tr><td><code>{"$gt": 6}</code></td><td>> 6</td></tr><tr><td><code>{"$gte": 6}</code></td><td>>= 6</td></tr><tr><td><code>{"$lt": 10}</code></td><td>< 10</td></tr><tr><td><code>{"$lte": 10}</code></td><td><= 10</td></tr><tr><td><code>{"$ne": null}</code></td><td>!= null</td></tr><tr><td><code>{"$eq": null}</code></td><td>= null</td></tr><tr><td><code>{"$in": [1, 2]}</code></td><td>IN [1, 2]</td></tr><tr><td><code>{"$notIn": [1, 2]}</code></td><td>NOT IN [1, 2]</td></tr><tr><td><code>{"$like": "%hat%"}</code></td><td>LIKE ‘%hat%’</td></tr><tr><td><code>{"$notLike": "%hat"}</code></td><td>NOT LIKE ‘%hat’</td></tr><tr><td><code>{"$all": [5, 3]}</code></td><td>@> [5, 3]</td></tr></tbody></table><p>If the <code>$like</code> or <code>$notLike</code> operator is provided without a <code>%</code> symbol, it behaves like <code>$eq</code> or <code>$ne</code>, respectively.</p><aside class=notice><p>Operators <code>$like</code> and <code>$notLike</code> are not supported when querying for an <code>id</code>.</p></aside><h2 id=type-definitions>Type definitions</h2><h3 id=datetime>datetime</h3><p>Datetime fields are of type <code>string</code> and their format is defined by <a href=https://datatracker.ietf.org/doc/html/rfc3339>RFC3339</a>.</p><p>All fields that expect a date as input must adhere to this specification, including dynamic data values that will be used in these fields.</p><h1 id=pass-distribution>Pass distribution</h1><p>A pass can be distributed directly (e.g. as an email attachment) in <code>pkpass</code> format or through a link to our servers.</p><h2 id=get-pass>Get pass</h2><h3 id=request-7>Request</h3><blockquote><p>Link to distribute pass</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-html data-lang=html><span style=display:flex><span><<span style=color:#268bd2>a</span> href<span style=color:#719e07>=</span><span style=color:#2aa198>"<DISTRIBUTION_URL>/:id?tag=someTag"</span>>Get pass</<span style=color:#268bd2>a</span>>
</span></span></code></pre></div><p><code>GET <DISTRIBUTION_URL>/:id</code></p><p><em>Path parameters</em></p><table><thead><tr><th>Name</th><th>Note</th><th>Required</th></tr></thead><tbody><tr><td>id</td><td>pass ID</td><td>Yes</td></tr></tbody></table><p><em>Query parameters</em></p><table><thead><tr><th>Name</th><th>Note</th><th>Required</th></tr></thead><tbody><tr><td>tag</td><td>tag your distribution channels; can be used multiple times (<code><DISTRIBUTION_URL>/:id?tag=rollup&tag=entrance</code>)</td><td>No</td></tr><tr><td>format</td><td>distribution format [<code>pkpass</code>/<code>pdf</code>/<code>barcode</code>/<code>qrcode</code>]</td><td>No</td></tr></tbody></table><p>Note:</p><ul><li>Tags are transformed to lowercase.</li><li>A valid tag does not contain spaces and has a maximum length of 16 characters.</li><li>The maximum number of valid tags is 10.</li><li>Tag <code>console</code> is reserved for Yourpass Console.</li></ul><p><em>Formats</em></p><table><thead><tr><th>Name</th><th>Note</th></tr></thead><tbody><tr><td>pkpass</td><td>pass in the pkpass format for wallet applications supporting it</td></tr><tr><td>pdf</td><td>printable alternative of pkpass</td></tr><tr><td>barcode</td><td>returns SVG of the barcode in the pass</td></tr><tr><td>qrcode</td><td>returns an SVG-encoded QR code with a link to the pass preview (no format)</td></tr></tbody></table><h3 id=response-8>Response</h3><p>Returns a pass to the end-user in the specified format.
If no format is supplied and the device supports pkpass, it is returned in this format.
Otherwise, an HTML preview is shown, which includes action buttons to download the pass.
This service also collects statistical information about pass downloads and previews.</p><h2 id=issue-link>Issue link</h2><p>This service can be used only with distributable templates (i.e. the <code>distributable</code> flag is set to true).</p><p>The endpoint can be used in two ways:</p><ul><li>To generate a new pass and redirect the end-user to <a href=/#get-pass>Get pass</a></li><li>To generate a QR code with a link that generates a new pass (redirects back to this endpoint)</li></ul><blockquote><p>Example usage in HTML as link:</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-html data-lang=html><span style=display:flex><span><<span style=color:#268bd2>a</span> href<span style=color:#719e07>=</span><span style=color:#2aa198>"<ISSUE_URL>/:id"</span>> Get pass </<span style=color:#268bd2>a</span>>
</span></span></code></pre></div><blockquote><p>Example usage in HTML as image:</p></blockquote><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-html data-lang=html><span style=display:flex><span><<span style=color:#268bd2>img</span> src<span style=color:#719e07>=</span><span style=color:#2aa198>"<ISSUE_URL>/:id?format=qrcode"</span> />
</span></span></code></pre></div><h3 id=request-1-4>Request</h3><p><code>GET <ISSUE_URL>/:id</code> or <code>GET <ISSUE_URL>/:id?format=qrcode</code></p><p><em>Path parameters</em></p><table><thead><tr><th>Name</th><th>Note</th><th>Required</th></tr></thead><tbody><tr><td>id</td><td>template ID</td><td>Yes</td></tr></tbody></table><p><em>Query parameters</em></p><table><thead><tr><th>Name</th><th>Note</th><th>Required</th></tr></thead><tbody><tr><td>format</td><td>if you set <code>format</code> to <code>qrcode</code>, an SVG-encoded QR code is generated with a link that issues a new pass</td><td>No</td></tr></tbody></table><h3 id=response-1-4>Response</h3><p><strong>Without format parameter</strong></p><p>A new pass is created and the end-user is redirected to <a href=/#get-pass>Get pass</a>.
The redirect URL does not contain the <code>format</code> parameter, which means that either pkpass is downloaded or the user is presented with an HTML preview.</p><p><strong>With <code>qrcode</code> format</strong></p><p>No pass is created, only an SVG QR code is generated.
The QR code contains an address back to this endpoint without the <code>format</code> parameter.
When a user scans the QR code, they visit <code><ISSUE_URL>/:id</code>, which generates a new pass and redirects them to <a href=/#get-pass>Get pass</a>, as described above.</p><h1 id=webhooks>Webhooks</h1><p>Four kinds of webhooks are currently supported:</p><ol><li>device registration (pkpass)</li><li>device unregistration (pkpass)</li><li>user add (Google Wallet)</li><li>user delete (Google Wallet)</li></ol><p>PKPass (Apple Wallet) and Google Wallet are different technologies that provide different mechanisms for engagement tracking.
For PKPass, we communicate with end-user devices directly and each device registers with us directly.
With Google Wallet, we can determine whether the pass is currently added to Google Wallet, but we cannot verify how many devices are affected.
A user with no Android devices can still add their passes to Google Wallet via the web interface.</p><p>The webhook service expects a successful response (HTTP status code 2xx) within 10 seconds.
If your service does not respond in time or does not return one of the status codes mentioned above, the event is marked as “undelivered”.
An undelivered event is retried with exponential backoff (this backoff is configurable). All subsequent messages are postponed until the failed one succeeds.
If the number of retries reaches the limit, the event is discarded.</p><p>By default, the limit is 15 retries with exponential backoff using the formula <code>10 × 1.5^n</code> in seconds, where <code>n</code> is the retry number.</p><aside class=notice><p>Make sure your service offloads all extra work to an asynchronous process (or a queue), especially if it makes third-party calls to other APIs.
It should respond to the webhook call as soon as it can.</p></aside><p>The only currently supported authentication method is an API key (using the <code>X-API-Key</code> header) with the value of your choice.</p><p>Webhooks need to be configured manually. Please contact Yourpass support and provide the following information:</p><ul><li>Project IDs for which you want to receive webhooks</li><li>Webhook URL for each project ID (can be part of the URL path or parameters)</li></ul><p>Example:</p><pre tabindex=0><code>Project ID: 00000000-0000-0000-0000-000000000000
Webhook URL for device registration: https://example.com/webhook/yourpass?event=register
Webhook URL for device unregistration: https://example.com/webhook/yourpass?event=unregister
Webhook URL for user add: https://example.com/webhook/yourpass?event=gw_add
Webhook URL for user delete: https://example.com/webhook/yourpass?event=gw_delete
</code></pre><aside class=warning><p>Toggling “Receive notifications” on the pass creates an unregistration and registration each time.
Registrations and unregistrations can also happen when the wallet triggers a so-called “reregistration”.
We have observed this behavior with iOS Wallet during OS upgrades, with Android when Firebase resets the pushToken and whenever a user re-adds an existing pass in YourWallet.</p></aside><h2 id=device-registration>Device registration</h2><p>Sent whenever the device registers to receive push notifications for the wallet pass.</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#268bd2>"passId"</span>: <span style=color:#2aa198>"00000000-0000-0000-0000-000000000000"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"timestamp"</span>: <span style=color:#2aa198>"2006-01-02T15:04:05.999Z"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"deviceCount"</span>: <span style=color:#2aa198>2</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"wallet"</span>: <span style=color:#2aa198>"ios_wallet"</span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h3 id=properties-4>Properties</h3><table><thead><tr><th>Name</th><th>Note</th><th>Type</th></tr></thead><tbody><tr><td>passId</td><td></td><td>string</td></tr><tr><td>timestamp</td><td></td><td>datetime</td></tr><tr><td>deviceCount</td><td>number of devices registered with this pass, including the event that resulted in this webhook payload</td><td>number</td></tr><tr><td>wallet</td><td>type of wallet [<code>ios_wallet</code>/<code>android_yourwallet</code>/<code>android_pass2u</code>/<code>android_attido</code>/<code>android_walletpasses</code>/<code>unknown</code>]</td><td>string</td></tr></tbody></table><h2 id=device-unregistration>Device unregistration</h2><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#268bd2>"passId"</span>: <span style=color:#2aa198>"00000000-0000-0000-0000-000000000000"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"timestamp"</span>: <span style=color:#2aa198>"2006-01-02T15:04:05.999Z"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"deviceCount"</span>: <span style=color:#2aa198>0</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"wallet"</span>: <span style=color:#2aa198>"ios_wallet"</span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h3 id=properties-1-1>Properties</h3><table><thead><tr><th>Name</th><th>Note</th><th>Type</th></tr></thead><tbody><tr><td>passId</td><td></td><td>string</td></tr><tr><td>timestamp</td><td></td><td>datetime</td></tr><tr><td>deviceCount</td><td>number of devices registered with this pass, including the event that resulted in this webhook payload</td><td>number</td></tr><tr><td>wallet</td><td>type of wallet [<code>ios_wallet</code>/<code>android_yourwallet</code>/<code>android_pass2u</code>/<code>android_attido</code>/<code>android_walletpasses</code>/<code>unknown</code>]</td><td>string</td></tr></tbody></table><h2 id=user-add>User add</h2><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#268bd2>"passId"</span>: <span style=color:#2aa198>"00000000-0000-0000-0000-000000000000"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"timestamp"</span>: <span style=color:#2aa198>"2006-01-02T15:04:05.999Z"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"userCount"</span>: <span style=color:#2aa198>1</span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h3 id=properties-2-1>Properties</h3><table><thead><tr><th>Name</th><th>Note</th><th>Type</th></tr></thead><tbody><tr><td>passId</td><td></td><td>string</td></tr><tr><td>timestamp</td><td></td><td>datetime</td></tr><tr><td>userCount</td><td>number of user accounts that have added this pass to Google Wallet</td><td>number</td></tr></tbody></table><h2 id=user-delete>User delete</h2><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#268bd2>"passId"</span>: <span style=color:#2aa198>"00000000-0000-0000-0000-000000000000"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"timestamp"</span>: <span style=color:#2aa198>"2006-01-02T15:04:05.999Z"</span>,
</span></span><span style=display:flex><span> <span style=color:#268bd2>"userCount"</span>: <span style=color:#2aa198>0</span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h3 id=properties-3-1>Properties</h3><table><thead><tr><th>Name</th><th>Note</th><th>Type</th></tr></thead><tbody><tr><td>passId</td><td></td><td>string</td></tr><tr><td>timestamp</td><td></td><td>datetime</td></tr><tr><td>userCount</td><td>number of user accounts that have added this pass to Google Wallet</td><td>number</td></tr></tbody></table></div><div class=dark-box><div class=lang-selector x-data=langController x-init='initLangs([{"key":"shell","name":"cURL"},{"key":"javascript","name":"Node.js"}])'><template x-for="(tab, index) in tabs"><a x-text=tab.name :class="{ 'active': tab.active }" @click=changeLanguage(index)></a></template></div></div></div><script nonce="ogiUDmVx2YcJq0pT" type=text/javascript>(function(){var e,n,o,i,a,c,l,u,m,g,_,O,t=null,s=null;if(Array.from(document.getElementsByTagName("code")).some(function(e){if(e.textContent==="Loading OpenAPI schema tool..."){if(s=e,e.parentElement.tagName==="P"&&(s=e.parentElement),s.parentElement){t=document.createElement("div");var n=window.getComputedStyle(s);t.style.paddingLeft=n.paddingLeft,t.style.paddingRight=n.paddingRight,t.style.marginLeft=n.marginLeft,t.style.marginRight=n.marginRight,s.parentElement.insertBefore(t,s)}return!0}return!1}),t===null)return;a={primary:"rgb(106, 193, 116)",primary_accent:"rgb(215, 251, 219)",secondary:"rgb(143, 188, 212)",secondary_accent:"rgb(185, 227, 249)",red:"rgb(201, 122, 126)",red_accent:"rgb(255, 203, 205)"};function r(...t){var e=document.createElement("div");return e.style.display="flex",e.style.alignItems="center",e.style.justifyContent="flex-start",e.style.marginBottom="8px",t.forEach(t=>e.appendChild(t)),e}function d(...e){if(!t){console.error("form is undefined, cannot append elements",e);return}var n=r(...e);return t.appendChild(n),n}function b(e,t){var n=document.createElement("button");return n.type="button",n.innerHTML=e,n.style.padding="0.25em 0.5em",n.style.borderRadius="0.5em",n.style.border="none",n.style.background="none",h(n),typeof t=="function"&&n.addEventListener("click",t),n}function h(e,t){var s=a.primary,n=a.primary_accent;a[t]&&(s=a[t],n=a[t+"_accent"]||n),e instanceof HTMLElement&&(e.style.background=n,e.style.boxShadow="0 0 0 2px "+s)}function f(e,t){if(t.innerHTML="",e==="")t.style.visibility="hidden",t.style.padding="";else{t.style.padding="0.1em 1em 0.1em",t.style.visibility="visible";var n=document.createElement("div");n.innerHTML=e,t.appendChild(n)}}function j(e,t){var n=document.createElement("div");return n.style.borderRadius="0.5em",n.style.fontWeight=600,n.style.border="0 none",n.style.display="flex",n.style.alignItems="center",h(n,t),f(e,n),n}l=function(e){return typeof e=="object"},g=function(e){if(!l(e)||!(e.servers instanceof Array)||e.servers.length!==1)throw new Error("Schema has unsupported structure");if(!l(e.components)||!l(e.components.schemas)||!l(e.components.schemas.DynamicData)||!l(e.components.schemas.DynamicData.properties))throw new Error("Could not find DynamicData specification in the schema")},m={servers:[{url:""}],components:{schemas:{DynamicData:{type:"object",properties:{}}}}},n=m,i={},o=document.createElement("div"),u=j("","red"),e=document.createElement("textarea");function v(){e.textContent=JSON.stringify(n),f("",u)}function y(){i={},Object.entries(n.components.schemas.DynamicData.properties).forEach(function(e){var t=e[0],n=e[1]||{type:"string"};i[w()]={value:t,type:n.type}})}function p(e,t,s){t===null?delete i[e]:i[e]={value:t,type:s},n.components.schemas.DynamicData.properties={},Object.values(i).forEach(function(e){if(e.value==="")return;n.components.schemas.DynamicData.properties[e.value]={type:e.type}}),v()}c=function(){},_=0;function w(){return"prop_"+_++}createDynamicField=function(t,n,s){var l,d,u,m,o=document.createElement("input");return o.placeholder="firstname, memberId or similar",o.style.minWidth="40%",o.value=t,o.dataset.propId=s,o.maxLength=32,u=document.createElement("label"),u.innerHTML="Field name:",u.style.marginRight="1em",l=document.createElement("select"),m=["string","number"],m.forEach(function(e){var t=document.createElement("option");t.value=e,t.selected=e===n,t.innerHTML=e[0].toUpperCase()+e.slice(1),l.appendChild(t)}),t!==""&&(i[o.dataset.propId]={value:t,type:n}),l.addEventListener("change",function(e){p(o.dataset.propId,o.value,e.target.value)}),o.addEventListener("input",function(e){p(o.dataset.propId,e.target.value,m[l.selectedIndex])}),d=b("Remove",function(){p(o.dataset.propId,null,""),c()}),h(d,"red"),d.style.marginLeft="1em",d.style.borderColor=a.red,r(u,o,l,d)},c=function(){o.innerHTML="";var e,t,n,s=Object.entries(i);s.length===0?(t=document.createElement("span"),t.innerHTML="There are no Dynamic fields",o.appendChild(r(t))):(n=document.createElement("span"),n.innerHTML="Dynamic Fields:",o.appendChild(r(n)),o.appendChild(r(j("Use alphanumeric characters, dashes and underscores only","secondary"))),s.forEach(function(e){var n=e[0],t=e[1]||{value:"",type:"string"};o.appendChild(createDynamicField(t.value,t.type,n))})),e=b("Add Dynamic Field",function(){p(w(),"","string"),c()}),h(e,"secondary"),e.style.width="100%",e.style.marginTop="0.5em",o.appendChild(r(e))},O=function(){if(t instanceof HTMLElement){t.innerHTML="",n=m,e.textContent=JSON.stringify(n),e.readOnly=!0,e.addEventListener("focus",function(){e.select()});var s,i,r,a=document.createElement("label");a.innerHTML="API URL:",a.style.marginRight="1em",s=document.createElement("input"),s.type="text",s.placeholder="Enter URL based on your environment",s.style.minWidth="60%",s.addEventListener("input",function(e){n.servers[0].url=e.target.value,v()}),d(a,s),d(o),y(),c(),r="Copy schema into clipboard",i=b(r,function(){navigator.clipboard.writeText(e.textContent),i.innerHTML="Copied...",setTimeout(function(){i.innerHTML=r},1e3)}),i.style.flex="1 0 100%",d(i),d(u),e.addEventListener("paste",function(e){var o=e.clipboardData.getData("text"),t={};try{t=JSON.parse(o)}catch(e){console.error(e),f("Content of the clipboard you pasted is not a valid schema",u);return}try{g(t),n=t,s.value=n.servers[0].url,y(),v(),c()}catch(e){f(e.message,u)}}),e.style.width="100%",e.style.maxWidth="100%",e.style.marginBottom="8px",e.style.background="rgba(0, 0, 0, 0.05)",d(e)}},fetch("/salesforce-openapi3.0.json?v1").then(function(e){return e.status>=200&&e.status<300?e.json():null}).then(function(e){g(e),m=e,s.parentElement.removeChild(s),O()}).catch(function(){var t=Array.from(s.getElementsByTagName("code"));t[0]&&(t[0].textContent="Failed to load the OpenAPI schema tool")})})()</script></body></html>
Sitemap
Кол-во: 0
XML-карта сайта для поисковиков
?
Sitemap.xml помогает поисковику быстрее находить и индексировать страницы. Особенно важен для крупных сайтов и новых страниц, на которые ещё нет входящих ссылок.
Robots.txt не содержит ссылку на карту сайта. Рекомендуется добавить карту сайта и указать ссылку на нее в robots.txt.
Внутренние ссылки
Не найдено
Ссылки на другие страницы своего сайта
?
Внутренние ссылки распределяют ссылочный вес между страницами и помогают поисковику обходить сайт. Пустые анкоры и ссылки на запрещённые robots.txt страницы — типичные ошибки.
Внутренних ссылок на странице 0 оптимально.
На странице присутствуют изображения 1.
Внешние ссылки
Кол-во: 14
Ссылки на сторонние сайты
?
Исходящие внешние ссылки передают часть ссылочного веса на чужие сайты. Ссылки на авторитетные ресурсы безопасны; ссылки на мусорные сайты могут навредить репутации страницы.
Внешних ссылок на странице 14 слишком много. Спрячьте лишние ссылки в тег noindex или атрибут rel='nofollow'!
На странице присутствуют внешние ссылки с пустым анкором: 1!
Показать внешние ссылки
| Url | Анкор | Анализировать |
|---|---|---|
| yourpass.eu |
Yourpass
|
Анализировать url |
| console.yourpass.space |
Пустой анкор
|
Анализировать url |
| console.yourpass.space |
https://console.yourpass.space
|
Анализировать url |
| api.yourpass.space |
https://api.yourpass.space
|
Анализировать url |
| get.yourpass.space |
https://get.yourpass.space
|
Анализировать url |
| issue.yourpass.space |
https://issue.yourpass.space
|
Анализировать url |
| tools.ietf.org |
RFC6749
|
Анализировать url |
| tools.ietf.org |
RFC6749
|
Анализировать url |
| developer.mozilla.org |
data URL
|
Анализировать url |
| console.yourpass.eu |
console.yourpass.eu
|
Анализировать url |
| json-schema.org |
JSON Schema
|
Анализировать url |
| developer.apple.com |
Wallet Developer Guide
|
Анализировать url |
| developer.apple.com |
PassKit Package Format Reference
|
Анализировать url |
| datatracker.ietf.org |
RFC3339
|
Анализировать url |
Конкуренты Готовность: 0%
Конкуренты в Яндексе
Кол-во: 0
Топ сайтов-конкурентов в Яндексе
?
Сайты, чаще всего появляющиеся в ТОПе Яндекса по запросам из семантического ядра этой страницы.
Мы не нашли у вас конкурентов в Яндексе. Сайт или очень молодой или плохо продвигается.
Конкурентов в ТОП-10 Яндекса не нашлось.
Конкуренты в Google
Кол-во: 0
Топ сайтов-конкурентов в Google
?
Сайты, чаще всего появляющиеся в ТОПе Google по запросам из семантического ядра этой страницы.
Конкуренты в Google тоже не найдены. Займитесь продвижением сайта!
Конкурентов в ТОП-10 Google не нашлось.
ЗоЗПП: права потребителей Готовность: 100%
Нарушения
Не выявлены
Признаков дистанционной продажи товаров (интернет-магазина) не обнаружено — требования ЗоЗПП о раскрытии информации продавца к сайту не применяются. Нарушений нет.
ФЗ-149: рекомендательные технологии Готовность: 100%
Нарушения
Не выявлены
Рекомендательные блоки («с этим покупают», «похожие товары» и т.п.) на сайте не обнаружены — требования ст. 10.7 ФЗ-149 к сайту не применяются. Нарушений нет.
ФЗ-38: реклама Готовность: 100%
Нарушения
Не выявлены
Рекламных тематик с обязательными оговорками (медицина, БАД, кредиты и займы, новостройки) на сайте не обнаружено. Нарушений нет.
ФЗ-436: защита детей Готовность: 100%
Нарушения
Не выявлены
Признаков информационной продукции (новости, видео, книги, игры, курсы) не обнаружено — обязательная возрастная маркировка по ФЗ-436 сайту не требуется. Нарушений нет.
Вердикт
Анализ сайта doc.yourpass.eu, слабо оптимизирован на 55%. Для хорошей оптимизации и выхода на первые места в поиске требуется:
Исправьте ошибки в мета-тегах.
Исправьте ошибки оптимизации.
Исправьте ошибки индексации.
Поделитесь с друзьями: