# content-upload-request.created

> Sent when a Flow's Content upload request action sends to a webhook, with the order, the upload link and the upload folder.

Breadcrumb: Webhooks › content-upload-request.created · Status: Flow only · Updated: 2026-11-04
Docs index: https://docs.cevoid.com/developers/llms.txt

Use it to ask customers for photos and videos through your own email or SMS tool instead of Cevoid's.

## When it fires

- Each time a Flow's _Content upload request_ action runs with a webhook as its delivery target.
- `data.upload_url` opens the upload page. `data.destination` is the upload folder the action is set to.

## Receive it

In a Flow on _Order fulfilled_ or _Order delivered_, add the _Content upload request_ action, set _Delivery target_ to Webhook and choose your destination. See [Send from a Flow](https://docs.cevoid.com/developers/webhooks/set-up.md#send-from-a-flow).

## Payload

```json title="Example payload"
{
  "created_at": "2026-11-02T09:30:00.000Z",
  "data": {
    "destination": {
      "id": "s-example",
      "name": "Customer uploads"
    },
    "order": {
      "buyer": {
        "email": "buyer@example.com",
        "external_customer_id": "customer_123",
        "profile_id": "prf_sarah"
      },
      "cancelled": false,
      "created_at": "2026-07-24T09:00:01.000Z",
      "currency": "USD",
      "financial_status": "PAID",
      "fulfillment_status": "PENDING",
      "id": "ord_abc123",
      "ingestion_mode": "live",
      "lines": [
        {
          "discount": 0,
          "external_line_id": "line_1",
          "fulfillment_status": "PENDING",
          "product_id": "product_123",
          "quantity": 1,
          "refund": 0,
          "returned_units": 0,
          "sku": "TSHIRT-BLACK-M",
          "unit_price": 50,
          "variant_id": "variant_456"
        }
      ],
      "market_id": "mar_us",
      "money": {
        "discount": 5,
        "refunded": 0,
        "shipping": 5,
        "sub_total": 50,
        "tax": 5,
        "total": 55
      },
      "order_number": "#1001",
      "paid_at": "2026-07-24T09:00:01.000Z",
      "placed_at": "2026-07-24T09:00:00.000Z",
      "source": {
        "connection_id": "erp-production",
        "external_order_id": "order_123",
        "type": "PUBLIC_API"
      },
      "updated_at": "2026-07-24T09:00:01.000Z"
    },
    "profile": {
      "avatar_url": "https://cdn.cevoid.com/avatars/prf_sarah/profile.jpg",
      "bio": "Lifestyle creator and photography enthusiast",
      "birthday": "1992-04-18",
      "country": "US",
      "created_at": "2026-01-15T09:30:00.000Z",
      "email": "sarah.johnson@example.com",
      "external_id": "customer_7391056823401",
      "first_name": "Sarah",
      "id": "prf_sarah",
      "language": "en",
      "last_name": "Johnson",
      "location": "San Francisco, CA",
      "name": "Sarah Johnson",
      "notes": "VIP customer; prefers email communication",
      "social_instagram_handle": "sarah.lifestyle",
      "social_tiktok_handle": "sarah.creates",
      "social_x_handle": "sarah_j",
      "updated_at": "2026-01-20T14:22:15.000Z"
    },
    "upload_url": "https://upload.cevoid.com/example?source=s-example"
  },
  "id": "evt_m3p82kdq5xw7tz4c",
  "origin": {
    "flow": {
      "id": "wfl_q7v2m9x4k8d3h6b5",
      "name": "Post-purchase follow-up"
    },
    "trigger": "order.fulfilled"
  },
  "type": "content-upload-request.created",
  "version": 1
}
```

- `version` (`number`, required): The version of this event type. A published version only gains fields, so ignore fields you do not use; a breaking change is a new version.
- `id` (`string`, required): Stable event id (`evt_` plus 16 characters), also sent as the `webhook-id` header. Retries and manual replays send the same id, so ignore an event whose id you have already processed.
- `type` (`string`, required): What `data` describes. New types are added over time, and an endpoint on "All events" receives them, so ignore any type you do not handle.
- `created_at` (`string<date-time>`, required): When the event happened, as an ISO 8601 timestamp.
- `origin` (`object`): Why your endpoint received the event. Omitted when the event was forwarded without a Flow of your own.
  - `origin.flow` (`object`, required): The Flow that sent the event.
    - `origin.flow.id` (`string`, required): The Flow id, shown in the Flow URL.
    - `origin.flow.name` (`string`, required): The Flow name at the time of sending.
  - `origin.trigger` (`string`, required): The event that started the Flow. One of `order.fulfilled`, `order.delivered`, `product-review.submitted`, `company-review.submitted`, `product-review.replied`, `company-review.replied`, `upload.completed`, `post.approved`, `profile.program-joined`, `profile.program-left`, `tier.earned`, `reward.fulfilled`, `tier.evaluation-approaching`, `points.expiration-approaching`.
- `data` (`object`, required): The resources the event carries, keyed by resource name. `type` decides which resources are included, and resources your plan does not include are left out.
  - `data.profile` (`object`)
    - `data.profile.id` (`string`, required): Cevoid profile ID.
    - `data.profile.external_id` (`string`): Identifier this profile carries in the workspace source system, when known.
    - `data.profile.name` (`string`): Display name of the profile.
    - `data.profile.first_name` (`string`): First name of the profile.
    - `data.profile.last_name` (`string`): Last name of the profile.
    - `data.profile.email` (`string`): Email address for the profile.
    - `data.profile.avatar_url` (`string`): Profile image URL.
    - `data.profile.country` (`string`): Country code associated with the profile.
    - `data.profile.language` (`string`): Preferred language code associated with the profile.
    - `data.profile.location` (`string`): Free-form location associated with the profile.
    - `data.profile.social_instagram_handle` (`string`): Instagram handle associated with the profile.
    - `data.profile.social_tiktok_handle` (`string`): TikTok handle associated with the profile.
    - `data.profile.social_x_handle` (`string`): X handle associated with the profile.
    - `data.profile.birthday` (`string<date>`): Birthday in YYYY-MM-DD format.
    - `data.profile.bio` (`string`): Profile biography text.
    - `data.profile.notes` (`string`): Merchant notes about the profile.
    - `data.profile.created_at` (`string<date-time>`, required): ISO 8601 timestamp when the profile was created.
    - `data.profile.updated_at` (`string<date-time>`, required): ISO 8601 timestamp when the profile was last updated.
  - `data.order` (`object`, required)
    - `data.order.id` (`string`, required): Cevoid order ID.
    - `data.order.ingestion_mode` (`string`): Processing mode of the latest order write. Historical mode suppresses automatic Flows. Live mode allows new lifecycle transitions to trigger Flows. Absent for orders without a live or historical mode. One of `live`, `historical`.
    - `data.order.source` (`object`, required)
      - `data.order.source.type` (`string`): System that owns this order. Absent when the order has no connected source. One of `SHOPIFY`, `WOOCOMMERCE`, `MYSTORE`, `NORDISK_EHANDEL`, `VISKAN`, `CENTRA`, `PUBLIC_API`, `OTHER`.
      - `data.order.source.connection_id` (`string`): Stable source namespace for the order. Absent when the order has no connected source.
      - `data.order.source.external_order_id` (`string`, required): Order identifier in the source system.
    - `data.order.order_number` (`string`): Customer-facing order number.
    - `data.order.buyer` (`object`): Buyer identity. Absent when the order carries no buyer information.
      - `data.order.buyer.email` (`string`): Buyer email as supplied by the source system.
      - `data.order.buyer.external_customer_id` (`string`): Customer identifier in the source system.
      - `data.order.buyer.profile_id` (`string`): Cevoid profile ID. Absent when no profile is linked to the order.
    - `data.order.placed_at` (`string<date-time>`, required): ISO 8601 timestamp when the order was placed.
    - `data.order.currency` (`string`, required): Three-letter uppercase ISO currency code.
    - `data.order.money` (`object`, required)
      - `data.order.money.total` (`number`, required): Current declared order total.
      - `data.order.money.sub_total` (`number`, required): Current merchandise subtotal.
      - `data.order.money.discount` (`number`): Current order-level discount total.
      - `data.order.money.tax` (`number`): Current order-level tax total.
      - `data.order.money.shipping` (`number`): Current order-level shipping total.
      - `data.order.money.refunded` (`number`): Cumulative refunded amount.
    - `data.order.fulfillment_status` (`string`, required): Current order fulfillment state. One of `PENDING`, `PARTIALLY_FULFILLED`, `FULFILLED`, `DELIVERED`.
    - `data.order.financial_status` (`string`, required): Current order payment state. One of `PENDING`, `PAID`, `PARTIALLY_REFUNDED`, `REFUNDED`.
    - `data.order.fulfilled_at` (`string<date-time>`): ISO 8601 timestamp when the order was fulfilled.
    - `data.order.delivered_at` (`string<date-time>`): ISO 8601 timestamp when the order was delivered.
    - `data.order.cancelled` (`boolean`, required): Whether the order is cancelled.
    - `data.order.cancelled_at` (`string<date-time>`): ISO 8601 timestamp when the order was cancelled.
    - `data.order.paid_at` (`string<date-time>`): ISO 8601 timestamp when the order was paid.
    - `data.order.last_refunded_at` (`string<date-time>`): ISO 8601 timestamp of the most recent refund.
    - `data.order.market_id` (`string`): Cevoid market ID.
    - `data.order.lines` (`object[]`, required)
      - `data.order.lines[].external_line_id` (`string`, required): Stable line identifier within the source order.
      - `data.order.lines[].product_id` (`string`): Product identifier in the source catalog. Absent when the line names no product.
      - `data.order.lines[].variant_id` (`string`): Variant identifier in the source catalog.
      - `data.order.lines[].sku` (`string`): Merchant SKU snapshot.
      - `data.order.lines[].quantity` (`integer`, required): Absolute ordered quantity.
      - `data.order.lines[].unit_price` (`number`, required): Price per unit in the order currency.
      - `data.order.lines[].discount` (`number`): Discount allocated to this line.
      - `data.order.lines[].refund` (`number`): Cumulative amount refunded for this line.
      - `data.order.lines[].returned_units` (`integer`): Absolute number of returned units.
      - `data.order.lines[].fulfillment_status` (`string`, required): Current fulfillment state for this line. One of `PENDING`, `PARTIALLY_FULFILLED`, `FULFILLED`, `DELIVERED`.
      - `data.order.lines[].delivered_at` (`string<date-time>`): ISO 8601 timestamp when this line was delivered.
      - `data.order.lines[].removed_at` (`string<date-time>`): Time the line was removed from the order.
    - `data.order.created_at` (`string<date-time>`, required): ISO 8601 timestamp when Cevoid created the order.
    - `data.order.updated_at` (`string<date-time>`, required): ISO 8601 timestamp when Cevoid last updated the order.
    - `data.order.removed_at` (`string<date-time>`): Time the order was deleted.
  - `data.upload_url` (`string<uri>`, required)
  - `data.destination` (`object`, required)
    - `data.destination.id` (`string`, required)
    - `data.destination.name` (`string`, required)

## Related articles

- [post.approved](https://docs.cevoid.com/developers/webhooks/post-approved.md)
- [Event types](https://docs.cevoid.com/developers/webhooks/event-types.md)

---

Canonical: https://docs.cevoid.com/developers/webhooks/content-upload-request-created
