---
title: "Documentation API et CLI : Node, Python, Go et PHP | SingleFax"
description: "Envoyez un fax depuis votre backend avec l’API REST et la CLI npm SingleFax. Crédits prépayés, clés API, OpenAPI et exemples curl, Node, Python, Go et PHP."
canonical_url: "https://singlefax.com/fr/developpeurs"
meta:
  "og:description": "Envoyez un fax depuis votre backend avec l’API REST et la CLI npm SingleFax. Crédits prépayés, clés API, OpenAPI et exemples curl, Node, Python, Go et PHP."
  "og:image": "https://singlefax.com/_og/s/o_1927295c3d9d18bf.jpeg"
  "og:image:alt": "Documentation API et CLI : Node, Python, Go et PHP"
  "og:image:height": "630"
  "og:image:type": image/jpeg
  "og:image:width": "1200"
  "og:title": "Envoyer un fax depuis votre backend"
---

> Index of every page on this site: [llms.txt](https://singlefax.com/llms.txt)

[singlefax](https://singlefax.com/fr)

[Envoyer et recevoir](https://singlefax.com/fr/envoyer-un-fax) [Pour les entreprises](https://singlefax.com/fr/pour-les-entreprises)Solutions [Tarifs](https://singlefax.com/fr/tarifs) [Blog](https://singlefax.com/fr/blog)

<details>

<summary>Langue</summary>



<a href="https://singlefax.com/developers">English</a><a href="https://singlefax.com/de/entwickler">Deutsch</a><a href="https://singlefax.com/es/desarrolladores">Español</a><a href="https://singlefax.com/it/sviluppatori">Italiano</a><a href="https://singlefax.com/zh-tw/%E9%96%8B%E7%99%BC%E4%BA%BA%E5%93%A1">繁體中文</a><a href="https://singlefax.com/pt-br/desenvolvedores">Português do Brasil</a><a href="https://singlefax.com/tr/gelistiriciler">Türkçe</a><a href="https://singlefax.com/ko/%EA%B0%9C%EB%B0%9C%EC%9E%90">한국어</a><a href="https://singlefax.com/ja/%E9%96%8B%E7%99%BA%E8%80%85%E5%90%91%E3%81%91">日本語</a><a href="https://singlefax.com/ar/%D8%A7%D9%84%D9%85%D8%B7%D9%88%D8%B1%D9%88%D9%86">العربية</a>

</details>

[Se connecter](https://singlefax.com/fr/connexion)

REST · CLI · OpenAPI

# Documentation API et CLI SingleFax

Clé API et crédits prépayés. CLI officielle npm ou exemples REST à copier en curl, Node, Python, Go ou PHP. Les applications de chat doivent utiliser MCP.

[Créer une clé API](https://singlefax.com/fr/connexion?redirect=/dashboard/api-keys) [CLI npm](https://www.npmjs.com/package/@singlefax/cli) [OpenAPI](https://singlefax.com/openapi.json)

## CLI

`npx @singlefax/cli send FILE --to +E164`, avec le fichier Word, Excel, PDF ou image d’origine, sans conversion préalable en PDF.

## REST

`POST /api/v1/faxes` avec Bearer `sf_live_…` et un `Idempotency-Key`.

## MCP pour le chat

Cursor, Claude, Codex, ChatGPT. OAuth, pas de clé API. [Installer MCP](https://singlefax.com/fr/agents-ia-fax).

## Démarrage rapide

1. Créez une clé à portée limitée sur [Clés API](https://singlefax.com/fr/connexion?redirect=/dashboard/api-keys), avec `fax:send`, `fax:read`, `inbox:read`, `credits:read`.
2. Achetez des crédits dans le compte ou via `npx @singlefax/cli credits buy`.
3. Envoyez avec la CLI ci-dessous ou `POST /api/v1/faxes`.

URL de base `https://api.singlefax.com`, mêmes chemins sur `https://singlefax.com`. Les clés `sf_test_` n’envoient pas de fax réels. Ne placez pas de clé dans le navigateur.

## CLI

Node 20 minimum. Configuration : `SINGLEFAX_API_KEY` ou `~/.config/singlefax/config.json`. Fournissez le fichier original, Word, Excel, PowerPoint, PDF, texte ou image, sans conversion préalable en PDF. Ne convient pas à MCP OAuth ni Stripe MPP.

terminalCopier

```
export SINGLEFAX_API_KEY=sf_live_…

npx @singlefax/cli send ./document.docx --to +14155552671
npx @singlefax/cli send ./document.pdf --to +14155552671 --wait --json
```

quote, status, creditsCopier

```
npx @singlefax/cli quote --to +14155552671 --pages 12
npx @singlefax/cli status <id>
npx @singlefax/cli list
npx @singlefax/cli numbers
npx @singlefax/cli numbers buy
npx @singlefax/cli credits
npx @singlefax/cli credits buy --dollars 20
```

## Envoyer un fax

Une requête : document en base64 et destination. PDF, Word, Excel, PowerPoint, texte ou images. `Idempotency-Key` est obligatoire. Réutiliser la clé avec un contenu différent renvoie 409.

curlJavaScriptPythonGoPHP

terminalCopier

```
PDF_B64="$(base64 < document.pdf | tr -d '\n')"

curl -sS https://api.singlefax.com/api/v1/faxes \
  -H "Authorization: Bearer $SINGLEFAX_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d "{\"to\":\"+14155552671\",\"base64\":\"$PDF_B64\"}"
```

send.mjsCopier

```
import { readFile } from 'node:fs/promises'
import { randomUUID } from 'node:crypto'

const api = 'https://api.singlefax.com'
const key = process.env.SINGLEFAX_API_KEY
const pdf = await readFile('./document.pdf')

const res = await fetch(`${api}/api/v1/faxes`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${key}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': randomUUID(),
  },
  body: JSON.stringify({
    to: '+14155552671',
    base64: pdf.toString('base64'),
  }),
})
console.log(await res.json())
```

send.pyCopier

```
import base64, json, os, urllib.request, uuid
from pathlib import Path

API = "https://api.singlefax.com"
KEY = os.environ["SINGLEFAX_API_KEY"]
pdf = Path("document.pdf").read_bytes()

req = urllib.request.Request(
    f"{API}/api/v1/faxes",
    data=json.dumps({
        "to": "+14155552671",
        "base64": base64.b64encode(pdf).decode(),
    }).encode(),
    headers={
        "Authorization": f"Bearer {KEY}",
        "Content-Type": "application/json",
        "Idempotency-Key": str(uuid.uuid4()),
    },
    method="POST",
)
with urllib.request.urlopen(req) as res:
    print(res.read().decode())
```

send.goCopier

```
package main

import (
	"bytes"
	"encoding/base64"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	pdf, err := os.ReadFile("document.pdf")
	if err != nil {
		panic(err)
	}
	body, _ := json.Marshal(map[string]string{
		"to":     "+14155552671",
		"base64": base64.StdEncoding.EncodeToString(pdf),
	})
	req, _ := http.NewRequest("POST", "https://api.singlefax.com/api/v1/faxes", bytes.NewReader(body))
	req.Header.Set("Authorization", "Bearer "+os.Getenv("SINGLEFAX_API_KEY"))
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("Idempotency-Key", "send-document-1")
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(res.Status, string(out))
}
```

send.phpCopier

```
<?php
$pdf = base64_encode(file_get_contents('document.pdf'));
$ch = curl_init('https://api.singlefax.com/api/v1/faxes');
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => [
    'Authorization: Bearer ' . getenv('SINGLEFAX_API_KEY'),
    'Content-Type: application/json',
    'Idempotency-Key: send-document-1',
  ],
  CURLOPT_POSTFIELDS => json_encode(['to' => '+14155552671', 'base64' => $pdf]),
  CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);
```

## Fichiers volumineux : téléverser, puis envoyer

La CLI crée un jeton d’import, envoie les octets par PUT, puis utilise `uploadToken`. Le PUT exige aussi le jeton Bearer. Préférez ce parcours à un gros fichier dans du JSON. Ne convertissez pas d’abord en PDF.

curlJavaScriptPythonGoPHP

terminalCopier

```
UPLOAD=$(curl -sS https://api.singlefax.com/api/v1/uploads \
  -H "Authorization: Bearer $SINGLEFAX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"contentType":"application/pdf"}')

UPLOAD_URL=$(printf '%s' "$UPLOAD" | python3 -c "import json,sys; print(json.load(sys.stdin)['uploadUrl'])")
TOKEN=$(printf '%s' "$UPLOAD" | python3 -c "import json,sys; print(json.load(sys.stdin)['uploadToken'])")

curl -sS -X PUT "$UPLOAD_URL" \
  -H "Authorization: Bearer $SINGLEFAX_API_KEY" \
  -H "Content-Type: application/pdf" \
  --data-binary @document.pdf

curl -sS https://api.singlefax.com/api/v1/faxes \
  -H "Authorization: Bearer $SINGLEFAX_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d "{\"to\":\"+14155552671\",\"uploadToken\":\"$TOKEN\"}"
```

upload-send.mjsCopier

```
import { readFile } from 'node:fs/promises'
import { randomUUID } from 'node:crypto'

const api = 'https://api.singlefax.com'
const key = process.env.SINGLEFAX_API_KEY
const auth = { Authorization: `Bearer ${key}` }
const pdf = await readFile('./document.pdf')

const upload = await fetch(`${api}/api/v1/uploads`, {
  method: 'POST',
  headers: { ...auth, 'Content-Type': 'application/json' },
  body: JSON.stringify({ contentType: 'application/pdf', maxBytes: pdf.byteLength }),
}).then((r) => r.json())

await fetch(upload.uploadUrl, {
  method: 'PUT',
  headers: { ...auth, 'Content-Type': 'application/pdf' },
  body: pdf,
})

const fax = await fetch(`${api}/api/v1/faxes`, {
  method: 'POST',
  headers: {
    ...auth,
    'Content-Type': 'application/json',
    'Idempotency-Key': randomUUID(),
  },
  body: JSON.stringify({ to: '+14155552671', uploadToken: upload.uploadToken }),
}).then((r) => r.json())

console.log(fax)
```

upload\_send.pyCopier

```
import json, os, urllib.request, uuid
from pathlib import Path

API = "https://api.singlefax.com"
KEY = os.environ["SINGLEFAX_API_KEY"]
pdf = Path("document.pdf").read_bytes()

def request(url, *, data=None, method="GET", headers=None, content_type="application/json"):
    req = urllib.request.Request(
        url,
        data=data,
        headers={
            "Authorization": f"Bearer {KEY}",
            "Content-Type": content_type,
            **(headers or {}),
        },
        method=method,
    )
    with urllib.request.urlopen(req) as res:
        return res.read()

upload = json.loads(request(
    f"{API}/api/v1/uploads",
    method="POST",
    data=json.dumps({"contentType": "application/pdf", "maxBytes": len(pdf)}).encode(),
))
request(upload["uploadUrl"], method="PUT", data=pdf, content_type="application/pdf")
fax = request(
    f"{API}/api/v1/faxes",
    method="POST",
    data=json.dumps({"to": "+14155552671", "uploadToken": upload["uploadToken"]}).encode(),
    headers={"Idempotency-Key": str(uuid.uuid4())},
)
print(fax.decode())
```

upload\_send.goCopier

```
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	key := os.Getenv("SINGLEFAX_API_KEY")
	pdf, err := os.ReadFile("document.pdf")
	if err != nil {
		panic(err)
	}

	upBody, _ := json.Marshal(map[string]any{"contentType": "application/pdf", "maxBytes": len(pdf)})
	upReq, _ := http.NewRequest("POST", "https://api.singlefax.com/api/v1/uploads", bytes.NewReader(upBody))
	upReq.Header.Set("Authorization", "Bearer "+key)
	upReq.Header.Set("Content-Type", "application/json")
	upRes, err := http.DefaultClient.Do(upReq)
	if err != nil {
		panic(err)
	}
	defer upRes.Body.Close()
	var upload struct {
		UploadToken string `json:"uploadToken"`
		UploadUrl   string `json:"uploadUrl"`
	}
	json.NewDecoder(upRes.Body).Decode(&upload)

	put, _ := http.NewRequest("PUT", upload.UploadUrl, bytes.NewReader(pdf))
	put.Header.Set("Authorization", "Bearer "+key)
	put.Header.Set("Content-Type", "application/pdf")
	if _, err := http.DefaultClient.Do(put); err != nil {
		panic(err)
	}

	sendBody, _ := json.Marshal(map[string]string{"to": "+14155552671", "uploadToken": upload.UploadToken})
	faxReq, _ := http.NewRequest("POST", "https://api.singlefax.com/api/v1/faxes", bytes.NewReader(sendBody))
	faxReq.Header.Set("Authorization", "Bearer "+key)
	faxReq.Header.Set("Content-Type", "application/json")
	faxReq.Header.Set("Idempotency-Key", "send-document-1")
	faxRes, err := http.DefaultClient.Do(faxReq)
	if err != nil {
		panic(err)
	}
	defer faxRes.Body.Close()
	out, _ := io.ReadAll(faxRes.Body)
	fmt.Println(string(out))
}
```

upload-send.phpCopier

```
<?php
$key = getenv('SINGLEFAX_API_KEY');
$pdf = file_get_contents('document.pdf');

$ch = curl_init('https://api.singlefax.com/api/v1/uploads');
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer $key",
    'Content-Type: application/json',
  ],
  CURLOPT_POSTFIELDS => json_encode(['contentType' => 'application/pdf', 'maxBytes' => strlen($pdf)]),
  CURLOPT_RETURNTRANSFER => true,
]);
$upload = json_decode(curl_exec($ch), true);

$ch = curl_init($upload['uploadUrl']);
curl_setopt_array($ch, [
  CURLOPT_CUSTOMREQUEST => 'PUT',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer $key",
    'Content-Type: application/pdf',
  ],
  CURLOPT_POSTFIELDS => $pdf,
  CURLOPT_RETURNTRANSFER => true,
]);
curl_exec($ch);

$ch = curl_init('https://api.singlefax.com/api/v1/faxes');
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer $key",
    'Content-Type: application/json',
    'Idempotency-Key: send-document-1',
  ],
  CURLOPT_POSTFIELDS => json_encode(['to' => '+14155552671', 'uploadToken' => $upload['uploadToken']]),
  CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);
```

## Référence REST

| Méthode | Chemin | Authentification | Notes |
| --- | --- | --- | --- |
| POST | /api/v1/faxes | fax:send | Idempotency-Key required. JSON { to, base64 \| uploadToken } or multipart file. |
| GET | /api/v1/faxes | fax:read | List. Query limit, offset. |
| GET | /api/v1/faxes/{id} | fax:read | Status including latest delivery attempt. |
| POST | /api/v1/faxes/quote | fax:read | { to, pages? \| base64? }, quote without charging. |
| POST | /api/v1/uploads | fax:send | Returns uploadToken + uploadUrl. PUT the bytes, then send with uploadToken. |
| GET | /api/v1/credits | credits:read | Prepaid balance. |
| POST | /api/v1/credits/checkout | credits:checkout | { amountCents }. Stripe Checkout for a credit pack. |
| GET | /api/v1/received-faxes | inbox:read | Inbound inbox list. Query limit, cursor. No transcripts in list. |
| GET | /api/v1/received-faxes/{id} | inbox:read | Inbound detail with bounded transcript slice. HIPAA Secure content is omitted. |
| GET | /api/v1/numbers | fax:read | Active fax numbers. |
| POST | /api/v1/numbers | credits:checkout | { sku?, country?, state? }, default inbound\_30day. Returns checkoutUrl + reserved phoneNumber. |
| GET | /api/v1/skus | public | Catalog. Same shape as MCP list\_skus. |
| POST | /api/v1/checkout | credits:checkout | { sku }, credit\_pack, inbound, subscriptions, lifetime. |

Schémas complets : [openapi.json](https://singlefax.com/openapi.json). Changements incompatibles : [politique de versionnement](https://singlefax.com/fr/gestion-des-versions), préavis Sunset de 90 jours. HTTP 402 sur cette API de crédits signifie un solde insuffisant. Le 402 MPP concerne seulement `POST /api/v1/machine/faxes`.

## Webhooks

Événements signés `fax.queued`, `fax.delivered`, `fax.failed` et `credits.low_balance`. Vérifiez `SingleFax-Signature`, `t=,v1=`, sur le corps brut. HMAC-SHA256 de `timestamp.payload`. Ajoutez un point d’accès dans [webhooks du compte](https://singlefax.com/fr/connexion?redirect=/dashboard/webhooks).

JavaScriptPython

verify.mjsCopier

```
import { createHmac, timingSafeEqual } from 'node:crypto'

export function verifySingleFaxSignature(rawBody, signatureHeader, secret, toleranceSeconds = 300) {
  const parts = Object.fromEntries(signatureHeader.split(',').map((kv) => kv.split('=')))
  const timestamp = Number(parts.t)
  if (!Number.isFinite(timestamp) || !parts.v1) return false
  if (Math.abs(Math.floor(Date.now() / 1000) - timestamp) > toleranceSeconds) return false
  const expected = createHmac('sha256', secret).update(`${timestamp}.${rawBody}`).digest('hex')
  const a = Buffer.from(parts.v1)
  const b = Buffer.from(expected)
  return a.length === b.length && timingSafeEqual(a, b)
}
```

verify.pyCopier

```
import hashlib, hmac, time

def verify_singlefax_signature(payload: bytes, header: str, secret: str, tolerance: int = 300) -> bool:
    parts = dict(p.split("=", 1) for p in header.split(","))
    timestamp = int(parts["t"])
    if abs(int(time.time()) - timestamp) > tolerance:
        return False
    expected = hmac.new(
        secret.encode(),
        f"{timestamp}.".encode() + payload,
        hashlib.sha256,
    ).hexdigest()
    return hmac.compare_digest(expected, parts["v1"])
```

## Contraintes

- Gardez les clés API côté serveur. N’intégrez pas `sf_live_` dans une page web.
- N’envoyez pas de PHI. Les organismes concernés utilisent HIPAA Secure Mode sur le site avec un BAA électronique.
- Destinations E.164 valides. PDF, Word, Excel, PowerPoint, RTF, texte brut et images ; types MIME dans OpenAPI. Ne convertissez pas en PDF au préalable, nous le faisons avant l’envoi.
- MCP de chat et Stripe MPP : [/agents](https://singlefax.com/fr/agents-ia-fax), [mpp.md](https://singlefax.com/mpp.md) et [MPP ou Instant Checkout](https://singlefax.com/blog/stripe-machine-payments-protocol).

## Questions fréquentes

CLI, REST ou MCP ?

Faut-il des crédits avant d’envoyer ?

Puis-je utiliser des clés sf\_test\_ ?

Existe-t-il un SDK officiel ?

Est-ce le parcours HIPAA ?

## Documentation lisible par les machines

Markdown simple et OpenAPI pour les robots et agents de programmation. Les mêmes informations que sur cette page.

[Guide d’authentification](https://singlefax.com/fr/authentification) [Référence OpenAPI](https://singlefax.com/fr/openapi) [developers.md](https://singlefax.com/developers.md) [openapi.json](https://singlefax.com/openapi.json) [auth.md](https://singlefax.com/auth.md) [llms.txt](https://singlefax.com/llms.txt) [MCP et agents](https://singlefax.com/fr/agents-ia-fax) [MPP ou Instant Checkout](https://singlefax.com/blog/stripe-machine-payments-protocol) [versioning.md](https://singlefax.com/versioning.md)

[singlefax](https://singlefax.com/fr)

Envoyez ponctuellement. Recevez quand vous en avez besoin.

[![Disponible sur Google Play](https://singlefax.com/images/google-play-badge.png)](https://play.google.com/store/apps/details?id=com.monocube.singlefax) [Ajouter à Chrome](https://chromewebstore.google.com/detail/singlefax-fax-a-document/ojpmpilgkmjcfebhpkdmmjlkbcifkkej) [SingleFax sur LinkedIn](https://www.linkedin.com/company/singlefax/) [SingleFax sur Facebook](https://www.facebook.com/singlefax) [SingleFax sur Instagram](https://www.instagram.com/singlefax.app) [SingleFax sur Threads](https://www.threads.com/@singlefax.app) [SingleFax sur YouTube](https://www.youtube.com/@singlefax) [SingleFax sur GitHub](https://github.com/SingleFax)

## Services de fax

- [Envoyer un fax](https://singlefax.com/fr/envoyer-un-fax?type=send)
- [Recevoir des fax](https://singlefax.com/fr/envoyer-un-fax?type=receive)
- [Numéro gratuit pour 24 heures](https://singlefax.com/fr/numero-de-fax-gratuit)
- [Numéro à vie](https://singlefax.com/fr/numero-fax-a-vie)
- [Portabilité du numéro](https://singlefax.com/fr/transfert-numero-fax)
- [Fax de test](https://singlefax.com/fr/numero-fax-test)
- [Offres entreprises](https://singlefax.com/fr/pour-les-entreprises)
- [HIPAA Secure](https://singlefax.com/fr/fax-hipaa)
- [Fax en ligne](https://singlefax.com/fr/fax-en-ligne)
- [Fax par e-mail](https://singlefax.com/fr/fax-par-email)
- [Fax via WhatsApp](https://singlefax.com/fr/fax-par-whatsapp)

## Dépôts à l’IRS

- [Tous les dépôts à l’IRS](https://singlefax.com/fr/depot-formulaires-irs)
- [EIN · Formulaire SS-4](https://singlefax.com/fr/obtenir-un-ein)
- [Formulaire 5472](https://singlefax.com/fr/deposer-formulaire-5472)
- [Formulaire 7004](https://singlefax.com/fr/deposer-formulaire-7004)
- [Formulaire 2553](https://singlefax.com/fr/deposer-formulaire-2553)
- [Formulaire 2848](https://singlefax.com/fr/deposer-formulaire-2848)
- [Formulaire 4506-T](https://singlefax.com/fr/deposer-formulaire-4506-t)
- [Formulaire 8821](https://singlefax.com/fr/deposer-formulaire-8821)
- [Formulaire 8802](https://singlefax.com/fr/deposer-formulaire-8802)
- [Formulaire 8655](https://singlefax.com/fr/deposer-formulaire-8655)
- [Formulaire 3911](https://singlefax.com/fr/deposer-formulaire-3911)
- [Formulaire 8233](https://singlefax.com/fr/deposer-formulaire-8233)
- [NY POA-1](https://singlefax.com/fr/deposer-formulaire-ny-poa-1)

## Outils et ressources

- [Outils de fax gratuits](https://singlefax.com/fr/outils-fax-gratuits)
- [Préparer un PDF pour le fax](https://singlefax.com/fr/preparer-un-fax)
- [Page de test à imprimer](https://singlefax.com/fr/page-de-test-fax)
- [Pages de garde](https://singlefax.com/fr/page-de-garde-fax)
- [Application mobile](https://singlefax.com/fr/application-mobile)
- [Extension Chrome](https://singlefax.com/fr/extension-chrome)
- [Développeurs](https://singlefax.com/fr/developpeurs)
- [Agents IA pour le fax](https://singlefax.com/fr/agents-ia-fax)
- [Gestion des versions](https://singlefax.com/fr/gestion-des-versions)
- [Annuaire des fax du Congrès](https://singlefax.com/fr/annuaire-fax/congres)
- [Annuaire des fax du Sénat](https://singlefax.com/fr/annuaire-fax/senat)
- [Annuaire des fax des gouverneurs](https://singlefax.com/fr/annuaire-fax/gouverneurs)

## SingleFax

- [Tarifs](https://singlefax.com/fr/tarifs)
- [Blog](https://singlefax.com/fr/blog)
- [À propos](https://singlefax.com/fr/a-propos)
- [Contact](https://singlefax.com/fr/contact)
- [Assistance](https://singlefax.com/fr/assistance)

© 2026 SingleFax

[Confidentialité](https://singlefax.com/fr/confidentialite) [Conditions d’utilisation](https://singlefax.com/fr/conditions-utilisation) [Remboursements](https://singlefax.com/fr/remboursements) [Signaler un abus](https://singlefax.com/fr/signaler-un-abus)

```json
{"@context":"https://schema.org","@graph":[{"@id":"https://singlefax.com/fr#website","@type":"WebSite","description":"Avec SingleFax, envoyez et recevez des fax à l’unité depuis votre téléphone ou votre ordinateur. Aucune inscription ni création de compte nécessaire.","inLanguage":"fr","name":"SingleFax – Envoyez et recevez des fax à l’unité","url":"https://singlefax.com/fr","translationOfWork":{"@id":"https://singlefax.com/#website"}},{"@id":"https://singlefax.com/fr/developpeurs#webpage","description":"Envoyez un fax depuis votre backend avec l’API REST et la CLI npm SingleFax. Crédits prépayés, clés API, OpenAPI et exemples curl, Node, Python, Go et PHP.","name":"Documentation API et CLI : Node, Python, Go et PHP","url":"https://singlefax.com/fr/developpeurs","@type":["WebPage","FAQPage"],"breadcrumb":{"@id":"https://singlefax.com/fr/developpeurs#breadcrumb"},"isPartOf":{"@id":"https://singlefax.com/fr#website"},"mainEntity":[{"@id":"https://singlefax.com/fr/developpeurs#/schema/question/1"},{"@id":"https://singlefax.com/fr/developpeurs#/schema/question/2"},{"@id":"https://singlefax.com/fr/developpeurs#/schema/question/3"},{"@id":"https://singlefax.com/fr/developpeurs#/schema/question/4"},{"@id":"https://singlefax.com/fr/developpeurs#/schema/question/5"}],"potentialAction":[{"@type":"ReadAction","target":["https://singlefax.com/fr/developpeurs"]}]},{"@id":"https://singlefax.com/fr/developpeurs#breadcrumb","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","name":"Accueil","item":"https://singlefax.com/fr","position":1},{"@type":"ListItem","name":"Développeurs","item":"https://singlefax.com/fr/developpeurs","position":2}]},{"@id":"https://singlefax.com/fr/developpeurs#/schema/question/1","@type":"Question","inLanguage":"fr","name":"CLI, REST ou MCP ?","acceptedAnswer":{"@type":"Answer","text":"Pour vos backends, utilisez la CLI npm ou REST avec clé API et crédits prépayés. Transmettez le fichier Word, Excel, PDF ou image d’origine, sans conversion préalable. Les applications de chat, Cursor, Claude, Codex et ChatGPT, utilisent MCP sur /agents. Les agents autonomes avec Stripe Shared Payment Token ou portefeuille Tempo USDC utilisent MPP, HTTP 402, /agents et /blog/stripe-machine-payments-protocol."}},{"@id":"https://singlefax.com/fr/developpeurs#/schema/question/2","@type":"Question","inLanguage":"fr","name":"Faut-il des crédits avant d’envoyer ?","acceptedAnswer":{"@type":"Answer","text":"Oui pour les envois par clé API. Créez une clé, achetez des crédits dans le compte ou via POST /api/v1/credits/checkout, puis envoyez. HTTP 402 sur /api/v1/faxes signifie un solde insuffisant, pas une demande MPP."}},{"@id":"https://singlefax.com/fr/developpeurs#/schema/question/3","@type":"Question","inLanguage":"fr","name":"Puis-je utiliser des clés sf_test_ ?","acceptedAnswer":{"@type":"Answer","text":"Les clés de test n’envoient pas de fax réels. Utilisez sf_live_ pour la livraison. Gardez les clés côté serveur, jamais dans une application web ou mobile."}},{"@id":"https://singlefax.com/fr/developpeurs#/schema/question/4","@type":"Question","inLanguage":"fr","name":"Existe-t-il un SDK officiel ?","acceptedAnswer":{"@type":"Answer","text":"Le paquet officiel est la CLI npm @singlefax/cli. Les exemples Python, Go et PHP utilisent des clients HTTP standard. Aucun SDK distinct Python, Go ou Ruby n’est publié. Utilisez /openapi.json avec des outils OpenAPI pour générer un client."}},{"@id":"https://singlefax.com/fr/developpeurs#/schema/question/5","@type":"Question","inLanguage":"fr","name":"Est-ce le parcours HIPAA ?","acceptedAnswer":{"@type":"Answer","text":"Non. N’envoyez pas de PHI via l’API publique, la CLI, MCP ou MPP. Les organismes concernés utilisent HIPAA Secure Mode sur le site avec un BAA électronique."}}]}
```