Documentation

Accept shielded Zcash payments. Non-custodial. Set up in minutes.

Donations
Donation Mode

CipherPay supports non-custodial, shielded Zcash donations through donation links. Donors choose their amount, pay via shielded ZEC, and the funds go directly to your wallet. No fiat conversion, no KYC, no PII stored.

Setup

1. Go to Dashboard → Links and switch to Donation Links.

2. Click + New Donation Link and fill in the form:

  • Organization Name — displayed to donors (required)
  • Campaign Name — the specific campaign or initiative
  • Cover Image — HTTPS URL for a campaign hero image, with focus position (Top / Center / Bottom)
  • Mission Statement — shown on the donation page
  • Campaign Goal / Currency — enables a progress bar. Currency is locked after creation.
  • Suggested Amounts — preset buttons (e.g. $10, $25, $50, $100). Donors can also enter a custom amount.
  • Thank You Message — shown to donors after payment is confirmed
  • Contact Email — for tax receipt inquiries (out-of-band)
  • Website URL — link to your organization
  • Social Share Text — pre-filled text when donors share the donation link

3. Share the generated /donate/{slug} URL with your supporters.

Editing Campaigns

Click Edit on any donation link in the dashboard to update its details. All fields are editable except Currency, which is locked after creation to preserve the integrity of the total raised amount.

Common edits include updating the mission text, raising the goal after it's reached, changing the cover image, or refining the thank-you message.

Donor Flow

1. Donor opens the donation link URL.

2. Selects an amount (preset or custom) and clicks Donate.

3. An invoice is created with the chosen fiat amount, converted to ZEC at the live rate.

4. Donor scans the QR code or clicks Open in Wallet to pay from their Zcash wallet.

5. After confirmation, a thank-you page is shown with the merchant's custom message, the donation receipt, and reference code.

donation_config Reference
{
  "mission": "Defending digital rights worldwide",
  "thank_you": "Thank you for supporting privacy.",
  "suggested_amounts": [1000, 2500, 5000, 10000],
  "currency": "USD",
  "min_amount": 100,
  "max_amount": 1000000,
  "campaign_name": "2026 Legal Defense Fund",
  "campaign_goal": 1000000,
  "cover_image_url": "https://example.org/campaign-hero.jpg",
  "cover_image_position": "center top",
  "contact_email": "donations@example.org",
  "website_url": "https://example.org",
  "social_share_text": "I just donated with Zcash!"
}
json

All amounts are in cents (e.g. 1000 = $10.00).min_amount defaults to 100 ($1), max_amount to 1000000 ($10,000).cover_image_position accepts center top, center center, or center bottom.

Campaign Progress

When campaign_name and campaign_goal are set, the donation page shows a progress bar. total_raised increments atomically when each donation is confirmed, tracking the fiat amount pledged at the time of donation (not live ZEC value).

The campaign stays active after the goal is reached. Donors can still contribute. The progress bar caps at 100%, but the raised amount displays the true total.

Campaigns have no time limit. Deactivate the link from the dashboard when the campaign is complete.

Tax Receipts
NOTE
CipherPay never collects donor identity. Donations are anonymous by default.

For tax receipts, donors are directed to contact the organization using the contact_email provided in the donation config. The thank-you page shows:

"Want a tax receipt? Contact [Org] at [email] with reference code CP-XXXXXXXX."

The organization matches the memo code to the donation in their CipherPay dashboard and issues a receipt directly. CipherPay is never in the loop.

API Endpoints

Create Donation Link

POST /api/donation-links
Authorization: Bearer <api_key>

{
  "name": "Example Foundation",
  "mission": "Defending digital rights",
  "suggested_amounts": [1000, 2500, 5000],
  "currency": "USD",
  "campaign_name": "2026 Fund",
  "campaign_goal": 1000000,
  "contact_email": "donate@example.org",
  "cover_image_url": "https://example.org/hero.jpg",
  "cover_image_position": "center top",
  "website_url": "https://example.org",
  "social_share_text": "Donate with Zcash!"
}
bash

Update Donation Link

PATCH /api/payment-links/{id}
Authorization: Bearer <api_key>

{
  "name": "Updated Foundation Name",
  "donation_config": {
    "mission": "Updated mission statement",
    "campaign_goal": 2000000
  }
}
bash

Only include the fields you want to change. Omitted fields keep their existing values.

Get Donation Link Info (Public)

GET /api/payment-links/{slug}/info
bash

Returns donation config, campaign progress, org name. No authentication required. Rate limited.

Create Donation Invoice (Public)

POST /api/payment-links/{slug}/checkout

{
  "amount": 5000,
  "currency": "USD"
}
bash

Amount in cents. Creates an invoice and returns invoice_id and checkout_url.

Embed on Your Website

Add a donation widget to any website with a single script tag. The widget renders a self-contained card with your campaign image, mission, progress bar, and a "Donate with Zcash" button that opens your CipherPay donation page.

Basic embed

<script src="https://cipherpay.app/embed.js"
        data-campaign="your-campaign-slug"></script>
html

All options

<script src="https://cipherpay.app/embed.js"
        data-campaign="your-campaign-slug"
        data-locale="en"
        data-theme="dark"></script>
html

Attributes:

  • data-campaign — your donation link slug (required)
  • data-locale — language for the donate page link: en, es, pt, ar (default: en)
  • data-themedark or light (default: dark)
NOTE
The widget uses Shadow DOM — its styles never conflict with your site's CSS. It fetches campaign data from the public API on load, so the progress bar is always up to date.

WordPress — paste the script tag into a Custom HTML block. No plugin needed.

Static sites — add the script tag wherever you want the widget to appear.

CipherPay — Private Payments for the Internet