Aller au contenu

Administration Customers

Contrôleur HTTP des actions d'administration sur les comptes investisseurs (recherche, fiches, MFA, freeze, KYC, paiements, parrainage, fiscalité, portefeuille). Source : customers.controller.ts.

Tous les endpoints requièrent une session admin BetterAuth valide (AdminAuthGuard).

GET /administration/customers

Recherche paginée des investisseurs (par email, nom, etc.).

Source : customers.controller.ts#L115.

Query param

  • offset — entier (optionnel)
  • take — entier (défaut : 20)
  • searchField — chaîne trimmée (espaces supprimés, optionnel)

Validés via customerSearchQuery.

Response

{
  "investors": [
    { "id": "uuid", "email": "...", "firstName": "...", "lastName": "...", "lemonwayBalance": 0, "giftBalance": 0, "totalBalance": 0 }
  ],
  "totalCount": 0
}

Type : CustomersResponse.

PUT /administration/customers

Met à jour en masse les fiches investisseurs (édition de profil). Trace l'action via AdminAction (CUSTOMER_BULK_UPDATE).

Source : customers.controller.ts#L126.

Request body

[
  {
    "id": "uuid",
    "email": "...",
    "sex": "...",
    "firstName": "...",
    "lastName": "...",
    "phone": "...",
    "dateOfBirth": "DD-MM-YYYY",
    "citizenship": "...",
    "street": "...",
    "city": "...",
    "postcode": "...",
    "country": "...",
    "cityOfBirth": "...",
    "countryOfBirth": "...",
    "regionCode": "..."
  }
]

Validé via array(customerPatchPayload) (depuis @bricks-common/api-communication-bricksoffice). Tous les champs hors id sont optionnels.

GET /administration/customers/:investorId/boosted-balance

Retourne la vue admin du boosted balance de l'investisseur.

Source : customers.controller.ts#L138.

Path param

  • investorId — UUIDv4

Response

BoostedBalanceResponse (depuis @bricks-common/api-communication-bricksoffice).

GET /administration/customers/:customerId/lemonway-balance

Retourne la balance Lemonway en temps réel de l'investisseur.

Source : customers.controller.ts#L148.

Path param

  • customerId — UUIDv4

Response

LemonwayBalanceResponse.

Erreurs

Code Statut Cause
lemonway.account.not-found 404 Pas de compte Lemonway lié à l'investisseur
lemonway.fetch-failed 500 Échec de l'appel Lemonway

GET /administration/customers/:customerId

Retourne la fiche complète d'un investisseur (profil + informations de parrainage).

Source : customers.controller.ts#L169.

Path param

  • customerId — UUIDv4

Response

CustomerDetail.

Erreurs

Code Statut Cause
Customer <id> not found 404 Investisseur introuvable

POST /administration/customers/:customerId/mfa

Active ou désactive la 2FA pour l'investisseur.

Source : customers.controller.ts#L183.

Pré-conditions

  • L'investisseur doit exister (incluant les soft-deleted)

Path param

  • customerId — UUIDv4

Request body

{ "mfaEnabled": true }

Validé via mfaUpdatePayload.

Erreurs

Code Statut Cause
404 Investisseur introuvable

DELETE /administration/customers/:customerId

Supprime (soft-delete) un investisseur. Trace l'action via AdminAction (CUSTOMER_DELETE).

Source : customers.controller.ts#L203.

Path param

  • customerId — UUIDv4

Erreurs

Code Statut Cause
<error> 412 Pré-conditions de suppression non remplies (propagé par InvestorDeletionService.deleteCustomer)

POST /administration/customers/:customerId/reactivate

Réactive un investisseur précédemment supprimé. Trace l'action via AdminAction (CUSTOMER_REACTIVATE).

Source : customers.controller.ts#L217.

Path param

  • customerId — UUIDv4

Erreurs

Code Statut Cause
<error> 400 Pré-conditions de réactivation non remplies (propagé par InvestorDeletionService.reactivateCustomer)

POST /administration/customers/:customerId/password

Déclenche un reset de mot de passe pour l'investisseur. Trace l'action via AdminAction (CUSTOMER_RESET_PASSWORD).

Source : customers.controller.ts#L229.

Path param

  • customerId — UUIDv4

POST /administration/customers/:customerId/referrer-code

Définit ou met à jour le code parrain (referrer) de l'investisseur. Trace l'action via AdminAction (CUSTOMER_REFER).

Source : customers.controller.ts#L240.

Path param

  • customerId — UUIDv4

Request body

{ "code": "REFCODE123" }

Validé via object({ code: notEmptyString }).

GET /administration/customers/:customerId/referral-info

Retourne les informations de parrainage de l'investisseur.

Source : customers.controller.ts#L254.

Path param

  • customerId — UUIDv4

Response

ReferralInfo.

GET /administration/customers/:customerId/referral-export/download

Télécharge un export Excel (.xlsx) des récompenses de parrainage de l'investisseur.

Source : customers.controller.ts#L264.

Path param

  • customerId — UUIDv4

Response

Binaire application/vnd.openxmlformats-officedocument.spreadsheetml.sheet en pièce jointe (filename bricks-<email>-referral-export-<date>.xlsx).

GET /administration/customers/:customerId/payment-methods

Liste les moyens de paiement (cartes, comptes bancaires) de l'investisseur.

Source : customers.controller.ts#L288.

Path param

  • customerId — UUIDv4

Response

PaymentMethodsResponse.

POST /administration/customers/:customerId/sync-payment-methods-status

Resynchronise le statut des moyens de paiement de l'investisseur avec Lemonway. Trace l'action via AdminAction (CUSTOMER_SYNC_PAYMENT_METHODS_STATUS).

Source : customers.controller.ts#L298.

Path param

  • customerId — UUIDv4

POST /administration/customers/:customerId/add-bank-account

Ajoute un compte bancaire (IBAN/BIC) à l'investisseur, en uploadant un justificatif (RIB). Trace l'action via AdminAction (CUSTOMER_ADD_BANK_ACCOUNT).

Source : customers.controller.ts#L311.

Pré-conditions

  • Un fichier doit être joint (champ file en multipart)

Path param

  • customerId — UUIDv4

Request body

multipart/form-data. Champs :

{
  "iban": "FR...",
  "bic": "BNPAFRPP",
  "file": "<fichier RIB>"
}

Validé via bankAccountCreationPayload (IBAN et BIC vérifiés via ibantools).

Erreurs

Code Statut Cause
file-required 400 Aucun fichier joint
iban-not-valid 400 IBAN invalide
bic-not-valid 400 BIC invalide

PUT /administration/customers/:customerId/activate-bank-account

Active un compte bancaire précédemment ajouté pour l'investisseur. Trace l'action via AdminAction (CUSTOMER_ACTIVATE_BANK_ACCOUNT).

Source : customers.controller.ts#L329.

Path param

  • customerId — UUIDv4

Request body

{ "paymentMethodId": "uuid" }

Validé via bankAccountActivationPayload.

PATCH /administration/customers/:customerId/referral-link/:referralLinkId

Met à jour un lien de parrainage existant (code, % parrain/parrainé, durabilités).

Source : customers.controller.ts#L343.

Path param

  • customerId — UUIDv4
  • referralLinkId — UUIDv4

Request body

{
  "code": "CODE",
  "referrerPerc": 5,
  "refereePerc": 5,
  "referralDurabiltyInDays": 365,
  "refereeDurationInDays": 30
}

Validé via referralLinkPayload. Les pourcentages et durées sont plafonnés par businessRules.referral.limit.

Erreurs

Code Statut Cause
referral-link-not-found 404 Lien de parrainage introuvable
referral-link-not-updated 400 Mise à jour échouée
referral-code-required 400 code vide
referrer-perc-too-high 400 referrerPerc dépasse la limite
referee-perc-too-high 400 refereePerc dépasse la limite
referrer-durability-too-high 400 referralDurabiltyInDays dépasse la limite
referee-durability-too-high 400 refereeDurationInDays dépasse la limite

POST /administration/customers/:customerId/referral-link

Crée un nouveau lien de parrainage pour l'investisseur.

Source : customers.controller.ts#L378.

Path param

  • customerId — UUIDv4

Request body

Identique à PATCH /referral-link/:referralLinkId (validé via referralLinkPayload).

Erreurs

Code Statut Cause
customer-not-found 404 Investisseur introuvable
referral-link-already-exists 400 Un lien existe déjà
referral-link-not-created 400 Création échouée

GET /administration/customers/:customerId/portfolio/home-metrics

Retourne les métriques home (valeur portefeuille, balances) du portefeuille de l'investisseur.

Source : customers.controller.ts#L408.

Path param

  • customerId — UUIDv4

Response

PortfolioMetrics enrichi de withdrawableBalances et giftBalances.

Erreurs

Code Statut Cause
portfolio-wealth.portfolio-current-value-not-available 403 Valeur courante du portefeuille indisponible

GET /administration/customers/:customerId/portfolio/composition

Retourne la composition du portefeuille de l'investisseur.

Source : customers.controller.ts#L437.

Path param

  • customerId — UUIDv4

Response

PortfolioCompositionResponse.

POST /administration/customers/:customerId/freeze

Gèle un compte investisseur (bloque retraits/paiements). Trace l'action via AdminAction (CUSTOMER_FREEZE) et envoie une notification interne Slack.

Source : customers.controller.ts#L447.

Path param

  • customerId — UUIDv4

Request body

{ "reason": "Suspicion de fraude" }

Validé via freezePayload.

GET /administration/customers/:customerId/unfreeze-infos

Retourne les informations nécessaires pour décider si un dégel est sûr (état des transactions en cours).

Source : customers.controller.ts#L466.

Path param

  • customerId — UUIDv4

Response

UnfreezeInfos.

Erreurs

Code Statut Cause
<error> 500 Échec de récupération des informations (propagé par CustomerFreezeService.getUnfreezeInfos)

POST /administration/customers/:customerId/unfreeze (déprécié)

Déprécié — préférer safe-unfreeze. Dégel forcé de l'investisseur. Trace l'action via AdminAction (CUSTOMER_UNFREEZE).

Source : customers.controller.ts#L483.

Path param

  • customerId — UUIDv4

POST /administration/customers/:customerId/safe-unfreeze

Dégel sécurisé qui vérifie l'état avant d'agir. Trace l'action via AdminAction (CUSTOMER_UNFREEZE).

Source : customers.controller.ts#L494.

Path param

  • customerId — UUIDv4

Erreurs

Code Statut Cause
<error> 400 Pré-conditions de dégel sécurisé non remplies (propagé par CustomerFreezeService.safeUnfreeze)

GET /administration/customers/:customerId/admin-login

Connecte l'admin en tant que l'investisseur (impersonation) via le plugin admin Better Auth (clientAuth.api.impersonateUser) : les cookies de session sont relayés dans des en-têtes set-cookie et le corps renvoie { url } (URL du front). Bloque les emails @bricks.co. Envoie une alerte Slack interne et trace l'action via AdminAction (CUSTOMER_ADMIN_LOGIN).

Source : customers.controller.ts#L509.

Pré-conditions

  • L'email de l'investisseur ne doit pas appartenir au domaine interne @bricks.co

Path param

  • customerId — UUIDv4

Erreurs

Code Statut Cause
admin.customer.NOT_FOUND 404 Investisseur introuvable
admin.customer.FORBIDDEN_ACCOUNT 403 Email du domaine interne @bricks.co

POST /administration/customers/:customerId/create-virtual-iban

Crée (ou récupère) un IBAN virtuel Lemonway pour l'investisseur. Trace l'action via AdminAction (CUSTOMER_CREATE_VIRTUAL_IBAN).

Source : customers.controller.ts#L544.

Path param

  • customerId — UUIDv4

Erreurs

Code Statut Cause
404 Investisseur introuvable

GET /administration/customers/:customerId/last-verification-codes

Retourne les derniers codes de vérification (email/SMS) générés pour l'investisseur.

Source : customers.controller.ts#L558.

Path param

  • customerId — UUIDv4

Response

VerificationCodesResponse.

Erreurs

Code Statut Cause
404 Investisseur introuvable

GET /administration/customers/:investorId/tax-form/:year/download

Télécharge un formulaire fiscal (PDF) pour l'investisseur sur une année donnée.

Source : customers.controller.ts#L571.

Path param

  • investorId — UUIDv4
  • year — entier (année)

Query param

  • documentTypetaxForm | taxFormRoyalties | taxFormObligations

Validés via taxFormDownloadParams.

Response

Binaire application/pdf en pièce jointe.

Erreurs

Code Statut Cause
customer-not-found 404 Investisseur introuvable
investor-document.document-not-found 404 Document introuvable
investor-document.pending-generation.retry-later 400 Génération en cours, réessayer plus tard
tax-form.year-not-taxable 400 Année non imposable
investor-document.too-many-attempt-blocking-error 500 Trop de tentatives bloquantes

GET /administration/customers/:customerId/financial-documents

Liste les documents financiers (vue admin) de l'investisseur.

Source : customers.controller.ts#L623.

Path param

  • customerId — UUIDv4

Response

{ "documents": [{ "id": "uuid", "...": "..." }] }

Type : FiscalDocumentsResponse.

Erreurs

Code Statut Cause
404 Investisseur introuvable

GET /administration/customers/:customerId/financial-documents/:documentId/download

Télécharge un document financier spécifique (PDF) de l'investisseur.

Source : customers.controller.ts#L637.

Path param

  • customerId — UUIDv4
  • documentId — UUIDv4

Response

Binaire application/pdf en pièce jointe.

Erreurs

Code Statut Cause
investor-document.document-not-found 404 Document introuvable
investor-document.generation-failed 500 Échec de génération du document

GET /administration/customers/:customerId/tax-rate-requests

Retourne les demandes de taux d'imposition de l'investisseur.

Source : customers.controller.ts#L667.

Path param

  • customerId — UUIDv4

Response

TaxRateRequestsResponse.

Erreurs

Code Statut Cause
404 Investisseur introuvable

GET /administration/customers/:customerId/investment-plan

Retourne les plans d'investissement (épargne automatique) configurés par l'investisseur.

Source : customers.controller.ts#L680.

Path param

  • customerId — UUIDv4

Response

InvestmentPlanResponse.

Erreurs

Code Statut Cause
404 Investisseur introuvable

GET /administration/customers/:customerId/withdraw-whitelist

Retourne le statut de whitelist retraits de l'investisseur.

Source : customers.controller.ts#L693.

Path param

  • customerId — UUIDv4

Response

{ "isWhitelisted": true }

Type : WithdrawWhitelistResponse.

POST /administration/customers/:customerId/withdraw-whitelist

Ajoute l'investisseur à la whitelist de retraits. Trace l'action via AdminAction (WITHDRAW_WHITELIST_ADD).

Source : customers.controller.ts#L704.

Path param

  • customerId — UUIDv4

GET /administration/customers/:customerId/withdraw-requests

Liste les demandes de retrait de l'investisseur.

Source : customers.controller.ts#L715.

Path param

  • customerId — UUIDv4

Response

WithdrawRequestsResponse.

GET /administration/customers/:customerId/portfolio-at-date

Retourne la composition du portefeuille de l'investisseur à une date donnée.

Source : customers.controller.ts#L725.

Path param

  • customerId — UUIDv4

Query param

  • date — date au format YYYY-MM-DD ou date ISO (validée via portfolioAtDateQuery)

Response

{
  "royalties": { "value": "1 234,56 €", "count": 12 },
  "obligationOrLoan": { "value": "5 678,90 €", "count": 5 }
}

Type : PortfolioAtDateResult.

Erreurs

Code Statut Cause
404 Investisseur introuvable

GET /administration/customers/:customerId/market-deals

Liste les deals secondaires (achat/vente) de l'investisseur sur la marketplace.

Source : customers.controller.ts#L756.

Path param

  • customerId — UUIDv4

Response

MarketDealsResponse.

Liens