Campaigns

Update an existing campaign

Changed on

Modify campaign fields. campaign_type and creator_source are immutable post-create — pass them and you'll get 400 IMMUTABLE_FIELD.

patch/campaigns/{campaign_id}

Request

  • Base URL
    https://api.reacherapp.com/public/v1
  • URL
    https://api.reacherapp.com/public/v1/campaigns/{campaign_id}
  • Auth
    API key in header x-api-key and API key in header x-shop-id

Path parameters

campaign_idinteger required

Headers

Idempotency-Keystring nullable
X-Dry-Runstring nullable

Request body

campaign_namestring nullable
start_datestring nullable
end_datestring nullable
descriptionstring nullable
status'published' | 'draft' | 'deleted' | 'archived'

DB-level campaign status. The frontend filter param 'active'/'past' are UI aliases — 'active' maps to published, 'past' maps to != published.

creatorsobject[] nullable

Optional list of creators to seed into the campaign. Mirrors the portal's contract exactly (see community.schemas.campaign.CampaignCreate.creators) so the public API doesn't fork from /api/marketplace/v2. Each dict is opaque to validation but is typically {"creator_id": int, "tier": str | None, "payout_override": int | None}. Pass null or omit for the common case of "no seeded creators" (production fixtures all do this; creators are added later via the accept/reject flow).

window_urlstring nullable
is_available_to_allboolean nullable
visibility'public' | 'shop_creators' | 'invite_link'

Who can DISCOVER a campaign. Listing only: invite/join links and outreach tokens resolve on every tier, and unlisting touches no mapping or payout.

requires_approvalboolean nullable
exclusive_participationboolean nullable
support_emailstring nullable
short_header_messagestring nullable
content_guidelinesobject nullable
inspiration_linksstring[] nullable
has_tiered_payoutboolean nullable
payout_structureobject nullable
grace_periodinteger nullable
apply_to_existing_creatorsboolean nullable

Whether a payout-affecting edit re-stamps the reward snapshots of creators who already joined. Only retainer offers the choice: omitted, it applies to future joiners only. Every other type shares one prize table and always propagates, so false is refused (400). Paid or settled participants are never modified, and neither is a retainer participant on a renegotiated Request-More deal.

Response

Successful Response

campaign_idinteger required
statusstring

Changes

    • info

      removed the pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$ from the request property ////

    • info

      removed the pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$ from the request property ////

    • info

      removed the pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$ from the request property ////

    • info

      removed the pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$ from the request property ////

    • info

      removed the pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$ from the request property //////

    • info

      removed the pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$ from the request property //////

    • info

      removed the pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$ from the request property ////

    • info

      removed the pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$ from the request property ////

    • info

      removed the pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$ from the request property ////

    • info

      removed the pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$ from the request property ////

    • info

      removed the pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$ from the request property ////

    • info

      removed the pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$ from the request property ////

    • info

      removed the pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$ from the request property ////

    • info

      added commission_boost discriminator mapping keys to the / request property

    • info

      added to the / request property oneOf list