# Request to a DocQ instance
Every request will be made to `https://{client}.docq.app/api/`, with the authorization token in the header `x-access-token`.
You can create DocQ access tokens using the UI, go to `https://{client}.docq.app/#/plugins/main` and under "DocQ Integration tokens", click on "`+ Add token`" button. After that, the token can be used on the `x-access-token` header of every request.
---
## Create workflow
`POST /api/workflow/create`
Payload:
```json
{
"id": null,
"name": "Workflow name",
"version": "ifttt",
"is_user_default": false,
"allow_email_copy": false,
"document_template_id": null,
"content_access_id": 1,
"send_to_ftp": false,
"ftp_account_id": null,
"keywords": null,
"metadata": [],
"steps": [
{
"order": 1,
"type": "start",
"name": "Start step",
"actions": [
{
"type": "default",
"name": "Default action",
"approve_to": 3,
"notes": ""
}
],
"notifications_in": [],
"notifications_out": [],
"position": { "x": 0, "y": 0 }
},
{
"order": 2,
"type": "end",
"name": "End step",
"notifications_in": [],
"notifications_out": [],
"position": { "x": 0, "y": 0 }
},
{
"order": 3,
"type": "notification",
"name": "Notify external user",
"actions": [
{
"type": "default",
"name": "Default action",
"approve_to": 2,
"notes": ""
}
],
"destinations": [
{
"destinations": [
{
"type": "external",
"name": "External User",
"email": "external@email",
"use_metadata_fields": false
}
],
"type": "individual"
}
],
"message_type": "rtf",
"email_subject": "This is the subject of the email",
"message_body": "Here goes the body of the email, it supports <b>html tags</b> and template variables: {{user_name}}",
"email_attach_document": false,
"notifications_in": [],
"notifications_out": [],
"position": { "x": 0, "y": 0 }
}
]
}
```
The response will have:
```json
[
{
"allow_email_copy": false,
"content_access_id": 1,
"document_template_id": null,
"ftp_account_id": null,
"id": 13,
"is_user_default": false,
"keywords": null,
"metadata": [],
"name": "Workflow name",
"send_to_ftp": false,
"steps": [...], // `steps` will be the same as the payload above
"version": "ifttt"
}
]
```
The important field here is the `id`, this will be used to identify this workflow.
A workflow always has a `start` and `end` step, the example above shows a simple workflow to notify an external user.
Each step has a list of actions, an action will decide which step the document will go after an approval (or rejection) based of a condition. All the steps (with the exception of the final, `"type": "end"`) must have at least the default route with an `approve_to` going to the next step. All the steps must be reached from the starting step, and all the steps must reach the end step.
```json
{
"actions": [
{
"type": "condition",
"name": "Condition 1",
"approve_to": 4,
"notes": "",
"condition": "equal",
"metadata": "Quantity",
"value": "5"
},
{
"approve_to": 2,
"name": "Default action",
"notes": "",
"type": "default"
}
]
}
```
In this part taken from the workflow we can see beyond the default case, a condition where if the document template variable named `Quantity` has a value equals to `5`, then the step will not follow the normal route, instead it will go to the step order 4.
---
## Create template
`POST /api/documenttemplate`
Payload:
```json
{
"name": "Template name",
"workflow_id": 13,
"content_access_id": 1,
"filename": "Doc_A.pdf",
"filetype": "pdf",
"fields": [],
"file": "{Base64 encoded PDF}"
}
```
The response will have:
```json
[
{
"content_access_id": 1,
"fields": [],
"file": "",
"filename": "Doc_A.pdf",
"filetype": "pdf",
"forms": {},
"id": 137,
"name": "Template name",
"signature_template": false,
"sr_module": null,
"workflow_id": 13,
"workflow_sr": false,
"workflow_steps": null
}
]
```
The important field here is the `id`, this will be used to identify which document template should be edited on the SmartOnboard project (TO BE DEFINED, could be changed for security reasons).
### Template fields
Example of the `fields` array:
```json
[
{
"id": "age",
"type": "number",
"label": "Age",
"required": false,
"max": 100,
"min": 1,
"positions": [
{ "page": 0, "scale": 1, "x": 83.162, "y": 44.214 }
],
"uuid": "8de77a41-883b-4ff8-9d74-fdf3100b2f0b"
},
{
"id": "firstName",
"type": "text",
"label": "First Name",
"required": false,
"positions": [
{ "page": 0, "scale": 1, "x": 14.793, "y": 44.269 }
],
"uuid": "0d6a4850-9158-45f2-9371-0f83b19a2e85"
},
{
"id": "lastName",
"type": "text",
"label": "Last Name",
"required": false,
"positions": [
{ "page": 0, "scale": 1, "x": 30.95, "y": 44.277 }
],
"uuid": "3eba795f-3ea5-42a0-8424-5246c39c8b8d"
},
{
"id": "dateOfBirth",
"type": "date",
"label": "Date Of Birth",
"required": false,
"positions": [
{ "page": 0, "scale": 1, "x": 56.28, "y": 44.226 }
],
"uuid": "85def1fe-95a3-4080-99c7-02376fe9d410"
},
{
"id": "gender",
"type": "dropdown",
"label": " Gender",
"required": false,
"options": [
{ "label": "Male", "value": "M" },
{ "label": "Female", "value": "F" }
],
"positions": [
{ "page": 0, "scale": 1, "x": 70.748, "y": 49.262 }
],
"uuid": "2a39fbc2-b86f-4c83-ae05-335aab5afd57"
},
{
"id": "email",
"type": "email",
"label": "Email address",
"required": false,
"confirm_email": true,
"positions": [
{ "page": 0, "scale": 1, "x": 67.605, "y": 58.404 }
],
"uuid": "7760bf66-f77f-4173-a55f-48cc43ebf520"
},
{
"id": "checkbox",
"type": "checkbox",
"label": "Checkbox",
"required": false,
"max": 2,
"positions": [
{ "page": 0, "scale": 1, "value": "CB#1", "x": 92.82, "y": 85.494 },
{ "page": 0, "scale": 1, "value": "CB#2", "x": 92.979, "y": 88.197 },
{ "page": 0, "scale": 1, "value": "CB#3", "x": 92.819, "y": 91.025 },
{ "page": 0, "scale": 1, "value": "CB#4", "x": 92.819, "y": 93.606 }
],
"uuid": "4e6be71a-0a4d-4764-a6e6-8bb8a851ff5d"
},
{
"id": "textareaTest",
"type": "textarea",
"label": "Textarea Test",
"hint": "test hint",
"required": false,
"max": 200,
"min": 5,
"positions": [
{ "page": 0, "scale": 1, "x": 17.647, "y": 53.759 }
],
"uuid": "2a606229-90d8-42cc-aecc-ac6f9dbe623f"
},
{
"id": "booleanField",
"type": "boolean",
"label": "Yes/No",
"required": false,
"positions": [
{ "page": 0, "scale": 1, "x": 6.26, "y": 60.58 }
],
"uuid": "35bee974-aab1-49a4-bccd-2be77a3928ec"
}
]
```
---
### Create form link
Form link allow candidates to access the form created on DocQ, without having to create an account.
`POST /api/documenttemplate/formToken`
Payload:
```json
{
"active": true,
"allow_preview": false,
"name": "Form link 1",
"expire": null,
"document_template_id": 137,
"sr_module": {
"request_emailrefid": false
},
"preload_last_data": "block"
}
```
(`document_template_id` is the `id` from the request above)
This will return:
```json
{
"tokens": [
{
"active": true,
"allow_preview": false,
"created": "2021-05-14T13:35:48.538Z",
"document_template_id": 137,
"expire": null,
"id": 100,
"name": "Form link 1",
"preload_last_data": "block",
"sr_module": {
"request_emailrefid": false
},
"token": "eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9..."
}
]
}
```
The field `token` is the string that goes in the URL for the cadidate to access the web form:
URL Example:
```
https://forms.docq.app/?domain={client}.docq.app&form=eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9...
```