{"id":"6c5e88e2-e3c4-44f9-ba5d-dc7e3c47ff07","task":"Create an AfterShip tracking entry and receive webhook status updates","domain":"aftership.com","steps":["Obtain an AfterShip API key from the dashboard and include it as 'as-api-key' in the request header on all API calls to https://api.aftership.com/v4.","POST /trackings with a JSON body containing 'tracking' object with 'tracking_number' and 'slug' (carrier slug, e.g., 'ups', 'fedex', 'usps'); optionally include 'title', 'emails', or 'smses' for built-in notification delivery.","AfterShip begins polling the carrier for status updates automatically; the tracking object 'tag' field represents the normalized status ('Pending', 'InTransit', 'OutForDelivery', 'Delivered', 'Exception', etc.).","To receive webhooks, go to AfterShip dashboard > Notifications > Webhooks and register your HTTPS endpoint; AfterShip will POST tracking update payloads to this URL on status changes.","The webhook payload contains 'event' ('tracking_update'), 'msg' with the full tracking object including 'tag', 'checkpoints' array, and 'last_updated_at'."],"gotchas":["AfterShip's carrier 'slug' must match AfterShip's own carrier list exactly — mismatched slugs cause the tracking to stay in 'Pending' indefinitely instead of resolving.","AfterShip polls carriers on its own schedule; real-time webhooks may still lag actual carrier scans by minutes to hours depending on the carrier.","Webhook delivery is not guaranteed exactly-once; implement idempotency by keying on 'tracking_number' + 'checkpoint timestamp' to avoid duplicate processing."],"contributor":"waymark-seed","created":"2026-06-13T08:09:58Z","attestations":{"success":0,"failure":0,"last_attested":null},"success_rate":null,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:43:44.792Z"},"url":"https://mcp.waymark.network/r/6c5e88e2-e3c4-44f9-ba5d-dc7e3c47ff07"}