# Form Fields > Adding your data to your document for a signature request using Form Fields Per Document. # Using Form Fields Per Document with Pre-filled Data ## Overview Using pre-filled data with `form_fields_per_document` allows you to add data on your documents without the need for a template. Fields are programmatically placed on a document with `form_fields_per_document` using a x/y coordinate system. It's well-suited for working with dynamically generated documents, transferring field mappings from old documents to new ones, and more. ## Form Fields per Document Structure with Pre-filled Data To add pre-filled data into Merge Fields, use the `form_fields_per_document` parameter and specify the [field type](/api/manual-reference-pages/constants#field-types) as either `text-merge` or `checkbox-merge`. This creates the data fields, which can then be populated with data in the `custom_fields` property in the request. ```json maxLines=0 Form Fields Per Document editable merge fields [ { "document_index": 0, "api_id": "signature_api_id", "name": "main_signature", "type": "signature", "x": 100, "y": 120, "width": 120, "height": 30, "required": true, "signer": 0, "page": 1 }, { "document_index": 0, "api_id": "firstname_api_id", "name": "firstname", "type": "text-merge", "x": 100, "y": 170, "width": 80, "height": 25, "required": true, "signer": 0, "page": 1 }, { "document_index": 0, "api_id": "lastname_api_id", "name": "lastname", "type": "text-merge", "x": 100, "y": 210, "width": 80, "height": 25, "required": true, "signer": 0, "page": 1 }, { "document_index": 0, "api_id": "is_registered_id", "name": "is_registered", "type": "checkbox-merge", "x": 100, "y": 250, "width": 15, "height": 15, "required": true, "signer": 0, "page": 1 } ] ``` ```json maxLines=0 Form Fields Per Document non-editable merge fields: [ { "document_index": 0, "api_id": "signature_api_id", "name": "main_signature", "type": "signature", "x": 100, "y": 120, "width": 120, "height": 30, "required": true, "signer": 0, "page": 1 }, { "document_index": 0, "api_id": "firstname_api_id", "name": "firstname", "type": "text-merge", "x": 100, "y": 170, "width": 80, "height": 25, "required": true, "signer": "sender", "page": 1 }, { "document_index": 0, "api_id": "lastname_api_id", "name": "lastname", "type": "text-merge", "x": 100, "y": 210, "width": 80, "height": 25, "required": true, "signer": "sender", "page": 1 }, { "document_index": 0, "api_id": "is_registered_id", "name": "is_registered", "type": "checkbox-merge", "x": 100, "y": 250, "width": 15, "height": 15, "required": true, "signer": "sender", "page": 1 } ] ``` The `custom_fields` value for the above `form_fields_per_document`: ```json [ {"name":"firstname", "value":"John"}, {"name":"lastname", "value":"Doe"}, {"name":"is_registered", "value":"true"} ] ``` ## Using Form Fields per Document with non-embedded and embedded signing ### Send Signature Request Endpoint with Form Fields Per Document: ```bash Non-editable Merge fields value curl -X POST 'https://api.hellosign.com/v3/signature_request/send' \ -u 'YOUR_API_KEY:' \ -F 'files[0]=@test-file.pdf' \ -F 'title=NDA with Acme Co.' \ -F 'subject=The NDA we talked about' \ -F 'message=Please sign this NDA and then we can discuss more. Let me know if you have any questions.' \ -F 'signers[0][email_address]=jack@example.com' \ -F 'signers[0][name]=Jack' \ -F 'test_mode=1'\ -F 'custom_fields=[{"name":"firstname", "value":"John"},{"name":"lastname", "value":"Doe"},{"name":"is_registered", "value":"true"}]' \ -F 'form_fields_per_document="[[{\"document_index\": 0,\"api_id\": \"signature_api_id\",\"name\": \"main_signature\",\"type\": \"signature\",\"x\": 100,\"y\": 120,\"width\": 120,\"height\": 30,\"required\": true,\"signer\": 0,\"page\": 1}, {\"document_index\": 0,\"api_id\": \"firstname_api_id\",\"name\": \"firstname\",\"type\": \"text-merge\",\"x\": 100,\"y\": 170,\"width\": 80,\"height\": 25 ,\"required\": true,\"signer\": 0,\"page\": 1}, {\"document_index\": 0,\"api_id\": \"lastname_api_id\",\"name\": \"lastname\",\"type\": \"text-merge\",\"x\": 100,\"y\": 210,\"width\": 80,\"height\": 25 ,\"required\": true,\"signer\": 0,\"page\": 1}, {\"document_index\": 0,\"api_id\": \"is_registered_id\",\"name\": \"is_registered\",\"type\": \"checkbox-merge\",\"x\": 100,\"y\": 250,\"width\": 15,\"height\": 15,\"required\": true,\"signer\": 0,\"page\": 1}]]"' ``` ```bash Editable Merge fields value curl -X POST 'https://api.hellosign.com/v3/signature_request/send' \ -u 'YOUR_API_KEY:' \ -F 'files[0]=@test-file.pdf' \ -F 'title=NDA with Acme Co.' \ -F 'subject=The NDA we talked about' \ -F 'message=Please sign this NDA and then we can discuss more. Let me know if you have any questions.' \ -F 'signers[0][email_address]=jack@example.com' \ -F 'signers[0][name]=Jack' \ -F 'test_mode=1'\ -F 'custom_fields=[{"name":"firstname", "value":"John"},{"name":"lastname", "value":"Doe"},{"name":"is_registered", "value":"true"}]' \ -F 'form_fields_per_document="[[{\"document_index\": 0,\"api_id\": \"signature_api_id\",\"name\": \"main_signature\",\"type\": \"signature\",\"x\": 100,\"y\": 120,\"width\": 120,\"height\": 30,\"required\": true,\"signer\": \"sender\",\"page\": 1}, {\"document_index\": 0,\"api_id\": \"firstname_api_id\",\"name\": \"firstname\",\"type\": \"text-merge\",\"x\": 100,\"y\": 170,\"width\": 80,\"height\": 25 ,\"required\": true,\"signer\": \"sender\",\"page\": 1}, {\"document_index\": 0,\"api_id\": \"lastname_api_id\",\"name\": \"lastname\",\"type\": \"text-merge\",\"x\": 100,\"y\": 210,\"width\": 80,\"height\": 25 ,\"required\": true,\"signer\": \"sender\",\"page\": 1}, {\"document_index\": 0,\"api_id\": \"is_registered_id\",\"name\": \"is_registered\",\"type\": \"checkbox-merge\",\"x\": 100,\"y\": 250,\"width\": 15,\"height\": 15,\"required\": true,\"signer\": \"sender\",\"page\": 1}]]"' ``` ### Create Embedded Signature Request Endpoint with Form Fields Per Document: ```bash Non-editable Merge fields value curl -X POST 'https://api.hellosign.com/v3/signature_request/create_embedded' \ -u 'YOUR_API_KEY:' \ -F 'client_id=YOUR_CLIENT_ID' \ -F 'files[0]=@test-file.pdf' \ -F 'title=NDA with Acme Co.' \ -F 'subject=The NDA we talked about' \ -F 'message=Please sign this NDA and then we can discuss more. Let me know if you have any questions.' \ -F 'signers[0][email_address]=jack@example.com' \ -F 'signers[0][name]=Jack' \ -F 'test_mode=1'\ -F 'custom_fields=[{"name":"firstname", "value":"John"},{"name":"lastname", "value":"Doe"},{"name":"is_registered", "value":"true"}]' \ -F 'form_fields_per_document="[[{\"document_index\": 0,\"api_id\": \"signature_api_id\",\"name\": \"main_signature\",\"type\": \"signature\",\"x\": 100,\"y\": 120,\"width\": 120,\"height\": 30,\"required\": true,\"signer\": 0,\"page\": 1}, {\"document_index\": 0,\"api_id\": \"firstname_api_id\",\"name\": \"firstname\",\"type\": \"text-merge\",\"x\": 100,\"y\": 170,\"width\": 80,\"height\": 25 ,\"required\": true,\"signer\": 0,\"page\": 1}, {\"document_index\": 0,\"api_id\": \"lastname_api_id\",\"name\": \"lastname\",\"type\": \"text-merge\",\"x\": 100,\"y\": 210,\"width\": 80,\"height\": 25 ,\"required\": true,\"signer\": 0,\"page\": 1}, {\"document_index\": 0,\"api_id\": \"is_registered_id\",\"name\": \"is_registered\",\"type\": \"checkbox-merge\",\"x\": 100,\"y\": 250,\"width\": 15,\"height\": 15,\"required\": true,\"signer\": 0,\"page\": 1}]]"' ``` ```bash Editable Merge fields value curl -X POST 'https://api.hellosign.com/v3/signature_request/create_embedded' \ -u 'YOUR_API_KEY:' \ -F 'client_id=YOUR_CLIENT_ID' \ -F 'files[0]=@test-file.pdf' \ -F 'title=NDA with Acme Co.' \ -F 'subject=The NDA we talked about' \ -F 'message=Please sign this NDA and then we can discuss more. Let me know if you have any questions.' \ -F 'signers[0][email_address]=jack@example.com' \ -F 'signers[0][name]=Jack' \ -F 'test_mode=1'\ -F 'custom_fields=[{"name":"firstname", "value":"John"},{"name":"lastname", "value":"Doe"},{"name":"is_registered", "value":"true"}]' \ -F 'form_fields_per_document="[[{\"document_index\": 0,\"api_id\": \"signature_api_id\",\"name\": \"main_signature\",\"type\": \"signature\",\"x\": 100,\"y\": 120,\"width\": 120,\"height\": 30,\"required\": true,\"signer\": \"sender\",\"page\": 1}, {\"document_index\": 0,\"api_id\": \"firstname_api_id\",\"name\": \"firstname\",\"type\": \"text-merge\",\"x\": 100,\"y\": 170,\"width\": 80,\"height\": 25 ,\"required\": true,\"signer\": \"sender\",\"page\": 1}, {\"document_index\": 0,\"api_id\": \"lastname_api_id\",\"name\": \"lastname\",\"type\": \"text-merge\",\"x\": 100,\"y\": 210,\"width\": 80,\"height\": 25 ,\"required\": true,\"signer\": \"sender\",\"page\": 1}, {\"document_index\": 0,\"api_id\": \"is_registered_id\",\"name\": \"is_registered\",\"type\": \"checkbox-merge\",\"x\": 100,\"y\": 250,\"width\": 15,\"height\": 15,\"required\": true,\"signer\": \"sender\",\"page\": 1}]]"' ``` ## Using Form Fields per Document with non-embedded requesting and embedded requesting. ### Create Unclaimed Draft Endpoint with Form Fields Per Document ```bash Non-editable Merge fields value curl -X POST 'https://api.hellosign.com/v3/unclaimed_draft/create' \ -u 'YOUR_API_KEY:' \ -F 'type=request_signature' \ -F 'files[0]=@test-file.pdf' \ -F 'subject=The NDA we talked about' \ -F 'message=Please sign this NDA and then we can discuss more. Let me know if you have any questions.' \ -F 'signers[0][email_address]=jack@example.com' \ -F 'signers[0][name]=Jack' \ -F 'test_mode=1'\ -F 'custom_fields=[{"name":"firstname", "value":"John"},{"name":"lastname", "value":"Doe"},{"name":"is_registered", "value":"true"}]' \ -F 'form_fields_per_document="[[{\"document_index\": 0,\"api_id\": \"signature_api_id\",\"name\": \"main_signature\",\"type\": \"signature\",\"x\": 100,\"y\": 120,\"width\": 120,\"height\": 30,\"required\": true,\"signer\": 0,\"page\": 1}, {\"document_index\": 0,\"api_id\": \"firstname_api_id\",\"name\": \"firstname\",\"type\": \"text-merge\",\"x\": 100,\"y\": 170,\"width\": 80,\"height\": 25 ,\"required\": true,\"signer\": 0,\"page\": 1}, {\"document_index\": 0,\"api_id\": \"lastname_api_id\",\"name\": \"lastname\",\"type\": \"text-merge\",\"x\": 100,\"y\": 210,\"width\": 80,\"height\": 25 ,\"required\": true,\"signer\": 0,\"page\": 1}, {\"document_index\": 0,\"api_id\": \"is_registered_id\",\"name\": \"is_registered\",\"type\": \"checkbox-merge\",\"x\": 100,\"y\": 250,\"width\": 15,\"height\": 15,\"required\": true,\"signer\": 0,\"page\": 1}]]"' ``` ```bash Editable Merge fields value curl -X POST 'https://api.hellosign.com/v3/unclaimed_draft/create' \ -u 'YOUR_API_KEY:' \ -F 'type=request_signature' \ -F 'files[0]=@test-file.pdf' \ -F 'subject=The NDA we talked about' \ -F 'message=Please sign this NDA and then we can discuss more. Let me know if you have any questions.' \ -F 'signers[0][email_address]=jack@example.com' \ -F 'signers[0][name]=Jack' \ -F 'test_mode=1'\ -F 'custom_fields=[{"name":"firstname", "value":"John"},{"name":"lastname", "value":"Doe"},{"name":"is_registered", "value":"true"}]' \ -F 'form_fields_per_document="[[{\"document_index\": 0,\"api_id\": \"signature_api_id\",\"name\": \"main_signature\",\"type\": \"signature\",\"x\": 100,\"y\": 120,\"width\": 120,\"height\": 30,\"required\": true,\"signer\": \"sender\",\"page\": 1}, {\"document_index\": 0,\"api_id\": \"firstname_api_id\",\"name\": \"firstname\",\"type\": \"text-merge\",\"x\": 100,\"y\": 170,\"width\": 80,\"height\": 25 ,\"required\": true,\"signer\": \"sender\",\"page\": 1}, {\"document_index\": 0,\"api_id\": \"lastname_api_id\",\"name\": \"lastname\",\"type\": \"text-merge\",\"x\": 100,\"y\": 210,\"width\": 80,\"height\": 25 ,\"required\": true,\"signer\": \"sender\",\"page\": 1}, {\"document_index\": 0,\"api_id\": \"is_registered_id\",\"name\": \"is_registered\",\"type\": \"checkbox-merge\",\"x\": 100,\"y\": 250,\"width\": 15,\"height\": 15,\"required\": true,\"signer\": \"sender\",\"page\": 1}]]"' ``` ### Create Embedded Unclaimed Draft Endpoint with editable merge fields: ```bash Non-editable Merge fields value curl -X POST 'https://api.hellosign.com/v3/unclaimed_draft/create_embedded' \ -u 'YOUR_API_KEY:' \ -F 'client_id=YOUR_CLIENT_ID' \ -F 'signers[0][email_address]=jack@example.com' \ -F 'signers[0][name]=Jack' \ -F 'files[0]=@test.pdf' \ -F 'requester_email_address=alice@example.com' \ -F 'test_mode=1'\ -F 'custom_fields=[{"name":"firstname", "value":"John"},{"name":"lastname", "value":"Doe"},{"name":"is_registered", "value":"true"}]' \ -F 'form_fields_per_document="[[{\"document_index\": 0,\"api_id\": \"signature_api_id\",\"name\": \"main_signature\",\"type\": \"signature\",\"x\": 100,\"y\": 120,\"width\": 120,\"height\": 30,\"required\": true,\"signer\": 0,\"page\": 1}, {\"document_index\": 0,\"api_id\": \"firstname_api_id\",\"name\": \"firstname\",\"type\": \"text-merge\",\"x\": 100,\"y\": 170,\"width\": 80,\"height\": 25 ,\"required\": true,\"signer\": 0,\"page\": 1}, {\"document_index\": 0,\"api_id\": \"lastname_api_id\",\"name\": \"lastname\",\"type\": \"text-merge\",\"x\": 100,\"y\": 210,\"width\": 80,\"height\": 25 ,\"required\": true,\"signer\": 0,\"page\": 1}, {\"document_index\": 0,\"api_id\": \"is_registered_id\",\"name\": \"is_registered\",\"type\": \"checkbox-merge\",\"x\": 100,\"y\": 250,\"width\": 15,\"height\": 15,\"required\": true,\"signer\": 0,\"page\": 1}]]"' ``` ```bash Editable Merge fields value curl -X POST 'https://api.hellosign.com/v3/unclaimed_draft/create_embedded' \ -u 'YOUR_API_KEY:' \ -F 'client_id=YOUR_CLIENT_ID' \ -F 'signers[0][email_address]=jack@example.com' \ -F 'signers[0][name]=Jack' \ -F 'files[0]=@test.pdf' \ -F 'requester_email_address=alice@example.com' \ -F 'test_mode=1'\ -F 'custom_fields=[{"name":"firstname", "value":"John"},{"name":"lastname", "value":"Doe"},{"name":"is_registered", "value":"true"}]' \ -F 'form_fields_per_document="[[{\"document_index\": 0,\"api_id\": \"signature_api_id\",\"name\": \"main_signature\",\"type\": \"signature\",\"x\": 100,\"y\": 120,\"width\": 120,\"height\": 30,\"required\": true,\"signer\": \"sender\",\"page\": 1}, {\"document_index\": 0,\"api_id\": \"firstname_api_id\",\"name\": \"firstname\",\"type\": \"text-merge\",\"x\": 100,\"y\": 170,\"width\": 80,\"height\": 25 ,\"required\": true,\"signer\": \"sender\",\"page\": 1}, {\"document_index\": 0,\"api_id\": \"lastname_api_id\",\"name\": \"lastname\",\"type\": \"text-merge\",\"x\": 100,\"y\": 210,\"width\": 80,\"height\": 25 ,\"required\": true,\"signer\": \"sender\",\"page\": 1}, {\"document_index\": 0,\"api_id\": \"is_registered_id\",\"name\": \"is_registered\",\"type\": \"checkbox-merge\",\"x\": 100,\"y\": 250,\"width\": 15,\"height\": 15,\"required\": true,\"signer\": \"sender\",\"page\": 1}]]"' ``` ## Things to consider * You'll need to use both the `form_fields_per_document` and `custom_fields` parameters in the same API request to pre-fill data on the fields of the document. * The ability to make pre-filled fields editable or non-editable for your signers is set in the `form_fields_per_document` signer fields. * When implementing pre-filled fields with non-embedded or embedded requesting, the requester/sender can adjust these fields prior to sending a signature request. * Placing your **pre-filled fields** outside the document's x/y coordinates will cause an error and the signature request will not be sent.