---
title: "A reward validated later"
description: "The donation is created when the person submits, and your team validates it, with its final amount, once the fact is checked."
canonical: https://www.charitips.com/docs/use-cases/validated-reward
---

# A reward validated later

> The donation is created when the person submits, and your team validates it, with its final amount, once the fact is checked.

- **Who pays**: Your company
- **Starts with**: A customer action
- **Tax receipt**: In your company's name
- Needs [API access](https://www.charitips.com/docs/overview/plans.md#api-access-for-webhooks-and-credentials) on a validated account. [Plans](https://www.charitips.com/docs/overview/plans.md#what-every-flow-needs)

Interactive demo on the page. The same flow as a build spec: https://www.charitips.com/docs/demos/validation/bug-bounty.md

**Scenarios this flow covers:**

- [A fixed amount](https://www.charitips.com/docs/use-cases/validated-reward.md#validate-once-the-fact-is-checked): The amount is known at the start: validation only confirms the donation.
- [The amount set at validation](https://www.charitips.com/docs/use-cases/validated-reward.md#set-the-amount-at-validation): Your team sets the final amount when it validates, from a severity or a count.
- [A trial period](https://www.charitips.com/docs/use-cases/validated-reward/hiring-referral.md): The donation waits for the end of a trial period or a return window before it is validated.

**Variants**: the same flow in other sectors, each with its build spec.

- [Bug bounty](https://www.charitips.com/docs/use-cases/validated-reward/bug-bounty.md) (Software and apps): A SaaS pays its bug bounty in donations: 5 € to 5 000 € by severity. The researcher submits a report and picks the charity; the security team sets the amount at validation. 5 € to 5 000 € by severity, set at validation. Build spec: https://www.charitips.com/docs/demos/validation/bug-bounty.md
- [Employee referral bonus](https://www.charitips.com/docs/use-cases/validated-reward/hiring-referral.md) (Professional services): A company adds 50 € for a charity on top of each employee referral bonus. The employee picks the charity when the hire is made; HR validates after the probation period. 50 € once the hire passes the trial period. Build spec: https://www.charitips.com/docs/demos/validation/hiring-referral.md
- [Bottles returned by post](https://www.charitips.com/docs/use-cases/validated-reward/bottle-return.md) (Health and sport): A beauty brand gives 0,50 € for each empty bottle sent back with a prepaid label. The customer declares the parcel and picks the charity; the workshop validates each bottle. 0,50 € per bottle received and checked. Build spec: https://www.charitips.com/docs/demos/validation/bottle-return.md
- [Health goal validated](https://www.charitips.com/docs/use-cases/validated-reward/health-goal.md) (Banking and insurance): A health insurer gives 20 € when a member declares a health goal with proof. The member picks the charity when declaring; the insurer checks the proof and validates the donation. 20 € per goal validated by a doctor. Build spec: https://www.charitips.com/docs/demos/validation/health-goal.md
- [Appointment kept](https://www.charitips.com/docs/use-cases/validated-reward/appointment-kept.md) (Software and apps): A medical practice gives 0,20 € when a patient confirms a reminder, 50 % more if they arrive on time. The patient picks the charity when confirming; reception validates arrival. 0,20 € per confirmed reminder, +50 % if on time. Build spec: https://www.charitips.com/docs/demos/validation/appointment-kept.md
- [Real-world mission validated](https://www.charitips.com/docs/use-cases/validated-reward/irl-mission.md) (Professional services): A field missions app turns a mission's 5 € reward into a donation. The worker completes the mission and picks the charity; the ops team validates the report, the app pays. 5 € per mission validated by the ops team. Build spec: https://www.charitips.com/docs/demos/validation/irl-mission.md

## Build it
- **Calls**: [`create-charities-selection`](https://www.charitips.com/docs/api-reference/create-charities-selection.md), [`create-campaign`](https://www.charitips.com/docs/api-reference/create-campaign.md), [`activate-campaign`](https://www.charitips.com/docs/api-reference/activate-campaign.md), [`create-donation`](https://www.charitips.com/docs/api-reference/create-donation.md), [`claim-donation`](https://www.charitips.com/docs/api-reference/claim-donation.md), [`validate-donation`](https://www.charitips.com/docs/api-reference/validate-donation.md)
- **Webhooks**: `donation_create`, `donation_update`
- **Before you start**: A campaign created with `withDonationsValidation`.

### Create a campaign with validation

Once, create the campaign with `withDonationsValidation`, after its charities selection, then activate it. With `donationsBilledOn` set to `CLAIM`, a donation is billed when you validate it, at its final amount.

```bash
curl -X POST https://api.sandbox.charitips.com/v1/campaigns \
  -H "Authorization: Bearer $CHARITIPS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Bug bounty",
    "charitiesSelectionId": "<charitiesSelectionId>",
    "withDonationsValidation": true,
    "donationsBilledOn": "CLAIM"
  }'
```

### Give when the person submits

A bug report, a hiring referral or bottles sent back by post: when the person submits, create the donation with the amount you expect.

```bash
curl -X POST https://api.sandbox.charitips.com/v1/donations \
  -H "Authorization: Bearer $CHARITIPS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "campaignId": "<campaignId>",
    "amount": 500,
    "uniqueExternalId": "bug_report_4410",
    "externalId": "researcher_207"
  }'
```

### Let the person pick a charity

The person picks the charity when they submit. [Claim the donation](https://www.charitips.com/docs/api-reference/claim-donation.md) with their choice.

```bash
curl -X POST https://api.sandbox.charitips.com/v1/donations/<donationId>/claim \
  -H "Authorization: Bearer $CHARITIPS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "charityId": "<charityId>"
  }'
```

### Validate once the fact is checked

Once your team has checked the fact, [validate the donation](https://www.charitips.com/docs/api-reference/validate-donation.md). Validation needs a claimed donation: the API answers `400 Donation not claimed yet` otherwise, and `409 Donation already validated` the second time.

```bash
curl -X POST https://api.sandbox.charitips.com/v1/donations/<donationId>/validate \
  -H "Authorization: Bearer $CHARITIPS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'
```

### Set the amount at validation

When the amount depends on the review, a severity or a count of items received, send the final amount with the validation. Without `amount`, the donation keeps the amount it was created with.

```bash
curl -X POST https://api.sandbox.charitips.com/v1/donations/<donationId>/validate \
  -H "Authorization: Bearer $CHARITIPS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 50000
  }'
```

## Edge cases

- **The fact is not confirmed.** [Delete the donation](https://www.charitips.com/docs/api-reference/delete-donation.md) instead of validating it.
- **The review takes more than a week.** In production, a donation not validated and not billed 7 days after its creation is deleted automatically.
- **Personal data.** Health goals, appointments and hires stay in your product: never put them in `externalId`, `uniqueExternalId` or the donor fields.
- **Fiscal receipts.** You fund the donations, so the receipt goes to your company.

## Related pages

- [Campaigns](https://www.charitips.com/docs/concepts/campaigns.md)
- [Donation lifecycle](https://www.charitips.com/docs/concepts/donation-lifecycle.md)
- [Webhooks](https://www.charitips.com/docs/webhooks/configuration.md)
