Skip to content

Concepts

Concepts fondamentaux pour integrer l'API Owem Pay.

Architecture de Securite

L'API utilise trois couches de protection independantes. Toutes sont obligatoires.

Couche 1 -- API Key + Secret

Chaque integrateur recoit une paire d'identifiants (client_id et client_secret). Le secret n'est jamais stocke en clair -- nous conservons uniquement le hash. Lorsqu'une requete arrive, le secret envoye est compare au hash stocke. S'il ne correspond pas, la requete est rejetee immediatement, avant d'atteindre la logique metier.

Couche 2 -- Signature HMAC-SHA512 par Requete

En plus de l'API Key, chaque requete transactionnelle (POST) doit envoyer une signature HMAC-SHA512 dans l'en-tete hmac.

Le processus fonctionne ainsi :

  1. L'integrateur serialise le body de la requete en JSON
  2. Genere le hash HMAC-SHA512 en utilisant le client_secret comme cle
  3. Envoie le hash en hexadecimal dans l'en-tete hmac

De notre cote, nous recalculons le hash avec la meme methode et le comparons a la valeur recue. Si un seul octet du contenu est modifie en transit (par exemple, lors d'une attaque man-in-the-middle), la signature ne correspondra pas et la requete sera rejetee avec une erreur 401. Cette comparaison est effectuee en temps constant (constant-time comparison), ce qui empeche les attaques par timing qui tentent de decouvrir la signature octet par octet.

Couche 3 -- Liste Blanche d'IP Obligatoire

Chaque API Key ne peut etre utilisee qu'a partir d'IPs prealablement autorisees. Meme si quelqu'un a acces aux identifiants, il ne pourra pas utiliser l'API depuis un autre IP. Les requetes provenant d'IPs non autorisees recoivent 403 Forbidden.

Protections Supplementaires

ProtectionDescription
Rate Limiting60 000 requetes/minute par IP. Endpoints non authentifies : 5 req/min
Cloud Armor (WAF)Pare-feu applicatif protegeant le cluster GKE
HTTPS obligatoireTLS 1.2 ou superieur sur toutes les connexions
HSTSHTTP Strict Transport Security active

Details complets : Authentification | HMAC-SHA512

Pourquoi HMAC et non mTLS ?

Le mTLS (mutual TLS) ajoute une authentification via certificat X.509 au niveau de la connexion. C'est une couche valide, mais dans notre contexte le HMAC par requete offre une protection equivalente ou plus adaptee :

AspectmTLSHMAC-SHA512
Ce qu'il valideLa connexion (canal TLS)Chaque requete individuellement
Integrite du payloadNon -- si la connexion est fiable, les requetes passentOui -- toute modification du body rejette la requete
Gestion operationnelleComplexe : emission, rotation, revocation, CRL/OCSPSimple : genere une nouvelle paire, met a jour, invalide la precedente
Incidents courantsCertificats expires ou mal geresRares -- la cle est une chaine de caracteres, sans cycle de vie complexe

Le TLS garantit deja le chiffrement du transport. Le HMAC intervient comme couche supplementaire, garantissant l'integrite et l'authenticite du payload -- ce que le mTLS seul ne couvre pas.

Valeurs Monetaires

L'API Owem Pay utilise deux unites differentes selon la direction :

DirectionUniteEchelleExemple R$ 30,00
Requete envoyee (request body)centavosBRL x 1003000
Reponse recue (response body)unites de baseBRL x 10 000300000

Conversion rapide

  • Pour envoyer : multipliez la valeur en reais par 100. R$ 30,00 = 3000
  • Pour lire les reponses : divisez par 10 000. 300000 / 10 000 = R$ 30,00
  • N'utilisez jamais de virgule flottante -- toujours des entiers

Table de reference

Valeur BRLRequest (centavos)Response (unites de base)
R$ 1,0010010000
R$ 30,003000300000
R$ 150,50150501505000
R$ 1 000,0010000010000000

Attention

La valeur 3000 dans la requete (R$ 30,00) devient 300000 dans la reponse. C'est la meme valeur en BRL, representee dans des unites differentes. Si vous divisez la reponse par 100 au lieu de 10 000, vous obtiendrez R$ 3 000,00 au lieu de R$ 30,00.

External ID

Le champ external_id est un identifiant optionnel que vous definissez dans votre systeme pour suivre les transactions. Il est accepte dans les endpoints de cash-in et cash-out et retourne dans toutes les reponses et webhooks associes.

AttributValeur
ObligatoireNon
Taille maximale128 caracteres
Caracteres autorisesAlphanumeriques, ., _, :, -
Regex^[a-zA-Z0-9._:\-]+$
Exemple"order-9876", "invoice-4521", "ref:2026-03-07:001"

En plus d'etre retourne dans les reponses, vous pouvez consulter une transaction par external_id :

GET /api/external/transactions/ref/{external_id}

Suivi

Utilisez external_id pour correler les transactions Owem Pay avec les commandes, factures ou enregistrements de votre systeme. Les valeurs dupliquees ne sont pas rejetees, mais nous recommandons l'unicite pour faciliter le rapprochement.

Idempotence

Les requetes d'ecriture (POST) acceptent l'en-tete Idempotency-Key pour eviter le traitement en double. Si la meme cle est envoyee dans une seconde requete identique dans les 24 heures, l'API retourne la reponse originale mise en cache au lieu de traiter a nouveau.

Idempotency-Key: unique-request-id-123
AttributValeur
En-teteIdempotency-Key
Taille maximale256 caracteres
TTL du cache24 heures
S'applique aUniquement POST (cash-in, cash-out, refund, webhooks, CPF)
Reponse rejoueeEn-tete X-Idempotent-Replay: true

Important

La cle d'idempotence considere methode + chemin + cle. Deux requetes vers des endpoints differents avec la meme cle sont traitees comme des operations distinctes.

Statuts de Transaction

Cash In (Encaissements)

StatutDescription
activeQR Code genere, en attente de paiement
pendingPaiement detecte, en cours de traitement
completedPaiement confirme et credite sur le compte
failedPaiement echoue
cancelledQR Code expire (24h) ou annule

Cash Out (Envois)

StatutDescription
pending_approvalEn attente d'approbation (flux creer + approuver)
processingEnvoye au SPI, en attente de liquidation
completedLiquide avec succes
failedRejete par le SPI ou erreur de traitement
refundedRembourse (totalement ou partiellement)

End-to-End ID (E2E ID)

Identifiant unique d'une transaction PIX dans l'ecosysteme de la Banque Centrale. Format standard :

E{ISPB}{YYYYMMDDHHMM}{sequentiel}

Exemple : E37839059202603071530000001

ComposantValeurDescription
EPrefixe fixeIdentifie comme E2E ID
37839059ISPB d'Owem Pay8 chiffres
202603071530Date et heure UTCAAAAMMJJHHMM (12 chiffres)
000001Sequentiel6 chiffres

L'E2E ID est genere automatiquement par Owem Pay et retourne dans la reponse de chaque operation PIX. Utilisez-le pour suivre les transactions entre institutions.

Types de Cle PIX

TypeFormatExempleLimite PFLimite PJ
cpf11 chiffres123456789011--
cnpj14 chiffres12345678000190--1
emailE-mail validecontato@empresa.com.br520
phone+55 + indicatif + numero+5511999998888520
evpUUID v4 (cle aleatoire)a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d520

Schema de Reponse

Toutes les reponses de l'API suivent le schema :

Succes

json
{
  "worked": true,
  ...
}

Erreur

json
{
  "worked": false,
  "detail": "Description de l'erreur"
}

Le champ worked indique si l'operation a reussi (true) ou echoue (false). En cas d'erreur, le champ detail decrit le motif.

Owem Pay Instituição de Pagamento — ISPB 37839059