Ecommerce

Teachable Webhook MCP Server

Connect your account, then chat with AI to run tools.

Paste your MCPBundles URL into Teachable webhook settings and read school events in chat.

Best forCourse CreatorsOnline EducatorsMembership Site Owners

Try this workflow

Last Teachable event

Read export.json — event type, user email, course or product name, and final_price or net_charge from the latest webhook payload.

Managed
4 tools
Agent guide included

Opens MCPBundles Studio with this server selected. After sign-in, chat and run tools from the same thread.

Browse all tools

What you can do with Teachable Webhook

Built for

Course Creators, Online Educators, Membership Site Owners

Example workflows

Last Teachable event

Interprets sale, enrollment, and transaction event JSON.

Try this

Read export.json — event type, user email, course or product name, and final_price or net_charge from the latest webhook payload.

Subscription activity

Filters stored events by Teachable subscription lifecycle.

Try this

List recent deliveries and summarize any Sale.subscription_canceled or Transaction.created events with sale_id, recurring flag, and amounts.

New enrollments

Reads enrollment-specific nested user and course objects.

Try this

Find the most recent Enrollment.created delivery and report user email, course name, course_id, and enrolled_at.

Context to know first

How do I connect Teachable deliveries to MCPBundles?

Save a connection on MCPBundles, copy the hosted ingest URL from the credential panel, and paste it into Teachable under Settings → Webhooks. Select the events you want (or All events). Your agent reads stored deliveries — latest, history, and content — in chat.

Can an agent trigger a new delivery?

No. Ingest is read-only. Data arrives when Teachable sends it; agents query what already landed.

AI Skill
SKILL.md

Domain knowledge for Teachable Webhook — workflow patterns, data models, and gotchas for your AI agent.

teachable-webhook

Teachable webhooks POST JSON when school events fire — sales, enrollments, subscription charges, refunds, user signups, and progress milestones. Each POST is one stored report. Inspect export.json on the latest delivery rather than assuming one fixed schema.

Payload envelope

Teachable commonly sends a JSON array with one event object (some schools enable “send as JSON array” in webhook settings). When the body is an array, read export.json[0] for the event; a bare object may appear if array mode is off.

Shared envelope fields on every event:

  • type — event discriminator (e.g. Sale.created, Enrollment.created, Transaction.created).
  • id — Teachable event id for this payload.
  • hook_event_id — webhook firing id (use for dedupe alongside id).
  • livemodetrue for live school traffic.
  • created — when Teachable created the event (ISO 8601); compare to source.captured_at for delivery lag.
  • object — nested record; shape depends on type.

Missing upstream values arrive as JSON null.

Event types (common)

typeMeaning
Sale.createdProduct purchased or manual enrollment (free and paid; bundles = one sale)
Sale.subscription_canceledStudent canceled a subscription
Transaction.createdCharge succeeded (one-time or recurring billing cycle); excludes free / 100%-off coupon sales
Transaction.refundedCharge refunded
Enrollment.createdStudent enrolled in a course (each bundled course fires separately)
Enrollment.completedStudent finished 100% of a course
Enrollment.disabledStudent unenrolled (manual, failed payment, or access expiry)
User.createdNew school account
User.updatedProfile change (new_name / old_name when name changed)
User.subscribe_to_marketing_emails / User.unsubscribe_from_marketing_emailsMarketing opt-in/out
UserTag.created / UserTag.removedTag added or removed
AbandonedOrder.createdCheckout abandoned (lead signal, not revenue)
LectureProgress.createdLecture marked complete
Response.createdGraded quiz submitted
Comment.createdCourse comment posted
EmailLead.createdEmail lead form confirmed
Admission.created / Admission.disabledCoaching service admission

Key object fields by family

Sales (Sale.*)object.id (sale id), object.user_id, object.school_id, object.price, object.final_price, object.currency, object.is_recurring, object.product (id, name, price, is_recurring), object.course (id, name, friendly_url), object.user (id, email, name, school_id, phone_number), optional object.coupon, object.affiliate, object.transactions[].

Transactions (Transaction.*)object.id (transaction id), object.sale_id, object.user_id, object.school_id, object.final_price, object.net_charge, object.earnings_usd, object.amount_refunded, object.currency, object.status, object.is_recurring, object.purchased_at, nested object.sale (product/course/user context), optional Stripe charge details under object.data.

Enrollments (Enrollment.*)object.id (enrollment id), object.user_id, object.course_id, object.sale_id, object.enrolled_at, object.percent_complete, object.is_active, nested object.user and object.course.

Users (User.*)object.id, object.email, object.name, object.role, object.school_id, object.sign_in_count, object.unsubscribe_from_marketing_emails, object.phone_number.

Abandoned cartobject.user_email, object.main_product_name, object.main_product_price, object.checkout_url, object.order_token, optional object.order_bumps[].

Sale vs enrollment vs transaction

  • Sale.created fires once per product purchase (a bundle counts as one sale).
  • Enrollment.created fires per course — bundled products may produce several enrollment events for one sale.
  • Transaction.created fires on each successful charge (including monthly subscription renewals); it does not fire for free enrollments or 100%-off coupons.

Chain recurring revenue with object.sale_id and transaction object.id, not sale id alone.

First moves

  1. Latest report — default for “what happened last” or “who bought or enrolled”.
  2. Read export.json[0].type (or top-level type when not wrapped) before interpreting nested fields.
  3. Recent reports — list when comparing renewals, refunds, duplicate webhook firings, or enrollment bursts from one bundle.
  4. One report by id — after listing, when the user names a specific stored delivery.

Response shape

  • export.json — parsed webhook body (array or object).
  • export.text — raw body when JSON is large or non-object.
  • source.captured_at — when the POST landed here (use created inside JSON for upstream event time).

Operational order

  1. Start with the latest report — do not guess a report id.
  2. If captured_at is older than expected, say so — Teachable sends when the configured trigger fires, not on demand.
  3. List recent reports only for history, renewal chains, or duplicate suspicion.
  4. Read ## This connection in the skill supplement for school- or funnel-specific field notes.

Gotchas

  • Read-only — cannot enroll students, issue refunds, or replay webhooks from here.
  • Array wrapper — unwrap export.json[0] when the body is a one-element array.
  • Duplicate firings — one purchase can produce Sale.created, multiple Enrollment.created, and Transaction.created; dedupe with hook_event_id, top-level id, and source.captured_at.
  • Free vs paidSale.created includes free admin enrollments (final_price may be 0); Transaction.created only tracks paid charges.
  • No purchaser IP on salesSale.created omits IP fields; enrollment events may include current_sign_in_ip on nested user.
  • Legacy nulls — fields like last_four on enrollment user blocks are often always null; do not depend on them.
  • Abandoned cart is not revenue — treat AbandonedOrder.created as a lead signal only.

Tools in this Server (4)

Teachable Wh Latest

Return the most recently stored report — tabular rows, raw text, or JSON depending on format. Default starting point for current report questions.

Teachable Wh List

List recent stored reports — ids, capture time, filename, and format. Follow with latest report or get report for full content.

Teachable Wh Report

Return one stored report by report_id — full content with the same source/export envelope as latest report.

Teachable Wh Status

Connection status — whether any reports have landed, when the last file arrived, filename, and stored report count. Includes the ingest URL only when ...

Frequently Asked Questions

How do I connect Teachable deliveries to MCPBundles?

Save a connection on MCPBundles, copy the hosted ingest URL from the credential panel, and paste it into Teachable under Settings → Webhooks. Select the events you want (or All events). Your agent reads stored deliveries — latest, history, and content — in chat.

Can an agent trigger a new delivery?

No. Ingest is read-only. Data arrives when Teachable sends it; agents query what already landed.

How do I connect Teachable Webhook to my AI agent?

Add the MCPBundles server URL to your MCP client configuration (Claude Desktop, Cursor, VS Code, etc.). The URL format is: https://mcp.mcpbundles.com/bundle/teachable-webhook. Authentication is handled automatically.

How many tools does Teachable Webhook provide?

Teachable Webhook provides 4 tools that can be called by AI agents, along with a SKILL.md that gives your AI agent domain knowledge about when and how to use them.

What authentication does Teachable Webhook require?

Teachable Webhook uses API Key. Teachable Webhook requires credentials. Connect via MCPBundles and authentication is handled automatically.

Setup Instructions

Connect Teachable Webhook to any MCP client in minutes

MCP URL
https://mcp.mcpbundles.com/bundle/teachable-webhook

One-click install:

The link prefills the Add custom connector dialog — you still review the values and click Add, then Connect to complete OAuth.

Or add manually

  1. Open claude.ai → Settings → Connectors.
  2. Click the + button and choose Add custom connector.
  3. Set Name to Teachable Webhook and paste the MCP URL into Remote MCP server URL.
  4. Click Add. Teachable Webhook will appear under Not connected — select it and click Connect to complete OAuth.
Name: Teachable Webhook
Remote MCP server URL: https://mcp.mcpbundles.com/bundle/teachable-webhook
Authentication: OAuth

Custom connectors at claude.ai require a paid Claude plan (Pro, Max, Team, or Enterprise).

Ready to use Teachable Webhook?

Sign in to connect your credentials and start running tools from the chat.

Teachable Webhook MCP — Read Course Sales in Chat