It sounds like you want the APIFunction to use the request body and parse it as JSON.
The first argument to APIFunction is the list of parameters, which are obtained either from query parameters or as you first indicated, or from parameters in the request body using application/x-www-form-urlencoded or multipart/form-data. APIFunction and FormFunction automatically detect these from the HTTP request to populate the parameters.
This explains the error you got, about not finding the "Chiffre" parameter.
You can do what you want, you just need to access the request body (through HTTPRequestData) and parse it (through ImportString), and additionally, not declare any parameters (by providing an empty list as the first argument). Here's the end-to-end code:
api = CloudPublish[
APIFunction[{},
StringSplit[
ImportString[FromCharacterCode[HTTPRequestData["BodyBytes"]],
"RawJSON"]["Chiffre"]] &]]
requestData = {"Chiffre" -> "Il neige au Printemps"};
requestBody = ExportByteArray[requestData, "JSON"];
URLRead[HTTPRequest[api, <|"Body" -> requestBody|>], "Body"]
Additionally, if you want to test the APIFunction without the cloud, you would use GenerateHTTPResponse, and supply a 2nd argument so you can specify the request body:
GenerateHTTPResponse[
APIFunction[{},
StringSplit[
ImportString[FromCharacterCode[HTTPRequestData["BodyBytes"]],
"RawJSON"]["Chiffre"]] &],
<|"BodyBytes" ->
ToCharacterCode[
ExportString[{"Chiffre" -> "Il neige au Printemps"}, "JSON"],
"UTF-8"]|>
]["Body"]