Документация API

Легко интегрируйте Passly в свои приложения с помощью нашего REST API

Базовый URL

Все запросы начинаются с этого URL. Без ключа и регистрации.

120
Запросов / 10 мин
Без ключа
Публичный API
v1
Версия API
Время отклика
Продакшнhttps://passly.fr/api/v1

Эндпоинты

Три точки входа. Разверните любую, чтобы увидеть параметры, пример и ответ.

Генерирует один или несколько надёжных паролей по заданным критериям.

Параметры

lengthinteger
4-128, по умолчанию: 16Необязательно
countinteger
1-50, по умолчанию: 1Необязательно
formatstring
random, pronounceable, passphraseНеобязательно
lowercaseboolean
Включить строчные буквы (по умолчанию: true)Необязательно
uppercaseboolean
Включить прописные буквы (по умолчанию: true)Необязательно
digitsboolean
Включить цифры (по умолчанию: true)Необязательно
specialboolean
Включить специальные символы (по умолчанию: false)Необязательно
exclude_similarboolean
Исключить неоднозначные символы (по умолчанию: false)Необязательно
exclude_customstring
Дополнительные символы для исключения (≤ 256)Необязательно
capitalizeboolean
Произносимые: делать каждый слог с заглавной буквы (по умолчанию: true)Необязательно
include_numbersboolean
Произносимые: добавлять цифры (по умолчанию: true)Необязательно
wordsinteger
Парольные фразы: 3-10Необязательно
separatorstring
Парольные фразы: разделитель слов (≤ 8)Необязательно

Пример запроса

curl -X POST https://passly.fr/api/v1/generate \
  -H "Content-Type: application/json" \
  -d '{
    "length": 20,
    "count": 3,
    "special": true,
    "exclude_similar": true
  }'

Ответ

200 OK
{
    "success": true,
    "data": {
        "passwords": [
            "K9#mP2$xQr5@nW8&zF3v",
            "T4*bN7^gH6%jL3!qR9@m",
            "X5&cV8#nB2$kM4@pZ7*w"
        ],
        "entropy_bits": 131.09,
        "strength": "very_strong",
        "metadata": {
            "format": "random",
            "length": 20,
            "charset_size": 88,
            "possible_combinations": 1.7690923e+38,
            "possible_combinations_log10": 38.248
        },
        "crack_time": {
            "seconds": 8.8454615e+25,
            "formatted": "billions of years",
            "unit": "billion_years",
            "value": null,
            "assumptions": "1e+12 guesses/second"
        },
        "generated_at": "2026-01-15T10:30:45.000Z",
        "locale": "fr",
        "api_version": "v1"
    }
}

Ограничение частоты запросов

Квота на IP-адрес защищает сервис. Заголовки показывают ваше текущее состояние.

Лимит на IP

120 запросов каждые 10 минут

Заголовки ответа

  • X-RateLimit-Limit
  • X-RateLimit-Remaining
  • X-RateLimit-Reset

Ошибка 429

Возвращается при достижении лимита. Заголовок Retry-After указывает время ожидания.

Коды ошибок

Любая ошибка возвращает JSON постоянной формы с пригодным для обработки кодом.

400Bad Request

Неверные или отсутствующие параметры

{
    "error": true,
    "message": "Длина должна быть от 4 до 128 символов",
    "code": "invalid_length"
}
429Too Many Requests

Превышен лимит запросов

{
    "error": true,
    "message": "Достигнут лимит запросов. Подождите 234 секунд",
    "retry_after": 234,
    "reset_at": "2026-01-15T10:35:00.000Z"
}
500Internal Server Error

Внутренняя ошибка сервера

{
    "error": true,
    "message": "Произошла ошибка. Пожалуйста, попробуйте снова."
}
503Service Unavailable

Сервис на обслуживании

{
    "error": true,
    "message": "Сайт находится на техобслуживании. Попробуйте через несколько минут."
}

Коды, возвращаемые в поле code

  • invalid_length
  • invalid_count
  • invalid_format
  • invalid_words
  • no_charset
  • empty_wordlist

Примеры интеграции

Тот же запрос на языке по вашему выбору. Копируйте, вставляйте, адаптируйте.

// PasslyClient.js
class PasslyClient {
    constructor(baseURL = 'https://passly.fr/api/v1') {
        this.baseURL = baseURL;
    }

    async generatePassword(options = {}) {
        const response = await fetch(`${this.baseURL}/generate`, {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({
                length: options.length || 16,
                count: options.count || 1,
                lowercase: options.lowercase !== false,
                uppercase: options.uppercase !== false,
                digits: options.digits !== false,
                special: options.special || false,
                exclude_similar: options.excludeSimilar || false,
                format: options.format || 'random'
            })
        });

        if (!response.ok) {
            throw new Error(`API Error: ${response.status}`);
        }

        return response.json();
    }

    async checkHealth() {
        const response = await fetch(`${this.baseURL}/health`);
        return response.json();
    }
}

// Utilisation
const passly = new PasslyClient();

const result = await passly.generatePassword({
    length: 24,
    special: true,
    excludeSimilar: true
});

console.log('Mot de passe:', result.data.passwords[0]);
console.log('Force:', result.data.strength);
console.log('Entropie:', result.data.entropy_bits, 'bits');