API

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 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.

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.

FieldTypeDefaultNotes
lengthinteger 4–6416How many characters. The same range as the generator on this site.
countinteger 1–201How many passwords to return. passwords is always an array, including with count 1.
lowerbooleantrueInclude a–z (26 characters).
upperbooleantrueInclude A–Z (26 characters).
digitsbooleantrueInclude 0–9 (10 characters).
symbolsbooleantrueInclude ~!@#$%^&*()_+-=[]{};:,./<>? — the same 27 as the slider on the home page, no more.
exclude_ambiguousbooleanfalseDrops 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_repeatsbooleanfalseAvoids 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.
langstringenWhich 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.

FieldNotes
passwordsAn array of strings, always — including with count 1.
analysis.lengthHow many characters came back.
analysis.poolThe size of the alphabet the password was drawn from.
analysis.bitsH = L·log2(N), the same formula as the home page. With no_repeats it becomes log2(N)+(L-1)·log2(N-1).
analysis.log10_guessesThe expected work, as a base-10 logarithm: half the keyspace.
analysis.crack_time_log10_secondsAt 1012 guesses/s, offline, fast hash. The same attack model as the rest of the site.
analysis.crack_timeThe same figure in words. unit follows the answer language: years, años
analysis.level0–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.ceilingfalse: the server generated the password, so the figure is exact and not a ceiling. The same flag the checker uses.
noticeThe 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.burstThe rate limit actually enforced: limit requests per window_seconds.
_meta.quotaThe reserved daily-quota slot. limit and remaining are null because nobody counts daily requests yet.
_meta.docsA 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.

HTTPerrorNotes
400invalid_lengthlength outside 4–64. field names it.
400invalid_countcount outside 1–20. field names it.
400empty_alphabetAll four character types turned off, so there is no alphabet to draw from. No field: it is the combination, not one parameter.
400unknown_parameterA parameter this endpoint does not accept. field gives the offending name.
429rate_limitedOver 60 requests in a minute. Carries Retry-After and RateLimit-* headers, and limit / window_seconds in the body.
501not_implementedOnly 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. 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.