Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.orsay.ai/llms.txt

Use this file to discover all available pages before exploring further.

Vue d’ensemble

L’API REST Orsay vous permet de gĂ©rer vos sĂ©quences de maniĂšre programmatique depuis votre propre serveur. Cas d’usage :
  • Automatiser la crĂ©ation de sĂ©quences depuis un VPS ou un cron
  • IntĂ©grer Orsay dans votre pipeline existant (ex : Instagram → DM sĂ©quence)
  • Construire des automatisations personnalisĂ©es sans passer par le dashboard

Authentification

Toutes les requĂȘtes API nĂ©cessitent un Bearer token avec votre clĂ© API.
curl -X GET https://client.api.prod.orsay.ai/api/v1/sequences \
  -H "Authorization: Bearer sk_live_votre_cle_api"

Obtenir votre clé API

  1. Allez dans Settings → API Keys dans le dashboard Orsay
  2. Cliquez sur Generate API Key
  3. Copiez la clĂ© immĂ©diatement — elle ne sera plus affichĂ©e
Votre clĂ© API donne un accĂšs complet aux sĂ©quences de votre organisation. Gardez-la secrĂšte et ne l’exposez jamais dans du code cĂŽtĂ© client.

Rate Limiting

L’API est limitĂ©e Ă  200 requĂȘtes par heure par organisation. Si vous dĂ©passez cette limite, vous recevrez une rĂ©ponse 429 Too Many Requests avec un header Retry-After indiquant combien de secondes attendre.

URL de base

https://client.api.prod.orsay.ai/api/v1

Endpoints

Lister les agents

GET /agents
Retourne tous les agents IA de votre organisation. Réponse :
[
  {
    "id": "e5f6g7h8-...",
    "name": "Agent Commercial",
    "is_published": true
  }
]

Lister les profils

GET /profiles
Retourne tous les profils Instagram et WhatsApp connectés. Réponse :
{
  "instagram": [
    {
      "id": "12345678",
      "username": "monbusiness",
      "status": "CONNECTED"
    }
  ],
  "whatsapp": [
    {
      "id": "abcd-1234-...",
      "name": "Mon WhatsApp",
      "status": "CONNECTED"
    }
  ]
}

Lister les séquences

GET /sequences
Retourne toutes les séquences de votre organisation. Réponse :
[
  {
    "id": "a1b2c3d4-...",
    "name": "Welcome DM",
    "trigger": "INSTAGRAM_MESSAGE",
    "channel": "INSTAGRAM",
    "active": true
  }
]

Obtenir une séquence

GET /sequences/{sequence_id}
Retourne les dĂ©tails complets d’une sĂ©quence. RĂ©ponse :
{
  "id": "a1b2c3d4-...",
  "name": "Welcome DM",
  "trigger": "INSTAGRAM_MESSAGE",
  "channel": "INSTAGRAM",
  "active": true,
  "type": "INBOUND",
  "agent_id": "e5f6g7h8-...",
  "profile_id": "12345",
  "inbound_response_delay": 5,
  "inbound_response_delay_unit": "MINUTES",
  "flow": [
    {
      "delay": 0,
      "delay_unit": "MINUTES",
      "content": "Bonjour ! Comment puis-je vous aider ?",
      "template_id": null,
      "action": null
    }
  ]
}

Créer une séquence

POST /sequences
Corps de la requĂȘte :
{
  "name": "Ma Nouvelle Séquence",
  "trigger": "INSTAGRAM_MESSAGE",
  "inbound_response_delay": 5,
  "inbound_response_delay_unit": "MINUTES",
  "agent_id": "e5f6g7h8-...",
  "profile_id": "12345",
  "active": false,
  "flow": [
    {
      "delay": 0,
      "delay_unit": "MINUTES",
      "followup_delays": [
        { "delay": 30, "delay_unit": "MINUTES" }
      ]
    }
  ]
}
Champs requis :
ChampTypeDescription
namestringNom de la séquence
triggerstringType de déclencheur (voir ci-dessous)
Champs optionnels :
ChampTypeDéfautDescription
inbound_response_delayint5Délai avant la premiÚre réponse
inbound_response_delay_unitstring”MINUTES”SECONDS, MINUTES ou HOURS
agent_idstringnullID de l’agent IA à utiliser
profile_idstringnullID du profil Instagram ou WhatsApp
activeboolfalseSi la séquence est active
flowarray[]Définition des étapes du flow
filtering_agentstringnullID de l’agent de filtrage
should_continue_existing_conversationsboolfalseContinuer les conversations existantes
keywordsarraynullMots-clés déclencheurs
target_accountsarraynullComptes cibles pour le scraping
enable_agent_on_conversationbooltrueActiver l’agent IA sur les conversations
require_manual_approvalboolfalseApprobation manuelle requise
Réponse (201) :
{
  "id": "new-sequence-uuid"
}

Modifier une séquence

PUT /sequences/{sequence_id}
Incluez uniquement les champs que vous souhaitez modifier. Corps de la requĂȘte :
{
  "name": "Nom Mis Ă  Jour",
  "active": true,
  "inbound_response_delay": 10
}
Réponse :
{
  "id": "a1b2c3d4-...",
  "status": "updated"
}

Supprimer une séquence

DELETE /sequences/{sequence_id}
Réponse :
{
  "status": "deleted"
}

Types de déclencheurs

DéclencheurCanalType
INSTAGRAM_MESSAGEInstagramInbound
INSTAGRAM_COMMENTInstagramOutbound
INSTAGRAM_STORY_REPLYInstagramInbound
INSTAGRAM_LEAD_FINDER_NEW_FOLLOWERInstagramOutbound
INSTAGRAM_LEAD_FINDER_OTHER_ACCOUNT_FOLLOWERSInstagramOutbound
INSTAGRAM_LEAD_FINDER_NEW_LIKEInstagramOutbound
INSTAGRAM_LEAD_FINDER_OTHER_ACCOUNT_COMMENTInstagramOutbound
WHATSAPP_MESSAGEWhatsAppInbound
CONTACT_CREATEDWhatsAppOutbound
CONTACT_SUBSCRIBED_TO_SEQUENCEWhatsAppOutbound

Codes d’erreur

CodeDescription
401Clé API invalide ou manquante
404Séquence non trouvée
429Rate limit dépassé (200 req/heure)
400RequĂȘte invalide (mauvais trigger, champ manquant, etc.)

Exemple : Pipeline complet

import requests
import time

API_KEY = "sk_live_votre_cle"
BASE_URL = "https://client.api.prod.orsay.ai/api/v1"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}

# 1. Lister les séquences
sequences = requests.get(f"{BASE_URL}/sequences", headers=HEADERS).json()
print(f"{len(sequences)} séquences trouvées")

# 2. Créer une nouvelle séquence
new_seq = requests.post(f"{BASE_URL}/sequences", headers=HEADERS, json={
    "name": "Pipeline Auto DM",
    "trigger": "INSTAGRAM_MESSAGE",
    "inbound_response_delay": 2,
    "inbound_response_delay_unit": "MINUTES",
    "agent_id": "votre-agent-id",
    "profile_id": "votre-profil-instagram-id",
    "active": True,
    "flow": [
        {
            "delay": 0,
            "delay_unit": "MINUTES",
            "followup_delays": [
                {"delay": 30, "delay_unit": "MINUTES"},
                {"delay": 120, "delay_unit": "MINUTES"}
            ]
        }
    ]
}).json()
print(f"Séquence créée : {new_seq['id']}")

# 3. La modifier plus tard
time.sleep(1)  # Petit dĂ©lai entre les requĂȘtes
requests.put(f"{BASE_URL}/sequences/{new_seq['id']}", headers=HEADERS, json={
    "name": "Pipeline Auto DM v2",
    "inbound_response_delay": 5,
})