Kacinka API
Integra la potenza di Kacinka nei tuoi siti web e applicazioni. API REST completa per CRM, gestione progetti, chat, email marketing, automazioni e molto altro.
https://auth.kacinka.it🔐 Autenticazione
L'API Kacinka utilizza JWT (JSON Web Token) con cookies HttpOnly per la massima sicurezza. Il flusso di autenticazione è progettato per proteggere i token da attacchi XSS.
Flusso di Autenticazione
- Login →
POST /logincon email e password - Il server imposta due cookie HttpOnly:
access_token(15 min) erefresh_token(7 giorni) - La risposta include un
csrf_tokenda inviare come headerX-CSRF-Token - L'
access_tokenscade dopo 15 minuti → usaPOST /refreshper rinnovarlo
credentials: 'include' in tutte le fetch() per inviare i cookie cross-origin. Il dominio cookie è .kacinka.it.
Base URL
Produzione: https://auth.kacinka.it Sviluppo: http://local.auth.kacinka.it
Rate Limits
L'API applica limiti di frequenza per proteggere il servizio:
| Endpoint | Limite | Finestra |
|---|---|---|
| /login, /register | 5 richieste | 1 minuto |
| /forgot-password | 3 richieste | 5 minuti |
| /api/contact | 3 richieste | 1 minuto |
| Tutti gli altri | 60 richieste | 1 minuto |
Quando il limite viene superato, l'API restituisce 429 Too Many Requests con header Retry-After.
❌ Gestione Errori
Tutte le risposte di errore seguono un formato standard:
{
"status": "error",
"error": {
"code": "VALIDATION_ERROR",
"message": "I dati forniti non sono validi",
"details": {
"email": ["L'email è obbligatoria"],
"password": ["La password deve avere almeno 8 caratteri"]
}
}
}
Codici HTTP
| Codice | Significato | Quando |
|---|---|---|
| 200 | Success | Richiesta completata |
| 201 | Created | Risorsa creata (POST) |
| 400 | Bad Request | Dati non validi o mancanti |
| 401 | Unauthorized | Token mancante o scaduto |
| 403 | Forbidden | Permessi insufficienti o CSRF non valido |
| 404 | Not Found | Risorsa non trovata |
| 409 | Conflict | Email già registrata, risorsa duplicata |
| 422 | Unprocessable | Validazione fallita |
| 429 | Too Many Requests | Rate limit superato |
| 500 | Server Error | Errore interno del server |
🔐 Login
Semantica: Autentica un utente con credenziali email/password e stabilisce una sessione sicura tramite JWT cookies.
Tecnica: Validazione bcrypt della password, generazione coppia JWT (access_token 15min HS256 + refresh_token 7gg), impostazione cookie HttpOnly Secure SameSite=None su dominio .kacinka.it. CSRF token restituito nel body per double-submit pattern.
| Parametro | Tipo | Descrizione | |
|---|---|---|---|
| string | required | Email dell'utente registrato | |
| password | string | required | Password dell'account |
| totp_code | string | optional | Codice 2FA TOTP se abilitato sull'account |
curl -X POST https://auth.kacinka.it/login \
-H "Content-Type: application/json" \
-c cookies.txt \
-d '{
"email": "mario.rossi@example.com",
"password": "Password123!"
}'
const response = await fetch('https://auth.kacinka.it/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
credentials: 'include', // ← Fondamentale per i cookie
body: JSON.stringify({
email: 'mario.rossi@example.com',
password: 'Password123!'
})
});
const data = await response.json();
const csrfToken = data.csrf_token;
// Salva csrfToken per le richieste successive
$ch = curl_init('https://auth.kacinka.it/login');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_COOKIEJAR => '/tmp/kacinka_cookies.txt',
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'email' => 'mario.rossi@example.com',
'password' => 'Password123!'
])
]);
$response = json_decode(curl_exec($ch), true);
$csrfToken = $response['csrf_token'];
curl_close($ch);
import requests
session = requests.Session()
response = session.post('https://auth.kacinka.it/login', json={
'email': 'mario.rossi@example.com',
'password': 'Password123!'
})
data = response.json()
csrf_token = data['csrf_token']
# La sessione mantiene i cookie automaticamente
{
"status": "success",
"data": {
"user": {
"id": 1,
"email": "mario.rossi@example.com",
"name": "Mario Rossi",
"role": "user",
"plan": "starter",
"email_verified": true,
"created_at": "2025-01-15T10:30:00Z"
}
},
"csrf_token": "a1b2c3d4e5f6..."
}
access_token (HttpOnly, Secure, SameSite=None, 15min) e refresh_token (HttpOnly, Secure, SameSite=None, 7 giorni). Il csrf_token va salvato e inviato come header X-CSRF-Token in ogni richiesta autenticata.
Registrazione
Semantica: Crea un nuovo account utente sulla piattaforma Kacinka. Dopo la registrazione l'utente riceve un'email di verifica.
Tecnica: Validazione unicità email, hashing bcrypt (cost 12), inserimento in auth_users, invio email verifica via PHPMailer SMTP, piano Free assegnato di default.
| Parametro | Tipo | Descrizione | |
|---|---|---|---|
| string | required | Email valida (unica nel sistema) | |
| password | string | required | Min 8 caratteri, maiuscole, minuscole, numeri |
| password_confirm | string | required | Deve corrispondere a password |
| name | string | required | Nome completo dell'utente |
| terms_accepted | boolean | required | Deve essere true |
curl -X POST https://auth.kacinka.it/register \
-H "Content-Type: application/json" \
-d '{
"email": "nuovo.utente@example.com",
"password": "SecurePass456!",
"password_confirm": "SecurePass456!",
"name": "Marco Bianchi",
"terms_accepted": true
}'Refresh Token
Semantica: Rinnova l'access_token scaduto usando il refresh_token valido presente nei cookie.
Tecnica: Decodifica JWT refresh_token dal cookie, verifica validità e scadenza, genera nuovo access_token (15min) e nuovo CSRF token. Il refresh_token rimane invariato fino alla sua scadenza naturale (7 giorni).
curl -X POST https://auth.kacinka.it/refresh \
-b cookies.txt -c cookies.txt \
-H "Content-Type: application/json" -d '{}'401, chiama automaticamente /refresh e riprova la richiesta originale.Logout
Semantica: Termina la sessione corrente dell'utente.
Tecnica: Invalida i cookie JWT impostando Max-Age=0, rimuove la sessione dal database.
curl -X POST https://auth.kacinka.it/logout \
-b cookies.txt \
-H "X-CSRF-Token: $CSRF_TOKEN" \
-H "Content-Type: application/json" -d '{}'🔑 Password Reset
Semantica: Invia un'email con link di reset password all'indirizzo specificato.
Tecnica: Genera token crypto 64 byte, salva hash SHA-256 in DB con TTL 1h, invia email via PHPMailer. Per sicurezza anti-enumeration, risposta sempre 200.
curl -X POST https://auth.kacinka.it/forgot-password \
-H "Content-Type: application/json" \
-d '{ "email": "mario.rossi@example.com" }'Reset Password
Semantica: Usa il token ricevuto via email per impostare una nuova password.
Tecnica: Verifica hash SHA-256 del token, controlla TTL, aggiorna password con bcrypt cost 12, invalida tutte le sessioni attive dell'utente.
curl -X POST https://auth.kacinka.it/reset-password \
-H "Content-Type: application/json" \
-d '{
"token": "abc123def456...",
"password": "NuovaPassword789!",
"password_confirm": "NuovaPassword789!"
}'👤 Profilo Utente
Endpoint per gestire il profilo dell'utente autenticato. Tutti richiedono autenticazione.
Semantica: Recupera il profilo completo dell'utente dalla sessione corrente.
Tecnica: Decodifica JWT dall'access_token cookie, query su auth_users + join piano abbonamento. Include stato verifica email/telefono e configurazione 2FA.
curl https://auth.kacinka.it/me \ -b cookies.txt \ -H "X-CSRF-Token: $CSRF_TOKEN"
const res = await fetch('https://auth.kacinka.it/me', {
credentials: 'include',
headers: { 'X-CSRF-Token': csrfToken }
});
const { data } = await res.json();{
"data": {
"id": 1, "email": "mario.rossi@example.com",
"name": "Mario Rossi", "role": "user", "plan": "starter",
"email_verified": true, "phone_verified": false,
"two_factor_enabled": false,
"company": "Rossi Digital SRL",
"timezone": "Europe/Rome", "language": "it",
"created_at": "2025-01-15T10:30:00Z"
}
}Aggiorna Profilo
Semantica: Modifica i dati personali del profilo utente.
Tecnica: Partial update — solo i campi inclusi nel body vengono aggiornati. Sanitizzazione input, validazione timezone IANA, language ISO 639-1.
curl -X PUT https://auth.kacinka.it/me/profile \
-b cookies.txt \
-H "Content-Type: application/json" \
-H "X-CSRF-Token: $CSRF_TOKEN" \
-d '{
"name": "Mario Rossi",
"company": "Rossi Digital SRL",
"timezone": "Europe/Rome",
"language": "it"
}'Cambia Password
Semantica: Modifica la password dell'account. Invalida tutte le sessioni attive tranne quella corrente.
Tecnica: Verifica current_password con bcrypt, hash nuova password, DELETE sessioni ≠ current, log in audit.
curl -X PUT https://auth.kacinka.it/me/password \
-b cookies.txt \
-H "Content-Type: application/json" \
-H "X-CSRF-Token: $CSRF_TOKEN" \
-d '{
"current_password": "VecchiaPassword123!",
"new_password": "NuovaPassword456!",
"new_password_confirm": "NuovaPassword456!"
}'📁 Progetti
I progetti sono il contenitore principale per organizzare il lavoro. Ogni progetto contiene tasks, deals, team members, file, calendario ed eventi. 📊 Limitato dal piano: Free 3, Starter 15, Professional+Business illimitati.
Semantica: Crea un nuovo progetto nell'area di lavoro dell'utente. L'utente diventa automaticamente owner.
Tecnica: Verifica limite piano (COUNT su projects per user_id), INSERT con slug auto-generato, colore HEX validato, deadline YYYY-MM-DD. Restituisce progetto creato con ID.
| Parametro | Tipo | Descrizione | |
|---|---|---|---|
| name | string | required | Nome del progetto (max 255 caratteri) |
| description | string | optional | Descrizione del progetto |
| status | string | optional | active | archived. Default: active |
| color | string | optional | Colore HEX (es: #7c3aed) |
| deadline | string | optional | Data scadenza (YYYY-MM-DD) |
curl -X POST https://auth.kacinka.it/projects \
-b cookies.txt \
-H "Content-Type: application/json" \
-H "X-CSRF-Token: $CSRF_TOKEN" \
-d '{
"name": "Sito Web E-commerce",
"description": "Sviluppo sito e-commerce per cliente retail",
"status": "active",
"color": "#7c3aed",
"deadline": "2025-12-31"
}'const res = await fetch('https://auth.kacinka.it/projects', {
method: 'POST',
credentials: 'include',
headers: {
'Content-Type': 'application/json',
'X-CSRF-Token': csrfToken
},
body: JSON.stringify({
name: 'Sito Web E-commerce',
description: 'Sviluppo sito e-commerce per cliente retail',
color: '#7c3aed',
deadline: '2025-12-31'
})
});
const { data } = await res.json();
console.log('Progetto creato:', data.id);$ch = curl_init('https://auth.kacinka.it/projects');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_COOKIEFILE => '/tmp/kacinka_cookies.txt',
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'X-CSRF-Token: ' . $csrfToken
],
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Sito Web E-commerce',
'description' => 'Sviluppo sito e-commerce',
'color' => '#7c3aed'
])
]);
$project = json_decode(curl_exec($ch), true);Semantica: Elenco paginato di tutti i progetti dell'utente con statistiche aggregate.
Tecnica: Paginazione cursor-based. Query params: ?page=1&per_page=25&status=active&search=keyword. Include count tasks/deals/members per progetto.
Semantica: Dati completi del progetto con tutte le statistiche aggregate.
Tecnica: JOIN su tasks (count per status), deals (count + sum value), team_members. Verifica ownership o membership.
Semantica: Modifica i dati del progetto. Partial update — solo i campi inclusi vengono modificati.
Semantica: Elimina il progetto e tutti i dati associati (tasks, deals, file). Azione irreversibile.
Tecnica: CASCADE DELETE su foreign keys. Solo l'owner può eseguire. Trigger webhook project.deleted.
✅ Tasks
Gestione attività all'interno dei progetti. Supporta subtask gerarchici, dipendenze, riordinamento drag & drop, template e time tracking.
Semantica: Aggiunge una nuova attività al progetto specificato. Supporta creazione subtask tramite parent_id.
Tecnica: INSERT con position auto-calcolata (MAX+1), validazione assignee_id come membro del progetto, trigger webhook task.created.
| Parametro | Tipo | Descrizione | |
|---|---|---|---|
| title | string | required | Titolo del task |
| description | string | optional | Descrizione dettagliata (Markdown supportato) |
| status | string | optional | todo | in_progress | done |
| priority | string | optional | low | medium | high | urgent |
| due_date | string | optional | Scadenza (YYYY-MM-DD) |
| assignee_id | integer | optional | ID membro team assegnato |
| parent_id | integer | optional | ID task padre (per subtask) |
curl -X POST https://auth.kacinka.it/projects/1/tasks \
-b cookies.txt \
-H "Content-Type: application/json" \
-H "X-CSRF-Token: $CSRF_TOKEN" \
-d '{
"title": "Configurare hosting VPS",
"description": "Setup server con Nginx e PHP 8.2",
"status": "todo",
"priority": "high",
"due_date": "2025-08-15"
}'👥 Contatti CRM
CRM completo con lead scoring automatico, import/export massivo CSV, merge duplicati intelligente, timeline delle interazioni e campi personalizzati illimitati. 📊 Limite contatti per piano.
Semantica: Aggiunge un nuovo contatto al CRM con dati anagrafici, tag e campi personalizzati. Il lead score viene calcolato automaticamente.
Tecnica: Verifica limite piano, deduplicazione su email (409 se esiste), INSERT con tags come JSON array, custom_fields come JSON object. Trigger webhook contact.created.
curl -X POST https://auth.kacinka.it/contacts \
-b cookies.txt \
-H "Content-Type: application/json" \
-H "X-CSRF-Token: $CSRF_TOKEN" \
-d '{
"first_name": "Laura",
"last_name": "Verdi",
"email": "laura.verdi@azienda.it",
"phone": "+39 02 1234567",
"company_id": null,
"tags": ["cliente", "premium"],
"custom_fields": {
"settore": "Tecnologia",
"budget": "10000-50000"
}
}'const contact = await fetch('https://auth.kacinka.it/contacts', {
method: 'POST',
credentials: 'include',
headers: {
'Content-Type': 'application/json',
'X-CSRF-Token': csrfToken
},
body: JSON.stringify({
first_name: 'Laura', last_name: 'Verdi',
email: 'laura.verdi@azienda.it',
tags: ['cliente', 'premium']
})
}).then(r => r.json());Semantica: Importa più contatti in una sola richiesta, ideale per migrazione da altri CRM.
Tecnica: Batch INSERT con transaction, deduplicazione su email, skip_duplicates: true salta duplicati senza errore. Max 500 contatti per richiesta.
curl -X POST https://auth.kacinka.it/contacts/import \
-b cookies.txt \
-H "Content-Type: application/json" \
-H "X-CSRF-Token: $CSRF_TOKEN" \
-d '{
"contacts": [
{"first_name": "Mario", "last_name": "Rossi", "email": "mario@example.com"},
{"first_name": "Anna", "last_name": "Bianchi", "email": "anna@example.com"}
],
"tags": ["importato"],
"skip_duplicates": true
}'💰 Deals (Pipeline Vendite)
Pipeline CRM con fasi personalizzabili: lead → qualified → proposal → negotiation → won/lost. Drag & drop tra fasi, valore monetario e probabilità di chiusura.
Semantica: Crea una nuova opportunità commerciale nella pipeline del progetto.
Tecnica: Validazione stage enum, valore monetario decimal(12,2), expected_close_date futuro. Trigger webhook deal.created.
curl -X POST https://auth.kacinka.it/projects/1/deals \
-b cookies.txt \
-H "Content-Type: application/json" \
-H "X-CSRF-Token: $CSRF_TOKEN" \
-d '{
"title": "Contratto sito web aziendale",
"value": 5000.00,
"currency": "EUR",
"stage": "proposal",
"expected_close_date": "2025-09-30"
}'💬 Chat
Messaggistica in tempo reale tra membri del team. Supporta menzioni @, reazioni emoji, messaggi fissati, ricerca full-text e allegati file.
Semantica: Invia un messaggio nella conversazione chat specificata.
Tecnica: Verifica membership nella chat, sanitizzazione HTML, parsing menzioni (@user_id), INSERT con timestamp UTC. Notifica push ai partecipanti.
curl -X POST https://auth.kacinka.it/chats/1/messages \
-b cookies.txt \
-H "Content-Type: application/json" \
-H "X-CSRF-Token: $CSRF_TOKEN" \
-d '{
"content": "Ciao team! La release è prevista per venerdì.",
"type": "text"
}'📧 Email Marketing
Campagne email con template personalizzabili, liste di distribuzione segmentabili, A/B testing, statistiche apertura/click e conformità CAN-SPAM/GDPR.
Semantica: Crea una nuova campagna email con template, lista destinatari e schedulazione opzionale.
Tecnica: FK su template_id e list_id, validazione scheduled_at futuro (ISO 8601), stato iniziale "draft". Invio tramite PHPMailer SMTP con tracking pixel per open rate.
curl -X POST https://auth.kacinka.it/email/campaigns \
-b cookies.txt \
-H "Content-Type: application/json" \
-H "X-CSRF-Token: $CSRF_TOKEN" \
-d '{
"name": "Campagna Estiva 2025",
"template_id": 1,
"list_id": 1,
"subject": "Offerta speciale estate!",
"scheduled_at": "2025-08-01T09:00:00"
}'⚡ Workflows (Automazioni)
Automazione dei processi aziendali con trigger basati su eventi, condizioni flessibili e azioni concatenate. Supporta preset pronti all'uso e duplicazione.
Semantica: Definisce una nuova automazione che si attiva automaticamente quando si verifica un determinato evento.
Tecnica: Validazione trigger/conditions/actions schema, condizioni con operatori: equals, contains, gt, lt, in. Azioni eseguite in sequenza con retry automatico. Storage actions JSON.
Trigger disponibili: contact.created, deal.stage_changed, task.completed, form.submitted
Azioni disponibili: send_email, add_tag, create_task, update_field, webhook, delay
curl -X POST https://auth.kacinka.it/workflows \
-b cookies.txt \
-H "Content-Type: application/json" \
-H "X-CSRF-Token: $CSRF_TOKEN" \
-d '{
"name": "Benvenuto nuovo contatto",
"trigger": "contact.created",
"conditions": [
{"field": "tags", "operator": "contains", "value": "lead"}
],
"actions": [
{"type": "send_email", "template_id": 1},
{"type": "add_tag", "tag": "onboarded"},
{"type": "create_task", "title": "Follow-up nuovo lead"}
],
"active": true
}'📝 Forms
Form builder con embed code per il tuo sito web. Campi personalizzabili con validazione, statistiche di conversione, integrazione automatica nel CRM e trigger per workflow.
Semantica: Accesso pubblico al form per raccolta dati. Può essere visitato direttamente o incorporato via iframe.
Tecnica: GET restituisce HTML renderizzato, POST riceve i dati JSON. Auto-crea contatto nel CRM, trigger webhook form.submitted e attiva workflow collegati.
<!-- Embed nel tuo sito -->
<iframe
src="https://auth.kacinka.it/f/richiesta-preventivo"
width="100%"
height="600"
frameborder="0"
style="border-radius: 12px"
></iframe>
<!-- Oppure submit via API -->
<script>
fetch('https://auth.kacinka.it/f/richiesta-preventivo', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
name: 'Mario Rossi',
email: 'mario@example.com',
budget: '5000-15000',
message: 'Vorrei un preventivo'
})
});
</script>🪝 Webhooks
Ricevi notifiche in tempo reale degli eventi Kacinka nel tuo server. Ogni delivery è firmata con HMAC-SHA256 per garantire l'autenticità. Retry automatico con backoff esponenziale.
Semantica: Registra un endpoint che riceverà notifiche automatiche quando si verificano gli eventi specificati.
Tecnica: Validazione URL HTTPS obbligatoria, secret min 16 char, events validati contro whitelist. Test ping alla creazione per verificare raggiungibilità. Max 10 webhook per utente.
| Parametro | Tipo | Descrizione | |
|---|---|---|---|
| url | string | required | URL HTTPS del tuo endpoint webhook |
| events | string[] | required | Lista eventi da monitorare |
| secret | string | required | Segreto per firma HMAC-SHA256 (min 16 char) |
| active | boolean | optional | Default: true |
curl -X POST https://auth.kacinka.it/webhooks \
-b cookies.txt \
-H "Content-Type: application/json" \
-H "X-CSRF-Token: $CSRF_TOKEN" \
-d '{
"url": "https://tuosito.it/webhook/kacinka",
"events": ["contact.created", "deal.stage_changed", "task.completed"],
"secret": "whsec_mio_segreto_sicuro",
"active": true
}'Verifica Firma Webhook
Ogni delivery include l'header X-Webhook-Signature con la firma HMAC-SHA256 del payload. Verifica sempre la firma prima di processare il webhook per prevenire spoofing.
<?php
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';
$secret = 'whsec_mio_segreto_sicuro';
$expected = hash_hmac('sha256', $payload, $secret);
if (!hash_equals($expected, $signature)) {
http_response_code(401);
echo json_encode(['error' => 'Invalid signature']);
exit;
}
$event = json_decode($payload, true);
// Processa l'evento in base al tipo
switch ($event['event']) {
case 'contact.created':
// Nuovo contatto creato in Kacinka
break;
case 'deal.stage_changed':
// Deal ha cambiato fase nella pipeline
break;
case 'task.completed':
// Un task è stato completato
break;
}
http_response_code(200);
echo json_encode(['received' => true]);const crypto = require('crypto');
const express = require('express');
const app = express();
app.post('/webhook/kacinka', express.raw({type: '*/*'}), (req, res) => {
const signature = req.headers['x-webhook-signature'];
const secret = 'whsec_mio_segreto_sicuro';
const expected = crypto
.createHmac('sha256', secret)
.update(req.body)
.digest('hex');
if (!crypto.timingSafeEqual(
Buffer.from(expected), Buffer.from(signature)
)) {
return res.status(401).json({ error: 'Invalid signature' });
}
const event = JSON.parse(req.body);
console.log('Evento ricevuto:', event.event);
res.json({ received: true });
});import hmac, hashlib, json
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/webhook/kacinka', methods=['POST'])
def webhook():
payload = request.get_data()
signature = request.headers.get('X-Webhook-Signature', '')
secret = b'whsec_mio_segreto_sicuro'
expected = hmac.new(secret, payload, hashlib.sha256).hexdigest()
if not hmac.compare_digest(expected, signature):
return jsonify(error='Invalid signature'), 401
event = json.loads(payload)
print(f"Evento: {event['event']}")
return jsonify(received=True)contact.created · contact.updated · contact.deleted ·
deal.created · deal.stage_changed · deal.updated ·
task.created · task.completed ·
form.submitted · invoice.created ·
project.created · project.updated
💳 Abbonamenti & Pagamenti
Gestione piani, checkout Stripe e portale di fatturazione. Integrazione diretta con Stripe Checkout per pagamenti sicuri PCI DSS.
Semantica: Restituisce tutti i piani disponibili con prezzi, funzionalità e limiti risorse. Nessuna autenticazione richiesta.
Tecnica: Cache in-memory 1h, dati sincronizzati con Stripe Products/Prices. Valori -1 indicano "illimitato".
{
"data": [
{ "id": "free", "name": "Free", "price": 0, "projects": 3, "contacts": 100, "team_members": 1 },
{ "id": "starter", "name": "Starter", "price": 7.90, "projects": 15, "contacts": 1000, "team_members": 5 },
{ "id": "professional", "name": "Professional", "price": 19.90, "projects": -1, "contacts": 10000, "team_members": 25 },
{ "id": "business", "name": "Business", "price": 39.90, "projects": -1, "contacts": -1, "team_members": -1 }
]
}📞 Form di Contatto (Integrazione Esterna)
Endpoint pubblico per integrare un form di contatto nei tuoi siti web. Nessuna autenticazione richiesta. Perfetto per landing page, siti statici e WordPress.
Semantica: Invia un messaggio di contatto che viene recapitato all'amministratore Kacinka via email.
Tecnica: Rate limit 3/min per IP, sanitizzazione HTML, invio email via PHPMailer SMTP al destinatario configurato in .env. CORS aperto per tutti i domini.
| Parametro | Tipo | Descrizione | |
|---|---|---|---|
| name | string | required | Nome del mittente |
| string | required | Email del mittente (per risposta) | |
| message | string | required | Corpo del messaggio |
| subject | string | optional | Oggetto del messaggio |
| company | string | optional | Azienda del mittente |
<form id="kacinkaContact" style="max-width:500px">
<input name="name" placeholder="Nome" required
style="width:100%;padding:12px;margin:8px 0;border:1px solid #ccc;border-radius:8px" />
<input name="email" type="email" placeholder="Email" required
style="width:100%;padding:12px;margin:8px 0;border:1px solid #ccc;border-radius:8px" />
<input name="subject" placeholder="Oggetto"
style="width:100%;padding:12px;margin:8px 0;border:1px solid #ccc;border-radius:8px" />
<textarea name="message" placeholder="Messaggio" rows="5" required
style="width:100%;padding:12px;margin:8px 0;border:1px solid #ccc;border-radius:8px"></textarea>
<button type="submit"
style="background:#7c3aed;color:#fff;padding:12px 24px;border:none;border-radius:8px;cursor:pointer;font-size:16px">
Invia Messaggio
</button>
</form>
<script>
document.getElementById('kacinkaContact').addEventListener('submit', async (e) => {
e.preventDefault();
const form = e.target;
const btn = form.querySelector('button');
btn.textContent = 'Invio...';
btn.disabled = true;
try {
const res = await fetch('https://auth.kacinka.it/api/contact', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(Object.fromEntries(new FormData(form)))
});
if (res.ok) {
form.innerHTML = '<p style="color:#34d399;font-size:18px">' +
'✅ Messaggio inviato!</p>';
} else { throw new Error(); }
} catch {
btn.textContent = 'Riprova';
btn.disabled = false;
alert('Errore. Riprova più tardi.');
}
});
</script>❤️ Health Check
Endpoint per monitoraggio uptime, status dei servizi e connettività database. Ideale per sistemi di alerting (UptimeRobot, Pingdom).
Semantica: Verifica che l'API sia operativa e il database raggiungibile.
Tecnica: SELECT 1 su MariaDB, check memory usage, timestamp UTC. Nessuna autenticazione, nessun rate limit.
curl https://auth.kacinka.it/health
{ "status": "ok", "timestamp": "2025-07-14T12:00:00Z", "database": "connected" }🧾 Fatturazione V2
Sistema di fatturazione completo conforme alla normativa italiana. Supporta fatture, note di credito, proforma, autofatture, pagamenti parziali, PDF brandizzati e integrazione contabile con partita doppia. 16 endpoint per il ciclo completo.
Semantica: Elenco paginato di tutte le fatture del progetto con filtri avanzati.
Tecnica: Query params: ?status=draft|finalized|sent|paid&type=invoice|credit_note|proforma&page=1&per_page=25. Include totali aggregati per status.
Semantica: Crea una nuova fattura con righe dettagliate, aliquote IVA configurabili e dati di fatturazione del cliente.
Tecnica: Validazione numero univoco, calcolo automatico subtotal/tax/total da line items, FK su tax_codes, withholding_tax_id, cost_center_id. Stato iniziale "draft".
Azioni Fattura
Semantica: Blocca la fattura — non più modificabile. Genera la registrazione contabile automatica (partita doppia) e assegna numero progressivo.
Semantica: Invia la fattura al cliente tramite email, PEC o SDI. Aggiorna sent_at e sent_via.
Semantica: Genera una nota di credito collegata alla fattura originale. Stornatura automatica della registrazione contabile.
Semantica: Genera e scarica il PDF della fattura con branding personalizzato (logo, colori, footer). Supporta template personalizzabili.
Semantica: Report scadenziario con fatture raggruppate per fascia temporale (30/60/90/120+ giorni). Totali per fascia.
📒 Contabilità
Modulo di contabilità a partita doppia completo. Piano dei conti gerarchico, registrazioni in prima nota, bilancio di verifica, conto economico, stato patrimoniale, cash flow, anni fiscali e liquidazione IVA. 52 endpoint totali.
Semantica: Restituisce il piano dei conti completo del progetto con struttura gerarchica.
Tecnica: Supporta GET /tree (struttura ad albero), GET /balances (saldi per conto), POST /import (importa template standard). 9 endpoint totali per CRUD + albero + saldi + ledger + import.
Semantica: Crea una registrazione contabile in partita doppia. Le righe dare/avere devono bilanciarsi.
Tecnica: Validazione somma dare = somma avere, FK su account_id (piano dei conti). Supporta POST/void per stornatura. 7 endpoint totali.
Semantica: Gestisci anni fiscali e periodi contabili. Chiusura anno, apertura anno successivo.
Report Finanziari
9 report finanziari disponibili, tutti sotto /projects/{projectId}/accounting/reports/:
🏦 Banking & Riconciliazione
Conti bancari, transazioni, import OFX/CSV, riconciliazione automatica e manuale con match intelligente. 23 endpoint.
Semantica: CRUD completo conti bancari + summary saldo. Import batch transazioni da CSV/OFX.
Semantica: Lista transazioni con filtri data, importo, tipo. POST per inserimento manuale.
Semantica: Avvia sessione di riconciliazione. Auto-match intelligente tra transazioni bancarie e registrazioni contabili. 9 endpoint per il flusso completo: start, auto-match, match, unmatch, accept-suggestion, complete.
💸 Spese & Categorie
Gestione spese con workflow di approvazione (submit → approve → reject), receipt attach, categorie personalizzabili e report per categoria. 18 endpoint.
Semantica: CRUD spese + workflow approvazione. Endpoint dedicati per submit, approve, reject, void. Collegamento ricevute e fatturabilità.
Semantica: CRUD categorie spese + POST seed per categorie predefinite italiane.
💰 Pagamenti & Scadenziario
Registrazione pagamenti, allocazione su fatture, rimborsi, piani rateali e scadenziario. 22 endpoint.
Semantica: Crea pagamento con allocazione su una o più fatture. Supporta pagamenti parziali, rimborsi e riconciliazione automatica.
Semantica: Fatture scadute, prossime scadenze, riepilogo per periodo. Endpoint: overdue, upcoming, summary + mark-overdue batch.
📜 Fatturazione Elettronica (FatturaPA & PEPPOL)
Generazione XML FatturaPA conforme SDI, PEPPOL per l'Europa, invio e ricezione notifiche SDI. 14 endpoint.
Semantica: Genera il file XML conforme al formato FatturaPA v1.2.2 per invio al Sistema di Interscambio (SDI). Validazione automatica prima della generazione.
Semantica: Genera file UBL conforme PEPPOL BIS Billing 3.0 per fatturazione elettronica europea.
💱 Multi-Valuta
Gestione valute, tassi di cambio, conversione importi e rivalutazione periodica. Fetch automatico tassi BCE. 10 endpoint.
Semantica: CRUD valute, GET/POST tassi di cambio, POST convert, POST fetch-ecb (aggiornamento automatico da BCE), POST revaluation.
📊 Budget & Centri di Costo
Pianificazione finanziaria con budget per centro di costo, workflow approvazione, analisi varianze e consuntivi. 17 endpoint.
Semantica: CRUD budget con workflow (approve → activate → close). Analisi varianze budget vs actual. CRUD centri di costo. Time-to-invoice tracking.
🤖 AI Assistant
Assistente AI integrato con chat contestuale, escalation automatica per richieste complesse e riepilogo conversazioni. Supportato dal backend AI con confidence scoring.
Semantica: Invia un messaggio nella chat con AI. L'assistente risponde con suggerimenti contestuali basati sui dati del progetto.
Tecnica: Interazioni salvate in ai_interactions con category, confidence score e flag needs_human. Riepiloghi automatici in ai_conversation_summaries. Escalation automatica quando confidence < threshold.
Semantica: Lista escalation AI da gestire manualmente. Include statistiche, dettagli interazione e contesto. 4 endpoint admin: list, stats, update, interactions.
📸 OCR Ricevute
Scansione e digitalizzazione ricevute con OCR AI (Mindee/Veryfi). Estrazione automatica: fornitore, importo, IVA, data, righe dettaglio. 8 endpoint.
Semantica: Carica un'immagine o PDF di una ricevuta per l'elaborazione OCR.
Tecnica: Upload file, creazione record in ocr_receipts con status "pending". Supporta JPEG, PNG, PDF. Max 10MB.
Semantica: Avvia l'elaborazione OCR. Estrae vendor_name, vendor_vat, total, tax, net, line_items. Confidence score 0-1. POST link-expense per collegare a spesa esistente. Review manuale con PUT review.
🏧 Open Banking (PSD2)
Connessione diretta con banche europee tramite PSD2/Nordigen. Sincronizzazione automatica transazioni, collegamento conti bancari. 8 endpoint.
Semantica: Lista istituzioni bancarie disponibili per la connessione PSD2.
Tecnica: Flusso completo: GET institutions → POST requisitions → POST complete → POST link (collega a bank_account) → POST sync (sincronizza transazioni). Log sync in open_banking_sync_log.
🌐 Site Builder
Crea siti web professionali con template personalizzabili. Preview live, form collegati al CRM, rendering pubblico. 6 endpoint + 4 template.
Semantica: CRUD siti web. GET /s/{slug} per rendering pubblico. Endpoint separati per template personalizzabili.
🔔 Notifiche
Sistema notifiche multi-canale con raggruppamento, preferenze personalizzabili e digest email. 8 endpoint.
Semantica: Lista, mark read, mark all read, preferenze (GET/PUT), grouped, digest, count. Rate real-time via polling o webhook.
👥 Team & Permessi
Invita membri al progetto, gestisci ruoli e permessi granulari con RBAC a 6 livelli. 8 endpoint.
Semantica: Invita un utente al progetto con ruolo specifico. Email con link di accettazione. CRUD team members + accept-invite. GET /roles e /permissions per la configurazione RBAC.
📁 File & Documenti
Upload, download, preview e gestione file di progetto. Supporta qualsiasi formato con preview inline per immagini e PDF. 7 endpoint.
Semantica: Upload multipart/form-data. Download, preview, update, delete. Preview info per thumbnail.
📅 Calendario & Eventi
Eventi di progetto con calendario cross-project. 5 endpoint.
Semantica: Aggregazione eventi da tutti i progetti dell'utente. CRUD per progetto sotto /projects/{projectId}/events.
⏱️ Time Tracking
Registrazione ore lavorate per task/progetto con report aggregati. 5 endpoint.
Semantica: CRUD time entries con GET /time-report per report aggregato per periodo/utente/task.
🔑 API Keys
Gestione chiavi API per integrazioni server-to-server. Scoping permessi, rotazione, revoca e tracking utilizzo. 10 endpoint.
Semantica: Genera una nuova API key con scope definiti. CRUD + revoke, rotate, usage stats. La chiave viene mostrata solo al momento della creazione.
🏪 Portale Clienti
Portale white-label per i tuoi clienti con accesso via magic link. Visualizzazione fatture, messaggi, documenti e approvazioni. 19 endpoint (V1 + V2).
Semantica: Config branding (logo, colori, welcome message). V1: accesso PIN. V2: magic link + sessioni. Sezione client: fatture, messaggi, documenti.
🛡️ Pannello Admin
39 endpoint riservati agli amministratori di piattaforma. Dashboard, gestione utenti, feature flags, impersonazione, audit log, monitoraggio chat e gestione AI escalation.
Semantica: Dashboard completa con statistiche utenti, revenue, sistema e chat. Sotto-sezioni: users CRUD (4), impersonation (3), feature flags (5), subscriptions, settings (2), audit, chat monitoring (2), notifications/communications (4), contact submissions (2), AI escalations (4), commerce (6).
📋 Changelog
| Data | Versione | Modifiche |
|---|---|---|
| 2026-02-10 | 2.0.0 | Documentazione aggiornata a 567 endpoint, 60+ categorie. Aggiunti: Contabilità (52 ep), Fatturazione V2 (16 ep), Banking (23 ep), E-Invoice (14 ep), Multi-Currency (10 ep), Budget (17 ep), OCR (8 ep), Open Banking (8 ep), AI Assistant, Pagamenti (22 ep), Spese (18 ep), Admin (39 ep), API Keys (10 ep), Client Portal V2 (13 ep), Time Tracking, Calendar, Notifications, Site Builder. |
| 2025-07-14 | 1.0.0 | Release iniziale — Collection Postman completa, documentazione integrale |