API Documentation

Harta Preturilor — REST API v1 & v2

Base URL: https://hartapreturilor.ro

All responses are JSON with format: { "data": ..., "meta"?: ... }

Health

GET /api/health Public

Check API and database connectivity.

{ "status": "ok", "timestamp": "2026-04-11T...", "dbConnected": true }

Content — Items

GET /api/v1/items Public

List property listings with filters and pagination.

ParamTypeDescription
location_idnumberFilter by city ID
category_idnumberFilter by category (1=apartamente, 2=case, etc.)
min_price / max_pricenumberPrice range filter (EUR)
sortstringSort field: price, created_at
orderstringasc or desc
page / per_pagenumberPagination (max 100/page)

Cache: 15 min

Content — Statistics

GET /api/v1/stats Public

Aggregated price statistics by location, category, and period.

ParamTypeDescription
location_idnumberFilter by location
category_idnumberFilter by category
periodstringe.g. 2026-04, 2026-W14, 2026-Q1
metric_typestringprice_sqm, price_total, count_listings

Cache: 30 min

GET /api/v1/stats/compare Public

Compare statistics across 2+ locations.

ParamTypeDescription
location_idsstringComma-separated IDs (min 2)
category_idnumberCategory filter
metric_typestringMetric to compare

Content — Categories & Locations

GET /api/v1/categories Public

List all property categories.

Cache: 24h

GET /api/v1/locations Public

List locations. Filter by ?type=city (country|region|city|zone).

Cache: 1h

Content — Export

GET /api/v1/export Public

Export listings as CSV. Max 500 items. Rate limited: 3 req/min.

V2 — Cities & Rental

GET /api/v2/cities Public

City data with population and stats. Optional ?slug=bucuresti.

GET /api/v2/rental Public

Rental statistics. Optional ?city=bucuresti&rooms=2.

GET /api/v2/financial Public

Official financial data (IRCC, EUR/RON, mortgage rates).

Price Alerts

POST /api/alerts Public

Create a price alert. Requires email verification. Rate limited: 5 req/min.

{ "email": "[email protected]", "city": "bucuresti", "maxPrice": 100000, "rooms": 2, "type": "sale" }
GET /api/alerts?email=... Public

List alerts for an email address.

GET /api/alerts/verify?token=... Public

Verify and activate an alert via email token.

DELETE /api/alerts/:id Public

Deactivate (soft-delete) an alert.

Authentication

POST /api/v1/auth/register Public

Create account. Rate limited: 5 req/hour.

{ "email": "[email protected]", "password": "min8chars" }
POST /api/v1/auth/login Public

Login. Returns session cookie. Rate limited: 10 req/min.

POST /api/v1/auth/logout Public

Logout. Clears session cookie.

Premium API (API Key required)

Authenticate with Authorization: Bearer hp_xxx. Generate a key at /cont/api-keys.

GET /api/v2/premium/estimate API Key

Premium price estimate with extra fields (distribution, sample size).

ParamTypeDescription
citystringCity slug (e.g. bucuresti)
roomsnumberNumber of rooms (1-10)
areanumberArea in sqm (15-1000)
curl -H "Authorization: Bearer hp_YOUR_KEY" \
  "https://hartapreturilor.ro/api/v2/premium/estimate?city=bucuresti&rooms=2&area=55"

Rate limits per tier

TierCalls / dayPrice / month
Free1000 EUR
Starter1.00049 EUR
Pro10.000149 EUR
EnterpriseUnlimitedContact sales

429 Too Many Requests when exceeded. Counter resets at midnight UTC.

Error codes

StatusCodeMeaning
400BAD_REQUESTMissing or invalid params
401MISSING_API_KEY / INVALID_KEY / REVOKED_KEY / EXPIRED_KEYAuth problem
404NOT_FOUNDResource (city) not found
429RATE_LIMIT_EXCEEDEDDaily quota used up
503DB_UNAVAILABLEService down

API Keys (Session required)

GET /api/v2/api-keys Session

List the authenticated user's API keys (prefix + usage metadata only).

POST /api/v2/api-keys/create Session

Generate a new API key. Returns raw key ONCE.

{ "name": "Productie CRM", "tier": "pro" }
POST /api/v2/api-keys/revoke Session

Revoke a key by id.

{ "id": 42 }

Agents (Session required)

POST /api/v2/agents/signup Public

Register as a real-estate agent (free tier). Auto-links to session user if logged in.

{ "name": "...", "email": "...", "cities": ["bucuresti"], "specialization": ["residential-sale"] }
GET /api/v2/agents/me Session

Load agent profile for the logged-in user.

POST /api/v2/agents/subscribe Session

Start a Stripe Checkout Session (placeholder until keys configured).

{ "tier": "starter" | "pro", "agent_id": 42 }
GET /api/v2/agents/leads Session

List leads assigned to the agent. Add ?format=csv for export.

Leads (Public — for forms)

POST /api/v2/leads Public

Capture a lead from the evaluator or contact form. Auto-assigns to an eligible agent.

{ "email": "...", "phone": "...", "city": "bucuresti", "estimate_value": 95000, "source_page": "/evalueaza" }

Stripe Webhook

POST /api/webhooks/stripe Signature

Receives subscription lifecycle events. Node runtime required for raw body verification.

Admin

GET /api/v1/admin/dashboard API Key

Admin dashboard data (counts, logs, health). Header: X-API-Key.

POST /api/v1/admin/ingest API Key

Ingest data batch. Rate limited: 10 req/min. Header: X-API-Key.

User Alerts (Authenticated)

GET /api/v1/me/alerts Session

List authenticated user's alerts.

POST /api/v1/me/alerts Session

Create alert for authenticated user.


Harta Preturilor API v1.0 — Generated April 2026