> ## Documentation Index
> Fetch the complete documentation index at: https://docs.saspay.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Uploader un fichier

> Étape 1/2 — dépose un binaire, renvoie une URL à réutiliser dans l'attachement

<Warning>
  Dashboard uniquement — cet appel échoue avec `403 dashboard_only` via une clé API. Utilisez le jeton de session obtenu par connexion, voir [Créer un compte et obtenir une clé API](/account-setup).
</Warning>

<Note>
  Cet endpoint n'applique aucun scoping par marchand — il ne fait que stocker un binaire et renvoyer son URL, sans rattachement métier. L'appartenance se tranche à l'étape suivante, en [attachant le document au dossier](/api-reference/kyc/add-document).
</Note>


## OpenAPI

````yaml api-reference/openapi.json POST /merchant-kyc/upload/
openapi: 3.1.0
info:
  title: SasPay API
  description: >-
    API d'encaissement et de paiement mobile money/carte pour l'Afrique de
    l'Ouest et du Centre. Toutes les routes marchand nécessitent une clé API
    secrète (header Authorization: Bearer sk_...).
  version: 1.0.0
servers:
  - url: https://api.saspay.me/api/v1
security:
  - bearerAuth: []
paths:
  /merchant-kyc/upload/:
    post:
      tags:
        - KYC
      summary: Uploader un fichier
      description: >-
        Étape 1/2 du rattachement d'un document — dépose un binaire, renvoie une
        URL absolue à réutiliser telle quelle dans l'attachement au dossier.
        N'applique aucun scoping par marchand : n'importe quel acteur
        authentifié peut uploader.
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - file
              properties:
                file:
                  type: string
                  format: binary
                  description: >-
                    image/jpeg, image/png, image/webp ou application/pdf — 10 Mo
                    maximum
      responses:
        '201':
          description: Fichier stocké
          content:
            application/json:
              example:
                url: >-
                  https://cdn.saspay.me/kyc/8f2c1e9a-6b4d-4a3f-9c1e-2b3d4e5f6a7b.jpg
        '400':
          description: Fichier manquant, type non accepté, ou trop volumineux
          content:
            application/json:
              examples:
                missing_file:
                  summary: Champ file absent
                  value:
                    message: Fichier 'file' requis.
                    code: missing_file
                invalid_file_type:
                  summary: Type de fichier non accepté
                  value:
                    message: Type de fichier non accepté (image ou PDF uniquement).
                    code: invalid_file_type
                file_too_large:
                  summary: Fichier trop volumineux
                  value:
                    message: Fichier trop volumineux (10 Mo max).
                    code: file_too_large
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: sk_live_... / sk_test_...
      description: >-
        Clé API secrète du marchand — header Authorization: Bearer sk_live_xxx
        (ou sk_test_xxx en environnement de test).

````