Developer documentation
Documentație Router by MP
API OpenAI compatible cu Claude, GPT, Gemini 3.1 și 100+ modele. SchimbibaseURL, păstrezi codul. Facturare în MDL, deductibilă, conformă GDPR + Legea RM 195/2024.
https://api.megapromoting.com/v1Factură MDL via e-FacturaPas 1
Quickstart — 5 minute de la zero la primul răspuns
Trei pași: cont nou, cheie API, primul apel. Fără PR de aprobat, fără ceremonie.
Creează cont + cheie API
Te înregistrezi la /signup (email companie + parolă sau Google OAuth). În cabinet la /keys generezi o cheie API — tokenul complet se afișează doar o dată la creare.
Recomandat: o cheie pentru fiecare proiect, cu max_budget conservator (ex: $20/lună).
Setează baseURL în SDK
Router by MP răspunde la endpoint-ul https://api.megapromoting.com/v1. Codul tău existent merge cu o singură modificare:
Node.js
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.ROUTER_API_KEY,
baseURL: "https://api.megapromoting.com/v1",
});Python
from openai import OpenAI
import os
client = OpenAI(
api_key=os.environ["ROUTER_API_KEY"],
base_url="https://api.megapromoting.com/v1",
)cURL
export ROUTER_API_KEY="rk_..."
export ROUTER_BASE_URL="https://api.megapromoting.com/v1"Primul apel chat completion
Folosește un model din /models. Exemplu cu Claude Sonnet 4.6:
Node.js
const response = await client.chat.completions.create({
model: "claude-sonnet-4-6",
messages: [
{ role: "user", content: "Salut! Răspunde scurt în română." }
],
max_completion_tokens: 500,
});
console.log(response.choices[0]?.message?.content);Python
response = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[
{"role": "user", "content": "Salut! Răspunde scurt în română."}
],
max_completion_tokens=500,
)
print(response.choices[0].message.content)cURL
curl https://api.megapromoting.com/v1/chat/completions \
-H "Authorization: Bearer $ROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"messages": [
{ "role": "user", "content": "Salut! Răspunde scurt în română." }
],
"max_completion_tokens": 500
}'Arhitectură
Cum funcționează
Router by MP e un AI gateway: un proxy OpenAI-compatible care normalizează cererile către providerii upstream (Anthropic, OpenAI, Google, Mistral, etc.), tracking-uiește costul cu markup, și emite factură lunară în MDL.
Tot traficul AI trece prin gateway-ul nostru pe servere OVH în Europa. Logăm doar metadata (model, tokens, latency, request_id). Conținutul mesajelor nu e persistat decât dacă activezi explicit prompt logging.
Catalog
Modele disponibile
100+ modele de la providerii majori, accesibile cu același SDK. Catalogul live la /models.
Securitate
Autentificare + chei API
Cum creezi o cheie
- Login în cabinet la /keys
- Click Cheie nouă, alegi nume + buget lunar
- Selectezi whitelist de modele (opțional, default = toate)
- Copiezi tokenul — se afișează O SINGURĂ DATĂ
Header de autentificare
Authorization: Bearer rk_live_...Tokenul începe cu rk_live_ (productie) sau rk_test_ (sandbox).
Best practices
- O cheie per proiect (dev, staging, prod separate).
- Setează
max_budgetconservator — limita se aplică la nivel de cheie. - Rotește cheile la 90 zile sau imediat după orice expunere (chat, commit, screenshot).
- Nu pune cheia în frontend / mobile — folosește un proxy server-side.
- Whitelist modele scumpe (Claude Opus, GPT-4o, Veo 3) pentru a evita cost runaway.
Integrări
Compatibilitate SDK
Router by MP e OpenAI compatible la nivel de schema. Orice client care vorbește OpenAI API funcționează cu o modificare de baseURL.
OpenAI Node
JavaScript / TypeScript
schimbi doar baseURL — restul codului identic.
OpenAI Python
Python 3.9+
client = OpenAI(base_url=...) și gata.
OpenAI .NET
C# / .NET 8+
OpenAIClientOptions.Endpoint = api.megapromoting.com/v1
OpenAI Go
Go 1.21+
config.BaseURL = api.megapromoting.com/v1
OpenAI Java
Java 17+
OpenAiService cu custom OkHttp baseUrl.
OpenAI PHP
PHP 8.1+
OpenAI::client(...)->baseUri(api.megapromoting.com/v1)
LangChain JS
JavaScript
ChatOpenAI({ configuration: { baseURL } })
LangChain Python
Python
ChatOpenAI(base_url=...)
LlamaIndex
Python
OpenAI(api_base=...) sau OpenAILike pentru modele non-OpenAI.
Vercel AI SDK
JavaScript
createOpenAI({ baseURL }) — funcționează cu streamText / generateText.
Cloudflare Workers AI
JavaScript
fetch direct sau OpenAI client în Workers runtime.
n8n
low-code
credential OpenAI custom + Base URL override (legacy, dar funcțional).
Reference
Endpoint principal — /v1/chat/completions
99% din requesturi merg aici. Schema identică cu OpenAI Chat Completions API.
Request schema
POST https://api.megapromoting.com/v1/chat/completions
Authorization: Bearer <ROUTER_API_KEY>
Content-Type: application/json
{
"model": "claude-sonnet-4-6", // obligatoriu — vezi /models
"messages": [ // obligatoriu
{ "role": "system", "content": "..." },
{ "role": "user", "content": "..." }
],
"max_completion_tokens": 1000, // opțional, default model
"temperature": 0.7, // opțional, 0-2
"top_p": 1, // opțional
"stream": false, // true = SSE streaming
"tools": [...], // function calling (OpenAI format)
"tool_choice": "auto",
"response_format": { "type": "json_object" }
}Response schema
{
"id": "chatcmpl-...",
"object": "chat.completion",
"created": 1747600000,
"model": "claude-sonnet-4-6",
"choices": [{
"index": 0,
"message": { "role": "assistant", "content": "..." },
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 42,
"completion_tokens": 128,
"total_tokens": 170,
"cost_usd": 0.00234 // cost client-facing (post-markup)
}
}Streaming SSE
const stream = await client.chat.completions.create({
model: "claude-sonnet-4-6",
messages: [{ role: "user", content: "Scrie un haiku." }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}Limite
Rate limits + Budget controls
Rate limits
- Free: 10 req/min, 100 req/zi
- Starter (€5): 60 req/min, 5K req/zi
- Pro (€20): 300 req/min, 50K req/zi
- Business (€80): 1500 req/min, fără cap zilnic
- Enterprise: negociat
Header-uri returnate: X-RateLimit-Limit, X-RateLimit-Remaining, Retry-After.
Plafon per cheie (max_budget)
Fiecare cheie are un plafon USD lunar. Când îl atingi, requesturile primesc 402.
- Setezi la creare sau editezi din /keys
- Resetare automată în prima zi din lună
- Alertă email la 80% și 100%
- Limita e client-facing USD (cu markup inclus)
Evenimente
Webhooks
Configurabile la /settings/webhooks. Notificări HMAC-SHA256 signed pentru evenimente critice.
| Event type | Când |
|---|---|
| wallet.low_balance | Wallet sub $5 sau sub 10% din ultimul top-up |
| wallet.depleted | Wallet ajuns la $0, requesturi blocate |
| key.budget_exceeded | Cheie a depășit max_budget lunar |
| key.budget_warning | Cheie la 80% din max_budget |
| invoice.generated | Factură MDL nouă emisă (lunar) |
| invoice.paid | Factură achitată prin Stripe / transfer |
| model.deprecated | Model upstream va fi retras în 30 zile |
Debugging
Erori frecvente — top 10
| HTTP | Înseamnă | Soluție |
|---|---|---|
| 400 | Request invalid (JSON malformat, model lipsă, parametru greșit). | Verifică schema: model, messages, max_completion_tokens. |
| 401 | Cheie absentă, invalidă sau revocată. | Confirmă header Authorization: Bearer <key> și că nu e expirată. |
| 402 | Wallet insuficient sau buget cheie depășit. | Alimentează wallet la /billing sau ridică max_budget pe cheie. |
| 403 | Modelul nu e whitelisted pe cheia respectivă. | Adaugă modelul în whitelist la /keys → editează cheia. |
| 404 | Model inexistent în catalog sau endpoint greșit. | Verifică numele exact la /models live (case sensitive). |
| 408 | Timeout la provider upstream (rar). | Retry cu exponential backoff, eventual model fallback. |
| 429 | Rate limit local sau quota upstream. | Respectă headerele Retry-After, scade concurența, sau ridică planul. |
| 500 | Eroare internă gateway. | Retry 1-2 cu backoff. Dacă persistă, semnalează la suport cu request_id. |
| 502 / 503 | Provider upstream indisponibil temporar. | Configurează fallback model (claude-sonnet ↔ gpt-5.4). |
| 504 | Stream timeout (modele lente sau prompt foarte lung). | Trece pe streaming SSE sau scurtează contextul. |
Fiecare răspuns include header x-router-request-id. Pentru suport, trimite request_id-ul + timestamp.
Billing
Facturare MDL via e-Factura
Cum funcționează factura
- Factură fiscală emisă lunar prin mfinante.gov.md (e-Factura).
- Sumă în MDL, cu TVA conform legii — deductibilă pentru SRL-uri moldovenești.
- Plată Stripe (card) sau transfer bancar IBAN MD.
- Top-up wallet de la $5 minim, fără topup fee.
- Operator: MEGA PROMOTING S.R.L., IDNO 1019600021765, s. Dănceni, r-l Ialoveni, MD-6814.
Detalii complete la /legal/efactura.
Help
Suport
Program
Lun-Vin · 9:00-18:00
EET (Chișinău). Incidente prod 24/7 pe Enterprise.
Approfundare
Referință completă pe subiecte
15 ghiduri detaliate: quickstart, autentificare, OpenAI compatible, endpoint per endpoint, erori, rate limits, key management, billing, security și migrare de la OpenAI sau OpenRouter.
Quickstart Router by MP
Primii pasi: signup, cheie API, baseURL și primul chat completion.
Authentication Router by MP
Bearer token cu cheia API Router. Erori 401/403 și gestionare.
OpenAI compatible — ce înseamnă in Router by MP
Ce endpoint-uri OpenAI sunt suportate prin Router by MP și ce diferente sa astepti.
Chat completions docs
POST /v1/chat/completions: campuri, streaming, tool calling, JSON mode.
Images docs
POST /v1/images/generations cu gpt-image-2 când este disponibil pe cheia ta.
Embeddings docs
POST /v1/embeddings cu text-embedding-3-small și large.
Realtime docs
Modele realtime prin gateway: WebSocket / WebRTC bridge.
Audio docs (TTS și transcription)
POST /v1/audio/speech și /v1/audio/transcriptions când modelele audio sunt disponibile.
Erori HTTP Router by MP
401, 403, 429, 5xx — ce înseamnă și cum le gestionezi.
Rate limits docs
RPM și TPM per cheie; cum gestionezi 429.
Key management docs
Creare, rotare, block și audit chei API in cabinet.
Billing docs
Wallet, top-up, facturi, plata SEPA și card local.
Security docs
DPA, audit log, PII filtering, key security, incident response.
Migrare de la OpenAI direct
Cum migrezi de la cheia OpenAI direct la Router by MP fără schimbari de cod.
Migrare de la OpenRouter
Cum migrezi de la OpenRouter la Router by MP pentru billing local.