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

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.
orgNumber|tink-orgnumber-verification[1]|tink-verified-orgnumber[1] Starts BankID organisation verification for group [1]. The trigger must be combined with a tink-verified-orgnumber* attribute on the same field to become clickable; the field receives the verified organisation number.
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. The field itself is replaced with an image of the scanned document — draw it generously sized, landscape about 3:2.
photo|tink-scanned-id-portrait[1] Places the portrait photo from ID scan [1] at the field's position.
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.

orgNumber|tink-orgnumber-verification[1]|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

The trigger must be combined with a value attribute on the same field: a field named with only tink-orgnumber-verification[index] never becomes clickable. Combine it with tink-verified-orgnumber[index] or tink-verified-orgnumber-companyname[index] — the combination renders the "Click to verify" badge, and the field receives that verified value after verification.

AttributeTypeDescription
tink-orgnumber-verification[index]triggermanual-entry-forbiddenClickable 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-forbiddenClickable 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-forbiddenKYC-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-populatedVerified organisation number.
tink-verified-orgnumber-companyname[index]auto-populatedVerified company name.
tink-verified-orgnumber-addressline1[index]auto-populatedVerified company address line 1.
tink-verified-orgnumber-zipCode[index]auto-populatedVerified company zip code.
tink-verified-orgnumber-city[index]auto-populatedVerified company city.

Validation, verification, and styling

AttributeTypeDescription
tink-format-mobileformattingValidates Swedish mobile number format.
tink-format-emailformattingValidates email address format.
tink-sms-verificationtriggermanual-entry-forbiddenTriggers OTP verification by SMS.
tink-email-verificationtriggermanual-entry-forbiddenTriggers OTP verification by email.
tink-email-recipientReceives the completed document by email.
tink-date-nowauto-populatedAutomatically inserts the current date in ISO 8601 format.
tink-style-transparentformattingMakes the field transparent so it blends into a colored or styled PDF background.
tink-input-fullnamePrefills full name for visible signature fields.

ID scanning

Legal responsibility:

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.

Data minimization: note that by default the scan trigger field is replaced with an image of the scanned document — a copy of the ID document is then reproduced in the signed output. If you only need the verified data (name, document number, etc.) and not a document image, combine the trigger with an MRZ attribute, e.g. passportNo|tink-scan-id[1]|tink-scanned-id-mrz-documentid[1] — no image is placed and the field receives the document number instead. See ID scan images below.

AttributeTypeDescription
tink-scan-id[index]triggermanual-entry-forbiddenFull ID scan button. Captures and reads a passport or national ID via camera and populates MRZ fields with the same index. The field itself is replaced with an image of the scanned document's front side — draw it generously sized, landscape about 3:2 (see ID scan images below for other options, including no image at all).
tink-scan-id-basic[index]triggermanual-entry-forbiddenPartial ID scan button. Populates MRZ fields with the same index and uses less strict validation.
tink-scan-id-passport[index]triggermanual-entry-forbiddenFull ID scan button that only allows passports. Populates MRZ fields with the same index.
tink-scan-id-passport-basic[index]triggermanual-entry-forbiddenPartial passport-only ID scan button. Populates MRZ fields with the same index and uses less strict validation.
tink-scanned-id-mrz-firstname[index]auto-populatedFirst name from scanned MRZ.
tink-scanned-id-mrz-lastname[index]auto-populatedLast name from scanned MRZ.
tink-scanned-id-mrz-personalnumber[index]auto-populatedPersonal number from scanned MRZ.
tink-scanned-id-mrz-documentid[index]auto-populatedDocument ID from scanned MRZ.
tink-scanned-id-mrz-nationality[index]auto-populatedNationality from scanned MRZ.
tink-scanned-id-mrz-nationalitycode[index]auto-populatedNationality code from scanned MRZ.
tink-scanned-id-mrz-birthdate[index]auto-populatedBirth date from scanned MRZ.
tink-scanned-id-mrz-expirydate[index]auto-populatedExpiry date from scanned MRZ.
tink-scanned-id-mrz-issuedate[index]auto-populatedIssue date from scanned MRZ.
tink-scanned-id-mrz-issuingstatecode[index]auto-populatedIssuing state code from MRZ.
tink-scanned-id-mrz-issuingstatename[index]auto-populatedIssuing state name from MRZ.
tink-scanned-id-mrz-placeofbirth[index]auto-populatedPlace of birth from MRZ.
tink-scanned-id-mrz-placeofissue[index]auto-populatedPlace of issue from MRZ.

ID scan images

By default, the scan trigger field is replaced with an image of the scanned document's front side. The attributes below place other parts of the scanned document instead — or in addition. They work like the MRZ attributes: put them on their own fields with the same [index] as the trigger, and they are populated when the scan completes. One scan can fill any number of fields.

Create the trigger field and all image fields as read-only in your PDF — they act as a scan button and image placeholders, and signees should not be able to type text into them. The Formify signing client also locks them automatically, but setting read-only in the PDF is good practice and covers all client versions.

AttributeTypeDescription
tink-scanned-id-portrait[index]auto-populatedmanual-entry-forbiddenPortrait photo from the scanned document. Strict: if the portrait cannot be extracted, the scan fails and the signee is asked to scan again. Draw the field upright, about 3:4 (width:height).
tink-scanned-id-signature[index]auto-populatedmanual-entry-forbiddenThe printed signature from the scanned document, when the document has one. Draw the field wide and low, about 4:1.
tink-scanned-id-ghostportrait[index]auto-populatedmanual-entry-forbiddenThe secondary "ghost" portrait, present on many modern ID cards and some passports. Draw the field upright, about 3:4.
tink-scanned-id-documentrear[index]auto-populatedmanual-entry-forbiddenThe rear side of the document. Requires the signee to capture the back side (two-sided documents such as ID cards). Draw the field landscape, about 3:2.
tink-scanned-id-barcode[index]auto-populatedmanual-entry-forbiddenImage of the document's barcode area (for example PDF417 on US driver's licenses), when the document has one. Draw the field wide and low, about 4:1.

Three placement rules:

idScan|tink-scan-id[1]
photo|tink-scanned-id-portrait[1]
signature|tink-scanned-id-signature[1]
passportNo|tink-scanned-id-mrz-documentid[1]

Layout tip: images are stretched to fill the field's rectangle exactly — a portrait placed in a landscape field will look distorted. Follow the recommended field shapes in the table above (this also applies to the default front-side image at the trigger field: draw it landscape, about 3:2). Apart from the portrait, these images are document-dependent — if the scanned document does not have one (for example no barcode on a passport), the field is simply removed without an image and does not block signing.

Reusing a scan for Live ID signing

When a document combines an ID scan field with a Live ID signature (ID document scan + biometric face check), the signee would normally have to scan the same document twice. Add tink-scanned-id-allow-in-signature[index] to the trigger field to let the completed scan be reused: at signing, the signee is offered their already scanned document and goes straight to the face liveness check.

idScan|tink-scan-id[1]|tink-scanned-id-allow-in-signature[1]
AttributeTypeDescription
tink-scanned-id-allow-in-signature[index]modifierCombine on an ID scan trigger field. Allows the completed scan to be offered for reuse in a Live ID signature within the same signing session.

Attachments, Sign & Pay, search, and sharing

AttributeTypeDescription
tink-upload-attachment[index]triggermanual-entry-forbiddenTriggers a client attachment upload dialog. Always pair with a tink-uploaded-attachmentname[index] field — the trigger alone works, but the uploaded file's name is then not shown anywhere in the document.
tink-uploaded-attachmentname[index]auto-populatedmanual-entry-forbiddenAuto-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-firstnameSearchable first name field.
tink-search-lastnameSearchable last name field.
tink-share-sms-phonenumberPrefills phone number for public link sharing.
tink-share-email-emailaddressPrefills email address for public link sharing.
tink-access-documentactionPublic link access before finalization.