Funder API
API for Funders
Give your ISOs peace of mind.
API Key:
Test Email:
Endpoint
POST
Watermark PDF
Returns watermarked PDF with your custom logo
https://aquamark-funder-api.onrender.com/funder/watermark-pdf
Authentication & Headers
Two requirements for every request:
Authentication: Bearer Token: aqua-funder-api-101060042858 Header: X-User-Email: [email protected]
Request Format
The API accepts files in three ways:
Method 1: File Upload - Send multipart/form-data with your PDF file
Method 2: File URL (Form Data) - Send multipart/form-data with file_url field
Method 3: File URL (JSON) - Send application/json with file_url in body
POST https://aquamark-funder-api.onrender.com/funder/watermark-pdf Method 1 - File Upload: • file: PDF or Blob Data (multipart/form-data) Method 2 - File URL (Form Data): • file_url: Publicly accessible URL (multipart/form-data) Method 3 - File URL (JSON): • file_url: Publicly accessible URL (application/json body) Required authentication: • Authorization: Bearer aqua-funder-api-101060042858 Required header: • X-User-Email: [email protected]
Usage Examples
Method 1: File Upload
Browser/Frontend:
const formData = new FormData(); formData.append('file', yourPdfFile); const response = await fetch('https://aquamark-funder-api.onrender.com/funder/watermark-pdf', { method: 'POST', headers: { 'Authorization': 'Bearer aqua-funder-api-101060042858', 'X-User-Email': '[email protected]' // Content-Type is automatically set by browser for FormData }, body: formData }); if (response.ok) { const watermarkedPdf = await response.blob(); // This blob IS your watermarked PDF - use it however needed } else { const errorData = await response.json(); console.error('Error:', errorData.error); }
Node.js Server:
const FormData = require('form-data'); const form = new FormData(); form.append('file', fs.createReadStream('document.pdf')); const response = await fetch('https://aquamark-funder-api.onrender.com/funder/watermark-pdf', { method: 'POST', headers: { 'Authorization': 'Bearer aqua-funder-api-101060042858', 'X-User-Email': '[email protected]', ...form.getHeaders() // Required: Include form headers in Node.js }, body: form }); if (response.ok) { const watermarkedPdf = await response.buffer(); // This buffer IS your watermarked PDF - use it however needed }
Method 2: File URL (Form Data)
Browser/Frontend:
const formData = new FormData(); formData.append('file_url', 'https://example.com/path/to/document.pdf'); const response = await fetch('https://aquamark-funder-api.onrender.com/funder/watermark-pdf', { method: 'POST', headers: { 'Authorization': 'Bearer aqua-funder-api-101060042858', 'X-User-Email': '[email protected]' // Content-Type is automatically set by browser for FormData }, body: formData }); if (response.ok) { const watermarkedPdf = await response.blob(); // This blob IS your watermarked PDF - use it however needed } else { const errorData = await response.json(); console.error('Error:', errorData.error); }
Node.js Server:
const FormData = require('form-data'); const form = new FormData(); form.append('file_url', 'https://example.com/path/to/document.pdf'); const response = await fetch('https://aquamark-funder-api.onrender.com/funder/watermark-pdf', { method: 'POST', headers: { 'Authorization': 'Bearer aqua-funder-api-101060042858', 'X-User-Email': '[email protected]', ...form.getHeaders() // Required: Include form headers in Node.js }, body: form }); if (response.ok) { const watermarkedPdf = await response.buffer(); // This buffer IS your watermarked PDF - use it however needed }
Method 3: File URL (JSON)
Browser/Frontend:
const response = await fetch('https://aquamark-funder-api.onrender.com/funder/watermark-pdf', { method: 'POST', headers: { 'Authorization': 'Bearer aqua-funder-api-101060042858', 'X-User-Email': '[email protected]', 'Content-Type': 'application/json' }, body: JSON.stringify({ file_url: 'https://example.com/path/to/document.pdf' }) }); if (response.ok) { const watermarkedPdf = await response.blob(); // This blob IS your watermarked PDF - use it however needed } else { const errorData = await response.json(); console.error('Error:', errorData.error); }
Node.js Server:
const response = await fetch('https://aquamark-funder-api.onrender.com/funder/watermark-pdf', { method: 'POST', headers: { 'Authorization': 'Bearer aqua-funder-api-101060042858', 'X-User-Email': '[email protected]', 'Content-Type': 'application/json' }, body: JSON.stringify({ file_url: 'https://example.com/path/to/document.pdf' }) }); if (response.ok) { const watermarkedPdf = await response.buffer(); // This buffer IS your watermarked PDF - use it however needed }
Response Handling
Important: The /funder/watermark-pdf endpoint returns your watermarked PDF as raw binary data, not JSON.
Response Headers:
- Content-Type: application/pdf
- Content-Disposition: attachment; filename="originalname-protected.pdf"
Content-Type Guidelines:
- FormData methods: Browser sets Content-Type automatically; Node.js needs form.getHeaders()
- JSON method: Always set Content-Type to application/json
- Success response: Binary PDF data (use .blob() or .buffer())
- Error responses: JSON with detailed error messages
Response Codes
API returns appropriate HTTP status codes with JSON error messages:
Success: 200 OK - Returns watermarked PDF as binary data Errors: 401 Unauthorized - {"error": "Unauthorized"} 400 Bad Request - {"error": "Logo not found for [email protected] in bucket funder-logos"} 400 Bad Request - {"error": "Missing file or file_url"} 400 Bad Request - {"error": "Only PDF files are accepted"} 500 Internal Server Error - {"error": "Internal error"}
Important Notes
- PDF endpoint returns binary data, not JSON response
- Error responses are JSON format with detailed error messages
- Testing uses Aquamark branding
- Once subscribed, replace X-User-Email with your registered email to use your brand
- Works with any file source: CRM attachments, database blobs, and publicly accessible URLs
- File URLs must be publicly accessible (no authentication required)
- Supports both actual PDF files and blob data