# Parola API'sinin başvuru belgeleri · password.es

> POST /v1/generate'in bütün parametreleri, yanıtın her alanı, hata kodları ve api.password.es sınırları. Çalışan bir curl örneğiyle.

password.es · Original: https://password.es/tr/api/docs/

---

# Parola API'sinin başvuru belgeleri

`api.password.es` başvuru belgeleri: her parametre, yanıtın her alanı, her hata kodu ve sınırlar. Örnekler olduğu gibi bir terminale yapıştırılır.

Aradığın bunun ne olduğu, kimin için olduğu ve ne zaman *kullanılmaması* gerektiğiyse, [API sayfasından](https://password.es/tr/api/) başla.

## Uç noktalar

Her şey `https://api.password.es` altında. İkisi yanıt veriyor, biri henüz değil — ve o, bunu kendi yanıtında söylüyor.

- POST/v1/generate Bir ya da birkaç parola üretir ve çözümlemesini döndürür.
- GET/openapi.json API'nin OpenAPI 3.1 biçimindeki tanımı.
- POST/mcp Asistanlar için MCP sunucusu. Tek araç: `generate_password`.
- POST/v1/check 501 Henüz yok. Hata, neyin eksik olduğunu ve bu arada nereye gidileceğini söyler.

## Parola üretmek

Gövde isteğe bağlı: gövdesiz, dört karakter türü de açık 16 karakter gelir. Gövdeyle, ne istersen.

İstek

```
curl -X POST https://api.password.es/v1/generate \
  -H 'content-type: application/json' \
  -d '{"length":20,"exclude_ambiguous":true}'
```

Yanıt

```
{
  "passwords": [
    "P#f.aK+w4pcsx]}Gx;*>"
  ],
  "analysis": {
    "length": 20,
    "pool": 83,
    "bits": 127.50078862693852,
    "log10_guesses": 38.08053185185735,
    "crack_time_log10_seconds": 26.08053185185735,
    "crack_time": {
      "value": "3.8 × 10¹⁸",
      "unit": "years"
    },
    "level": 4,
    "level_scale": "time",
    "ceiling": false
  },
  "notice": "Generated on someone else's machine, which is a security antipattern even though we store nothing. For a password you will actually use, the generator at https://password.es/en/ runs entirely in your browser and sends nothing.",
  "_meta": {
    "plan": "anonymous",
    "lang": {
      "messages": "en",
      "links": "en"
    },
    "limits": {
      "burst": {
        "limit": 60,
        "window_seconds": 60
      }
    },
    "quota": {
      "limit": null,
      "remaining": null,
      "reset": "2026-09-01T00:00:00.000Z"
    },
    "docs": "https://password.es/api/"
  }
}
```

## Parametreler

Hepsi isteğe bağlı. Tablo İngilizce ve on sekiz dilde birebir aynı; bilerek: bir API'yi entegre eden kişi alan adlarını yazıldığı gibi yazar, ve `exclude_ambiguous` sözcüğünün on sekiz çevirisi kapsam değil, borç olurdu.

- Field
- Type
- Default
- Notes
- length
- integer 4–64
- 16
- How many characters. The same range as the generator on this site.
- count
- integer 1–20
- 1
- How many passwords to return. `passwords` is always an array, including with `count` 1.
- lower
- boolean
- true
- Include a–z (26 characters).
- upper
- boolean
- true
- Include A–Z (26 characters).
- digits
- boolean
- true
- Include 0–9 (10 characters).
- symbols
- boolean
- true
- Include `~!@#$%^&*()_+-=[]{};:,./<>?` — the same 27 as the slider on the home page, no more.
- exclude_ambiguous
- boolean
- false
- Drops `0 O 1 I l | o`. Six of them in practice, not seven: `|` is not in the symbol set to begin with. That is why `pool` reads 83 above instead of 89.
- no_repeats
- boolean
- false
- Avoids adjacent repeated characters. Not an absolute guarantee: it retries ten times, exactly as the web generator does. At length 64 that lets a repeat through about 0.1% of the time.
- lang
- string
- `en`
- Which language to answer in. One of the site's eighteen. Also accepted as `?lang=` in the URL, which wins over this field; without either, `Accept-Language` is read. An unknown value is not an error — it falls back to English. See the section below: messages exist in English and Spanish, links in all eighteen.

## Her sayı ne anlama geliyor

Aynı mantık: başvuru İngilizce, açıklaması yanında. Bu sayıların hiçbiri yeni değil — hepsi ana sayfadaki göstergeyi çizen aynı motordan çıkıyor.

- Field
- Notes
- passwords
- An array of strings, always — including with `count` 1.
- analysis.length
- How many characters came back.
- analysis.pool
- The size of the alphabet the password was drawn from.
- analysis.bits
- `H = L·log2(N)`, the same formula as the home page. With `no_repeats` it becomes `log2(N)+(L-1)·log2(N-1)`.
- analysis.log10_guesses
- The expected work, as a base-10 logarithm: half the keyspace.
- analysis.crack_time_log10_seconds
- At 10^12 guesses/s, offline, fast hash. The same attack model as the rest of the site.
- analysis.crack_time
- The same figure in words. `unit` follows the answer language: `years`, `años`…
- analysis.level
- 0–4. The same scale as the checker, ever since the site unified the two it used to have.
- analysis.level_scale
- `"time"`. Says where the level came from, so that a future divergence is visible instead of having to be inferred by comparing numbers.
- analysis.ceiling
- `false`: the server generated the password, so the figure is exact and not a ceiling. The same flag the checker uses.
- notice
- The antipattern warning, in every single response.
- _meta.plan
- `"anonymous"`. The only lane there is; the others arrive with accounts.
- _meta.lang
- `{ "messages", "links" }` — which language each half actually came back in. They can differ, and that is why the API says so instead of leaving you to guess.
- _meta.limits.burst
- The rate limit actually enforced: `limit` requests per `window_seconds`.
- _meta.quota
- The reserved daily-quota slot. `limit` and `remaining` are `null` because nobody counts daily requests yet.
- _meta.docs
- A link back to the documentation.

## Yanıtın dili

Varsayılan olarak İngilizce yanıt verir; hiçbir şey söylemeden entegre eden birinin beklediği budur. Üç yolla değişir, ve çelişirlerse ilki kazanır: URL'de `?lang=`, gövdede `"lang"` ve `Accept-Language` başlığı.

Burada bilinmesi gereken bir asimetri var: **iletiler İngilizce ve İspanyolca var; bağlantılar, sitenin on sekiz dilinin hepsinde.** Almanca istemek sana Almanca bağlantılar ve hâlâ İngilizce iletiler verir.

İstek

```
curl -X POST 'https://api.password.es/v1/generate?lang=de' \
  -H 'content-type: application/json' \
  -d '{"length":20}'
```

Yanıt

```
"_meta": {
  "lang": { "messages": "en", "links": "de" }
}
```

Tahmin etmene gerek yok: her yanıt `_meta.lang` içinde her yarıya ne uygulandığını bildirir. Ve var olmayan bir dil hata değildir — İngilizceye düşer, ve `_meta.lang` bunu söyler.

## Parola denetlemek: henüz değil

`/v1/check` `501` döndürür. Ne bir hata ne bir unutkanlık: bilerek öyle, ve yanıt neyin eksik olduğunu ve bu arada nereye gidileceğini anlatır. `checker_url`, istediğin dilde sitenin denetleyicisini gösterir.

İstek

```
curl -X POST https://api.password.es/v1/check \
  -H 'content-type: application/json' \
  -d '{"password":"x"}'
```

Yanıt

```
{
  "error": "not_implemented",
  "message": "/v1/check does not exist yet. Returning the same numbers as the password.es checker requires its very same pattern engine, and that costs between 11 ms and 3.6 s of CPU per request depending on the input: it is waiting on a plan cap decision and on a length cap. Meanwhile the web checker does exactly this in your browser, sending nothing: https://password.es/en/checker/",
  "checker_url": "https://password.es/en/checker/",
  "docs": "https://password.es/api/",
  "_meta": { "…": "igual que arriba" }
}
```

## Hatalar

Hepsi aynı biçimde: kod için kısa bir `error`, düz metin bir `message` —bir yapay zekâ asistanının kullanıcısına okuduğu şey budur—, bazen buna yol açan `field`, bir `docs` ve her zamanki `_meta`.

- HTTP
- error
- Notes
- 400
- `invalid_length`
- `length` outside 4–64. `field` names it.
- 400
- `invalid_count`
- `count` outside 1–20. `field` names it.
- 400
- `empty_alphabet`
- All four character types turned off, so there is no alphabet to draw from. No `field`: it is the combination, not one parameter.
- 400
- `unknown_parameter`
- A parameter this endpoint does not accept. `field` gives the offending name.
- 429
- `rate_limited`
- Over 60 requests in a minute. Carries `Retry-After` and `RateLimit-*` headers, and `limit` / `window_seconds` in the body.
- 501
- `not_implemented`
- Only from `/v1/check`. Carries `checker_url`, pointing at the web checker in the answer language.

## Sınırlar

Tek bir tane, ve gerçekten uygulanan da o: **IP başına dakikada 60 istek**. Bu sayfaya inanmak zorunda değilsin: sayı her yanıtta, `_meta.limits.burst` içinde geliyor.

Aşıldığında yanıt, `Retry-After` ve `RateLimit-*` başlıklarıyla bir `429` ve ne yapılacağını düz metinle anlatan bir iletidir. İçinde kayda ya da fiyatlara bağlantı yoktur, çünkü ne kayıt vardır ne fiyat.

`_meta` içinde ayrıca iki değeri de `null` olan bir `quota` bloğu göreceksin. Bilerek öyle: hesaplar var olduğunda doldurulmak üzere ayrılmış boşluk, ve boş çünkü bugün kimse günlük istek saymıyor. Duyurulup uygulanmayan bir sınır, hiç duyurmamaktan kötüdür.

## MCP sunucusu

MCP, Claude veya ChatGPT gibi asistanların dış araçları kullandığı protokoldür. Bu adresi asistanınıza bağlayın; parolaları uydurmak yerine tam olarak bu sayılarla üretecektir. Kayıt yok, anahtar yok ve dakikada 60 istek sınırı aynı.

**Durumsuz** bir sunucudur ve başka MCP sunucularından geliyorsanız bilmekte fayda var: POST'a JSON ile yanıt verilir, akış açılmaz, `Mcp-Session-Id` ne gönderilir ne beklenir, bildirime gövdesiz `202` döner ve GET `405` verir. 2025-06-18 belirtimi buna açıkça izin verir.

```
curl -X POST https://api.password.es/mcp \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"generate_password",
                 "arguments":{"length":20,"lang":"es"}}}'
```

**Tek bir araç** yayımlar, `generate_password`, yukarıdaki tablodaki parametrelerle ve ek olarak `lang` ile. `check_password_strength` yoktur ve `/v1/check` var olmadıkça olmayacaktır: her zaman hata döndüren bir araç, araç değildir; bir asistanın kataloğundaki kırık bir sözdür.

Bunun bir antipattern olduğu uyarısı, aracın açıklamasında ve her sonuçta yolculuk eder. Bu bilinçlidir: asistanın, parolayı isteyen kişiye okuyacağı şey budur.

## Makinelerin okuduğu belgeler

Bu sayfanın yanında bir de **OpenAPI 3.1** tanımı var, ve o yayımlandı: [api.password.es/openapi.json](https://api.password.es/openapi.json). Bir istemci üreteci, otomatik tamamlamalı bir düzenleyici ya da hangi alanların bulunduğunu kimse söylemeden öğrenmek isteyen bir aracı bunu okur. Yukarıdaki tablodaki parametreleri, hata kodlarını ve `quota` alanının neden boş olduğunu anlatır.
