Event catalog

Every domain event the platform emits.

  • company.createdcompaniesv1

    A new company has been created on the platform.

    Emitted the first time a company appears on the platform. Use this to mirror the company into your CRM or trigger initial enrichment.

    Payload example
    {
      "id": "evt_01H",
      "data": {
        "company": {
          "id": "cmp_x",
          "name": "Acme Corp",
          "website": "https://acme.co"
        }
      },
      "event": "company.created",
      "tenant_id": "ten_x"
    }
  • company.updatedcompaniesv1

    Company core fields have changed.

    Emitted when one of the company core fields changes. data.company.changes lists changed field names.

    Payload example
    {
      "data": {
        "company": {
          "id": "cmp_x",
          "changes": [
            "website",
            "name"
          ]
        }
      },
      "event": "company.updated"
    }
  • company.enrichedcompaniesv1

    Company intelligence signals have been refreshed.

    Emitted whenever derived intelligence is recomputed. Safe to use as a refresh trigger.

    Payload example
    {
      "data": {
        "company_id": "cmp_x",
        "intelligence": {
          "size": "50-200",
          "industry": "saas"
        }
      },
      "event": "company.enriched"
    }
  • job.createdjobsv1

    A new job has been created (may be in draft).

    Emitted when a job row is created, even in draft status.

    Payload example
    {
      "data": {
        "job": {
          "id": "job_x",
          "title": "Senior Engineer",
          "company_id": "cmp_x"
        }
      },
      "event": "job.created"
    }
  • job.publishedjobsv1

    A job has been published and is now public.

    Emitted when a job transitions to published. The right event for sourcing or notification flows.

    Payload example
    {
      "data": {
        "job": {
          "id": "job_x",
          "published_at": "2026-06-14T12:00:00Z"
        }
      },
      "event": "job.published"
    }
  • job.enrichedjobsv1

    Job skills, seniority, and embeddings have been computed.

    Emitted when normalized skills, seniority, salary, or embeddings are (re)computed.

    Payload example
    {
      "data": {
        "job_id": "job_x",
        "intelligence": {
          "skills": [
            "typescript",
            "react"
          ],
          "seniority": "senior"
        }
      },
      "event": "job.enriched"
    }
  • job.closedjobsv1

    A job has been closed and is no longer accepting applications.

    Emitted when a job is closed. data.reason may include filled, expired, or withdrawn.

    Payload example
    {
      "data": {
        "job_id": "job_x",
        "reason": "filled"
      },
      "event": "job.closed"
    }
  • candidate.createdcandidatesv1

    A new candidate has been added to the tenant.

    Emitted on candidate creation, before any enrichment.

    Payload example
    {
      "data": {
        "candidate": {
          "id": "cnd_x",
          "full_name": "Sato Aiko"
        }
      },
      "event": "candidate.created"
    }
  • candidate.enrichedcandidatesv1

    Candidate parsing and skills extraction completed.

    Emitted after resume parsing and skill extraction complete. The hook for downstream sourcing logic.

    Payload example
    {
      "data": {
        "candidate_id": "cnd_x",
        "intelligence": {
          "skills": [
            "python",
            "ml"
          ],
          "summary": "..."
        }
      },
      "event": "candidate.enriched"
    }
  • application.submittedapplicationsv1

    A candidate has been submitted to a job.

    Emitted when an application is recorded against a job.

    Payload example
    {
      "data": {
        "application": {
          "id": "app_x",
          "job_id": "job_x",
          "source": "direct",
          "candidate_id": "cnd_x"
        }
      },
      "event": "application.submitted"
    }
  • application.stage_changedapplicationsv1

    An application has moved between stages.

    Emitted on every stage transition. Use from/to for funnel analytics.

    Payload example
    {
      "data": {
        "to": "interview",
        "from": "screening",
        "application_id": "app_x"
      },
      "event": "application.stage_changed"
    }
  • interview.scheduledinterviewsv1

    An interview has been scheduled.

    Emitted when an interview is created or rescheduled.

    Payload example
    {
      "data": {
        "interview": {
          "id": "int_x",
          "scheduled_for": "2026-06-20T09:00:00Z",
          "application_id": "app_x"
        }
      },
      "event": "interview.scheduled"
    }
  • interview.completedinterviewsv1

    An interview has completed; outcome is set.

    Emitted after an interview is marked complete. outcome drives stage transitions.

    Payload example
    {
      "data": {
        "outcome": "advance",
        "interview_id": "int_x"
      },
      "event": "interview.completed"
    }
  • match.createdmatchingv1

    A new match score has been computed.

    Emitted whenever a match score is computed. Includes top reasons for explainability.

    Payload example
    {
      "data": {
        "score": 0.87,
        "job_id": "job_x",
        "reasons": [
          "skills_overlap",
          "seniority_match"
        ],
        "candidate_id": "cnd_x"
      },
      "event": "match.created"
    }
  • placement.createdplacementsv1

    A candidate has been hired into a job.

    Emitted when a candidate is hired. Terminal for the matching feedback loop.

    Payload example
    {
      "data": {
        "placement": {
          "id": "plc_x",
          "job_id": "job_x",
          "start_date": "2026-07-01",
          "candidate_id": "cnd_x"
        }
      },
      "event": "placement.created"
    }