Le gouvernement saoudien publie plus de 300 000 appels d'offres par an sur Etimad, sa plateforme officielle de marchés publics. La plupart des entreprises les suivent encore manuellement — une connexion quotidienne au portail, un tableur mis à jour chaque semaine. Résultat : des offres clôturées avant soumission, des contrats manqués à quelques heures près.
Etimad expose une API officielle via son portail développeur, et un écosystème de services tiers comble les lacunes laissées ouvertes par le portail officiel. Ce guide couvre l'inscription, l'authentification et l'intégration programmatique — pour que votre processus d'achat public tourne pendant que votre équipe se concentre sur les offres, pas sur les onglets de navigateur.
Ce qu'Etimad offre aux développeurs
Le portail développeur sur apiportal.etimad.sa propose trois produits API officiels :
- Contracts Plus — Interrogation des contrats publics existants et historiques via le numéro de registre commercial (CR), l'identifiant du bénéficiaire ou le numéro 700. Utilisé par les banques et les ERP pour vérifier le profil des fournisseurs avant leur référencement ou leur financement.
- Certificat de Salaire — Fourniture de certificats de salaire certifiés pour les fonctionnaires selon le dernier bulletin de paie traité. Largement utilisé dans les produits de financement bancaire et Fintech.
- Données Ouvertes (Open Data) — Données agrégées de marchés publics pour l'analyse, les tableaux de bord et les pipelines de reporting.
La tarification Contracts Plus est dégressive : de 45 SAR par requête pour moins de 10 requêtes mensuelles à 20 SAR au-delà de 1 000 requêtes. La facturation s'applique aux requêtes réussies (HTTP 200) et échouées (400, 404) — la validation des données en entrée n'est donc pas optionnelle.
Inscription au portail développeur
L'accès est conditionné à une validation préalable. Développeurs indépendants et entreprises privées sont tous deux éligibles, mais le processus démarre par votre registre commercial :
- Connexion à
apiportal.etimad.saavec vos identifiants Etimad Business — liés à votre CR via Nafath. - Parcours des produits API disponibles et sélection du produit adapté à votre cas d'usage.
- Soumission d'une demande d'abonnement. Approbation généralement obtenue en un à trois jours ouvrés.
- Une fois approuvé, création d'une application dans le portail pour générer votre Client ID et Client Secret.
- Tests dans l'environnement sandbox avec les données de contrats et de salaires pré-renseignées avant le passage en production.
L'environnement sandbox vous permet de valider l'intégralité du pipeline d'intégration sans frais par requête.
Authentification : flux Client Credentials
Etimad utilise le flux client credentials. Vous échangez Client ID et Client Secret contre un token Bearer de courte durée de vie, à joindre à chaque requête API.
async function getEtimadToken(): Promise<string> {
const res = await fetch("https://publicapi.etimad.sa/token", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
clientId: process.env.ETIMAD_CLIENT_ID,
clientSecret: process.env.ETIMAD_CLIENT_SECRET,
}),
});
if (!res.ok) throw new Error(`Échec de la requête token : ${res.status}`);
const data = await res.json();
return data.access_token;
}Note : Les URLs exactes des endpoints et la durée de vie du token sont documentées dans l'interface Swagger du portail développeur après souscription. Rafraîchissez le token de façon proactive — stockez l'horodatage d'expiration avec le token plutôt que d'attendre une erreur 401.
Interrogation des données contractuelles
Une fois authentifié, l'endpoint Contracts Plus accepte un identifiant bénéficiaire et retourne les détails des contrats historiques — noms des agences, valeurs, dates et statut d'exécution.
interface ContractRecord {
contractNumber: string;
agencyName: string;
contractValue: number;
startDate: string;
endDate: string;
status: string;
}
async function getContractsByCR(
crNumber: string,
token: string
): Promise<ContractRecord[]> {
const res = await fetch(
`https://publicapi.etimad.sa/contracts/v1/inquiry` +
`?beneficiaryCR=${encodeURIComponent(crNumber)}&beneficiaryIdType=CR`,
{ headers: { Authorization: `Bearer ${token}` } }
);
if (!res.ok) throw new Error(`Échec de la requête : ${res.status}`);
const data = await res.json();
return data.contracts ?? [];
}Un fournisseur ayant exécuté 50 contrats gouvernementaux à pleine valeur représente un profil de risque fondamentalement différent d'un fournisseur avec trois exécutions partielles. Ces données, autrefois enfouies dans des PDF, sont désormais accessibles en un seul appel API.
Suivi des appels d'offres : la pièce manquante
Le portail officiel Etimad n'expose pas d'API temps réel pour les appels d'offres — il se concentre sur les données contractuelles et financières. Des services tiers comme Tenders Alerts comblent ce manque en agrégeant les données de tenders.etimad.sa et en les exposant via des endpoints REST.
Un service de surveillance typique tourne sur une planification toutes les 30 à 60 minutes et pousse les nouvelles opportunités correspondantes vers Slack, votre CRM ou un outil de gestion de projet :
async function fetchNewTenders(apiKey: string, region?: string): Promise<void> {
const params = new URLSearchParams({ status: "open" });
if (region) params.set("region", region);
const res = await fetch(`https://api.tendersalerts.com/tenders?${params}`, {
headers: { "x-api-key": apiKey },
});
if (!res.ok) throw new Error(`Échec de la récupération des offres : ${res.status}`);
const body = await res.json();
for (const tender of body.data ?? []) {
await notifyTeam(tender);
}
}La valeur combinée des deux couches : l'API officielle Etimad vous fournit des données vérifiées sur les fournisseurs et les contrats ; la couche tiers vous donne un flux de deals en temps réel. Ensemble, elles couvrent le cycle d'achat complet sans consultation manuelle du portail.
Quatre modes d'échec à anticiper
Le schéma que nous observons systématiquement lors de l'intégration des plateformes gouvernementales saoudiennes — comme pour WPS et NPHIES — est que la donnée est disponible mais que les hypothèses du pipeline sont incorrectes :
- Expiration du token sur les traitements longs. Ne comptez pas sur une erreur 401 pour déclencher le rafraîchissement. Stockez l'heure d'expiration et rafraîchissez proactivement avant de soumettre un lot.
- Les requêtes échouées sont facturées au même tarif. Validez les numéros CR et identifiants bénéficiaires avant soumission pour éviter de payer pour des données invalides.
- Divergence sandbox/production. Les schémas sandbox peuvent être en retard sur les versions de production. Testez le parsing des réponses sur des données réelles avant la mise en production.
- Absence de pagination. L'historique contractuel des grands fournisseurs peut couvrir des centaines d'enregistrements. Implémentez la pagination dès le départ et définissez un plafond de résultats raisonnable.
Intégration dans votre ERP
Le schéma d'intégration le plus courant pour les entreprises saoudiennes actives sur les marchés publics relie trois plateformes gouvernementales en un seul flux d'achat :
- API Etimad pour la qualification automatique des fournisseurs : avant tout référencement, récupérez l'historique contractuel et évaluez le profil gouvernemental du fournisseur de façon programmatique.
- ZATCA (Fatoorah) pour le rapprochement des factures : après attribution d'un contrat, croisez les bons de commande avec les données de facturation électronique ZATCA pour clore le cycle de paiement sans intervention manuelle.
- Qiwa / Nitaqat pour la conformité de la main-d'oeuvre : les marchés au-dessus d'un certain seuil exigent un Nitaqat valide. Une vérification automatique via Qiwa avant soumission prévient toute disqualification en dernière minute.
La même logique d'automatisation qui réduit les coûts opérationnels en interne s'applique aux achats publics : moins d'interventions manuelles dans la boucle de surveillance, moins d'opportunités manquées et des délais de soumission plus courts.
Automatisez vos marchés publics dès maintenant
L'infrastructure API est en place sur Etimad. Ce qui manque, c'est la couche d'intégration — le service TypeScript, le webhook, le connecteur ERP qui transforme un portail gouvernemental en flux de données actionnable en temps réel par vos systèmes.
Si votre entreprise répond à des marchés publics saoudiens et suit encore Etimad manuellement, c'est un problème de flux de travail que nous pouvons résoudre. Parlez à notre équipe d'intégration pour construire un connecteur Etimad sur mesure — de la qualification des fournisseurs aux alertes d'appels d'offres jusqu'à la vérification des paiements.