ConvertKit - v1.0.0

Forms Integration

Pairs with artisanpack-ui/forms. Flip on the integration and every submission of a form the feed matches is evaluated, mapped to a Kit payload, and dispatched to a queue.

Sub-pages:

Enable

CONVERTKIT_FORMS_INTEGRATION=true
CONVERTKIT_QUEUE_CONNECTION=redis
CONVERTKIT_QUEUE=convertkit

The listener is subscribed at boot via string binding — the FormSubmitted event class only needs to exist at runtime, not at package boot. That means you can install this package before installing artisanpack-ui/forms and nothing blows up.

How it works

  1. A user submits a form. artisanpack-ui/forms stores the submission and dispatches ArtisanPackUI\Forms\Events\FormSubmitted.
  2. The HandleFormSubmittedForKit listener fires. It bails immediately if the integration is disabled.
  3. The listener loads every active KitFeed for the submitted form.
  4. The submission values are extracted once (via FieldMapper::extractValues()).
  5. For each feed, in order:
    • The conditional logic is evaluated against the values. If it fails, KitFeedSkipped fires with reason: 'conditional_logic'.
    • The submission is mapped to a Kit payload. If mapping fails (missing email, etc.), KitFeedSkipped fires with reason: 'field_map:...'.
    • A ProcessKitFeed job is dispatched with the mapped payload and the feed's kit_tag_ids.
  6. The worker executes the job. On success, KitSubscribed fires. On terminal failure, KitSubscriptionFailed fires (see Events).

One malformed feed cannot poison the loop — every failure path is caught per-feed so the rest of the feeds for the same submission still fire.

Do I need a Kit form?

No. A KitFeed with kit_form_id = null uses the raw subscribers()->create() path and applies tags via follow-up subscribers()->tag() calls. A feed with kit_form_id set uses forms()->subscribe(), which is one API call for the subscribe + tag combo. Prefer setting a kit_form_id when you can — it's cheaper on Kit's rate limit.

Where to configure

What events to react to

  • KitSubscribed — a feed successfully subscribed an email.
  • KitSubscriptionFailed — a job failed terminally (auth, validation, or exhausted retries).
  • KitFeedSkipped — a feed matched a submission but was skipped (conditional logic, missing email, etc.).

Continue to Feeds