Send encrypted messages with document attachments and signature requests.
https://msg.api.uip.id/v1
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"recipient_uip_id": "uip_user_1234567890",
"webhook_url": "https://yourapp.com/webhooks/uip/msg",
"subject": "Employment Contract Review",
"message": "Please review and sign the attached contract.",
"severity": "high",
"requires_signature": true,
"attachment": {
"filename": "contract.pdf",
"content_type": "application/pdf",
"data": "base64_encoded_pdf_data",
"size": 1048576
}
}
Parameter | Type | Required | Description |
---|---|---|---|
recipient_uip_id | string | Yes | UIP ID of the message recipient |
webhook_url | string | Yes | URL to receive delivery and response events |
subject | string | Yes | Message subject/title |
message | string | Yes | Message content/body |
severity | string | No | low, medium, high, extreme (default: medium) |
attachment | object | No | Document attachment (up to 20MB) |
requires_signature | boolean | No | Whether document requires signature (default: false) |
{
"message_id": "msg_1234567890abcdef",
"status": "sent",
"recipient_uip_id": "uip_user_1234567890",
"estimated_delivery": "2024-01-15T10:30:00Z",
"requires_signature": true,
"cost": 0.10
}
// JavaScript
async function sendMessage(recipientUipId, subject, message, options = {}) {
const payload = {
recipient_uip_id: recipientUipId,
webhook_url: 'https://yourapp.com/webhooks/uip/msg',
subject: subject,
message: message,
severity: options.severity || 'medium'
};
if (options.attachment) {
payload.attachment = options.attachment;
}
if (options.requiresSignature) {
payload.requires_signature = true;
}
const response = await fetch('https://msg.api.uip.id/v1', {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + YOUR_API_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
});
const data = await response.json();
console.log('Message sent. ID: ' + data.message_id + ', Cost: $' + data.cost);
return data;
}
// Helper: Encode file as base64
function encodeFileAsBase64(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => resolve(reader.result.split(',')[1]);
reader.onerror = reject;
reader.readAsDataURL(file);
});
}
// Usage examples
// Simple text message
sendMessage(
'uip_user_1234567890',
'Welcome!',
'Thank you for joining our platform.',
{ severity: 'medium' }
);
// Document with signature
const file = document.getElementById('file-input').files[0];
const base64Data = await encodeFileAsBase64(file);
sendMessage(
'uip_user_1234567890',
'Contract Review',
'Please review and sign the attached contract.',
{
severity: 'high',
requiresSignature: true,
attachment: {
filename: file.name,
content_type: file.type,
data: base64Data,
size: file.size
}
}
);
{
"event": "message_delivered",
"message_id": "msg_1234567890abcdef",
"recipient_uip_id": "uip_user_1234567890",
"delivered_at": "2024-01-15T10:30:00Z",
"status": "delivered"
}
{
"event": "document_signed",
"message_id": "msg_1234567890abcdef",
"recipient_uip_id": "uip_user_1234567890",
"signed_at": "2024-01-15T10:45:00Z",
"signature_data": {
"document_hash": "sha256:a1b2c3d4e5f6...",
"signature": "uip_sig_abc123def456...",
"task_hash": "task_a1b2c3d4e5f6789012345678901234567890abcdef",
"signer_info": {
"full_name": "Alice Johnson",
"verification_level": "government_id"
}
},
"status": "signed"
}