curl --request POST \ --url https://api.uip.digital/v1/message \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: multipart/form-data' \ --form 'intent=Account Statement Ready' \ --form 'message=Your Q4 2024 account statement is now available for review.' \ --form priority=MEDIUM \ --form receiver_uip=user_abc123def456 \ --form signature_required=false \ --form attachments='@example-file'
Copy
{ "message_id": "msg_abc123def456"}
API Endpoints
Send Message
Send an encrypted message to a UIP user with optional PDF attachments (up to 20MB) and signature requests
POST
/
message
Copy
curl --request POST \ --url https://api.uip.digital/v1/message \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: multipart/form-data' \ --form 'intent=Account Statement Ready' \ --form 'message=Your Q4 2024 account statement is now available for review.' \ --form priority=MEDIUM \ --form receiver_uip=user_abc123def456 \ --form signature_required=false \ --form attachments='@example-file'
Copy
{ "message_id": "msg_abc123def456"}
Send an encrypted message to a UIP user. Optionally include document attachments (up to 20MB) and request signatures directly from the message.Messages are end-to-end encrypted and support priority notification levels.
Description of why you’re sending the message. This is shown to the user in the UIP app as the message subject/title.Example:"Sign Employment Contract" or "Review Q4 Financial Report"
The message content/body. This is the actual message text the recipient will read.Example:"Please review and sign your employment contract by January 15, 2025"
Flag indicating whether the recipient must sign the message.Valid values:true, falseWhen set to true, the message requires biometric signature before it can be marked as complete.
Expiry date for signature requests. Only applies when signature_required is true.Format: RFC3339 format (ISO 8601 timestamp)Example:"2025-01-15T17:00:00Z"Default behavior:
If omitted when signature is required: Defaults to 7 days from message creation
Maximum allowed: 3 months from message creation
Cannot be in the past
If you provide a signature_expiry date more than 3 months in the future or in the past, the request will fail with error code request/invalid-payload.
The Message API sends webhook events only for signature-required messages.
Important: Webhooks are ONLY sent for signature-required messages (signature_required: true) when:
User signs the message with biometric verification
User declines to sign with biometric verification
Both signing and declining require biometric verification and create permanent audit records for legal traceability.No webhook is sent for messages without signature requirements (signature_required: false), or if signature-required messages expire without user action. Your application must handle timeouts (messages expire after 3 months, or at signature_expiry date for signature-required messages).
event - Always "message" for signature-related events
data.signing_uip_id - The UIP ID of the user who signed or declined
data.message_id - The message ID from your original request
data.audit_id - Permanent audit trail reference ID (save this for compliance)
When this webhook is sent:This webhook is ONLY sent for signature-required messages (signature_required: true):
Sent when user signs the message with biometric verification
Sent when user declines to sign with biometric verification
Both actions create permanent audit records for legal traceability
Query the audit trail using audit_id to determine if the message was signed or declined
Determining Action Taken: The webhook structure is identical for both signed and declined messages. To determine whether the user signed or declined, query the Audit API using the audit_id to retrieve the specific action details.
Save the audit_id: This is your permanent proof of the action taken. Store it in your database for compliance, legal verification, and to determine whether signatures were signed or declined.
Call the Message endpoint with intent, message content, priority, recipient UIP ID, and signature settings
2
Receive Message ID
Save the returned message ID string to track this message in your system
3
User Receives Notification
Recipient receives push notification based on priority level (unless LOW priority)
4
User Opens Message
Recipient opens message in UIP app, reads content, and views any attachments
5
User Takes Action
If signature not required: User reads message (no webhook sent)
If signature required: User signs or declines with biometric verification, webhook sent
6
Receive Webhook (Signature-Required Only)
For signature-required messages, your webhook receives the message event with signing UIP ID and audit trail reference
7
Determine Action & Complete
For signature-required messages: Use the audit_id to query the Audit API and determine whether the user signed or declined. Update your internal records and store the audit_id for compliance.
Expiry date for signature requests in RFC3339 format. Only applies when signature_required is true. Defaults to 7 days from message creation. Maximum allowed: 3 months.