Autentikacija

DEXPIRY koristi JWT bearer tokene. API ključ trenutačno ne postoji. Odaberite tok koji odgovara ulozi.

Tok Uloga Endpoint
E-mail + lozinka Trgovac, admin POST /v1/auth/login
Claim link Kupac POST /v1/customer/auth/claim
Magic link Kupac POST /v1/customer/auth/magic-link
Zahtjev za pristup Kupac (novi link na e-mail) POST /v1/customer/auth/request-access

Svaka zaštićena ruta:

Authorization: Bearer <jwt>

Nedostajući ili neispravan token vraća 401 s error: "unauthorized". Pogrešna uloga (npr. token kupca na ruti trgovca) vraća 403 s error: "forbidden".

Prijava trgovca i admina

curl -X POST https://api.dexpiry.com/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email": "user@example.com", "password": "vasaLozinka"}'

Odgovor 200 (oblik):

{
  "token": "eyJhbGciOiJIUzI1NiIs...",
  "user": {
    "id": "...",
    "name": "...",
    "email": "user@example.com",
    "role": "MERCHANT_USER",
    "merchantId": "...",
    "merchantName": "...",
    "merchantRole": "OWNER"
  }
}

role je jedan od ADMIN, MERCHANT_USER, CUSTOMER, SERVICE_PROVIDER. Payload trgovca uključuje merchantId i merchantRole (OWNER | ADMIN | USER). Admin payload uključuje adminRole.

Greške:

HTTP error Kada
400 validation_error (ili Zod detalji) Neispravno tijelo zahtjeva
401 invalid_credentials Nepoznat e-mail ili kriva lozinka
403 account_suspended Status korisnika je SUSPENDED
403 merchant_suspended Organizacija trgovca nije ACTIVE

Promjena lozinke (autentificirano):

curl -X PUT https://api.dexpiry.com/v1/auth/change-password \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"currentPassword": "stara", "newPassword": "novaLoz1"}'

Claim link kupca

Koristi ga landing stranica /u/[claimId] nakon što trgovac izda jamstvo i kupac otvori e-mail.

  1. Provjera (samo čitanje)GET /v1/customer/auth/validate-claim?claimId=<id>
  2. Potrošnja i JWTPOST /v1/customer/auth/claim
curl -X POST https://api.dexpiry.com/v1/customer/auth/claim \
  -H "Content-Type: application/json" \
  -d '{"claimId": "<claim-id>"}'

Opcionalni focusWarrantyId (UUID) ističe određeno jamstvo u vraćenom novčaniku.

Istekli linkovi vraćaju 401 expired. Neispravni vraćaju 401 invalid_link. Ponovno slanje:

curl -X POST https://api.dexpiry.com/v1/customer/auth/resend-link \
  -H "Content-Type: application/json" \
  -d '{"claimId": "<claim-id>"}'

Ponovno slanje je ograničeno (429 too_many_requests).

Magic link kupca

Koristi se kad kupac zatraži pristup novčaniku iz aplikacije (POST /v1/customer/auth/request-access s { "email": "..." }). E-mail sadrži jednokratni token.

Provjera bez potrošnje:

curl "https://api.dexpiry.com/v1/customer/auth/validate?token=<token>"

Potrošnja i JWT:

curl -X POST https://api.dexpiry.com/v1/customer/auth/magic-link \
  -H "Content-Type: application/json" \
  -d '{"token": "<token>"}'
HTTP error Kada
401 invalid_token Nepoznat ili neispravan
401 expired_token Istekao
401 token_used Već iskorišten

Korištenje tokena

curl https://api.dexpiry.com/v1/merchant/stats \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
curl https://api.dexpiry.com/v1/customer/warranties \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Javne rute (bez JWT-a)