Documentație API completă pentru integratori, dezvoltatori și parteneri tehnici.
Stack: REST + GraphQL + Webhooks. Auth Bearer token. JSON peste tot. OpenAPI 3.1 spec disponibil. Postman collection oficială.
Începe în 5 minute
# 1. Obține API key (din panou Bravin)
# 2. Test ping
curl https://api.index9.site/v1/ping \
-H "Authorization: Bearer $BRAVIN_KEY"
# → {"ok": true, "user": "contact@index9.site", "plan": "pro"}
# 3. Listează propriile anunțuri 999.md
curl https://api.index9.site/v1/listings?platform=999md \
-H "Authorization: Bearer $BRAVIN_KEY"
Categorii docs
1. REST API
Endpoints CRUD pentru toate resursele Bravin:
/listings— anunțurile tale 999.md (read/create/update/delete)/republish— programare republicare automată inteligentă/audit— audit propriu (CTR, view/contact ratio, rentabilitate)/competitor— urmărire dealeri concurenți/index999— date macro piață MD/price-ml— predicție preț Logan/apartament/telefon/photos— calitate foto inteligență artificială (blur, dark, watermark detect)
2. GraphQL public 999.md (proxied)
90 queries reverse-engineered din 999.md/graphql. Citire-only, fără auth.
Vezi pagina dedicată: Cum am descoperit GraphQL 999.md.
3. Webhooks
Notificări push în timp real către endpoint-ul tău. HMAC-signed.
4. SDK
Node.js, Python, PHP. Toate open-source.
5. OpenAPI / Swagger
Spec complet la https://api.index9.site/openapi.json. Compatibil Swagger UI, Insomnia, Postman.
Authentication
Toate request-urile cer antet:
Authorization: Bearer bv_live_xxxxxxxxxxxxxxxx
Sau parametru query (doar pentru debug, NU producție):
?api_key=bv_live_xxx
Generare key
- conectare pe
https://app.index9.site - Setări → API Keys → "Generate new key"
- Alege scope:
listings.read,listings.write,audit.read,competitor.read,webhooks.write,*(toate) - Copiază key-ul — arătat O SINGURĂ DATĂ
- Stochează în secret manager (1Password, Vault, AWS Secrets Manager)
Rotation
Bună practică: rotește la 90 zile. UI permite "Generate new" + "Revoke old" în 2 apăsări. SDK detectează automat key vechi expirat și throw ExpiredKeyError.
Rate limiting
| Plan | REST req/min | GraphQL req/min | Webhooks/h |
|---|---|---|---|
| Free | 100 | 30 | 100 |
| Privat | 500 | 100 | 1.000 |
| Pro | 1.000 | 300 | 10.000 |
| Dealer | 5.000 | 1.000 | 100.000 |
Headers pe fiecare răspuns:
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 847
X-RateLimit-Reset: 1714234567
Depășire = HTTP 429 Too Many Requests cu antet Retry-After: 30 (secunde).
Webhooks — exemplu
// Receive endpoint Express.js
app.post('/webhook/index9', (req, res) => {
const sig = req.headers['x-index9-signature']
const expected = crypto
.createHmac('sha256', process.env.BRAVIN_WEBHOOK_SECRET)
.update(JSON.stringify(req.body))
.digest('hex')
if (sig !== expected) return res.status(401).end()
const { event, data } = req.body
if (event === 'listing.republished') {
console.log(`Anunț ${data.listing_id} re-publicat la ${data.republished_at}`)
}
res.status(200).end()
})
Erori standard
{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded for plan free",
"request_id": "req_01HX2K...",
"retry_after": 30
}
}
| HTTP | Code | Sens |
|---|---|---|
| 400 | validation_error | Body/query invalid |
| 401 | auth_invalid | Key lipsă/greșit |
| 403 | auth_forbidden | Key valid dar scope insuficient |
| 404 | not_found | Resursa nu există |
| 409 | conflict | State conflict (ex. listing deja republicat) |
| 429 | rate_limited | Depășire rate limit |
| 500 | internal_error | Bug — raportează cu request_id |
| 502 | upstream_999 | Probleme la 999.md (escape pentru noi) |
Pagination
Cursor-based pe toate /list endpoints:
GET /v1/listings?limit=50&cursor=eyJpZCI6MTIzfQ==
Răspuns:
{
"data": [...],
"next_cursor": "eyJpZCI6NDU2fQ==",
"has_more": true
}
Idempotency
Pentru POST (create) trimite antet:
Idempotency-Key: 01HX2K3M4N5P6Q...
Bravin reține răspunsul 24h și returnează același result la retry.
Versioning
API versionat în URL (/v1/, /v2/). Promitem 12 luni warning înainte de deprecation. Schimbări breaking → versiune nouă. Schimbări non-breaking (câmpuri noi opționale) → tot v1.
Header opțional pentru pin la dată specifică:
Bravin-Version: 2026-04-27
mod de test
Endpoint identic dar cu key bv_test_xxx:
https://api.index9.site/v1(production)https://api.index9.site/v1cu key test = mod de test automat
mod de test: date fictive, fără call la 999.md real. Util pentru CI/CD.
Postman collection
Import directly:
https://api.index9.site/postman/collection.json
Sau apăsare "Run in Postman" pe pagina interactivă a fiecărui endpoint.
Status & uptime
Status real-time: https://status.index9.site (powered by Better Uptime). garanție disponibilitate Dealer: 99.9%. Istoric incidents publice. RSS feed + email subscribe.
Suport developer
- Email tehnic:
dev@index9.site(răspuns < 4h în program) - GitHub Discussions:
index9/sdk-node(public Q&A) - Telegram dev channel:
@automator999md(live chat) - Status page:
status.index9.site
Următorul pas
- Citește cum am descoperit GraphQL 999.md →
- Vezi integrări existente (Maib, Paynet, Telegram, CRM-ul nostru) →
- Politica de securitate (cum protejăm cheile tale) →
- Changelog — ce e nou →
- FAQ general →
Pentru parteneriat tehnic strategic (white-label, custom rate, dedicated support): scrie la contact@index9.site.
index9 | Chișinău, Republica Moldova | contact@index9.site | +373 22 000 999