# Exemples Python (requests)

Appel depuis un serveur uniquement

Les credentials (X-KEY-PUNA, token JWT) ne doivent jamais être exposés dans du code côté client. Ces exemples sont destinés à être exécutés depuis un backend Python.

Pour obtenir les valeurs nécessaires, voir Authentification.

# Installation de la dépendance

pip install requests

# Exemple 1 - Envoi JSON

import requests

# Valeurs à récupérer depuis :
# - API_KEY du .env  → header X-KEY-PUNA
# - Vue "API" du site → Authorization Bearer
# - Vue "API" du formulaire → code dans l'URL
PUNA_API_KEY    = "gk_prod_7f3a2b9c"
PUNA_SITE_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaXRlSWQiOjEsImNjIjoiYWJjMTIzIn0.SIGNATURE"
FORM_CODE       = "contact_acme_corp"

headers = {
    "X-KEY-PUNA": PUNA_API_KEY,
    "Authorization": f"Bearer {PUNA_SITE_TOKEN}",
}

payload = {
    "nom": "Alice Martin",
    "email": "alice@example.com",
    "message": "Bonjour, je souhaite obtenir un devis.",
}

response = requests.post(
    f"https://votre-puna.example.com/api/v1/send/{FORM_CODE}",
    json=payload,
    headers=headers,
    timeout=10,
)
response.raise_for_status()  # lève une exception si code HTTP != 2xx

result = response.json()  # {"success": True}

# Exemple 2 - Envoi Multipart avec fichier joint

import requests

PUNA_API_KEY    = "gk_prod_7f3a2b9c"
PUNA_SITE_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaXRlSWQiOjEsImNjIjoiYWJjMTIzIn0.SIGNATURE"
FORM_CODE       = "devis_acme_corp"
FILE_PATH       = "./devis_projet.pdf"

headers = {
    "X-KEY-PUNA": PUNA_API_KEY,
    "Authorization": f"Bearer {PUNA_SITE_TOKEN}",
    # Ne pas définir Content-Type manuellement - requests le fait avec le boundary
}

fields = {
    "nom": "Bob Dupont",
    "email": "bob@example.com",
    "message": "Voir document joint.",
}

with open(FILE_PATH, "rb") as f:
    files = {
        "document": (
            "devis_projet.pdf",
            f,
            "application/pdf",
        )
    }
    response = requests.post(
        f"https://votre-puna.example.com/api/v1/send/{FORM_CODE}",
        data=fields,
        files=files,
        headers=headers,
        timeout=30,
    )

response.raise_for_status()
result = response.json()  # {"success": True}