{
  "info": {
    "_postman_id": "3b18f85f-48a6-42d1-ac2c-2a8b49ed97d4",
    "name": "bcs-partner-api",
    "description": "Exemple de collection Postman pour tester une API AFNOR Flow Service avec récupération automatique d'un access token OAuth2 (client_credentials), puis appels Healthcheck, dépôt, recherche et téléchargement de flux.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "_exporter_id": "50267719",
    "_collection_link": "https://go.postman.co/collection/50267719-3b18f85f-48a6-42d1-ac2c-2a8b49ed97d4?source=collection_link"
  },
  "item": [
    {
      "name": "Authentication",
      "item": [
        {
          "name": "OAuth2 - Get Access Token",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Status code is 200', function () {\n    pm.response.to.have.status(200);\n});\nconst json = pm.response.json();\npm.test('Response contains access_token', function () {\n    pm.expect(json.access_token).to.exist;\n});\npm.collectionVariables.set('access_token', json.access_token);\nif (json.token_type) pm.collectionVariables.set('token_type', json.token_type);\nif (json.expires_in) pm.collectionVariables.set('token_expires_in', String(json.expires_in));\nconsole.log('access_token env =', pm.environment.get('access_token'));\nconsole.log('access_token collection =', pm.collectionVariables.get('access_token'));"
                ]
              }
            }
          ],
          "request": {
            "auth": {
              "type": "noauth"
            },
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/x-www-form-urlencoded"
              },
              {
                "key": "User-Agent",
                "value": "BCSolutions"
              }
            ],
            "body": {
              "mode": "urlencoded",
              "urlencoded": [
                {
                  "key": "grant_type",
                  "value": "client_credentials"
                },
                {
                  "key": "client_id",
                  "value": "{{client_id}}"
                },
                {
                  "key": "client_secret",
                  "value": "{{client_secret}}"
                }
              ]
            },
            "url": {
              "raw": "{{oauth_token_url}}",
              "host": [
                "{{oauth_token_url}}"
              ]
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Supervision",
      "item": [
        {
          "name": "Supervisor - Healthcheck",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{access_token}}"
              }
            ],
            "url": {
              "raw": "{{partner_base_url}}/v1/healthcheck",
              "host": [
                "{{partner_base_url}}"
              ],
              "path": [
                "v1",
                "healthcheck"
              ]
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Tenants",
      "item": [
        {
          "name": "1 - List Tenants",
          "request": {
            "auth": {
              "type": "noauth"
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "{{content_type}}"
              },
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{access_token}}"
              }
            ],
            "url": {
              "raw": "{{partner_base_url}}/v1/tenants",
              "host": [
                "{{partner_base_url}}"
              ],
              "path": [
                "v1",
                "tenants"
              ]
            },
            "description": "Exemple volontairement générique : adapte le body au schéma exact de ta PA / de ton swagger."
          },
          "response": []
        },
        {
          "name": "2 - New Tenants",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// Parse la réponse JSON\r\nconst response = pm.response.json();\r\n\r\n// Récupère le legalUnitId\r\nconst tenantSlug = response.tenantSlug;\r\n\r\n// Sauvegarde dans une variable de collection\r\npm.collectionVariables.set(\"tenantSlug\", tenantSlug);\r\n\r\n// Log console (optionnel)\r\nconsole.log(\"tenantSlug enregistré :\", tenantSlug);"
                ]
              }
            }
          ],
          "request": {
            "auth": {
              "type": "noauth"
            },
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{access_token}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\r\n  \"name\": \"{{name}}\",\r\n  \"organizationName\": \"{{organizationName}}\",\r\n  \"principalUserFirstName\": \"{{principalUserFirstName}} \",\r\n  \"principalUserLastName\": \"{{principalUserLastName}} \",\r\n  \"principalUserEmail\": \"{{principalUserEmail}}\",\r\n  \"defaultTheme\": \"default\",\r\n  \"defaultTimezone\": \"Europe/Paris\",\r\n  \"defaultLocale\": \"fr-FR\",\r\n  \"onboardingMode\": \"AUTO\",\r\n  \"allowUiAccess\": true\r\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{partner_base_url}}/v1/tenants",
              "host": [
                "{{partner_base_url}}"
              ],
              "path": [
                "v1",
                "tenants"
              ]
            }
          },
          "response": []
        },
        {
          "name": "3 - Provision",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{access_token}}"
              }
            ],
            "url": {
              "raw": "{{partner_base_url}}/v1/tenants/{{tenantSlug}}/provision",
              "host": [
                "{{partner_base_url}}"
              ],
              "path": [
                "v1",
                "tenants",
                "{{tenantSlug}}",
                "provision"
              ]
            }
          },
          "response": []
        },
        {
          "name": "4 - Get tenant-public-api bootstrap api_access",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// Parse la réponse JSON\r\nconst response = pm.response.json();\r\n\r\n// Récupère le legalUnitId\r\nconst apiAccessId = response.apiAccessId;\r\n\r\n// Sauvegarde dans une variable de collection\r\npm.collectionVariables.set(\"apiAccessId\", apiAccessId);\r\n\r\n// Log console (optionnel)\r\nconsole.log(\"apiAccessId enregistré :\", apiAccessId);"
                ]
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{access_token}}"
              }
            ],
            "url": {
              "raw": "{{partner_base_url}}/v1/tenants/{{tenantSlug}}/public-api-access",
              "host": [
                "{{partner_base_url}}"
              ],
              "path": [
                "v1",
                "tenants",
                "{{tenantSlug}}",
                "public-api-access"
              ]
            }
          },
          "response": []
        },
        {
          "name": "5 - Rotate tenant-public-api bootstrap api_access secret",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{access_token}}"
              }
            ],
            "url": {
              "raw": "{{partner_base_url}}/v1/tenants/{{tenantSlug}}/public-api-access/{{apiAccessId}}/rotate",
              "host": [
                "{{partner_base_url}}"
              ],
              "path": [
                "v1",
                "tenants",
                "{{tenantSlug}}",
                "public-api-access",
                "{{apiAccessId}}",
                "rotate"
              ]
            }
          },
          "response": []
        },
        {
          "name": "6 - Reset password",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// Parse la réponse JSON\r\nconst response = pm.response.json();\r\n\r\n// Récupère le legalUnitId\r\nconst legalUnitId = response.legalUnitId;\r\n\r\n// Sauvegarde dans une variable de collection\r\npm.collectionVariables.set(\"legalUnitId\", legalUnitId);\r\n\r\n// Log console (optionnel)\r\nconsole.log(\"legalUnitId enregistré :\", legalUnitId);"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{access_token}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\r\n  \"countryCode\": \"FR\",\r\n  \"name\": \"OCEANIS J.V. (ODB)\",\r\n  \"siren\": \"453972838\"\r\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{partner_base_url}}/v1/tenants/{{tenantSlug}}/principal-user/reset-password",
              "host": [
                "{{partner_base_url}}"
              ],
              "path": [
                "v1",
                "tenants",
                "{{tenantSlug}}",
                "principal-user",
                "reset-password"
              ]
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Directory",
      "item": [
        {
          "name": "1 - Search French directory by SIREN",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{access_token}}"
              }
            ],
            "url": {
              "raw": "{{partner_base_url}}/v1/tenants/{{tenantSlug}}/directory/french?q=siren:\"103327797\"",
              "host": [
                "{{partner_base_url}}"
              ],
              "path": [
                "v1",
                "tenants",
                "{{tenantSlug}}",
                "directory",
                "french"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "siren:\"103327797\""
                }
              ]
            }
          },
          "response": []
        },
        {
          "name": "2 - Search French directory by NAME",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{access_token}}"
              }
            ],
            "url": {
              "raw": "{{partner_base_url}}/v1/tenants/{{tenantSlug}}/directory/french?q=name:\"SYSPERTEC GROUP\"",
              "host": [
                "{{partner_base_url}}"
              ],
              "path": [
                "v1",
                "tenants",
                "{{tenantSlug}}",
                "directory",
                "french"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "name:\"SYSPERTEC GROUP\""
                }
              ]
            }
          },
          "response": []
        },
        {
          "name": "3 - Search French directory by SIRET",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{access_token}}"
              }
            ],
            "url": {
              "raw": "{{partner_base_url}}/v1/tenants/{{tenantSlug}}/directory/french?q=siret:\"45389580700023\"",
              "host": [
                "{{partner_base_url}}"
              ],
              "path": [
                "v1",
                "tenants",
                "{{tenantSlug}}",
                "directory",
                "french"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "siret:\"45389580700023\""
                }
              ]
            }
          },
          "response": []
        },
        {
          "name": "4 - Search French directory by PA",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{access_token}}"
              }
            ],
            "url": {
              "raw": "{{partner_base_url}}/v1/tenants/{{tenantSlug}}/directory/french?q=name:\"Swile\"&withPlatformDetails=true",
              "host": [
                "{{partner_base_url}}"
              ],
              "path": [
                "v1",
                "tenants",
                "{{tenantSlug}}",
                "directory",
                "french"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "name:\"Swile\""
                },
                {
                  "key": "withPlatformDetails",
                  "value": "true"
                }
              ]
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Legal Unit (Sandbox only - manual onboarding)",
      "item": [
        {
          "name": "1 - Create a legal unit",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// Parse la réponse JSON\r\nconst response = pm.response.json();\r\n\r\n// Récupère le legalUnitId\r\nconst legalUnitId = response.legalUnitId;\r\n\r\n// Sauvegarde dans une variable de collection\r\npm.collectionVariables.set(\"legalUnitId\", legalUnitId);\r\n\r\n// Log console (optionnel)\r\nconsole.log(\"legalUnitId enregistré :\", legalUnitId);"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{access_token}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\r\n  \"countryCode\": \"FR\",\r\n  \"name\": \"BATIMAT\",\r\n  \"siren\": \"310071865\"\r\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{partner_base_url}}/v1/tenants/{{tenantSlug}}/legal-units",
              "host": [
                "{{partner_base_url}}"
              ],
              "path": [
                "v1",
                "tenants",
                "{{tenantSlug}}",
                "legal-units"
              ]
            }
          },
          "response": []
        },
        {
          "name": "2 - Start a claim/onboarding for a tenant's legal unit",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{access_token}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\r\n  \"registerDomesticFr\": true,\r\n  \"registerPeppolInternational\": true\r\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{partner_base_url}}/v1/tenants/{{tenantSlug}}/legal-units/{{legalUnitId}}/claim",
              "host": [
                "{{partner_base_url}}"
              ],
              "path": [
                "v1",
                "tenants",
                "{{tenantSlug}}",
                "legal-units",
                "{{legalUnitId}}",
                "claim"
              ]
            }
          },
          "response": []
        },
        {
          "name": "3 - Approve manual KYB for a tenant's legal unit",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{access_token}}"
              }
            ],
            "url": {
              "raw": "{{partner_base_url}}/v1/tenants/{{tenantSlug}}/legal-units/{{legalUnitId}}/kyb/approve",
              "host": [
                "{{partner_base_url}}"
              ],
              "path": [
                "v1",
                "tenants",
                "{{tenantSlug}}",
                "legal-units",
                "{{legalUnitId}}",
                "kyb",
                "approve"
              ]
            }
          },
          "response": []
        },
        {
          "name": "4 - Get state for a tenant's legal unit",
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{access_token}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{partner_base_url}}/v1/tenants/{{tenantSlug}}/legal-units/{{legalUnitId}}/onboarding/state",
              "host": [
                "{{partner_base_url}}"
              ],
              "path": [
                "v1",
                "tenants",
                "{{tenantSlug}}",
                "legal-units",
                "{{legalUnitId}}",
                "onboarding",
                "state"
              ]
            }
          },
          "response": []
        },
        {
          "name": "5 - Create an office",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// Parse la réponse JSON\r\nconst response = pm.response.json();\r\n\r\n// Récupère le legalUnitId\r\nconst officeId = response.officeId;\r\n\r\n// Sauvegarde dans une variable de collection\r\npm.collectionVariables.set(\"officeId\", officeId);\r\n\r\n// Log console (optionnel)\r\nconsole.log(\"officeId enregistré :\", officeId);"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{access_token}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\r\n  \"legalUnitId\": \"{{legalUnitId}}\",\r\n  \"name\": \"BOULANGERIE PONT JUVENAL\",\r\n  \"scheme\": \"0009\",\r\n  \"value\": \"89323087000014\",\r\n  \"isPrimary\": true\r\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{partner_base_url}}/v1/tenants/{{tenantSlug}}/offices",
              "host": [
                "{{partner_base_url}}"
              ],
              "path": [
                "v1",
                "tenants",
                "{{tenantSlug}}",
                "offices"
              ]
            }
          },
          "response": []
        },
        {
          "name": "6 - Start a claim/onboarding the office",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{access_token}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\r\n  \"registerDomesticFr\": true,\r\n  \"registerPeppolInternational\": false\r\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{partner_base_url}}/v1/tenants/{{tenantSlug}}/offices/{{officeId}}/claim",
              "host": [
                "{{partner_base_url}}"
              ],
              "path": [
                "v1",
                "tenants",
                "{{tenantSlug}}",
                "offices",
                "{{officeId}}",
                "claim"
              ]
            }
          },
          "response": []
        }
      ]
    }
  ],
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "type": "text/javascript",
        "requests": {},
        "exec": [
          ""
        ]
      }
    },
    {
      "listen": "test",
      "script": {
        "type": "text/javascript",
        "packages": {},
        "requests": {},
        "exec": [
          ""
        ]
      }
    }
  ],
  "variable": [
    {
      "key": "access_token",
      "value": ""
    },
    {
      "key": "token_type",
      "value": ""
    },
    {
      "key": "token_expires_in",
      "value": ""
    },
    {
      "key": "tenantSlug",
      "value": ""
    },
    {
      "key": "legalUnitId",
      "value": ""
    },
    {
      "key": "apiAccessId",
      "value": ""
    },
    {
      "key": "officeId",
      "value": ""
    }
  ]
}