> 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 une visionneuse de document

POST https://workflow-manager/api/documents/{documentId}/viewer
Content-Type: application/json

Crée une URL ouvrable dans un navigateur pour visualiser un document XML ou PDF. Pour un document PDF, si le parapheur comporte au moins un destinataire signataire, la visionneuse permet à l'utilisateur de placer les champs de signature correspondants par glisser-déposer.

`workflowManager`

Également autorisés sans rôle : les membres d'un groupe autorisé, le propriétaire.

Reference: https://docs.goodflag.com/wm/api-reference/documentation-api/token-portail/workflow-documents/create-document-viewer

## Authentication

- `Authorization` header (bearer token, required) — Authentification Bearer par jeton utilisateur ou jeton d'accès : `Authorization: Bearer <token>`.

## Request

### Path parameters

- `documentId` (string, required) — L'identifiant du document.

### Body (application/json)

This endpoint expects an object.

- `redirectUrl` (string, optional) — L'URL de redirection à la fermeture de la visionneuse.
- `expired` (long, optional) — La date d'expiration de la visionneuse. Horodatage en millisecondes depuis l'epoch.

## Response

### 200

La session de visionneuse de document créée.

- `expired` (long, required) — La date d'expiration de la visionneuse. Horodatage en millisecondes depuis l'epoch.
- `viewerUrl` (string, required) — L'URL de la visionneuse.

## Errors

### 400 Bad Request Error

InvalidRequestField : Un champ de la requête porte une valeur incorrecte.

- `status` (integer, required) — Le code de statut HTTP.
- `error` (string, required) — Le message de statut HTTP.
- `message` (string, required) — Le message d'erreur.
- `code` (string, required) — Le code d'erreur.

### 403 Forbidden Error

AuthenticatedUserDisabled : L'utilisateur authentifié est désactivé. ; MissingBearerToken : Un jeton Bearer est requis. ; TenantInactive : Le tenant est inactif et n'autorise aucune opération. ; UserGroupDisabled : Le groupe de l'utilisateur spécifié est désactivé. ; UserNotAllowed : L'utilisateur authentifié n'est pas autorisé à effectuer cette opération.

- `status` (integer, required) — Le code de statut HTTP.
- `error` (string, required) — Le message de statut HTTP.
- `message` (string, required) — Le message d'erreur.
- `code` (string, required) — Le code d'erreur.

### 404 Not Found Error

WorkflowDocumentNotFound : Le document de parapheur spécifié est introuvable.

- `status` (integer, required) — Le code de statut HTTP.
- `error` (string, required) — Le message de statut HTTP.
- `message` (string, required) — Le message d'erreur.
- `code` (string, required) — Le code d'erreur.

## Examples

**Request**

```json
{
  "redirectUrl": "https://lockman.info/callback",
  "expired": 1782907750700
}
```

**Response**

```json
{
  "expired": 1782907750700,
  "viewerUrl": "https://gaylord.name/viewer#token=eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJ2aWV3ZXIiLCJkb2N1bWVudElkIjoiZG9jX0RrUlJxaFduWVBhM3ZveXM2c2RrekdCRSIsInJlZGlyZWN0V..."
}
```

**SDK Code**

```python Requête réussie.
import requests

url = "https://workflow-manager/api/documents/documentId/viewer"

payload = {
    "redirectUrl": "https://lockman.info/callback",
    "expired": 1782907750700
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```javascript Requête réussie.
const url = 'https://workflow-manager/api/documents/documentId/viewer';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"redirectUrl":"https://lockman.info/callback","expired":1782907750700}'
};

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

```go Requête réussie.
package main

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

func main() {

	url := "https://workflow-manager/api/documents/documentId/viewer"

	payload := strings.NewReader("{\n  \"redirectUrl\": \"https://lockman.info/callback\",\n  \"expired\": 1782907750700\n}")

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

	req.Header.Add("Authorization", "Bearer <token>")
	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 Requête réussie.
require 'uri'
require 'net/http'

url = URI("https://workflow-manager/api/documents/documentId/viewer")

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"redirectUrl\": \"https://lockman.info/callback\",\n  \"expired\": 1782907750700\n}"

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

```java Requête réussie.
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://workflow-manager/api/documents/documentId/viewer")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"redirectUrl\": \"https://lockman.info/callback\",\n  \"expired\": 1782907750700\n}")
  .asString();
```

```php Requête réussie.
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://workflow-manager/api/documents/documentId/viewer', [
  'body' => '{
  "redirectUrl": "https://lockman.info/callback",
  "expired": 1782907750700
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp Requête réussie.
using RestSharp;

var client = new RestClient("https://workflow-manager/api/documents/documentId/viewer");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"redirectUrl\": \"https://lockman.info/callback\",\n  \"expired\": 1782907750700\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Requête réussie.
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "redirectUrl": "https://lockman.info/callback",
  "expired": 1782907750700
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://workflow-manager/api/documents/documentId/viewer")! 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()
```