Skip to content

Sending gifts

There are three send endpoints. They differ only in what the gift is; everything else — who gets it, when, how it is paid for — works the same way.

Endpoint The gift
POST /send/gift One product you choose.
POST /send/collection A set the recipient chooses from.
POST /send/template A preset saved in 1UP.

All three return the same SendResponse.

Delivery mode is inferred from the request, not stated. You supply one of two fields:

Supply recipients. 1UP emails each person their code.

{
"productId": 184,
"value": 25.00,
"recipients": [
{ "email": "aisha@example.com", "name": "Aisha" },
{ "email": "tom@example.com", "name": "Tom", "quantity": 2 }
]
}

quantity defaults to 1 and can go up to 1000 — that recipient gets that many separate codes.

The response has deliveryMode: "send" and an empty codes array: the codes went to the recipients, not to you.

Three optional fields shape what the recipient sees:

  • fromName — who it is from, at most 32 characters
  • message — a personal note, at most 256 characters
  • wrappingKey — the box colours and emoji, defaulting to default

On a template send these act as overrides: set them to replace the template’s, omit them to use the template’s.

sendAt takes an absolute UTC instant. Omit it to send immediately.

{
"productId": 184,
"value": 50.00,
"sendAt": "2026-12-24T08:00:00Z",
"recipients": [{ "email": "aisha@example.com" }]
}

The order is placed and funded straight away; only the delivery waits. The response carries scheduledFor so you can confirm it.

sendAt must be in the future, and is ignored for a code batch — those are always generated now.

Whether you must supply a value depends on the gift:

  • Physical gifts have an intrinsic price. Omit value.
  • Digital gifts with one denomination are implied. Omit value.
  • Everything else needs a value that is one of the product’s denominations, or inside its minAmount/maxAmount range.

GET /products/{id} tells you which case you are in via requiresAmount. See Choosing a gift.

Set source to a short token — zapier, hris, crm — and it shows up against the order in 1UP reporting. It defaults to api.

Every order is also attributed to the service account your key belongs to, which you cannot override from the API.