# password.es-en APIak jada erantzuten du: nola erabili

> Gakorik eta izen-ematerik gabeko dei bat, pasahitzak eta webgunean ikusten dituzun zenbaki berak itzultzen dituena: bitak, hausteko denbora eta maila. Barne, oraindik egiten ez duena eta zergatik ez den beti ideia ona deitzea.

2026-08-31 · David Carrero · password.es
Original: https://password.es/eu/blog/pasahitzak-sortzeko-api/

---

Blog honek hilabeteak daramatza gauza bera errepikatzen: [zure pasahitzak ez
luke nabigatzailetik atera behar](/eu/blog/zergatik-ez-dugu-zure-pasahitza-inora-bidaltzen/).
[Sortzaileak](/eu/) `crypto.getRandomValues()` erabiltzen du ausa zure makinan
bertan, eta [egiaztatzaileak](/eu/egiaztatzailea/) idazten duzuna aztertzen du
inora bidali gabe.

Eta gaur zerbitzari batean pasahitzak sortzen dituen API bat argitaratzen dugu.

**Kontraesana nabaria da eta ez dugu disimulatuko**: APIaren erantzun bakoitzak
hori bera dioen ohar bat darama. Baina badira nabigatzailerik ez dagoen lekuak
—ehun kontu sortzen dituen script bat, aldi baterako kredentzial bat egiten duen
zerbitzari bat, norbaitek pasahitz bat eskatzen dion eta asmatzen duen laguntzaile
bat— eta han alternatiba ez da «nabigatzailea»: gaizki aukeratutako `random()`
bat da, edo eskuz idatzitako kate bat. Horretarako dago hau.

## Dei osoa

Gakorik gabe, izen-ematerik gabe, goibururik gabe. Hau da guztia:

`curl -X POST https://api.password.es/v1/generate`

16 karaktereko pasahitz bat eta haren analisia itzultzen ditu. Paragrafo hau
idazten ari ginela exekutatua: `x*7$9,BUy9PPvOI?`, 89 karaktereko alfabeto
batetik hartua, **103,6 bit** entropia eta 2,5 × 10¹¹ urteko hausteko denbora.
4. maila 4tik.

Zenbaki horietako bat ere ez da berria. Azalean neurgailua marrazten duen motor
beretik ateratzen dira: [bit](/eu/blog/zer-diren-entropia-bitak/) formula bera,
eraso eredu bera —10¹² saiakera segundoko, konexiorik gabe, hash azkarra— eta
egiaztatzailearen maila eskala bera. Webguneak eta APIak zenbaki desberdinak
emango balituzte pasahitz beraren gainean, bietako bat gezurretan ariko
litzateke.

## Zer itzultzen duen, eremuz eremu

Erantzunak `passwords` dakar —beti array bat, bakarra eskatuta ere— eta
`analysis` bloke bat `length`, `pool`, `bits`, `log10_guesses`,
`crack_time_log10_seconds`, `crack_time`, `level`, `level_scale` eta `ceiling`
eremuekin.

Bik paragrafo bat merezi dute. **`level_scale`-k maila nondik atera den esaten
du** (gaur egun beti `"time"`), etorkizunean webgunearen eta APIaren artean
aldea egonez gero eremuan ikus dadin, zenbakiak konparatuz ondorioztatu beharrean.
Eta **`ceiling`-ek esaten du zifra zehatza den ala goi-muga den**: `generate`-n
beti da `false`, pasahitza zerbitzariak egin duelako eta zein alfabetorekin
dakielako; webgunearen egiaztatzailean ezin da beti hala izan, han pasahitza zuk
ekartzen duzulako.

Ondoren `notice` dator, oharra, eta `_meta` bloke bat plana, aplikatutako
hizkuntza, mugak eta dokumentaziorako esteka batekin.

## Aukerak

Denak aukerakoak, eta izenak ingelesez, API bat integratzen duenak eremuen
izenak bere horretan idazten dituelako: `length` (4–64, lehenetsia 16), `count`
(1–20), `lower`, `upper`, `digits`, `symbols`, `exclude_ambiguous`,
`no_repeats` eta `lang`.

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

Dokumentazioak kontatzen dituen bi xehetasun, integratu aurretik jakitea komeni
direnak. **`exclude_ambiguous`-ek sei karaktere kentzen ditu, ez zazpi**:
`0 O 1 I l | o` baztertzen ditu, baina barra bertikala ez zegoen ikur multzoan
hasieratik, beraz alfabetoa 89tik 83ra jaisten da eta ez 82ra. Horregatik dio
erantzunak `pool` 83. Eta **`no_repeats` ez da berme absolutua**: hamar aldiz
saiatzen da berriro, webguneko sortzaileak bezalaxe, eta 64 karakterekin
ondoz ondoko errepikapen bat sartzen da aldien % 0,1 inguruan. Hori esatea
erabilgarriagoa da kontrakoa agintzea baino.

## Hizkuntza

Lehenespenez ingelesez erantzuten du, ezer esan gabe integratzen duenak espero
duena. `?lang=` URLan, `"lang"` gorputzean edo `Accept-Language` goiburuarekin
alda daiteke, eta kontraesanik badago lehenak irabazten du. Existitzen ez den
hizkuntza bat ez da errorea: ingelesera erortzen da.

Hemen igarri ezin den asimetria bat dago, eta horregatik aitortzen du APIak:
**mezuak ingelesez eta gaztelaniaz daude; estekak, webguneko hemezortzi
hizkuntzetan**. Alemana eskatzeak estekak alemanez ematen dizkizu eta mezuak
oraindik ingelesez. Ez dago asmatu beharrik: `_meta.lang`-ek
`{ "messages", "links" }` dakar, erdi bakoitzari zer aplikatu zaion esanez.

## MCP zerbitzaria

MCP da laguntzaile batek —Claude, ChatGPT— kanpoko tresnak erabiltzeko
protokoloa. `https://api.password.es/mcp` izen-ematerik eta gakorik gabeko MCP
zerbitzari bat da, eta tresna bakarra argitaratzen du: `generate_password`,
goiko parametro berekin.

Hau da guri gehien axola zaigun zatia, eta ez arrazoi teknikoengatik: **pasahitz
bat nondik atera ez duen laguntzaile batek asmatu egiten du**, eta handik
ateratzen dena ez da ausazkoa, ereduak pasahitz itxura duela uste duena baizik.
Zerbitzaria konektatuta, inprobisatzeari uzten dio eta
`crypto.getRandomValues()`-ekin egindako bat itzultzen du, bere analisiarekin
eta tresnaren deskribapenean eta emaitza bakoitzean sartutako oharrarekin. Ohar
hori da, hain zuzen, laguntzaileak pasahitza eskatu dionari irakurtzen amaitzen
duena, eta horregatik dago hor.

Beste MCP zerbitzari batzuetatik bazatoz, datu bakarra: **honek ez du
egoerarik.** POSTa JSONez erantzuten da eta ez du streamik irekitzen,
`Mcp-Session-Id` ez da ez igortzen ez espero, jakinarazpen bati 202 erantzuten
zaio gorputzik gabe, eta GETak 405 itzultzen du. 2025-06-18ko espezifikazioak
esplizituki onartzen du hori, baina saioak eta SSE espero dituenak itsu
araztuko du inork esaten ez badio.

## Zer ez duen egiten

**`/v1/check`-ek 501 itzultzen du.** Ez da despistea, ez erdizka utzitako
endpoint bat: nahita dago horrela, eta erantzunak berak azaltzen du zergatik.
Egiaztatzailearen zenbaki berak itzultzeak webgunean dabilen patroi motor bera
eskatzen du, eta horrek 11 ms eta 3,6 s arteko CPU kostatzen du eskaera
bakoitzeko, bidalitakoaren arabera. Izen-ematerik eta gakorik gabeko zerbitzu
batean, tarte hori produktu erabaki bat da —non jarri luzeraren muga— eta
oraindik ez da hartu. Bitartean, 501ak `checker_url` bat dakar, eskatutako
hizkuntzan webguneko egiaztatzailera seinalatzen duena, hori bera egiten baitu
ezer bidali gabe.

Konturik ere ez dago, ez gakorik, ez planik. Eta existitzen ez direnez, API
osoan ez dago izen-emate baterako esteka bakar bat ere: ezta muga gaindituaren
errorean ere, denek jartzen duten lekuan.

## Mugak

Bat, eta benetan aplikatzen dena: **minutuko 60 eskaera IP bakoitzeko**. Ez da
orrialde hau sinetsi beharrik: zenbakia erantzun bakoitzaren barruan doa,
`_meta.limits.burst`-en. Pasatuz gero, 429 bat ateratzen da `Retry-After` eta
`RateLimit-*` goiburuekin.

`_meta`-n `quota` bloke bat ere ikusiko duzu, balioak `null` dituela. Konturik
dagoenerako gordetako lekua da, eta hutsik doa nahita: **iragarritako eta
betearazten ez den muga bat okerragoa da bat ere ez iragartzea baino**,
integratzen duenak errespetatu egiten duelako eta inork zenbatzen ez duen
zenbaki baten kontra programatzen duelako.

## Eta hala ere, pentsa ezazu birritan

Pasahitzak sortzen dituen API bat, funtsean, antipatroi bat da: pasahitza sarean
zehar bidaiatzen du eta zurea ez den makina batetik pasatzen da. Guk ezer ez
gordetzeak ez du arazoaren forma aldatzen, gure zatia baizik —eta badakizu zer
balio duen [egiaztatu ezin duzun promesa batek](/eu/blog/zergatik-ez-dugu-zure-pasahitza-inora-bidaltzen/).

Horregatik oharra ez da orrialde honetan bakarrik bizi: erantzun bakoitzean
bidaiatzen du, eskatzen duzun hizkuntzan. Eta horregatik dago paragrafo hau
hemen eta ez dokumentazioaren amaieran ezkutatuta. **Zuk erabiliko duzun
pasahitz baterako, webgune honetako [sortzailea](/eu/) osorik zure
nabigatzailean exekutatzen da eta ez du ezer bidaltzen.** APIa besterako da:
inor pantaila baten aurrean egon gabe gertatzen denerako.

Xehetasunak bi orrialdetan daude. [Zer den APIa](/eu/api/) kontatzen du norentzat
den, zer erantzuten duen gaur eta zer ez. [Erreferentziak](/eu/api/docs/) bederatzi
parametroak ditu, eremu guztiak banan-banan azalduta, errore kodeak eta mugak;
editorearen ondoan irekitzen dena da. Eta makina batek irakurtzea nahi baduzu,
`openapi.json` dago.

---

*Iturriak: APIa bera, 2026ko abuztuaren 31n produkzioaren aurka egiaztatua —
`POST /v1/generate`, `POST /v1/check` (501), `POST /mcp` eta `GET /openapi.json`
· analisiaren zenbakiak password.es-en sortzailearen eta egiaztatzailearen motor
beretik ateratzen dira · eraso eredua 10¹² saiakera segundoko da, konexiorik
gabe eta hash azkarrarekin, webguneko gainerakoaren berbera · MCP zerbitzariak
2025-06-18ko espezifikazioa inplementatzen du, egoerarik gabeko Streamable HTTP
garraioarekin.*
