Skip to content
MothershipDevelopers

Webhook eventsDocuments

Proof of delivery created

Sent when a proof of delivery is first attached.

EVENTproofOfDelivery.created
POST to your endpointSigned with HMAC-SHA256Retried for up to 4 days
RequestPOSThttps://your-server.example.com/webhooks/mothership
Content-Type:application/json
X-Mothership-Signature:bfc658be507c8fcceb8ad304c3a64f95d405f9305e5428fa7785391332d46251
X-Mothership-Delivery-Id:3f6c1a9e-8b2d-4c7a-9e15-2d8b7f4a6c01
{
: "proofOfDelivery.created",
: {
: "MS123456",
: "proofOfDelivery",
: "https://files.mothership.com/MS123456/proofOfDelivery.pdf",
: "2026-10-15T15:04:05.000Z",
: 1791471838000
},
: "2026-10-08T15:04:05.000Z",
: 1,
: 16
}

Hover a key to see what it means. Click it to jump to the field.

Sent once, when the shipment's first proof of delivery is attached. Later versions send proofOfDelivery.updated.

Add proofOfDelivery.created to a configuration's subscribedEvents with Create a webhook configuration or in the dashboard.

Event data

data · 5 keys
  • shipmentIdstring

    The shipment's reference number, such as MS123456. Pass it to Get shipment details.

  • typestring

    The kind of document.

    proofOfDelivery
  • urlstring

    Where to download the document. Download it when the event arrives. To fetch it later, call List shipment documents for a current URL.

  • expiresAtstringDeprecated

    An ISO 8601 string a month after Mothership built the event. It still goes out on every document event, but it doesn't say when url stops working.

  • createdAtinteger

    When the document was created, in milliseconds since the Unix epoch, such as 1791471838000. Unlike every other timestamp in a webhook, this one is a number. On the rare document with no creation time it is an ISO 8601 string instead, so accept both.

  • eventTypestring

    The event. Always proofOfDelivery.created here. Route on it, and answer 2xx to types you don't handle.

  • sentAtstring

    When Mothership queued the event to send, as an ISO 8601 string in UTC. Every retry and resend carries the same value, so it does not say when this attempt went out.

  • deliveryAttemptinteger

    Which send of this event this is, starting at 1. Resends from the dashboard count too.

  • pendingRetriesinteger

    How many automatic attempts are left if this one fails. 0 on the last one.

Related