Recherche privée de paiements par téléphone
Utilisez POST /v1/payments/search/phone avec une clé conservée sur le serveur et l’autorisation payments:read. Le corps contient phone au format complet +243…, filters et cursor (nul pour la première page). Le numéro ne doit apparaître ni dans l’URL, ni dans les journaux, ni dans un stockage persistant du navigateur. Cette lecture POST ne déclenche pas de paiement et ne nécessite pas de clé d’idempotence ; le quota marchand s’applique.
Les filtres se combinent. Les montants du filtre sont des chaînes décimales en unités mineures ; ceux des résultats sont des entiers, multiples de 100 pour le CDF. Une page contient au plus 25 paiements. Réutilisez next_cursor dans le corps avec le même numéro et les mêmes filtres. Chaque page est un instantané distinct. Un curseur étranger au marchand ou au périmètre est refusé.
La couverture reste INDEXED_PHONE_ADMISSIONS et historical_complete: false. Les anciens paiements, les admissions sans index et les paiements bancaires sans téléphone ne sont pas reconstitués. Un résultat vide ne prouve ni l’absence historique ni la propriété du numéro. Une clé de recherche conservée manquante entraîne une réponse 503, jamais un résultat partiel présenté comme complet.
Pour télécharger le même périmètre, ajoutez /export et envoyez phone, filters avec from/to, et format (csv ou xlsx), sans curseur. La borne from est incluse, to est exclue, sur au plus 366 jours. Au-delà de 5 000 paiements, le service renvoie 413 ; réduisez la période ou les filtres. Le CSV neutralise les formules et le XLSX utilise des cellules texte. N’utilisez pas l’export GET non filtré pour remplacer ce rapport.
Les routes d’équipe sont sous /portal/merchants/{merchant}/payments/search/phone, avec une identité serveur mot de passe + OTP et la version courante X-Futa-Membership-Version. Rôle, révocation, version et quota restent contrôlés. Les réponses sont privées (no-store). Effacez numéro et résultats temporaires lors du passage en arrière-plan, de la déconnexion ou d’un changement d’accès.
Dans le client TypeScript généré, que Futa garde pour son propre usage et ne publie pas, exportPaymentsByPhoneRaw et exportTeamPaymentsByPhoneRaw donnent accès aux en-têtes X-Futa-Phone-Coverage et X-Futa-Historical-Complete avant await response.value() pour obtenir le fichier. Conservez cet avertissement de couverture dans l’interface. Rien ne relance la requête à votre place. L’interface du portail, la propriété réelle des numéros et la production restent des étapes distinctes.