Brand key required

Shipments

Record product shipments to creators with carrier and tracking number. Roster tracks delivery status and lets the creator confirm receipt.

List shipments

GET/v1/shipments

ParameterTypeDescription
campaign_idstringFilter to one campaign.
statusstringFilter: created, shipped, in_transit, delivered, returned.
page / limitintegerStandard pagination.

request

curl "https://api.ugcroster.com/v1/shipments?status=shipped" \
  -H "Authorization: Bearer rsk_brand_key"

response 200

{
  "data": [
    {
      "id": "ship_001",
      "campaign_id": "form_xyz789",
      "creator_email": "emma@example.com",
      "creator_name": "Emma Chen",
      "carrier": "ups",
      "tracking_number": "1Z999AA10123456784",
      "estimated_arrival": null,
      "product_description": "Glow Serum, Moisturizer SPF 30",
      "shipping_address": {
        "street": "1234 Sunset Blvd",
        "city": "Los Angeles",
        "state": "CA",
        "zip": "90026",
        "country": "US"
      },
      "notes": null,
      "tracking_status": "pending",
      "tracking_last_update": null,
      "creator_confirmed_receipt": false,
      "creator_confirmed_at": null,
      "status": "shipped",
      "created_at": "2026-06-05T10:00:00Z",
      "updated_at": "2026-06-08T14:30:00Z"
    }
  ],
  "pagination": { "page": 1, "limit": 20, "total": 18, "has_more": false }
}

GET /v1/shipments/{id} returns the same shape plus tracking_details when carrier tracking data is available.

Create a shipment

POST/v1/shipments

FieldTypeDescription
creator_emailstringRequired.
tracking_numberstringRequired.
carrierstringRequired. Stored lowercased ("UPS" → "ups").
product_descriptionstringRequired. What is in the box.
shipping_addressobject | stringObject with street, line2, city, state, zip, country, or a free-form string. Also accepted as "address".
campaign_id / creator_namestringOptional linkage and label.
estimated_arrivalstringOptional ISO date.
notesstringOptional delivery notes.

request

curl -X POST "https://api.ugcroster.com/v1/shipments" \
  -H "Authorization: Bearer rsk_brand_key" \
  -H "Content-Type: application/json" \
  -d '{
    "creator_email": "emma@example.com",
    "campaign_id": "form_new456",
    "product_description": "Fall Collection Box",
    "tracking_number": "1Z999AA10987654321",
    "carrier": "UPS",
    "shipping_address": {
      "street": "1234 Sunset Blvd",
      "city": "Los Angeles",
      "state": "CA",
      "zip": "90026",
      "country": "US"
    },
    "notes": "Leave at front desk"
  }'

response 200

{
  "data": {
    "id": "ship_new001",
    "creator_email": "emma@example.com",
    "carrier": "ups",
    "tracking_number": "1Z999AA10987654321",
    "product_description": "Fall Collection Box",
    "shipping_address": {
      "street": "1234 Sunset Blvd",
      "city": "Los Angeles",
      "state": "CA",
      "zip": "90026",
      "country": "US"
    },
    "tracking_status": "pending",
    "creator_confirmed_receipt": false,
    "status": "created",
    "created_at": "2026-06-13T16:40:00Z"
  }
}

Update a shipment

PATCH/v1/shipments/{id}

FieldTypeDescription
statusstringcreated, shipped, in_transit, delivered, returned. Other values are ignored.
tracking_number / carrierstringReplace tracking details (carrier lowercased).
estimated_arrivalstringISO date; empty string clears it.
shipping_addressobject | string | nullObject or free-form string replaces the address; explicit null clears it entirely.
notesstringEmpty string clears the notes.

request: new address as a string

curl -X PATCH "https://api.ugcroster.com/v1/shipments/ship_001" \
  -H "Authorization: Bearer rsk_brand_key" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "shipped",
    "shipping_address": "2715 Bearcat Way, Cincinnati, OH 45219-3539, US",
    "notes": "Address updated by brand"
  }'

response 200

{
  "data": {
    "id": "ship_001",
    "status": "shipped",
    "shipping_address": "2715 Bearcat Way, Cincinnati, OH 45219-3539, US",
    "notes": "Address updated by brand",
    "updated_at": "2026-08-17T16:20:00Z"
  }
}

Address semantics in one line: object or string sets it, omitting leaves it, null clears it. A PATCH body with no recognized fields returns 422 VALIDATION_ERROR.