diff --git a/guides/fr-pa-registration.mdx b/guides/fr-pa-registration.mdx
index b94d5959..c36fab0d 100644
--- a/guides/fr-pa-registration.mdx
+++ b/guides/fr-pa-registration.mdx
@@ -31,7 +31,7 @@ The Annuaire requires every entry to be receive-capable, so there is no send-onl
Moves the silo entry into a visible "in progress" state so operator dashboards reflect that registration is underway.
- Pauses until the signed agreement is uploaded and accepted (`gov-fr.agreement.wait.approval`).
+ Pauses until the signed agreement is uploaded and accepted (`gov-fr.agreement.wait.approval`). This is a **manual gate** — the party stays in processing and the workflow does not advance until someone opens the agreement form and signs it. See [Complete the agreement](#complete-the-agreement) below.
Marks the agreement step as completed before the directory and Peppol registrations run.
@@ -59,6 +59,48 @@ The Annuaire requires every entry to be receive-capable, so there is no send-onl
+## Complete the agreement
+
+After the workflow reaches **Wait for French agreement upload**, the party sits in processing until the PA mandate is signed. **This step is manual and required** — the party cannot be accepted, registered in the Annuaire, or published on Peppol until it is done.
+
+### Sign in Console
+
+The agreement form is surfaced as a link on the party itself:
+
+
+
+ In Console, open the party (silo entry) that the register workflow is running on.
+
+
+ Open the **Meta** tab. The **Sign agreement for France** step publishes an agreement link there (meta key `approval-link`).
+
+
+ Click the link to open the French PA agreement form. Review the mandate that authorises Invopop to act as the party's Plateforme Agréée, sign it, and submit.
+
+
+
+### Sign through the API
+
+You can also complete the agreement programmatically — useful when you embed the onboarding in your own product instead of sending the signer to the Invopop form. Once the workflow has paused at **Wait for French agreement upload**:
+
+ 1. [Download the unsigned agreement PDF](/api-ref/apps/gov-fr/agreement-fetch) `GET /apps/gov-fr/v1/entry/{silo_entry_id}/agreement`
+ The mandate PDF is generated from the party's data for the signer to review and sign.
+
+ 2. [Upload the signed agreement](/api-ref/apps/gov-fr/agreement-upload) `POST /apps/gov-fr/v1/entry/{silo_entry_id}/agreement`
+ Send the signed PDF together with the signature method: `esignature` for an electronic (PAdES) signature, or `identity` for a handwritten one.
+
+ 3. [Upload identity images](/api-ref/apps/gov-fr/identity-upload) `POST /apps/gov-fr/v1/entry/{silo_entry_id}/identity`
+ Only required when the signature method is `identity`. Upload one image per view: `front` and `back` for an ID card, or `page` for a passport.
+
+ 4. [Confirm the submission](/api-ref/apps/gov-fr/confirm) `POST /apps/gov-fr/v1/entry/{silo_entry_id}/confirm`
+ Marks the submission as complete and wakes the waiting workflow task.
+
+Whichever way the agreement is signed, once it is submitted and accepted, **Wait for French agreement upload** resolves and the workflow continues to the directory and Peppol registration steps, ending in registered.
+
+
+ If you don't open the Meta tab and sign the agreement, the party stays in processing indefinitely — it is never automatically accepted.
+
+
## Unregistration
Run the unregister workflow to revoke a party's registrations when it should no longer issue or receive invoices through Invopop.