Funder API

API for Funders

Give your ISOs peace of mind.

Enterprise-volume document protection

Send us your PDF files → We send them back watermarked. It's that simple.

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