---
title: "A gift sent by email, Slack or post"
description: "Your server creates the donation with the recipient's email or Slack id, Charitips sends the message, and the recipient picks the charity on a hosted page."
canonical: https://www.charitips.com/docs/use-cases/delivered-gift
---

# A gift sent by email, Slack or post

> Your server creates the donation with the recipient's email or Slack id, Charitips sends the message, and the recipient picks the charity on a hosted page.

- **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/delivered/graduation-gift.md

**Scenarios this flow covers:**

- [By Slack](https://www.charitips.com/docs/use-cases/delivered-gift.md#or-send-it-by-slack): The donation carries the person's Slack member id: the message arrives in Slack.
- [By post](https://www.charitips.com/docs/use-cases/delivered-gift.md#or-send-it-by-post): The donation carries the person's postal address: Charitips prints the card and posts it.
- [A batch of recipients](https://www.charitips.com/docs/use-cases/delivered-gift/graduation-gift.md): One call per recipient, each with its own unique id, for a class or a whole team.

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

- [Graduation gift](https://www.charitips.com/docs/use-cases/delivered-gift/graduation-gift.md) (Education): On ceremony day, a school's registry sends each graduate 5 € by email through Charitips. The graduate opens the hosted page and picks the charity; the school pays. 5 € for each graduate, sent on ceremony day. Build spec: https://www.charitips.com/docs/demos/delivered/graduation-gift.md
- [Secure merge, on Slack](https://www.charitips.com/docs/use-cases/delivered-gift/secure-merge.md) (Software and apps): A dev team gives 5 € for each merge request approved with no critical vulnerability. Charitips messages the author on Slack, who picks the charity from the message. 5 € for each merge request with no critical flaw. Build spec: https://www.charitips.com/docs/demos/delivered/secure-merge.md
- [Audit report delivered](https://www.charitips.com/docs/use-cases/delivered-gift/audit-report.md) (Professional services): A consulting firm gives 50 € when the client signs off the final audit report. Charitips emails the client, who picks the charity on a hosted page; the firm pays. 50 € when the final report is signed. Build spec: https://www.charitips.com/docs/demos/delivered/audit-report.md
- [Property estimate sent](https://www.charitips.com/docs/use-cases/delivered-gift/property-estimate.md) (Professional services): An estate agency sends a valuation report and gives the seller 0,1 % of the estimated value. Charitips emails the seller, who picks the charity; the agency pays. 0,1 % of the estimated value. Build spec: https://www.charitips.com/docs/demos/delivered/property-estimate.md
- [API usage milestone](https://www.charitips.com/docs/use-cases/delivered-gift/usage-milestone.md) (Software and apps): An API platform gives 10 € in a client account's name when its usage passes a milestone. Charitips emails the account owner, who picks the charity; the platform pays. 10 € in the client's name at each milestone. Build spec: https://www.charitips.com/docs/demos/delivered/usage-milestone.md
- [Upsell signed](https://www.charitips.com/docs/use-cases/delivered-gift/upsell-signed.md) (Software and apps): When a customer signs a seat expansion, the vendor sets aside 5 % of its value as a donation in the customer's name. The signer receives a Charitips email and chooses the charity. 5 % of the upsell, offered to the client. Build spec: https://www.charitips.com/docs/demos/delivered/upsell-signed.md
- [Gift after an event](https://www.charitips.com/docs/use-cases/delivered-gift/event-goodies.md) (Culture and events): At a trade show, an exhibitor scans a visitor's badge and emails them 1 € to 5 € instead of a goodie. The visitor picks the charity on their phone; the exhibitor pays. 1 € to 5 € per visitor, sent by email. Build spec: https://www.charitips.com/docs/demos/delivered/event-goodies.md
- [Greeting card with a gift](https://www.charitips.com/docs/use-cases/delivered-gift/card-gift.md) (Retail): A card maker ships business greeting cards that each carry a 5 € gift. The dispatch scan triggers the email; the recipient picks the charity on a hosted page; the sender pays. 5 € in each business card, sent when it ships. Build spec: https://www.charitips.com/docs/demos/delivered/card-gift.md
- [Client gift as a donation](https://www.charitips.com/docs/use-cases/delivered-gift/corporate-gift.md) (Professional services): A gifting platform offers each client a 50 € present or a donation. When the client picks the donation, Charitips sends them the link to choose the charity; the company pays. A 50 € client gift, turned into a donation. Build spec: https://www.charitips.com/docs/demos/delivered/corporate-gift.md
- [Greeting card by post](https://www.charitips.com/docs/use-cases/delivered-gift/posted-card.md) (Professional services): A company orders a year-end card for each client: Charitips prints and posts it with a 25 € gift, and the client picks the charity online. The sender pays. A year-end card with a 25 € gift, posted to each client. Build spec: https://www.charitips.com/docs/demos/delivered/posted-card.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), [`list-card-designs`](https://www.charitips.com/docs/api-reference/list-card-designs.md), [`claim-donation`](https://www.charitips.com/docs/api-reference/claim-donation.md)
- **Webhooks**: `donation_create`, `donation_update`
- **Before you start**: A campaign created with `sendingMode` `EMAIL`, `SLACK` or `POSTAL`, a `donor` on each donation, and a `sendingDate` for email and Slack.

### Create the email campaign

Once, pick the charities in a charities selection, then create the campaign with its `charitiesSelectionId` and `sendingMode` set to `EMAIL`. Then [activate it](https://www.charitips.com/docs/api-reference/activate-campaign.md).

```bash
curl -X POST https://api.sandbox.charitips.com/v1/campaigns \
  -H "Authorization: Bearer $CHARITIPS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Graduation gifts",
    "charitiesSelectionId": "<charitiesSelectionId>",
    "sendingMode": "EMAIL"
  }'
```

### Send the gift by email

For each recipient, create the donation with their first name and email in `donor`, and the day to send it in `sendingDate`: the API answers `400` when `donor` is missing or lacks one of them, or when `sendingDate` is missing. Charitips emails the recipient within ten minutes of that date, hosts the page where they pick the charity, and sends the reminders. To send it right away, pass the current time.

```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": "graduate_2026_3307",
    "sendingDate": "2026-06-30T09:00:00Z",
    "donor": {
      "firstName": "Camille",
      "email": "camille.martin@example.com"
    }
  }'
```

### Or send it by Slack

Create the campaign with `sendingMode` set to `SLACK`. Then send each donation with the person's Slack member id in `donor.slackId`, their first name in `donor.firstName` and the day to send it in `sendingDate`. The message goes through the Charitips Slack app installed on your workspace.

```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": "merge_request_8812",
    "sendingDate": "2026-06-30T09:00:00Z",
    "donor": {
      "firstName": "Camille",
      "slackId": "U04ABCD1234"
    }
  }'
```

### Handle the recipient's choice

When the recipient picks the charity, your server gets the `donation_update` [webhook](https://www.charitips.com/docs/webhooks/configuration.md). Your product makes no other call.

### Or send it by post

Charitips prints a card in one of the designs it validated, with the code to choose the charity, and posts it as a tracked letter to an address in France. Each card handed over is billed to your company on top of the donation: 1,50 € for the printed card and 2,50 € for tracked postage, excluding VAT. First pick the design: [List card designs](https://www.charitips.com/docs/api-reference/list-card-designs.md) (`language` `fr` or `en`) lists each one with its `momentSlug`, its `accentColor` and a `previewUrl` of the card's front, and the default Charitips card has a `momentSlug` of `null`.

```bash
curl -X GET https://api.sandbox.charitips.com/v1/card-designs \
  -H "Authorization: Bearer $CHARITIPS_TOKEN"
```

### Create the postal campaign

Create the campaign with `sendingMode` set to `POSTAL` and the design's `momentSlug`, then activate it. The design is set once for the campaign.

```bash
curl -X POST https://api.sandbox.charitips.com/v1/campaigns \
  -H "Authorization: Bearer $CHARITIPS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Year-end cards",
    "charitiesSelectionId": "<charitiesSelectionId>",
    "sendingMode": "POSTAL",
    "momentSlug": "cadeau-client-fin-d-annee"
  }'
```

### Send each card

For each card, create the donation with the recipient's postal address in `donor` and the posting day in `sendingDate`. `donor` needs `firstName`, `lastName`, `street`, `zip`, `city` and `country` set to `FR`, with a French postal code; `companyName`, `streetAddition` and `email` are optional. `sendingDate` is a business day, from the next batch (16:00, Paris time) up to a year ahead; leave it out to post with the next batch. Leave out `charityId` too, which the API refuses here: the recipient picks the charity with the code on the card.

```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": 2500,
    "uniqueExternalId": "year_end_card_2026_client_0412",
    "donor": {
      "firstName": "Camille",
      "lastName": "Martin",
      "companyName": "Architects office",
      "street": "12 rue des Lilas",
      "zip": "69003",
      "city": "Lyon",
      "country": "FR"
    },
    "sendingDate": "2026-12-14"
  }'
```

### Track the card's status

Each change of the donation reaches your server as a `donation_update` webhook, and its `sendingStatus` reads `PENDING` while the card waits for its batch. `DONE` means Charitips handed the card over at the 16:00 batch of its posting day, and it arrives 2 to 3 business days later; the status stops at this hand-over. `FAILED` means the postal partner refused the card or it came back, and a card that cannot be delivered comes back to your company. When the recipient picks the charity, another `donation_update` follows.

## Edge cases

- **The recipient never chooses.** Reminders follow, then the donation is assigned automatically when it expires or when the campaign closes: none is lost.
- **Fiscal receipts.** You fund the donations, so the receipt goes to your company.
- **A postal address is refused.** A missing field, a country other than `FR` or a postal code outside France answers `400 INVALID_POSTAL_ADDRESS`.
- **A posting day is refused.** A day that is not a business day, before the next batch or more than a year ahead answers `400 INVALID_SENDING_DATE`.
- **Cancel a card.** Until the batch takes the card (16:00 on its posting day), [deleting the donation](https://www.charitips.com/docs/api-reference/delete-donation.md) cancels it and nothing is billed. After, deleting it or changing its amount answers `403`.
- **The claim deadline runs from the creation.** The donation's expiry date is set when you create it, not on the posting day: a card scheduled far ahead leaves its recipient less time to choose.

## 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)
