Formify can read the internal names of PDF form fields and interpret pipe-separated tink-* attributes. This lets a normal PDF text field become a validated email input, SMS OTP field, BankID-verified organisation number, ID scan trigger, auto-filled date field, searchable value, and more.
How it works
Name the PDF form field with a human-readable label first, then add one or more attributes after pipe characters:
phone|tink-format-mobile|tink-sms-verification
In this example, phone is the field label. tink-format-mobile validates the mobile number format, and tink-sms-verification sends an OTP code by SMS that the signer must enter before continuing.
Syntax rules
- Formify reads the PDF field's internal name, not only the visible text printed on the PDF.
- Anything before the first pipe character (
|) is treated as the field label. - Anything after the first pipe is interpreted as a
tink-*attribute. - Multiple attributes can be combined on the same field.
- Attributes ending with
[index]use the same index to connect trigger fields with fields they populate. - Trigger fields are used as actions, such as opening BankID verification, ID scan, or attachment upload. They should not be treated as manually editable input fields.
Quick examples
| PDF field name | Result |
|---|---|
email|tink-format-email|tink-email-verification |
Validates email format and sends an email OTP. |
phone|tink-format-mobile|tink-sms-verification |
Validates Swedish mobile format and sends an SMS OTP. |
verifyCompany|tink-orgnumber-verification[1] |
Starts BankID organisation verification for group [1]. |
companyName|tink-verified-orgnumber-companyname[1] |
Auto-fills the verified company name from the same verification group. |
idScan|tink-scan-id[1] |
Opens ID scanning and reads MRZ data from a passport or national ID. |
date|tink-date-now|tink-style-transparent |
Auto-fills today's date and makes the field background transparent. |
Working with indexed attributes
Use the same [index] value when one field triggers a verification or scan and other fields should receive the result. The index is just a grouping key inside the PDF.
verifyCompany|tink-orgnumber-verification[1] orgNumber|tink-verified-orgnumber[1] companyName|tink-verified-orgnumber-companyname[1] address|tink-verified-orgnumber-addressline1[1] zip|tink-verified-orgnumber-zipCode[1] city|tink-verified-orgnumber-city[1]
Before sending
After uploading a PDF through POST /files, use GET /files/{fileId}/fields to inspect the fields Formify detected before creating a document. This is useful when testing new attribute combinations or confirming that the PDF editor saved the expected internal field names.
Some attributes depend on account capabilities such as BankID, ID scanning, attachments, or Sign & Pay. Check GET /account/capabilities before relying on optional features in production.
Attribute reference
Organisation verification
| Attribute | Type | Description |
|---|---|---|
tink-orgnumber-verification[index] | triggermanual-entry-forbidden | Clickable input verifying organisation number and Beneficial Owner via Swedish BankID. Auto-populates verified organisation number and company name fields with the same index. |
tink-orgnumber-verification-boardmember[index] | triggermanual-entry-forbidden | Clickable input verifying organisation number and either Beneficial Owner or Board Member via BankID. Auto-populates verified organisation number and company name fields with the same index. |
tink-orgnumber-verification-kyc[index] | triggermanual-entry-forbidden | KYC-adapted BankID verification. Results are stored for compliance. Auto-populates verified organisation number and company name fields with the same index. |
tink-verified-orgnumber[index] | auto-populated | Verified organisation number. |
tink-verified-orgnumber-companyname[index] | auto-populated | Verified company name. |
tink-verified-orgnumber-addressline1[index] | auto-populated | Verified company address line 1. |
tink-verified-orgnumber-zipCode[index] | auto-populated | Verified company zip code. |
tink-verified-orgnumber-city[index] | auto-populated | Verified company city. |
Validation, verification, and styling
| Attribute | Type | Description |
|---|---|---|
tink-format-mobile | formatting | Validates Swedish mobile number format. |
tink-format-email | formatting | Validates email address format. |
tink-sms-verification | triggermanual-entry-forbidden | Triggers OTP verification by SMS. |
tink-email-verification | triggermanual-entry-forbidden | Triggers OTP verification by email. |
tink-email-recipient | Receives the completed document by email. | |
tink-date-now | auto-populated | Automatically inserts the current date in ISO 8601 format. |
tink-style-transparent | formatting | Makes the field transparent so it blends into a colored or styled PDF background. |
tink-input-fullname | Prefills full name for visible signature fields. |
ID scanning
Passports and national ID documents contain highly sensitive identification data. In some countries, scanning or copying ID documents is only allowed in limited circumstances. Before enabling ID scanning in a flow, you are responsible for ensuring that you have a valid legal basis and that scanning, storing, and retaining the document is necessary and proportionate for your specific purpose.
Formify provides the technical capability. You remain responsible as data controller for assessing legal requirements, applying appropriate retention periods, and informing signees about how their ID document will be processed.
| Attribute | Type | Description |
|---|---|---|
tink-scan-id[index] | triggermanual-entry-forbidden | Full ID scan button. Captures and reads a passport or national ID via camera and populates MRZ fields with the same index. |
tink-scan-id-basic[index] | triggermanual-entry-forbidden | Partial ID scan button. Populates MRZ fields with the same index and uses less strict validation. |
tink-scan-id-passport[index] | triggermanual-entry-forbidden | Full ID scan button that only allows passports. Populates MRZ fields with the same index. |
tink-scan-id-passport-basic[index] | triggermanual-entry-forbidden | Partial passport-only ID scan button. Populates MRZ fields with the same index and uses less strict validation. |
tink-scanned-id-mrz-firstname[index] | auto-populated | First name from scanned MRZ. |
tink-scanned-id-mrz-lastname[index] | auto-populated | Last name from scanned MRZ. |
tink-scanned-id-mrz-personalnumber[index] | auto-populated | Personal number from scanned MRZ. |
tink-scanned-id-mrz-documentid[index] | auto-populated | Document ID from scanned MRZ. |
tink-scanned-id-mrz-nationality[index] | auto-populated | Nationality from scanned MRZ. |
tink-scanned-id-mrz-nationalitycode[index] | auto-populated | Nationality code from scanned MRZ. |
tink-scanned-id-mrz-birthdate[index] | auto-populated | Birth date from scanned MRZ. |
tink-scanned-id-mrz-expirydate[index] | auto-populated | Expiry date from scanned MRZ. |
tink-scanned-id-mrz-issuedate[index] | auto-populated | Issue date from scanned MRZ. |
tink-scanned-id-mrz-issuingstatecode[index] | auto-populated | Issuing state code from MRZ. |
tink-scanned-id-mrz-issuingstatename[index] | auto-populated | Issuing state name from MRZ. |
tink-scanned-id-mrz-placeofbirth[index] | auto-populated | Place of birth from MRZ. |
tink-scanned-id-mrz-placeofissue[index] | auto-populated | Place of issue from MRZ. |
Attachments, Sign & Pay, search, and sharing
| Attribute | Type | Description |
|---|---|---|
tink-upload-attachment[index] | triggermanual-entry-forbidden | Triggers a client attachment upload dialog. |
tink-uploaded-attachmentname[index] | auto-populatedmanual-entry-forbidden | Auto-populated after attachment upload. |
tink-sign-and-pay-email[index] | Prefills Sign & Pay email field. | |
tink-search-{label} | Custom searchable field. Replace {label} with the field label you want to search by. | |
tink-search-firstname | Searchable first name field. | |
tink-search-lastname | Searchable last name field. | |
tink-share-sms-phonenumber | Prefills phone number for public link sharing. | |
tink-share-email-emailaddress | Prefills email address for public link sharing. | |
tink-access-document | action | Public link access before finalization. |