API REST v1
Eguneratuta: 2026ko urriaren 18a
AccessTime-ren API REST-a gure aplikazio mugikorrak erabiltzen duen bera da: aplikazioak egiten duen guztia hemendik pasatzen da. Zure integrazio txikietarako ere erabil dezakezu, adibidez eguneko fitxaketak script batetik kontsultatzeko edo beste tresna batetik absentzia bat eskatzeko.
Oinarrizko URLa https://zuredomeinua/api/v1 da, eskaera eta erantzun
guztiak JSON dira, eta babestutako bideek Authorization: Bearer {token}
goiburua behar dute.
1. Lortu token bat
Autentifikazioak token pertsonalak erabiltzen ditu (Laravel Sanctum), cookierik eta saiorik gabe. Tokena langilearen email eta pasahitzarekin lortzen da, web panelean sartzeko erabiltzen dituen berberekin:
curl -X POST https://zuredomeinua/api/v1/login \
-H "Content-Type: application/json" \
-d '{ "email": "empleado@empresademo.com", "password": "********" }'
Erantzunak tokena eta erabiltzailearen oinarrizko datuak dakartza:
{
"token": "1|abcdef...",
"user": { "id": 1, "name": "...", "email": "...", "role": "empleado", "company_id": 2 }
}
Gorde tokena leku seguru batean eta ez partekatu: pertsona horren datuetarako sarbidea ematen du. Kredentzialak baliozkoak ez badira
422bat jasoko duzu, eta endpoint-a 10 saiakera minutuko mugatuta dago.
Saioa ixteko, POST /api/v1/logout (autentifikatua) egiteak uneko tokena
errebokatzen du.
Tokenak 90 egunen buruan iraungitzen dira: login-aren erantzunak data
dakar token_expires_at eremuan, eta hura igarotakoan APIak 401 erantzuten du eta
beste bat eskatu behar da. Login-ean device_name bidaltzen baduzu («Anaren
iPhonea»), tokena izen horrekin agertzen da Profila → Sarbidea duten gailuak
atalean, eta hortik baliogabe dezake pertsonak.
2. Endpoint erabilgarriak
| Metodoa | Bidea | Zer egiten du |
|---|---|---|
| POST | /login |
Token bat itzultzen du emailetik eta pasahitzetik abiatuta (bi urratseko egiaztapena aktibatuta, erronka bat) |
| POST | /login/two-factor |
Erronka eta egiaztapen-kodea tokenaren truke trukatzen ditu |
| POST | /logout |
Uneko tokena baliogabetzen du |
| GET | /config |
Zerbitzariaren ordua, ordu-eremua, enpresaren geokokapena eta pertsonak zer egin dezakeen |
| POST | /fichar |
Fitxaketa bat erregistratzen du (sarrera edo irteera) |
| GET | /fichajes/hoy |
Gaurko fitxaketak |
| GET | /fichajes/semana |
Aste honetako fitxaketak |
| GET | /resumen/mensual?month=YYYY-MM |
Lan egindako orduen hileko laburpena |
| GET | /ausencias |
Erabiltzailearen azken 50 absentziak |
| POST | /ausencias |
Absentzia bat eskatzen du |
| DELETE | /ausencias/{id} |
Norberaren absentzia bat baliogabetzen du, panelaren arauekin |
| GET | /ausencias/tipos |
Enpresaren absentzia mota aktiboak |
| GET | /ausencias/saldo?year=YYYY |
Oporren urteko saldoa |
| GET | /historial-cambios |
Nork aldatu dituen pertsonaren datuak, noiz eta zein rolekin |
| POST · DELETE | /devices |
Mugikorra push jakinarazpenetarako erregistratu edo kentzen du |
Endpoint guztiek autentifikatutako erabiltzailearen gainean jarduten dute:
pertsona bakoitzak bere fitxaketak, absentziak eta saldoa bakarrik ikusten
ditu. Mezuak (message) pertsonaren hizkuntzan iristen dira, eta 403
bakoitzak zer gertatzen den adierazten duen code bat dakar: solo_lectura,
empresa_bloqueada, cuenta_desactivada, email_no_verificado edo
sin_empresa.
3. APItik fitxatzea
Fitxaketa bakoitzak client_uuid bat darama: UUID bat, behin sortzen
duzuna, lehen saiakeraren aurretik, eta saiakera bakoitzean errepikatzen
duzuna. Horrela, sarea eteten bada eta berriro saiatzen bazara, fitxaketa ez
da inoiz bikoizten (hura gabe, 422). Bidali type ere (in edo out);
ematen ez baduzu, azken fitxaketaren arabera txandakatzen da, panelaren
botoiak bezala (nola dabilen fitxaketa).
curl -X POST https://tudominio/api/v1/fichar \
-H "Authorization: Bearer 1|abcdef..." \
-H "Content-Type: application/json" \
-d '{ "client_uuid": "3f2504e0-4f89-41d3-9a0c-0305e82c3301", "type": "in" }'
201 erantzuna fitxaketarekin (status, id, type, happened_at…).
client_uuid berarekin egindako saiakera batek 200 eta gorputz bera
itzultzen ditu.
- Ordua zerbitzariarena da. Konexiorik gabe harrapatutakoa
offline: true,captured_at(mugikorraren ordua sakatzean) etasent_at(mugikorraren ordua bidaltzean) eremuekin berriro bidaltzen da: zerbitzariak erlojuaren desfasea zuzentzen du. 72 ordu baino geroago iristen bada, berrikusteko zain dagoen gorabehera gisa geratzen da (202): ez da galtzen. Bere orduaren ondoren jasota dagoen lehenengoa, 5 minutu baino gutxiago geroago, mota bereko fitxaketa bat bada (pertsonak kioskoan edo panelean errepikatu zuen ilaran zain zegoen bitartean), fitxaketa bera da errepikatuta:200"duplicate": trueeta jasota dagoenarekin. Fitxaketa hori berrikusteko zain badago,202da,"duplicate": trueeta gorabehera horrekin. Eta 5 minutu baino gutxiagora jasota dagoena eskuz erregistratutako mota bereko fitxaketa bat bada, sakatu ondoren erregistratua (ilara iritsi aurretik onartutako ahaztutako bat edo onartutako zuzenketa bat): minutu berean,200erantzunak hori dakar; beste minutu batean, bidalitakoa da balio duena: eskuz erregistratutakoa baliogabetu egiten da (ikusgai jarraitzen du) eta200"duplicate": trueerantzunak bidalitakoclient_uuid-arekin erregistratutako fitxaketa dakar. - Kokapena (
latitude,longitude,accuracy): enpresak aktibatuta badu bakarrik (geolocation_mode/config-en); bestela, baztertu egiten da.obligatoriabada, kokapenik gabe une horretan egindako fitxaketak422jasotzen du. - Mugikorreko egiaztapena (
verification, aukerakoa): telefonoak berak egindakoaren emaitza bakarrik, inoiz ez datu biometrikorik:{"method": "biometric_local" | "pin" | "none", "verified": true | false, "os_auth_type": "face" | "fingerprint" | "credential" | null}. Zure aplikazioak adierazten duena da: zerbitzariak ezin du egiaztatu. Zuriuneak kentzen dira, eta testu huts bateknullbalio du. Formatu hori betetzen ez badu, baztertu egiten da: fitxaketa erregistratu egiten da hala ere, eta erantzunak"verification_discarded": truedakar (inoiz ez422); beste gakoak ez dira kontuan hartzen. Fitxaketan geratzen da, eta pertsonak «Nire erregistroa» atalean ikusten du. known_ms(aukerakoa): sakatzean zure aplikazioak ezagutzen zuen azken fitxaketaren ordua, milisegundotan, zerbitzariarena (/config-ekoa edo azken erantzunekoa), ez mugikorrarena. Ondoren mota bereko beste bat badago eta zerbitzariak sakatzean bazuen (adibidez, kioskoan) edo zure aplikazioak lehenago bidali bazuen konexiorik gabeko ilaratik, dagokiona erregistratzen da, panelaren botoiak egiten duen bezala, salbu eta fitxaketa hori duela 5 minutu baino gutxiagokoa bada eta ilara horretatik ez badator: fitxaketa bera errepikatua da, eta erantzuna200da,"duplicate": trueeta dagoeneko dagoenarekin.known_msgabe gauza bera gertatzen da mota bereko fitxaketa hori, duela 5 minutu baino gutxiagokoa, beste kanal batetik egin bazen (kioskoa edo panela); baina denbora gehiagoko botoi desfasatua ez da zuzentzen, beraz, bidali beti.- Erroreak:
422behin betikoa da (erakutsi arrazoia);401,429,5xxedo sarerik gabe, gorde fitxaketa eta saiatu berriroclient_uuidberarekin.
Fitxaketak UTCn gordetzen dira eta "gaur" eta "aste" kontsultek zure enpresaren ordu-eremua erabiltzen dute. Hileko laburpena gauero finkatutako lanaldietatik kalkulatzen da, txostenak elikatzen dituzten berberetatik.
Enpresaren doako proba harpidetzarik gabe amaitu bada, kontua irakurtzeko soilik dago eta
POST /fichar-ek403erantzuten du (solo_lectura). Kontsulta-endpointek funtzionatzen jarraitzen dute (planak eta fakturazioa).
4. Absentziak APItik
Mota erabilgarriak eta saldoa kontsulta ditzakezu, eta absentzia bat eskatu:
curl -X POST https://zuredomeinua/api/v1/ausencias \
-H "Authorization: Bearer 1|abcdef..." \
-H "Content-Type: application/json" \
-d '{ "absence_type_id": 1, "starts_on": "2026-08-03", "ends_on": "2026-08-07", "reason": "Oporrak" }'
APIak panelaren balidazio berberak aplikatzen ditu: norberaren beste
absentziekiko gainjartzeak, deskontatzen duten motetan saldo erabilgarria
eta tarteak lanegunak izatea (asteburuak eta jaiegunak deskontatzen ditu).
Motak onespena behar badu, eskaera onespen-fluxuan
sartzen da pending egoerarekin; behar ez badu, zuzenean onartuta geratzen
da. Xehetasun gehiago absentziak eta oporrak atalean.
Justifikagiria eskatzen duten absentzia motak ezin dira APItik eskatu: eskaerak errore bat itzultzen du eta web paneletik egin behar da, han bai erants baitaiteke dokumentua.
Eta orain zer?
- Kontua oraindik muntatu gabe baduzu, hasi lehen urratsetatik.
- Tablet partekatu batean fitxatzeko ez duzu APIrik behar: erabili QR kioskoa.
Ez duzu bilatzen duzuna aurkitzen?
Idatzi iezaguzu kontaktu-orritik eta zuzenean lagunduko dizugu.
Kontaktura joan