Lightweight document protection. Route broker submissions to our endpoint prior to ingestion into your systems. We immediately return protected PDFs—ensuring unmarked files never enter your systems where users have access. Protection includes visible broker and funder attribution and embedded metadata establishing clear chain of custody.
The API uses asynchronous processing to handle submissions without timeouts:
Authorization: Bearer aqua-funder-api-101060-042858-101812
This API key is universal and can be used immediately for testing.
| Parameter | Type | Description |
|---|---|---|
user_email |
String | Your company email (authorized funder account) Use [email protected] for testing |
broker_name |
String | Broker name or tag Letters, numbers, spaces, and hyphens only Optional: Use a placeholder (e.g., "CONFIDENTIAL") if you prefer not to include broker attribution. |
files |
Array of Objects | Array of file objects, each containing:name (required): Filename with .pdf extensionurl or data (required): Public URL or base64-encoded PDFCan mix URL and base64 files in the same request |
Max file size: 25MB per file
name: The filename (e.g., "bank-statement-jan.pdf")url: Public URL to the PDF file, ORdata: Base64-encoded PDF dataNote: Examples use cURL for clarity. Translate to your preferred language (Python, JavaScript, Java, etc.). Standard HTTP requests—nothing custom.
curl -X POST https://aquamark-funder-broker.onrender.com/watermark-funder-broker \
-H "Authorization: Bearer aqua-funder-api-101060-042858-101812" \
-H "Content-Type: application/json" \
-d '{
"user_email": "[email protected]",
"broker_name": "ABC Capital Partners",
"files": [
{
"name": "bank-statement-jan.pdf",
"url": "https://your-portal.com/submissions/jan.pdf"
},
{
"name": "bank-statement-feb.pdf",
"data": "JVBERi0xLjcKJeLjz9MK..."
},
{
"name": "bank-statement-mar.pdf",
"data": "JVBERi0xLjcKJeLjz9MK..."
},
{
"name": "credit-application.pdf",
"url": "https://your-portal.com/submissions/credit-app.pdf"
},
{
"name": "voided-check.pdf",
"data": "JVBERi0xLjcKJeLjz9MK..."
}
]
}'
Note: You can mix files with url and files with data (base64) in the same request. The data field should contain the complete base64-encoded PDF. Convert your PDF files to base64 using any standard library before sending.
{
"success": true,
"job_id": "abc-123-def-456",
"file_count": 5,
"message": "Watermarking job started",
"status_url": "/job-status/abc-123-def-456"
}
Use the job_id from Step 2 to check status every 10 seconds:
curl https://aquamark-funder-broker.onrender.com/job-status/abc-123-def-456
While processing:
{
"job_id": "abc-123-def-456",
"status": "processing",
"progress": "Watermarking file 2 of 3",
"created_at": "2025-01-06T10:00:00Z"
}
When complete:
{
"job_id": "abc-123-def-456",
"status": "completed",
"download_url": "https://...funder-job-results/abc-123-def-456.zip",
"message": "Ready for download. Files expire after 30 minutes.",
"created_at": "2025-01-06T10:00:00Z",
"completed_at": "2025-01-06T10:01:30Z"
}
On error:
{
"job_id": "abc-123-def-456",
"status": "failed",
"error_message": "Job timed out after 10 minutes",
"created_at": "2025-01-06T10:00:00Z",
"completed_at": "2025-01-06T10:10:00Z"
}
Use the download_url from Step 3 to download the ZIP:
curl "https://...funder-job-results/abc-123-def-456.zip" --output watermarked.zip
watermarked.zip/
├── bank-statement-jan-abc-capital-partners.pdf
├── bank-statement-feb-abc-capital-partners.pdf
├── bank-statement-mar-abc-capital-partners.pdf
├── credit-application-abc-capital-partners.pdf
└── voided-check-abc-capital-partners.pdf
Each file is watermarked with your funder logo and the broker's name.
completed or faileddownload_url is a signed URL with built-in expiration| Code | Meaning | Example Response |
|---|---|---|
| 400 | Bad request | Validation error (missing params, invalid format) |
| 401 | Invalid API key | Invalid API key |
| 403 | User not authorized | User not found or inactive |
| 404 | Job not found | Job not found |
| 413 | File too large | File exceeds 25MB limit |
| 429 | Rate limit exceeded | Too many requests. Please wait 15 minutes and try again. |
| 500 | Server error | Internal server error |
To integrate watermarking API:
Questions? Contact [email protected]
Privacy Policy