> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.goodflag.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.goodflag.com/_mcp/server.

# Créer un certificat

POST https://lp7signbox.example.com/LP7SignBox/pki/createCertificate
Content-Type: application/json

Crée une clé sur le serveur et émet son certificat pour une transaction de signature. Le sujet est soit dérivé d'un JSON Web Token, soit fourni explicitement. Retourne la référence de clé à utiliser dans les opérations de signature et le certificat émis.

**Authentification :** TLS mutuel (certificat client).

Reference: https://docs.goodflag.com/cachetage/api-reference/documentation-api/pki/create-certificate

## Request

### Body (application/json)

This endpoint expects an object.

- `certificationRequestInfo` (object, required) — Les informations utilisées pour construire le certificat.
  - `signatureActivationProtocol` (string, required) — Le protocole d'activation de signature.
  - `validityPeriod` (integer, optional) — La durée de validité du certificat, en minutes.
  - `transactionId` (string, optional) — L'identifiant de la transaction de signature pour laquelle le certificat est émis.
  - `JWT` (object, optional) — Le sujet du certificat est dérivé d'un JSON Web Token.
    - `token` (string, required) — Le JSON Web Token émis par le fournisseur d'identité Sunnystamp, dont le sujet du certificat est dérivé.
    - `password` (string, optional)
  - `PKCS10` (object, optional) — Le certificat est construit à partir d'un nom de sujet et d'attributs explicites.
    - `attributes` (object, required) — Les attributs de la demande de certification.
      - `subscriber` (object, required) — Les coordonnées du porteur.
        - `emailAddress` (string, optional) — L'adresse e-mail du porteur.
        - `phoneNumber` (string, optional) — Le numéro de téléphone mobile du porteur, au format E.164.
      - `attribute` (list of object, optional) — Les attributs personnalisés de la demande de certification.
        - `identifier` (string, required) — L'OID de l'attribut.
        - `value` (string, required) — La valeur de l'attribut, encodée en base64.
      - `extensionRequest` (object, optional) — Les extensions X.509 demandées pour le certificat.
        - `extension` (list of object, optional) — Les extensions demandées.
          - `value` (string, required) — La valeur de l'extension, encodée en base64.
          - `identifier` (string, required) — L'OID de l'extension.
        - `subjectAlternativeName` (object, optional) — Les noms alternatifs du sujet du certificat.
          - `generalName` (list of object, required) — La liste des noms généraux.
            - `RFC822Name` (string, required) — Une adresse e-mail (rfc822Name).
        - `any` (map from string to any, optional) — Des extensions supplémentaires. Structure à documenter.
      - `any` (map from string to any, optional) — Des attributs supplémentaires. Structure à documenter.
    - `subject` (object, required) — Le nom distinctif du sujet du certificat.
      - `country` (enum, required) — Le pays.
        - Allowed values: `AF`, `AX`, `AL`, `DZ`, `AS`, `AD`, `AO`, `AI`, `AQ`, `AG`, `AR`, `AM`, `AW`, `AU`, `AT`, `AZ`, `BS`, `BH`, `BD`, `BB`, `BY`, `BE`, `BZ`, `BJ`, `BM`, `BT`, `BO`, `BA`, `BW`, `BV`, `BR`, `IO`, `BN`, `BG`, `BF`, `BI`, `KH`, `CM`, `CA`, `CV`, `KY`, `CF`, `TD`, `CL`, `CN`, `CX`, `CC`, `CO`, `KM`, `CG`, `CD`, `CK`, `CR`, `CI`, `HR`, `CU`, `CY`, `CZ`, `DK`, `DJ`, `DM`, `DO`, `EC`, `EG`, `SV`, `GQ`, `ER`, `EE`, `ET`, `FK`, `FO`, `FJ`, `FI`, `FR`, `GF`, `PF`, `TF`, `GA`, `GM`, `GE`, `DE`, `GH`, `GI`, `GR`, `GL`, `GD`, `GP`, `GU`, `GT`, `GN`, `GW`, `GY`, `HT`, `HM`, `VA`, `HN`, `HK`, `HU`, `IS`, `IN`, `ID`, `IR`, `IQ`, `IE`, `IL`, `IT`, `JM`, `JP`, `JO`, `KZ`, `KE`, `KI`, `KP`, `KR`, `KW`, `KG`, `LA`, `LV`, `LB`, `LS`, `LR`, `LY`, `LI`, `LT`, `LU`, `MO`, `MK`, `MG`, `MW`, `MY`, `MV`, `ML`, `MT`, `MH`, `MQ`, `MR`, `MU`, `YT`, `MX`, `FM`, `MD`, `MC`, `MN`, `MS`, `MA`, `MZ`, `MM`, `NA`, `NR`, `NP`, `NL`, `AN`, `NC`, `NZ`, `NI`, `NE`, `NG`, `NU`, `NF`, `MP`, `NO`, `OM`, `PK`, `PW`, `PS`, `PA`, `PG`, `PY`, `PE`, `PH`, `PN`, `PL`, `PT`, `PR`, `QA`, `RE`, `RO`, `RU`, `RW`, `SH`, `KN`, `LC`, `PM`, `VC`, `WS`, `SM`, `ST`, `SA`, `SN`, `CS`, `SC`, `SL`, `SG`, `SK`, `SI`, `SB`, `SO`, `ZA`, `GS`, `ES`, `LK`, `SD`, `SR`, `SJ`, `SZ`, `SE`, `CH`, `SY`, `TW`, `TJ`, `TZ`, `TH`, `TL`, `TG`, `TK`, `TO`, `TT`, `TN`, `TR`, `TM`, `TC`, `TV`, `UG`, `UA`, `AE`, `GB`, `US`, `UM`, `UY`, `UZ`, `VU`, `VE`, `VN`, `VG`, `VI`, `WF`, `EH`, `YE`, `ZM`, `ZW`, `BL`, `BQ`, `CW`, `GG`, `IM`, `JE`, `ME`, `MF`, `RS`, `SS`, `SX`
      - `commonName` (string, required) — Le nom commun (commonName).
      - `fields` (object, optional) — Des attributs de nom supplémentaires, identifiés par nom ou par OID.
        - `nameField` (list of object, optional) — La liste des attributs de nom.
          - `identifier` (string, required) — Le nom ou l'OID de l'attribut, selon identifierType.
          - `identifierType` (enum, required) — Indique si identifier est un nom d'attribut ou un OID.
            - Allowed values: `NAME`, `OID`
          - `value` (string, required) — La valeur de l'attribut.
      - `title` (string, optional) — Le titre du sujet.
      - `organizationName` (string, optional) — Le nom de l'organisation.
      - `organizationIdentifier` (string, optional) — L'identifiant de l'organisation (attribut organizationIdentifier, ETSI EN 319 412).
      - `givenName` (string, optional) — Le prénom.
      - `serialNumber` (string, optional) — L'attribut serialNumber du sujet.
      - `organizationUnit` (list of string, optional) — Les unités organisationnelles.
      - `phoneNumber` (string, optional) — L'attribut telephoneNumber.
      - `surName` (string, optional) — Le nom de famille.
      - `localityName` (string, optional) — La localité.
      - `stateName` (string, optional) — La région ou la province.
      - `DNQualifier` (string, optional) — L'attribut dnQualifier.
- `certificateFormat` (enum, required) — Le format du certificat émis.
  - Allowed values: `CERTIFICATE`, `PKCS_7`, `PKCS_7_WITH_CHAIN`
- `requestID` (string, optional) — L'identifiant de la requête, choisi par l'appelant. Renvoyé tel quel dans la réponse.
- `signerData` (object, optional) — Les empreintes des documents à signer avec la clé : les données d'activation de signature (SAD) liées à la clé.
  - `digest` (list of object, required) — La liste des empreintes.
    - `id` (string, required) — L'identifiant du document auquel l'empreinte se rapporte.
    - `digestAlgOID` (string, required) — L'OID de l'algorithme de hachage.
    - `digestValue` (string, required) — L'empreinte, encodée en base64.

## Response

### 200

L'opération a été traitée. Le résultat est donné par le champ result, renseigné aussi lorsque l'opération a échoué pour une raison métier.

- `keyReference` (object, optional) — La référence de la clé créée, à utiliser dans les opérations sign et checkKey.
  - `reference` (string, required) — L'empreinte SHA-1 du certificat, en hexadécimal.
  - `authToken` (string, optional) — Le jeton d'autorisation de la clé. Utilisé uniquement avec les clés à usage unique générées par LP7SignBox.
  - `password` (string, optional) — Le mot de passe de protection de la clé de signature.
  - `transactionId` (string, optional) — L'identifiant de la transaction de signature à laquelle la clé est liée.
- `certificate` (string, optional) — Le certificat émis, encodé en base64, dans le format demandé.
- `requestID` (string, optional) — L'identifiant de la requête, choisi par l'appelant. Renvoyé tel quel dans la réponse.
- `result` (object, optional) — Les codes et le message de retour du serveur.
  - `minorCode` (integer, required) — Le code mineur de retour, qui détaille le code majeur. 0 lorsque l'opération a réussi.
  - `majorCode` (integer, required) — Le code majeur de retour. 0 signifie que l'opération a réussi, 1 une requête mal formée, 2 une erreur du serveur.
  - `message` (string, optional) — Un message décrivant le statut de l'opération.
- `name` (string, optional) — Le nom distinctif (DN) du certificat émis.
- `certificateFormat` (enum, optional) — Le format du certificat émis.
  - Allowed values: `CERTIFICATE`, `PKCS_7`, `PKCS_7_WITH_CHAIN`

## Errors

### 400 Bad Request Error

Bad Request. La requête HTTP est mal formée au regard du standard HTTP. Les erreurs métier ne sont pas signalées par ce statut : elles sont retournées avec le statut 200 dans le champ result.

- `any`

## Examples

**Request**

```json
{
  "certificationRequestInfo": {
    "signatureActivationProtocol": "OTP",
    "validityPeriod": 60,
    "transactionId": "tx-7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "PKCS10": {
      "attributes": {
        "subscriber": {
          "emailAddress": "marie.dupont@example.com",
          "phoneNumber": "+33612345678"
        },
        "extensionRequest": {
          "subjectAlternativeName": {
            "generalName": [
              {
                "RFC822Name": "marie.dupont@example.com"
              }
            ]
          }
        }
      },
      "subject": {
        "country": "FR",
        "commonName": "Marie Dupont",
        "organizationName": "Goodflag",
        "givenName": "Marie",
        "serialNumber": "tx-7c9e6679-7425-40de-944b-e07fc1f90ae7",
        "surName": "Dupont"
      }
    }
  },
  "certificateFormat": "PKCS_7_WITH_CHAIN",
  "requestID": "cert-2026-09-11-0001",
  "signerData": {
    "digest": [
      {
        "id": "contract",
        "digestAlgOID": "2.16.840.1.101.3.4.2.1",
        "digestValue": "n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg="
      }
    ]
  }
}
```

**Response**

```json
{
  "keyReference": {
    "reference": "8F2A61C0D94B7E3A55F1C2D8B6A0E9F4C3D2B1A0",
    "authToken": "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiI4RjJBNjFDMCJ9.QmxhY2tzdG9uZQ",
    "password": "482913",
    "transactionId": "tx-7c9e6679-7425-40de-944b-e07fc1f90ae7"
  },
  "certificate": "MIIFkzCCA3ugAwIBAgIIZ8p6L2Q5TmEwDQYJKoZIhvcNAQELBQAwYzELMAkGA1UEBhMCRlIxFDASBgNVBAoMC0xleCBQZXJzb25hMRcwFQYDVQQLDA4wMDAyIDQ4MDYyMjI1NzElMCMGA1UEAwwcU3VubnlzdGFtcCBOYXR1cmFsIFBlcnNvbnMgQ0E=",
  "requestID": "cert-2026-09-11-0001",
  "result": {
    "minorCode": 0,
    "majorCode": 0,
    "message": "OK"
  },
  "name": "CN=Marie Dupont,GN=Marie,SN=Dupont,O=Goodflag,C=FR",
  "certificateFormat": "PKCS_7_WITH_CHAIN"
}
```

**SDK Code**

```python PKI_createCertificate_example
import requests

url = "https://lp7signbox.example.com/LP7SignBox/pki/createCertificate"

payload = {
    "certificationRequestInfo": {
        "signatureActivationProtocol": "OTP",
        "validityPeriod": 60,
        "transactionId": "tx-7c9e6679-7425-40de-944b-e07fc1f90ae7",
        "PKCS10": {
            "attributes": {
                "subscriber": {
                    "emailAddress": "marie.dupont@example.com",
                    "phoneNumber": "+33612345678"
                },
                "extensionRequest": { "subjectAlternativeName": { "generalName": [{ "RFC822Name": "marie.dupont@example.com" }] } }
            },
            "subject": {
                "country": "FR",
                "commonName": "Marie Dupont",
                "organizationName": "Goodflag",
                "givenName": "Marie",
                "serialNumber": "tx-7c9e6679-7425-40de-944b-e07fc1f90ae7",
                "surName": "Dupont"
            }
        }
    },
    "certificateFormat": "PKCS_7_WITH_CHAIN",
    "requestID": "cert-2026-09-11-0001",
    "signerData": { "digest": [
            {
                "id": "contract",
                "digestAlgOID": "2.16.840.1.101.3.4.2.1",
                "digestValue": "n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg="
            }
        ] }
}
headers = {"Content-Type": "application/json"}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript PKI_createCertificate_example
const url = 'https://lp7signbox.example.com/LP7SignBox/pki/createCertificate';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '{"certificationRequestInfo":{"signatureActivationProtocol":"OTP","validityPeriod":60,"transactionId":"tx-7c9e6679-7425-40de-944b-e07fc1f90ae7","PKCS10":{"attributes":{"subscriber":{"emailAddress":"marie.dupont@example.com","phoneNumber":"+33612345678"},"extensionRequest":{"subjectAlternativeName":{"generalName":[{"RFC822Name":"marie.dupont@example.com"}]}}},"subject":{"country":"FR","commonName":"Marie Dupont","organizationName":"Goodflag","givenName":"Marie","serialNumber":"tx-7c9e6679-7425-40de-944b-e07fc1f90ae7","surName":"Dupont"}}},"certificateFormat":"PKCS_7_WITH_CHAIN","requestID":"cert-2026-09-11-0001","signerData":{"digest":[{"id":"contract","digestAlgOID":"2.16.840.1.101.3.4.2.1","digestValue":"n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg="}]}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go PKI_createCertificate_example
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://lp7signbox.example.com/LP7SignBox/pki/createCertificate"

	payload := strings.NewReader("{\n  \"certificationRequestInfo\": {\n    \"signatureActivationProtocol\": \"OTP\",\n    \"validityPeriod\": 60,\n    \"transactionId\": \"tx-7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n    \"PKCS10\": {\n      \"attributes\": {\n        \"subscriber\": {\n          \"emailAddress\": \"marie.dupont@example.com\",\n          \"phoneNumber\": \"+33612345678\"\n        },\n        \"extensionRequest\": {\n          \"subjectAlternativeName\": {\n            \"generalName\": [\n              {\n                \"RFC822Name\": \"marie.dupont@example.com\"\n              }\n            ]\n          }\n        }\n      },\n      \"subject\": {\n        \"country\": \"FR\",\n        \"commonName\": \"Marie Dupont\",\n        \"organizationName\": \"Goodflag\",\n        \"givenName\": \"Marie\",\n        \"serialNumber\": \"tx-7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n        \"surName\": \"Dupont\"\n      }\n    }\n  },\n  \"certificateFormat\": \"PKCS_7_WITH_CHAIN\",\n  \"requestID\": \"cert-2026-09-11-0001\",\n  \"signerData\": {\n    \"digest\": [\n      {\n        \"id\": \"contract\",\n        \"digestAlgOID\": \"2.16.840.1.101.3.4.2.1\",\n        \"digestValue\": \"n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=\"\n      }\n    ]\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby PKI_createCertificate_example
require 'uri'
require 'net/http'

url = URI("https://lp7signbox.example.com/LP7SignBox/pki/createCertificate")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n  \"certificationRequestInfo\": {\n    \"signatureActivationProtocol\": \"OTP\",\n    \"validityPeriod\": 60,\n    \"transactionId\": \"tx-7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n    \"PKCS10\": {\n      \"attributes\": {\n        \"subscriber\": {\n          \"emailAddress\": \"marie.dupont@example.com\",\n          \"phoneNumber\": \"+33612345678\"\n        },\n        \"extensionRequest\": {\n          \"subjectAlternativeName\": {\n            \"generalName\": [\n              {\n                \"RFC822Name\": \"marie.dupont@example.com\"\n              }\n            ]\n          }\n        }\n      },\n      \"subject\": {\n        \"country\": \"FR\",\n        \"commonName\": \"Marie Dupont\",\n        \"organizationName\": \"Goodflag\",\n        \"givenName\": \"Marie\",\n        \"serialNumber\": \"tx-7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n        \"surName\": \"Dupont\"\n      }\n    }\n  },\n  \"certificateFormat\": \"PKCS_7_WITH_CHAIN\",\n  \"requestID\": \"cert-2026-09-11-0001\",\n  \"signerData\": {\n    \"digest\": [\n      {\n        \"id\": \"contract\",\n        \"digestAlgOID\": \"2.16.840.1.101.3.4.2.1\",\n        \"digestValue\": \"n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=\"\n      }\n    ]\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java PKI_createCertificate_example
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://lp7signbox.example.com/LP7SignBox/pki/createCertificate")
  .header("Content-Type", "application/json")
  .body("{\n  \"certificationRequestInfo\": {\n    \"signatureActivationProtocol\": \"OTP\",\n    \"validityPeriod\": 60,\n    \"transactionId\": \"tx-7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n    \"PKCS10\": {\n      \"attributes\": {\n        \"subscriber\": {\n          \"emailAddress\": \"marie.dupont@example.com\",\n          \"phoneNumber\": \"+33612345678\"\n        },\n        \"extensionRequest\": {\n          \"subjectAlternativeName\": {\n            \"generalName\": [\n              {\n                \"RFC822Name\": \"marie.dupont@example.com\"\n              }\n            ]\n          }\n        }\n      },\n      \"subject\": {\n        \"country\": \"FR\",\n        \"commonName\": \"Marie Dupont\",\n        \"organizationName\": \"Goodflag\",\n        \"givenName\": \"Marie\",\n        \"serialNumber\": \"tx-7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n        \"surName\": \"Dupont\"\n      }\n    }\n  },\n  \"certificateFormat\": \"PKCS_7_WITH_CHAIN\",\n  \"requestID\": \"cert-2026-09-11-0001\",\n  \"signerData\": {\n    \"digest\": [\n      {\n        \"id\": \"contract\",\n        \"digestAlgOID\": \"2.16.840.1.101.3.4.2.1\",\n        \"digestValue\": \"n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=\"\n      }\n    ]\n  }\n}")
  .asString();
```

```php PKI_createCertificate_example
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://lp7signbox.example.com/LP7SignBox/pki/createCertificate', [
  'body' => '{
  "certificationRequestInfo": {
    "signatureActivationProtocol": "OTP",
    "validityPeriod": 60,
    "transactionId": "tx-7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "PKCS10": {
      "attributes": {
        "subscriber": {
          "emailAddress": "marie.dupont@example.com",
          "phoneNumber": "+33612345678"
        },
        "extensionRequest": {
          "subjectAlternativeName": {
            "generalName": [
              {
                "RFC822Name": "marie.dupont@example.com"
              }
            ]
          }
        }
      },
      "subject": {
        "country": "FR",
        "commonName": "Marie Dupont",
        "organizationName": "Goodflag",
        "givenName": "Marie",
        "serialNumber": "tx-7c9e6679-7425-40de-944b-e07fc1f90ae7",
        "surName": "Dupont"
      }
    }
  },
  "certificateFormat": "PKCS_7_WITH_CHAIN",
  "requestID": "cert-2026-09-11-0001",
  "signerData": {
    "digest": [
      {
        "id": "contract",
        "digestAlgOID": "2.16.840.1.101.3.4.2.1",
        "digestValue": "n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg="
      }
    ]
  }
}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp PKI_createCertificate_example
using RestSharp;

var client = new RestClient("https://lp7signbox.example.com/LP7SignBox/pki/createCertificate");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"certificationRequestInfo\": {\n    \"signatureActivationProtocol\": \"OTP\",\n    \"validityPeriod\": 60,\n    \"transactionId\": \"tx-7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n    \"PKCS10\": {\n      \"attributes\": {\n        \"subscriber\": {\n          \"emailAddress\": \"marie.dupont@example.com\",\n          \"phoneNumber\": \"+33612345678\"\n        },\n        \"extensionRequest\": {\n          \"subjectAlternativeName\": {\n            \"generalName\": [\n              {\n                \"RFC822Name\": \"marie.dupont@example.com\"\n              }\n            ]\n          }\n        }\n      },\n      \"subject\": {\n        \"country\": \"FR\",\n        \"commonName\": \"Marie Dupont\",\n        \"organizationName\": \"Goodflag\",\n        \"givenName\": \"Marie\",\n        \"serialNumber\": \"tx-7c9e6679-7425-40de-944b-e07fc1f90ae7\",\n        \"surName\": \"Dupont\"\n      }\n    }\n  },\n  \"certificateFormat\": \"PKCS_7_WITH_CHAIN\",\n  \"requestID\": \"cert-2026-09-11-0001\",\n  \"signerData\": {\n    \"digest\": [\n      {\n        \"id\": \"contract\",\n        \"digestAlgOID\": \"2.16.840.1.101.3.4.2.1\",\n        \"digestValue\": \"n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=\"\n      }\n    ]\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift PKI_createCertificate_example
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = [
  "certificationRequestInfo": [
    "signatureActivationProtocol": "OTP",
    "validityPeriod": 60,
    "transactionId": "tx-7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "PKCS10": [
      "attributes": [
        "subscriber": [
          "emailAddress": "marie.dupont@example.com",
          "phoneNumber": "+33612345678"
        ],
        "extensionRequest": ["subjectAlternativeName": ["generalName": [["RFC822Name": "marie.dupont@example.com"]]]]
      ],
      "subject": [
        "country": "FR",
        "commonName": "Marie Dupont",
        "organizationName": "Goodflag",
        "givenName": "Marie",
        "serialNumber": "tx-7c9e6679-7425-40de-944b-e07fc1f90ae7",
        "surName": "Dupont"
      ]
    ]
  ],
  "certificateFormat": "PKCS_7_WITH_CHAIN",
  "requestID": "cert-2026-09-11-0001",
  "signerData": ["digest": [
      [
        "id": "contract",
        "digestAlgOID": "2.16.840.1.101.3.4.2.1",
        "digestValue": "n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg="
      ]
    ]]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://lp7signbox.example.com/LP7SignBox/pki/createCertificate")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```