Automatically flag a contact as a paying customer in Boei whenever they pay in your billing system, so your deals pipeline and customer-only chatbot behavior stay in sync without manual work.
You call one endpoint from a webhook in your billing tool (Stripe, Paddle, Chargebee, your own backend, Zapier, n8n, Make, whatever fires on a successful payment). Boei flips the contact's status to customer and moves any open deals for that contact to your Won column.
How to get there: Go to Settings → API Keys in the top-right profile menu to generate a key. The endpoint is documented in the interactive API docs under Contacts → Mark Contact as Customer.
If you only need this occasionally, the paste-a-list flow on the Deals page is simpler. Use the API when you want it to happen continuously and automatically.
POST https://app.boei.help/api/v1/contacts/mark-customer
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"email": "[email protected]",
"name": "Jane Doe"
}
email is required. name is optional and only used if Boei has to create the contact.
{
"success": true,
"contact_id": 123,
"created": false,
"status_changed": true,
"deals_won": 2
}
created: true if Boei had no contact for that email yet and created one.status_changed: true if the status flipped this call. false if the contact was already a customer.deals_won: number of open deals for this contact that moved to your Won column. Archived deals and deals already in Won are skipped.The endpoint is idempotent, so it's safe to fire on every payment event. Repeat calls for the same email just return status_changed: false and don't create duplicate contacts.
In your Stripe webhook handler for customer.subscription.created, invoice.paid, or checkout.session.completed:
curl -X POST https://app.boei.help/api/v1/contacts/mark-customer \
-H "Authorization: Bearer $BOEI_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"email\": \"$CUSTOMER_EMAIL\", \"name\": \"$CUSTOMER_NAME\"}"
Trigger: "New paying customer" (in Stripe, Chargebee, Shopify, etc.).
Action: Webhook → POST with the URL, headers, and body above. Map email and name from the trigger event.
Fire the request in the same code path that grants the customer access to your product after a successful charge.
Won under your account. If you renamed it, the endpoint still flips the contact's status but skips the deal update. Rename it back or add a Won status in Deals → Statuses to enable the auto-Won behavior.status = customer and source = api. This is the intended "upsert" behavior so a payment webhook works even for customers who never chatted with your bot.401 unauthorized: API key missing or invalid.403: your plan doesn't include API access. Upgrade or contact support.422: email was missing or not a valid email.429: rate limit hit. Wait a minute and retry.