+
diff --git a/docs/_includes/sidebar.html b/docs/_includes/sidebar.html
new file mode 100644
index 00000000..efacb8d8
--- /dev/null
+++ b/docs/_includes/sidebar.html
@@ -0,0 +1,19 @@
+
diff --git a/docs/_includes/submenu.html b/docs/_includes/submenu.html
new file mode 100644
index 00000000..0b5be88e
--- /dev/null
+++ b/docs/_includes/submenu.html
@@ -0,0 +1,10 @@
+
+ {% for childPage in sitePage.childPages %}
+ {% for childrenPage in site[page.lang] %}
+ {% if childrenPage.title == childPage or sitePage.trans_url == childPage %}
+
+
+
diff --git a/docs/_pages/en/authentication.md b/docs/_pages/en/authentication.md
new file mode 100644
index 00000000..04ef0a8c
--- /dev/null
+++ b/docs/_pages/en/authentication.md
@@ -0,0 +1,44 @@
+---
+layout: page
+title: "Authentication"
+lang: en
+permalink: "/authentication/"
+trans_url: "/authentification/"
+---
+
+### Base URL
+
+
+https://api.forms-formulaires.alpha.canada.ca/v1/...
+
+
+
+> _Note: You may need to use a cloud provider such as Microsoft Azure or Amazon Web Services (AWS), to be able to access the endpoint._
+
+### How authentication works
+
+The GC Forms API leverages an OAuth 2.0 Signed JSON Web Token ([JWT](https://jwt.io/)) flow with a self-hosted Identity provider (IDP), Zitadel, to establish machine-to-machine authentication in a safe and secure way for the API endpoint.
+
+Authentication is done through an opaque token, with basic authorization handled via the user profile and the requested form ID. The OAuth server provides a short-lived access token that can be used to make API requests by verifying the client’s JWT that has been signed with a private key and includes their client ID. This access token is valid for 30 minutes.
+
+The API requires authentication with a Government of Canada email, an associated **formID**, a JWT signed with a **Private key** and verified using a **Public key** with the IDP. This token contains a claim to specify the form ID from which it is associated.
+
+### Integration examples
+
+Once you’ve created a form, you can submit mock form submissions to simulate an active form and be able to test generating an access token.
+
+Use these examples as a reference to generate access tokens in your preferred programming language:
+- [.NET / C#](https://github.com/cds-snc/forms-api/blob/main/examples/dotnet/AccessTokenGenerator.cs)
+- [Node.JS / Typescript](https://github.com/cds-snc/forms-api/blob/main/examples/nodejs/accessTokenGenerator.ts)
+- [Python](https://github.com/cds-snc/forms-api/blob/main/examples/python/access_token_generator.py)
+- [Bash /Curl](https://github.com/cds-snc/forms-api/blob/main/examples/bash/get_access_token.sh)
+
+### Authorization header
+
+Use this header for each API request to verify it’s you:
+
+
+ curl \
+ --request GET "$FORMS_URL" \
+ --header "Authorization: Bearer $ACCESS_TOKEN"
+
diff --git a/docs/_pages/en/getting-started.md b/docs/_pages/en/getting-started.md
new file mode 100644
index 00000000..4a5c07da
--- /dev/null
+++ b/docs/_pages/en/getting-started.md
@@ -0,0 +1,21 @@
+---
+layout: page
+title: "Getting started"
+lang: en
+permalink: "/getting-started/"
+trans_url: "/pour-commencer/"
+---
+
+### Overview
+
+The purpose of this API is to allow you to securely and reliably retrieve form submissions directly from an API endpoint. This should help alleviate the effort associated for very high volumes of form submissions. So, rather than having to manually download and sign off on the removal of responses to confirm their retrieval from the database, the API will automate the workflow with systems that talk to each other and exchange data.
+
+### What you will need
+ - A [GC Forms account](https://articles.alpha.canada.ca/forms-formulaires/)
+ - A draft form (Unclassified, Protected A, or Protected B)
+ - An API key (that you generate in Settings > API integration).
+ - A few “mock” responses submitted to the form
+ - A target system where you plan on receiving form submission data
+ - Infrastructure development resources who can craft HTTP requests to reach the API. _No infrastructure development capabilities available? This first version of the API might not be ready for you just yet._
+
+> **IMPORTANT: You must keep this API key secure as it is used to authenticate API requests and could be used to access protected data. Use encrypted email if you must share it with a developer team member to set up the integration.**
diff --git a/docs/_pages/en/getting-support.md b/docs/_pages/en/getting-support.md
new file mode 100644
index 00000000..86e4c431
--- /dev/null
+++ b/docs/_pages/en/getting-support.md
@@ -0,0 +1,10 @@
+---
+layout: page
+title: "Getting support"
+lang: en
+permalink: "/getting-support/"
+trans_url: "/obtenir-du-soutien/"
+---
+We’re open to all questions and welcome any feedback you might have to help us improve. You can get in touch with our team directly with any questions or needs for technical support, by filling out the [Support form](https://forms-formulaires.alpha.canada.ca/en/support).
+
+> Please include your name, email address, the form ID, response IDs (if relevant), and a description of the problem. We'll do our best to be in touch within 2 business days.
diff --git a/docs/_pages/en/home.md b/docs/_pages/en/home.md
new file mode 100644
index 00000000..bf3a2e45
--- /dev/null
+++ b/docs/_pages/en/home.md
@@ -0,0 +1,8 @@
+---
+layout: page
+title: "Home"
+lang: en
+permalink: "/home/"
+trans_url: "/accueil/"
+---
+{% include home.md %}
diff --git a/docs/_pages/en/making-requests.md b/docs/_pages/en/making-requests.md
new file mode 100644
index 00000000..eb89c22e
--- /dev/null
+++ b/docs/_pages/en/making-requests.md
@@ -0,0 +1,443 @@
+---
+layout: page
+title: "Making requests"
+lang: en
+permalink: "/making-requests/"
+trans_url: "/effectuer-des-demandes/"
+childPages:
+ - Retrieving new form submissions
+ - Retrieving specific form submissions
+ - Confirming form submissions
+ - Reporting a problem with a form submission
+ - Getting form questions
+---
+
+The GC Forms API allows you to retrieve form submissions as files in JSON file format. You can get up to 100 form submissions in a batch, and these are available for up to 30 days after submission, given our current data retention periods. Form submissions are encrypted with a public key and can be decrypted by you locally.
+
+### Query parameters
+
+The API requests for GC Forms submission data are possible using query parameters such as:
+ - **{formID}**
+ 25-character alphanumeric string found at the end of the URL for the form or at the start of the
+ file name of the API key.
+ For example: ```clzvj8fzb00226o90r2b7l1gt```.
+ - **{SubmissionName}**
+ 11-character alphanumeric including dashes, sometimes also called the SubmissionID in the GC Forms
+ app.
+ For example: ```e02-08-d732```.
+ - **{ConfirmationCode}**
+ 36-character alphanumeric string that includes dashes, sometimes also called the Receipt code in the
+ GC Forms app.
+ For example: ```620b203c-9836-4000-bf30-1c3bcc26b834```.
+
+### Integration examples
+
+We’ve developed some examples that you can reference or run the program for, that we hope will help make integration easier. Here are the programming languages currently available:
+
+- [.NET / C#](https://github.com/cds-snc/forms-api/tree/main/examples/dotnet)
+- [Node.JS / Typescript](https://github.com/cds-snc/forms-api/tree/main/examples/nodejs)
+- [Python](https://github.com/cds-snc/forms-api/tree/main/examples/python)
+- [Bash /Curl](https://github.com/cds-snc/forms-api/tree/main/examples/bash)
+
+Work with your development team to test out a draft form and ensure the API integration is receiving responses, able to decrypt, check the hash, and confirm the responses or report a problem. Once that process is complete, you are ready to publish your form with this data delivery method.
+
+### Retrieving **new** form submissions
+
+##### HTTP request
+
+This URL path returns a list of submissions that includes the 100 oldest form submissions marked with a “New” status:
+
+
+GET /forms/{formID}/submission/new
+
+
+> _Note: The status of these form submissions will not change to “Downloaded”._
+
+##### Response status
+
+
+ List of new submission names successfully retrieved.
+
+
+
+
+> _Note: The timestamp is in Coordinated Universal Time (UTC)._
+
+### Retrieving **specific** form submissions
+
+#### Getting the form submission
+
+##### HTTP request
+
+This URL path returns one form submission per request based on the respective submission name:
+
+
+GET /forms/{formID}/submission/{submissionName}
+
+
+> _Note: Retrieval is only possible for 1 submission, with 1 download per request. The status of these form submissions will not change to “Downloaded”. To change the status of the form submissions, make a request to confirm form submissions once they are properly received._
+
+##### Response status
+
+
+ Encrypted data of the submission successfully retrieved.
+
+
+
+
404
+
+{
+ "error": "Form submission does not exist"
+}
+
+
+ "Form ID" and/or "Submission name" are incorrect or cannot be found.
+
+
+
+
+#### Decrypting the data
+
+Security of the system is paramount and it is enhanced by encrypting form submissions. While encrypted in HTTPS, we’ve added another layer of security with AES-256-GSM encryption. When you get a form submission it will be encrypted and it will come with an encrypted key, an encrypted nonce, and an encrypted AuthTag. These can be decrypted using the Private key.
+
+### Getting files that were attached to form submissions securely
+
+The retrieval of files attached within submissions is only possible via the API data delivery method. The same storage conditions apply as for submission data, where GC Forms only temporarily keeps data and files until downloaded and confirmed. To learn more about adding a file upload element to your form, consult our [Guidance page](https://articles.alpha.canada.ca/forms-formulaires/files-attachments/).
+
+Files are linked directly within responses (retrieval from AWS) and are accompanied by an attribute that shows whether scanning for malicious files detected any potential harm, with basic antivirus technology. Be careful when opening any attachments: choose a secure location, follow security guidelines, and run host-level sensors if possible. The safety of files cannot be guaranteed, as no software is perfect at detecting threats.
+
+While there is a file scanning software implemented via Amazon Web Services (AWS), to mark files, it is your responsibility to check the isPotentiallyMalicious attribute before opening the linked files. You can decide how to use this attribute, for example: sending a warning in the logs, running a quarantine system, or other logic you develop based on how you and your security team want to safeguard against malicious files.
+
+#### To retrieve files uploaded to a form:
+
+You will receive each submission as a raw JSON file that includes direct links to files, if attached. These direct download links are only valid for 10 seconds for security reasons.
+
+As files are scanned upon being submitted, they may also be marked as potentially being malicious, based on the file scanning software. You must decide what to do with flagged files — whether to download those files or not if they include a flagged with a “malicious” or “bad” metadata attribute. Add some code for how to handle the encountering of isPotentiallyMalicious:true. You'll then be able to access submission data and files attached in your system.
+
+### **Confirming** form submissions
+
+The confirmation step helps ensure the form submissions are exploitable and render as expected before they are permanently removed from the GC Forms system’s database.
+
+Before confirming a response, ensure you’ve got access to all attached files, if any are present. These file download links are only temporarily available, as they are valid for up to 10 seconds. If you have not received all files, redownload the same form submission to get new download links. Report a problem if there is one with file or data. Once you are confident that you indeed have all submission data and files submitted, confirm that all data has been transferred successfully. Responses and files will then be removed from GC Forms after 30 days.
+
+#### Example of response data with files
+
+Data will look something like this when files are attached:
+
+
+{
+ "createdAt":1749476854628,
+ "status":"New",
+ "confirmationCode":"714dfe46-6fa1-4281-8d15-a39bcebc3c4f",
+ "answers":"{\"1\":\"Test1\",\"2\":\"form_attachments/2025-06-09/8b42aafd-09e9-44ad-9208-d3891a7858df/output.txt\",\"3\":\"form_attachments/2025-06-09/9064b3c7-eee5-4599-99c8-a257b2b5f37d/a0393b10-396c-4b8d-a97c-15394fddda86.jpg\",\"4\":\"form_attachments/2025-06-09/0c7c3414-05e2-4ae6-a825-683857e4c0c4/IMG_0441.jpeg\"}",
+ "checksum":"cc33cb49f6c088bf98b7315794db216e",
+ "attachments":[
+ {
+ "id": "04d8aff7-25d7-49e5-8f01-77a8b6fba214",
+ "name":"output.txt",
+ "downloadLink":"https://...",
+ "isPotentiallyMalicious":true,
+ "md5":"54b0c58c7ce9f2a8b551351102ee0938"
+ }
+ ]
+}
+
+
+##### HTTP request
+
+This URL path confirms form submissions were successfully retrieved from the system, thus removing them:
+
+
+PUT /forms/{formID}/submission/{submissionName}/confirm/{confirmationCode}
+
+
+> _Note: Confirmation is only possible for one submission at a time, with one confirmation code per request. The status of that submission will be modified from “New” to “Confirmed”. This is similar to the two-step “Download” and “Sign off on removal” process in the application._
+
+##### Response status
+
+
+
+
Status code
Example message
Meaning or how to fix
+
+
+
200
+
OK
+
Submission has been successfully confirmed
+
+
+
200
+
+{
+ "info": "Form submission is already confirmed"
+}
+
+
+ Submission has already been successfully confirmed.
+
+
+
+
400
+
+{
+ "error": "Confirmation code is incorrect"
+}
+
+
+ Provided confirmation code is not the one associated with the submission to be confirmed.
+
+
+
+
404
+
+{
+ "error": "Form submission does not exist"
+}
+
+
+ "Form ID" and/or "Submission name" are incorrect or cannot be found.
+
+
+
+
+### Reporting a problem with a form submission
+
+##### HTTP request
+
+This URL path identifies a form submission as having a problem if something unexpected occurs:
+
+
+POST /forms/{formID}/submission/{submissionName}/problem
+
+
+> _Note: Reporting a problem is only possible for one submission at a time. You can report a problem with form submissions that are “New” or “Confirmed” as long as they have not been removed from the system. This will change the status to “Problem” and block the submission’s removal from the system until the problem is resolved._
+
+##### Example payload for reporting a problem
+
+To report a problem include a message formatted like the one below in the HTTP POST request body:
+
+
+{
+ “contactEmail”: “something@somethingelse.com”,
+ “description”: “Here is my problem”,
+ “preferredLanguage”: “en” (either “en” or “fr”)
+}
+
+
+> _Note: This will be directed to our support team._
+
+
+##### Response status
+
+
+
+
Status code
Example message
Meaning or how to fix
+
+
+
200
+
OK
+
Submission has been successfully reported as having a problem
+ Details about why the provided payload is invalid.
+
+
+
+
400
+
+{
+ "error": "Form submission does not exist"
+}
+
+
+ “Form ID” and/or “Submission name” are incorrect or could not be found.
+
+
+
+
+### Getting form questions
+
+##### HTTP request
+
+This URL path retrieves the questions that were asked in JSON format so they can more easily be associated with the answer data retrieved:
+
+
+GET /forms/{formID}/template
+
+
+> _Note: The questions will be in a data structure that is JSON format when retrieved. This helps if you’ll be transforming the data and need to match the answers to the questions._
+
+You can configure question attributes with customizable unique **Question IDs** and **additional tags**. These two attributes can be used to help map form response data to target systems or destination fields in a database, making it easier to update API integrations with a consistent way of mapping response data.
+
+You might use these attributes to:
+- Clarify a field's purpose
+- Organize and sort data
+- Support automation
+
+Learn more below.
+
+##### Response status
+
+
+
+{
+ "error": "Form template does not exist"
+}
+
+
+
+ “Form ID” is incorrect or could not be found.
+
+
+
+
+#### To set and customize unique Question IDs
+
+The Question ID is a unique value that allows you to consistently refer to a form element so that it can be matched across republished form versions, or other data structures and systems. This can provide a more scannable and useful way to identify and reference a question field. For example, a standard way to reference all first name questions or phone numbers across forms, so they land in the right place without having to be rewired individually.
+
+**GC Forms gives you the option to configure a single unique question ID:**
+
+1. Create a new form or navigate to an existing form in GC Forms.
+2. In “Edit”, select a question and click “More”.
+3. In the modal, scroll down to “Customize API data attributes”.
+4. Modify the Question ID to a unique value of your choice.
+
+#### To label and organize data with Additional tags
+
+The additional tags are flexible labels that allow you to add metadata to form elements so that related questions can be marked, grouped, or categorized allowing data to be read, searched, sorted, and transformed by machines more meaningfully and easily.
+
+**GC Forms gives you the option to configure multiple tags:**
+
+1. Create a new form or navigate to an existing form in GC Forms.
+2. In “Edit”, select a question and click “More”.
+3. In the modal, scroll down to “Customize API data attributes”.
+4. Add multiple tags to a question to mark data in a helpful way.
diff --git a/docs/_pages/en/monitoring.md b/docs/_pages/en/monitoring.md
new file mode 100644
index 00000000..f0ba8edc
--- /dev/null
+++ b/docs/_pages/en/monitoring.md
@@ -0,0 +1,42 @@
+---
+layout: page
+title: "Monitoring"
+lang: en
+permalink: "/monitoring/"
+trans_url: "/monitoring/"
+---
+
+### Common errors
+
+These are common errors that apply globally and are the same for every URL path.
+
+| Status code | Example message | Meaning or how to fix |
+| :---------------- | :------ | :---- |
+| 401 | Unauthorized | No access token was provided. |
+| 401 | Access token has expired | Access token has expired |
+| 403 | Forbidden | Could not validate access token OR "Form ID" in request is not allowed to be accessed with the provided access token. |
+| 404 | Not found | Invalid request URL. |
+| 429 | Too many requests | Refer to API rate limit for the limit number. |
+| 500 | Internal server error | Internal error while serving request. |
+
+#### Reporting errors and feedback
+We expect there may be some additional features needed to get the data to target systems successfully. If you encounter an error, please submit a [technical support ticket](https://forms-formulaires.alpha.canada.ca/en/support) and we'll work with you to resolve the issue. Don't hesitate to include any feedback on the implementation so far — what works and what doesn't. Your feedback helps shape the product directly by informing our decisions on what issues are most important.
+
+### API rate limit
+
+API throttling allows us to manage high API traffic and helps maintain the system’s stability. This helps avoid overloading situations where too many requests are processed simultaneously.
+
+The limit for API requests from one form is **500 requests per minute** by default. Should you happen to exceed the limit, you will get a RateLimitError. You may either wait and try again, or request a higher limit for your form. If you require an API request rate increase, please [contact Support](https://forms-formulaires.alpha.canada.ca/en/support) and we'll be able to increase the limit to 1000 requests per minute for a period of time.
+
+You can see additional information in the headers included as part of the API response:
+- X-RateLimit-Limit: the current limit of API requests for your form per 60 seconds
+- X-RateLimit-Remaining: the number of remaining API requests within this 60 second interval
+- X-RateLimit-Reset: the moment at which the limit will reset to the full limit amount
+- Retry-After: the time in seconds to wait before sending another request to the API
+
+In the future, we anticipate the API call limits may be tied to different use cases or types of usage and will try to determine more appropriate limits for API requests per minute.
+
+### Rotating API keys
+
+Rotating an API key may become necessary if a key is compromised. You can generate a new key in form settings in the API integration tab. This also requires a change in the parameters being queried in the request.
+
diff --git a/docs/_pages/fr/accueil.md b/docs/_pages/fr/accueil.md
new file mode 100644
index 00000000..ec303052
--- /dev/null
+++ b/docs/_pages/fr/accueil.md
@@ -0,0 +1,9 @@
+---
+layout: page
+title: "Accueil"
+lang: fr
+permalink: "/accueil/"
+trans_url: "/home/"
+---
+
+{% include accueil.md %}
diff --git a/docs/_pages/fr/authentification.md b/docs/_pages/fr/authentification.md
new file mode 100644
index 00000000..a635bf35
--- /dev/null
+++ b/docs/_pages/fr/authentification.md
@@ -0,0 +1,44 @@
+---
+layout: page
+title: "Authentification"
+lang: fr
+permalink: "/authentification/"
+trans_url: "/authentication/"
+---
+
+### URL de base
+
+
+https://api.forms-formulaires.alpha.canada.ca/v1/...
+
+
+
+> _Remarque : il se pourrait que vous deviez utiliser un fournisseur d’infonuagique comme Microsoft Azure ou Amazon Web Services (AWS) pour obtenir cet accès._
+
+### Fonctionnement de l'authentification
+
+L’API de Formulaires GC exploite un flux de jeton Web JSON OAuth 2.0 signé ([JWT](https://jwt.io/)) avec un fournisseur d’identité autohébergé (IDP), Zitadel, pour établir l’authentification entre des machines de manière sécurisée pour le point de terminaison d’API.
+
+L’authentification se fait par l’intermédiaire d’un jeton opaque et l’autorisation de base est gérée par le biais du profil utilisateur et de l’identifiant du formulaire demandé. Le serveur OAuth fournit un jeton d’accès de courte durée qui peut être utilisé pour faire des demandes API en vérifiant le JWT du client qui a été signé avec une clé privée et qui comprend son identifiant de client. Ce jeton d’accès est valable 30 minutes.
+
+L’API requiert une authentification à l’aide d’une adresse courriel du gouvernement du Canada, d’un **identifiant de formulaire** connexe et d’un JWT signé avec une **clé privée** et vérifié par l’intermédiaire d’une **clé publique** avec l’IDP. Ce jeton requiert l’identifiant de formulaire connexe.
+
+### Exemples d’intégration
+
+Une fois le formulaire créé, vous pouvez remplir des formulaires de manière fictive afin de simuler un formulaire actif et de tester l’intégration.
+
+Utilisez ces exemples comme référence pour générer des jetons d’accès dans le langage de programmation de votre choix :
+- [.NET / C#](https://github.com/cds-snc/forms-api/blob/main/examples/dotnet/AccessTokenGenerator.cs)
+- [Node.JS / Typescript](https://github.com/cds-snc/forms-api/blob/main/examples/nodejs/accessTokenGenerator.ts)
+- [Python](https://github.com/cds-snc/forms-api/blob/main/examples/python/access_token_generator.py)
+- [Bash /Curl](https://github.com/cds-snc/forms-api/blob/main/examples/bash/get_access_token.sh)
+
+### En-tête d’autorisation
+
+Utilisez cet en-tête pour chaque demande d’API pour confirmer votre identité :
+
+
+ curl \
+ --request GET "$FORMS_URL" \
+ --header "Authorization: Bearer $ACCESS_TOKEN"
+
diff --git a/docs/_pages/fr/effectuer-des-demandes.md b/docs/_pages/fr/effectuer-des-demandes.md
new file mode 100644
index 00000000..4cf81e03
--- /dev/null
+++ b/docs/_pages/fr/effectuer-des-demandes.md
@@ -0,0 +1,443 @@
+---
+layout: page
+title: "Effectuer des demandes"
+lang: fr
+permalink: "/effectuer-des-demandes/"
+trans_url: "/making-requests/"
+childPages:
+ - Récupérer des nouvelles soumissions de formulaires
+ - Récupérer des soumissions de formulaires spécifiques
+ - Confirmer des soumissions de formulaires
+ - Signaler un problème avec les soumissions de formulaire
+ - Obtenir les questions du formulaire
+---
+
+L’API de Formulaires GC vous permet de récupérer des soumissions de formulaire sous forme de fichiers JSON. Vous pouvez obtenir jusqu’à 100 soumissions de formulaire par lot, et celles-ci sont accessibles jusqu’à 30 jours après la soumission, compte tenu de nos périodes actuelles de rétention des données. Les soumissions de formulaire sont chiffrées à l’aide d’une clé publique et peuvent être déchiffrées localement par vous.
+
+### Paramètres de requête
+
+Les demandes d’API pour les données de soumission de Formulaires GC sont possibles à l’aide de paramètres de requête tels que :
+ - **{formID}**
+ L'identifiant de formulaire est une chaîne alphanumérique de 25 caractères trouvée à la fin de l’URL du formulaire ou au début du nom de fichier de la clé API.
+ Par exemple : ```clzvj8fzb00226o90r2b7l1gt```.
+ - **{SubmissionName}**
+ Le nom de la soumission est une chaîne alphanumérique de 11 caractères, y compris les tirets, parfois appelée identifiant de soumission dans l’application Formulaires GC.
+ Par exemple : ```e02-08-d732```.
+ - **{ConfirmationCode}**
+ Le code de confirmation est une chaîne alphanumérique de 36 caractères, y compris les tirets, parfois appelée code de réception dans l’application Formulaires GC.
+ Par exemple : ```620b203c-9836-4000-bf30-1c3bcc26b834```.
+
+### Exemples d'intégration
+
+Nous avons élaboré quelques exemples auxquels vous pouvez vous référer, ou pour lesquels vous pouvez exécuter le programme, et qui, nous l’espérons, faciliteront l’intégration. Voici les langages de programmation disponibles à l’heure actuelle :
+
+- [.NET / C#](https://github.com/cds-snc/forms-api/tree/main/examples/dotnet)
+- [Node.JS / Typescript](https://github.com/cds-snc/forms-api/tree/main/examples/nodejs)
+- [Python](https://github.com/cds-snc/forms-api/tree/main/examples/python)
+- [Bash /Curl](https://github.com/cds-snc/forms-api/tree/main/examples/bash)
+
+Travaillez avec votre équipe de développement pour tester une ébauche de formulaire et vous assurer que l'intégration de l'API reçoit des réponses, qu'elle est capable de décrypter, de vérifier le hachage et de confirmer les réponses ou de signaler un problème. Une fois ce processus terminé, vous êtes prêt à publier votre formulaire avec cette méthode de livraison des données.
+
+### Récupérer des **nouvelles** soumissions de formulaires
+
+##### Demande HTTP
+
+Ce chemin d’URL renvoie une liste de soumissions qui comprend les 100 plus anciennes soumissions de formulaire ayant le statut « Nouveautés » :
+
+
+GET /forms/{formID}/submission/new
+
+
+> _À noter : Le statut de ces soumissions de formulaire ne passera pas à « Téléchargé »._
+
+##### Statut de la réponse
+
+
+ Liste des nouveaux noms de soumission récupérés avec succès.
+
+
+
+
+> _À noter : L'horodatage est en temps universel coordonné (TUC)._
+
+### Récupérer des soumissions de formulaires **spécifiques**
+
+#### Obtenir la soumission du formulaire
+
+##### Demande HTTP
+
+Ce chemin d’URL renvoie une soumission de formulaire par demande en fonction du nom de soumission respectif :
+
+GET /forms/{formID}/submission/{submissionName}
+
+
+> _Remarque : La récupération n’est possible que pour une soumission, avec un téléchargement par demande. Le statut de ces soumissions de formulaire ne passera pas à « Téléchargé ». Pour modifier le statut des soumissions de formulaires, faites une demande de confirmation des soumissions de formulaire une fois qu’elles ont été correctement reçues._
+
+##### Statut de la réponse
+
+
+ Les données chiffrées de la soumission ont été récupérées avec succès.
+
+
+
+
404
+
+{
+ "error": "Form submission does not exist"
+}
+
+
+ Le renseignement “Form ID” (identifiant du formulaire) ou “Submission name” (nom de soumission) est incorrect ou introuvable.
+
+
+
+
+#### Déchiffrement des données
+
+La sécurité du système est primordiale et elle est renforcée par le chiffrement des soumissions de formulaires. Bien que le chiffrement soit effectué en HTTPS, nous avons ajouté une autre couche de sécurité avec le chiffrement AES-256-GSM. Lorsque vous recevrez une soumission de formulaire, elle sera chiffrée et elle comprendra une clé chiffrée, un nonce chiffré et un élément AuthTag chiffré. Ceux-ci peuvent être déchiffrés par l’intermédiaire d’une clé privée.
+
+### Obtenir les fichiers joints aux soumissions de formulaires
+
+La récupération des fichiers joints aux soumissions n'est possible que via la méthode de livraison des données par l'entremise de l'API. Les conditions de stockage sont les mêmes que pour les données soumises, Formulaires GC ne conserve les données et les fichiers que temporairement, jusqu'à leur téléchargement et leur confirmation. Pour en savoir plus sur l'ajout d'éléments de téléversement de fichiers à votre formulaire, consultez notre [guide de référence](https://articles.alpha.canada.ca/forms-formulaires/fr/fichiers-joints/).
+
+Les fichiers sont directement liés aux réponses (récupérées de AWS) et ils sont accompagnés d'un attribut indiquant si l'analyse des fichiers malveillants a détecté un danger potentiel à l'aide de technologie antivirus de base. Soyez prudent lorsque vous ouvrez n'importe quelle pièces jointes : choisissez un emplacement sécurisé, suivez les consignes de sécurité, et exécutez des capteurs au niveau de l'hôte si possible. La sécurité des fichiers ne peut être garantie, car aucune technologie n'est parfaite pour détecter les menaces.
+
+Bien qu'un logiciel d'analyse de fichiers soit mis en œuvre avec Amazon Web Services (AWS), pour marquer les fichiers, il est de votre responsabilité de vérifier l'attribut de malveillance isPotentiallyMalicious avant d'ouvrir les fichiers liés. Vous pouvez décider de la manière d'utiliser cet attribut, par exemple : envoyer un avertissement dans les journeaux, exécuter un système de quarantaine ou toute autre logique que vous développez en fonction de la manière dont vous et votre équipe de sécurité souhaitez vous protéger contre les fichiers malveillants.
+
+#### Pour récupérer les fichiers téléchargés vers un formulaire en toute sécurité :
+
+Vous recevrez chaque soumission sous forme de fichier JSON brut comprenant des liens directs vers les fichiers, s'ils sont joints. Pour des raisons de sécurité, ces liens de téléchargement direct ne sont valables que pendant 10 secondes.
+
+Les fichiers étant analysés lors de leur soumission, ils peuvent également être signalés comme potentiellement malveillants, en fonction du logiciel d'analyse des fichiers. Vous devez décider quoi faire avec les fichiers signalés — soit que vous les téléchargez ou non, s'ils comportent un attribut de métadonnées « malveillant » ou « mauvais ».
+
+Ajoutez du code pour gérer les cas où les fichiers sont signalés et isPotentiallyMalicious:true est rencontré. Vous pourrez ensuite accéder aux données soumises et aux fichiers sécurisés joints dans votre système.
+
+### **Confirmer** des soumissions de formulaires
+
+L’étape de confirmation permet de s’assurer que les formulaires soumis sont exploitables et s’affichent comme prévu avant qu’ils ne soient définitivement retirés de la base de données du système Formulaires GC.
+
+Avant de confirmer une réponse, assurez-vous d'avoir accès à tous les fichiers joints, le cas échéant. Ces liens de téléchargement de fichiers ne sont disponibles que temporairement, car ils ne sont valables que pendant 10 secondes. Si vous n'avez pas reçu tous les fichiers, téléchargez à nouveau le même formulaire soumis pour obtenir de nouveaux liens de téléchargement. Signalez tout problème lié aux fichiers ou aux données. Une fois que vous êtes certain d'avoir bien reçu toutes les données et tous les fichiers soumis, confirmez que toutes les données ont été transférées avec succès. Les réponses et les fichiers seront ensuite supprimés de GC Forms après 30 jours.
+
+#### Exemple de données de réponses avec fichiers
+
+Les données ressembleront à ceci lorsque des fichiers sont joints :
+
+
+{
+ "createdAt":1749476854628,
+ "status":"New",
+ "confirmationCode":"714dfe46-6fa1-4281-8d15-a39bcebc3c4f",
+ "answers":"{\"1\":\"Test1\",\"2\":\"form_attachments/2025-06-09/8b42aafd-09e9-44ad-9208-d3891a7858df/output.txt\",\"3\":\"form_attachments/2025-06-09/9064b3c7-eee5-4599-99c8-a257b2b5f37d/a0393b10-396c-4b8d-a97c-15394fddda86.jpg\",\"4\":\"form_attachments/2025-06-09/0c7c3414-05e2-4ae6-a825-683857e4c0c4/IMG_0441.jpeg\"}",
+ "checksum":"cc33cb49f6c088bf98b7315794db216e",
+ "attachments":[
+ {
+ "id": "04d8aff7-25d7-49e5-8f01-77a8b6fba214",
+ "name":"output.txt",
+ "downloadLink":"https://...",
+ "isPotentiallyMalicious":true,
+ "md5":"54b0c58c7ce9f2a8b551351102ee0938"
+ }
+ ]
+}
+
+
+##### Demande HTTP
+
+Le chemin d’URL confirme que les soumissions de formulaires ont bien été récupérées à partir du système et les supprime :
+
+
+PUT /forms/{formID}/submission/{submissionName}/confirm/{confirmationCode}
+
+
+> _Remarque : La confirmation n’est possible que pour une soumission à la fois, avec un code de confirmation par requête. Le statut de cette soumission passera de « Nouveautés » à « Confirmations ». Il s’agit d’un processus similaire au processus en deux étapes de téléchargement et d’approbation de la suppression dans l’application._
+
+##### Statut de la réponse
+
+
+
+
Code du statut
Exemple de message
Signification / comment corriger
+
+
+
200
+
OK
+
La soumission a bien été confirmée.
+
+
+
200
+
+{
+ "info": "Form submission is already confirmed"
+}
+
+
+ La soumission a déjà été confirmée.
+
+
+
+
400
+
+{
+ "error": "Confirmation code is incorrect"
+}
+
+
+ Le code de confirmation fourni ne correspond pas à la soumission à confirmer.
+
+
+
+
404
+
+{
+ "error": "Form submission does not exist"
+}
+
+
+ Le renseignement “form ID” ou “Submission name” est incorrect ou introuvable.
+
+
+
+
+### Signaler un problème avec la soumission de formulaire
+
+##### Demande HTTP
+
+Ce chemin d’URL identifie une soumission de formulaire comme ayant un problème si un évènement inattendu se produit :
+
+
+POST /forms/{formID}/submission/{submissionName}/problem
+
+
+> _Remarque : Le signalement d’un problème n’est possible que pour une seule soumission à la fois. Vous pouvez signaler un problème avec les soumissions de formulaires portant le statut « Nouveautés » ou « Confirmations » tant qu’elles n’ont pas été supprimées du système. Cela changera le statut en « Problème » et bloquera la suppression de la soumission du système jusqu’à ce que le problème soit résolu._
+
+##### Exemple de charge utile pour le signalement d’un problème
+
+Pour signaler un problème, incluez un message au format similaire à celui ci-dessous dans le corps de la requête HTTP POST :
+
+
+{
+ “contactEmail”: “nom@ministere.gc.ca”,
+ “description”: “Voici mon problème”,
+ “preferredLanguage”: “fr” (soit “en” ou “fr”)
+}
+
+
+> _Remarque : Ce message sera transmis à notre équipe de soutien._
+
+
+##### Statut de la réponse
+
+
+
+
Code du statut
Exemple de message
Signification / comment corriger
+
+
+
200
+
OK
+
La soumission a bien été signalée comme ayant un problème.
+ Détails sur la raison pour laquelle la charge utile fournie n’est pas valide.
+
+
+
+
400
+
+{
+ "error": "Form submission does not exist"
+}
+
+
+ Le renseignement “Form ID” ou “Submission name” est incorrect ou n’a pas pu être trouvé.
+
+
+
+
+### Obtenir les questions du formulaire
+
+##### Demande HTTP
+
+Ce chemin d’URL récupère les questions qui ont été posées au format JSON afin qu’elles puissent être plus facilement associées aux réponses récupérées :
+
+
+GET /forms/{formID}/template
+
+
+> _Remarque : Les questions seront dans une structure de données au format JSON lorsqu’elles seront récupérées. Cela est utile si vous transformez les données et que vous devez faire correspondre les réponses aux questions._
+
+Vous pouvez configurer les attributs des questions avec des **identifiants de question** et des **balises supplémentaires**. Ces deux attributs peuvent être utilisés pour aider à mettre en correspondance les données des réponses aux formulaires avec les systèmes cibles ou les champs de destination dans une base de données. Ceci facilite la mise à jour d'intégrations API avec une manière cohérente de mapper les données des réponses.
+
+Vous pouvez utiliser ces attributs pour :
+- clarifier l'objectif d'un champ
+- organiser et trier les données
+- soutenir l'automatisation
+
+Pour en savoir plus, voir ci-dessous.
+
+##### Statut de la réponse
+
+