Audin Docs
API REST (partner)

Pipeline & deal

Pipeline e stage, deal con righe prodotto e termini di pagamento, attività e relativi template — la parte operativa del CRM Audin.

Versione Markdown di questa pagina

Scarica o copia il contenuto di questa pagina in formato .md — utile per fornirlo a un agente AI che integra questa specifica feature.

Scarica .md

Il gruppo Pipeline & deal è il cuore operativo del CRM: le pipeline (con i loro stage) definiscono il percorso di una deal (opportunità); ogni deal può avere righe prodotto e termini di pagamento; le attività (call, meeting, task) scandiscono il lavoro commerciale.

Le risorse

PathDescrizione
/pipelinesPipeline (type DEAL o LEAD) con i relativi stage
/dealsOpportunità di vendita
/deals/{id}/productsRighe prodotto di una deal
/deals/{id}/payment-termsTermini di pagamento di una deal
/activitiesAttività commerciali (call, meeting, task)
/pipelines/{pipelineId}/activity-templatesTemplate di attività agganciati agli stage

Tutte le rotte richiedono l'header X-API-Key. Lo schema completo resta sullo Swagger.

Pipeline e stage

Una pipeline ha un type (DEAL per le opportunità, LEAD per la qualifica dei lead) e contiene una lista ordinata di stage. Per aprire una deal ti servono l'id della pipeline e l'id di uno stage.

Filtra le pipeline per tipo con il query parameter type:

curl "https://api.audin.ai/pipelines?type=DEAL" \
  -H "X-API-Key: $API_KEY"
const res = await fetch("https://api.audin.ai/pipelines?type=DEAL", {
  headers: { "X-API-Key": process.env.AUDIN_API_KEY },
});
const pipelines = await res.json();
const firstStageId = pipelines[0].stages[0].id;

Operazioni: GET /pipelines, POST /pipelines, GET /pipelines/{id}, PUT /pipelines/{id}, DELETE /pipelines/{id}. Gli stage si gestiscono con POST /pipelines/{id}/stages e relative rotte di update/reorder.

Deal

Una deal è un'opportunità collocata in uno stage di una pipeline. Campi chiave alla creazione:

CampoTipoObbligatorioNote
titlestringTitolo dell'opportunità
pipelineIdstringPipeline di destinazione
stageIdstringnoStage iniziale (se omesso, primo stage)
amountnumbernoValore della deal
currencystringnoValuta (es. EUR)
expectedCloseDatestringnoData attesa di chiusura (ISO-8601)
primaryContactIdstringnoLead di contatto principale
companyIdsstring[]noAziende collegate
contactIdsstring[]noContatti collegati
tagsstring[]noTag

Le deal sincronizzate da un'integrazione (es. HubSpot) popolano anche alcuni campi nativi dedicati, in sola lettura (altrimenti null):

CampoTipoNote
dealTypestringTipologia dell'opportunità dal sistema di origine
descriptionstringDescrizione
prioritystringPriorità dal sistema di origine

Le proprietà personalizzate e le altre native non mappate sono conservate sotto customFields.hubspot (custom e native), con la stessa convenzione descritta per i lead.

Creare una deal

L'ordine tipico: recupera la pipeline DEAL, prendi il primo stage, crea la deal.

# 1. Recupera pipeline DEAL e primo stage
PIPELINES=$(curl -s "https://api.audin.ai/pipelines?type=DEAL" \
  -H "X-API-Key: $API_KEY")
PIPELINE_ID=$(echo "$PIPELINES" | jq -r '.[0].id')
STAGE_ID=$(echo "$PIPELINES" | jq -r '.[0].stages[0].id')

# 2. Crea la deal
curl -X POST https://api.audin.ai/deals \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d "{
    \"title\": \"Opportunità Acme\",
    \"pipelineId\": \"$PIPELINE_ID\",
    \"stageId\": \"$STAGE_ID\",
    \"amount\": 5000,
    \"currency\": \"EUR\"
  }"
const headers = {
  "X-API-Key": process.env.AUDIN_API_KEY,
  "Content-Type": "application/json",
};

// 1. Recupera pipeline DEAL e primo stage
const pipelines = await (
  await fetch("https://api.audin.ai/pipelines?type=DEAL", { headers })
).json();
const { id: pipelineId, stages } = pipelines[0];

// 2. Crea la deal
const res = await fetch("https://api.audin.ai/deals", {
  method: "POST",
  headers,
  body: JSON.stringify({
    title: "Opportunità Acme",
    pipelineId,
    stageId: stages[0].id,
    amount: 5000,
    currency: "EUR",
  }),
});
const deal = await res.json();

GET /deals supporta paginazione (page, pageSize) e filtri come pipelineId, stageId, status, tags, search. Una deal si fa avanzare di stage con PATCH /deals/{id}/stage e si chiude con PATCH /deals/{id}/close-won o /close-lost.

Righe prodotto e termini di pagamento

Su una deal puoi aggiungere righe prodotto e termini di pagamento come sub-risorse:

  • GET/POST /deals/{id}/products — righe prodotto (collegate a un productId del catalogo o definite inline con name, quantity, oneTimePrice/recurringPrice, ecc.).
  • GET/PUT/DELETE /deals/{id}/payment-terms — termini di pagamento della deal.
curl -X POST "https://api.audin.ai/deals/<deal-id>/products" \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "productId": "<product-id>",
    "quantity": 2,
    "oneTimePrice": 1500
  }'
const res = await fetch(`https://api.audin.ai/deals/${dealId}/products`, {
  method: "POST",
  headers: {
    "X-API-Key": process.env.AUDIN_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ productId, quantity: 2, oneTimePrice: 1500 }),
});
const dealProduct = await res.json();

I campi delle righe prodotto (prezzi una-tantum vs ricorrenti, billingPeriod, sconti) e dei termini di pagamento sono articolati: lo schema esatto è sullo Swagger.

Attività

Un'attività è un'azione commerciale tracciata (CALL, EMAIL, MEETING, TASK, NOTE), opzionalmente legata a una deal, a un contatto o a un'azienda. Campi chiave:

CampoTipoObbligatorioNote
typeenumCALL, EMAIL, MEETING, TASK, NOTE
subjectstringOggetto dell'attività
dueDatestringnoScadenza (ISO-8601)
dealId / contactId / companyIdstringnoEntità collegata
priorityenumnoPriorità dell'attività
curl -X POST https://api.audin.ai/activities \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "CALL",
    "subject": "Chiamata di follow-up",
    "dealId": "<deal-id>",
    "dueDate": "2026-06-15T10:00:00.000Z"
  }'
const res = await fetch("https://api.audin.ai/activities", {
  method: "POST",
  headers: {
    "X-API-Key": process.env.AUDIN_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    type: "CALL",
    subject: "Chiamata di follow-up",
    dealId,
    dueDate: "2026-06-15T10:00:00.000Z",
  }),
});
const activity = await res.json();

GET /activities supporta filtri ricchi (status, priority, type, dealId, dueDateFrom/dueDateTo, …). Completa un'attività con PATCH /activities/{id}/complete.

Template di attività

I template di attività sono agganciati agli stage di una pipeline e servono a creare attività ricorrenti coerenti. Si leggono e gestiscono a partire dalla pipeline:

  • GET /pipelines/{pipelineId}/activity-templates
  • GET/POST /pipelines/{pipelineId}/stages/{stageId}/activity-templates
  • PUT/DELETE /activity-templates/{id}

Schema completo (tutti i campi e parametri): Swagger.

Prossimo passo

On this page