PowerKitPro

Quick start

1. Create a key on your Account page (API keys). It starts with pk_live_ and is shown once.

2. Send it as a Bearer token. Read-only endpoints are GET with arguments in the query string; everything else is POST with a JSON body (POST also works for read endpoints).

curl "https://powerlmspro.com/api/v1/qr/list?limit=5" -H "Authorization: Bearer pk_live_..."

curl -X POST https://powerlmspro.com/api/v1/qr/create \
  -H "Authorization: Bearer pk_live_..." -H "Content-Type: application/json" \
  -d '{"name":"Front window","target_url":"https://example.com/menu"}'

3. Read the answer. Success is 200 {"ok":true,"text":"...","data":{...}}: text is a readable summary (Markdown), data the same thing as JSON. Lists carry total, count, offset, has_more and items.

401 {"ok":false,"error":"unauthorized","message":"Invalid API key. Create one on your Account page."}
400 {"ok":false,"error":"invalid_input","message":"...","issues":[{"path":"target_url","message":"Required"}]}
400 {"ok":false,"error":"tool_error","message":"This plan allows 3 codes and all are used. ..."}
404 {"ok":false,"error":"not_found","message":"..."}
429 {"ok":false,"error":"rate_limited","message":"...","retryAfter":3600}   (also a Retry-After header, seconds)

Limits. 100 calls a day per key on free plans, 5,000 a day on any paid PowerKit Pro plan. Every call runs as you and keeps to your plan's limits, so a tool can answer with tool_error when a plan is full. Responses are never cached and the API sends no CORS headers: call it from a server, a script or the CLI, not from a browser page.

Any tool by name. POST /api/v1/call with {"name":"powerkit_qr_create","arguments":{...}} runs any endpoint below by its tool name. GET /api/v1/tools returns this whole reference as JSON (name, method, path, JSON Schema input, hints), which is what the CLI reads.

Command line

npm i -g powerkit-pro
powerkit login                      # paste your key once; it is kept in the system keychain
powerkit tools                      # every command, grouped by product
powerkit qr create --name "Flyer" --target-url https://example.com
powerkit booking list --limit 20 --json
powerkit import certs issue --csv people.csv    # one call per row, headers map to flags
powerkit call powerkit_qr_stats --json '{"id":"..."}'

Endpoint names map to commands: powerkit_qr_create is powerkit qr create, and each argument is a flag (target_url is --target-url). --help on any command lists its flags with the descriptions below. Exit codes: 0 ok, 1 tool error, 2 usage, 3 not authorized, 4 rate limited. POWERKIT_API_KEY and POWERKIT_BASE_URL work in CI.

Zapier and Make

Use a Webhooks by Zapier (or Make HTTP) step: method POST, URL from the table below, header Authorization: Bearer pk_live_..., JSON body with the arguments. For lists, use GET with the arguments as query string parameters. Forms and waivers can also push each response to your own webhook URL from their settings on Pro and up, with no key needed.

Endpoints

Account

EndpointArguments
GET/api/v1/me
My account (powerkit_me)
Who is connected: name, email, time zone, admin flag, the plan on each PowerKit tool with its limits, unused event credits, and whether Google Calendar is connected. Call this first when you need to know what the account can do.
none
GET/api/v1/list/products
List PowerKit products (powerkit_list_products)
The fourteen PowerKit Pro tools with what each does, its public path, pricing and plan limits, plus the plan this account has on each. Use it to explain options or pick the right tool.
none
GET/api/v1/my/apps
My Power User apps (powerkit_my_apps)
Lists every app in the family the person can use with their Power User Pro Account (PowerKit Pro, Inkstand, FlipbookWow, Round Robin Pro, House Stack Pro, TrainHer Pro, Certified Trainer Pro), whether they use it yet, and their plan in each. Tools for apps they use appear in this connector with the app's name as a prefix.
none

QR codes

EndpointArguments
GET/api/v1/qr/list
List QR codes (powerkit_qr_list)
The dynamic QR codes on this account with where each points, total scans, folder and the URL printed in the code. Filter by a search word or a folder.
q? string
Match on the name or the target link.
folder? string
folder
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
POST/api/v1/qr/create
Create a QR code (powerkit_qr_create)
Creates a dynamic QR code that points at a web address. The address can be changed later without reprinting. Counts against the plan's code limit. Returns the id, the URL printed in the code and where to download the SVG or PNG.
name string
A label only the owner sees, like "Front window flyer".
target_url string
Where a scan should go. https:// is added when missing.
folder? string
Optional folder name to group codes.
POST/api/v1/qr/update/target
Change where a QR code goes (powerkit_qr_update_target)
Points an existing dynamic QR code at a new web address. Every printed copy follows at the next scan.
id string
The id as returned by a list tool.
target_url string
The new destination.
GET/api/v1/qr/stats
QR code scan stats (powerkit_qr_stats)
Scans for one QR code: total, last 7 days, by day, by device, by city and by country. The number of days of history depends on the plan (30 on Free).
id string
The id as returned by a list tool.
days? integer
How many days back. Capped by the plan's history window.

Business cards

EndpointArguments
GET/api/v1/card/list
List business cards (powerkit_card_list)
The digital business cards on this account with their public links, views, contact saves and lead counts.
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
POST/api/v1/card/create
Create a business card (powerkit_card_create)
Creates a digital business card and returns its public link. Counts against the plan's card limit. Lead capture (a "share your info" form) only shows on Pro and Team.
full_name string
full name
title? string
Job title.
company? string
company
phone? string
phone
email? string
email
website? string
website
address? string
Office address, shown with a Directions button.
bio? string
bio
links? array
Up to 8 links such as LinkedIn or a booking page.
lead_capture? boolean, default true
Show the "share your info" form on the card.
GET/api/v1/card/leads
Leads from a business card (powerkit_card_leads)
People who filled in the "share your info" form on a card: name, email, phone, note and when. Newest first.
card_id string
The id as returned by a list tool.
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.

Proposals

EndpointArguments
GET/api/v1/bid/list
List proposals (powerkit_bid_list)
Proposals (bids and quotes) on this account with client, status (draft, sent, viewed, approved, declined), total and share link.
status? string: draft | sent | viewed | approved | declined
status
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
GET/api/v1/bid/get
Get a proposal (powerkit_bid_get)
One proposal in full: intro, packages, line items (with which are optional), discount, tax, deposit, terms, status history, totals, and every signer with who has signed and their own signing link.
id string
The id as returned by a list tool.
POST/api/v1/bid/create
Create a proposal (powerkit_bid_create)
Creates a proposal as a draft with line items, optional packages (Good, Better, Best), discount, tax and terms. Prices are in dollars. Counts against the Free plan's monthly limit. Returns the id and the share link; use powerkit_bid_share_link to mark it sent.
title string
title
client_name? string
client name
client_email? string
client email
client_company? string
client company
intro? string
Opening paragraph the client reads first.
line_items? array, default []
line items
packages? array
Mutually exclusive options; the client picks one.
discount? object
discount
tax_rate? number
Percent, e.g. 7.5.
deposit? object
Deposit asked for on approval.
notes? string
Terms and conditions.
other_signers? array
Anyone besides the client who must also sign, like a spouse or partner. Approved only after everyone signs.
require_initials? boolean
Ask every signer for their initials too.
valid_until? string
YYYY-MM-DD. Defaults to 30 days from now.
POST/api/v1/bid/share/link
Proposal share link (powerkit_bid_share_link)
The public link a client opens to review, choose options and approve a proposal. Set mark_sent to move a draft to "sent" so the dashboard shows when the client opens it.
id string
The id as returned by a list tool.
mark_sent? boolean, default false
Also mark a draft as sent.

Booking pages

EndpointArguments
GET/api/v1/booking/pages
List booking pages (powerkit_booking_pages)
Booking pages on this account with their public links, time zones, services (ids, durations, prices) and upcoming booking counts. Service ids are needed for availability.
none
GET/api/v1/booking/list
List bookings (powerkit_booking_list)
Appointments on this account. Defaults to upcoming confirmed bookings across every page; filter by page, date range or status (confirmed, pending_payment, cancelled, expired), or set upcoming=false for history.
page_id? string
The id as returned by a list tool.
upcoming? boolean, default true
Only bookings that start from now on.
from? string
Earliest date (in the page time zone).
to? string
Latest date, inclusive.
status? string: confirmed | pending_payment | cancelled | expired
status
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
GET/api/v1/booking/availability
Open times on a date (powerkit_booking_availability)
The start times a client could book for one service on one date, after hours, overrides, buffers, existing bookings and synced calendars. Times are in the page time zone. Get page and service ids from powerkit_booking_pages.
page_id string
The id as returned by a list tool.
service_id string
The id as returned by a list tool.
date string
A date as YYYY-MM-DD.
POST/api/v1/booking/block
Block time off (powerkit_booking_block)
Marks the owner unavailable so nobody can book that time: a meeting, a day off, a vacation. Give a date (YYYY-MM-DD) with start_time and end_time (HH:MM, 24-hour, page time zone), or all_day true, or end_date for a stretch of days. Leave page_id out to block every booking page the owner has. Use powerkit_booking_blocks to list and powerkit_booking_unblock to remove.
page_id? string
Block only this page. Omit for all pages.
date string
A date as YYYY-MM-DD.
end_date? string
Last day, for multi-day blocks.
start_time? string
HH:MM, 24-hour, e.g. 14:00
end_time? string
HH:MM, 24-hour, e.g. 16:00
all_day? boolean, default false
all day
reason? string
Only the owner sees it, e.g. "Staff meeting".
GET/api/v1/booking/blocks
List blocked times (powerkit_booking_blocks)
Upcoming times the owner blocked by hand (not bookings, not synced calendars). Pass page_id to see what applies to one page.
page_id? string
The id as returned by a list tool.
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
POST/api/v1/booking/unblockdestructive
Remove a blocked time (powerkit_booking_unblock)
Removes a block created with powerkit_booking_block, opening that time up again. Get ids from powerkit_booking_blocks.
block_id string
The id as returned by a list tool.
POST/api/v1/booking/canceldestructive
Cancel a booking (powerkit_booking_cancel)
Cancels an appointment as the owner, in two steps. Step 1: call with page_id and booking_id only. Nothing is cancelled; it returns the booking (client, service, time) and a confirmation code. Show that to the person and get their approval. Step 2: once they approve, call again with confirm_code set to that code. Only then is the booking cancelled, the client emailed and the time opened up again. The code is tied to this one booking and expires after 10 to 20 minutes. Cannot be undone.
page_id string
The id as returned by a list tool.
booking_id string
The id as returned by a list tool.
confirm_code? string
User confirmation. Leave empty for the preview. Set it to the code from the preview only after the person has approved cancelling that booking.

QR menus

EndpointArguments
GET/api/v1/menu/list
List menus (powerkit_menu_list)
QR menus on this account with restaurant name, public link, item count, views and whether each is live.
none
GET/api/v1/menu/items
Menu items (powerkit_menu_items)
Every section and item on one menu with ids, prices, dietary tags, sold-out and hidden flags.
menu_id string
The id as returned by a list tool.
POST/api/v1/menu/update/item
Update a menu item (powerkit_menu_update_item)
Changes the price, sold-out or hidden flag, name, description or price note of one item. Only the fields given change. Guests see it on the next load. Price is in dollars.
menu_id string
The id as returned by a list tool.
item_id string
The id as returned by a list tool.
price? number
New price in dollars, e.g. 12.5.
sold_out? boolean
true to 86 it, false to bring it back.
hidden? boolean
hidden
name? string
name
description? string
description
price_note? string
Shown instead of a price, like "market price".

Reviews

EndpointArguments
GET/api/v1/reviews/list
List testimonials (powerkit_reviews_list)
Testimonials collected by the review pages on this account, with status (pending, approved, hidden). Leave page_id out to see every page; pass status=pending to see what is waiting for approval.
page_id? string
The id as returned by a list tool.
status? string: pending | approved | hidden
status
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
POST/api/v1/reviews/approve
Approve or hide a testimonial (powerkit_reviews_approve)
Moderates one testimonial: approve (shows on the wall and widget), hide, feature (approve and pin first) or unfeature.
page_id string
The id as returned by a list tool.
item_id string
The id as returned by a list tool.
action? string: approve | hide | feature | unfeature, default "approve"
action
EndpointArguments
GET/api/v1/links/pages
List link pages (powerkit_links_pages)
Link-in-bio pages on this account with their public links, every button (id, title, URL, on or off) and social profiles.
none
POST/api/v1/links/add
Add a link to a page (powerkit_links_add)
Appends a button to a link page. Free allows unlimited links; the page itself caps at 100. Returns the new link.
page_id string
The id as returned by a list tool.
title? string
Button text. Defaults to the address.
url string
url
icon? string
An emoji shown before the title.
GET/api/v1/links/stats
Link page stats (powerkit_links_stats)
Views and clicks for a link page over the last 30 days: totals, click-through rate, clicks by link, devices, cities, referrers. Click analytics need Pro; Free gets the view count only.
page_id string
The id as returned by a list tool.
days? integer, default 30
days

Certificates

EndpointArguments
GET/api/v1/certs/templates
List certificate templates (powerkit_certs_templates)
Certificate templates on this account (ids, names, titles, organization, signers, layout) and how many certificates can still be issued this month.
none
GET/api/v1/certs/list
List issued certificates (powerkit_certs_list)
Certificates issued on this account, newest first, with verification links. Filter by template or search a recipient name.
template_id? string
The id as returned by a list tool.
q? string
Part of a recipient name or course.
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
POST/api/v1/certs/issue
Issue certificates (powerkit_certs_issue)
Issues one certificate per recipient from a template. Each gets a unique verification code and a PDF link. Stops at the plan's monthly limit and says how many did not fit. Defaults (course, date, hours, custom) fill any recipient that leaves them blank.
template_id string
The id as returned by a list tool.
recipients array
recipients
course? string
Default course name.
date? string
Default date.
hours? string
hours
custom? string
custom

Event programs

EndpointArguments
GET/api/v1/event/list
List event programs (powerkit_event_list)
Event programs on this account: when and where, how many schedule items, whether published (needs PowerEvent Pro, Business or the Suite) and the public link.
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
GET/api/v1/event/get
Get an event program (powerkit_event_get)
One program in full: details, the schedule (with ids and speakers), speakers, sponsors by tier, ads and info pages, plus the days of a multi-day event.
id string
The id as returned by a list tool.
POST/api/v1/event/add/session
Add a schedule item (powerkit_event_add_session)
Appends a session to a program's schedule: title, a time label guests see (like "6:30 PM"), optional 24-hour start and end times for "happening now", location, description and speaker ids from powerkit_event_get. Guests see it immediately on a published program.
event_id string
The id as returned by a list tool.
title string
title
time_label? string
Free text shown to guests, e.g. "6:30 PM" or "After dinner".
start_time? string
HH:MM, 24-hour, event local time.
end_time? string
end time
day? string
For multi-day events: which day. Defaults to the first day.
description? string
description
location? string
Room or stage.
speaker_ids? array
speaker ids

Seating charts

EndpointArguments
GET/api/v1/seat/charts
List seating charts (powerkit_seat_charts)
Seating charts (events) on this account with date, venue, table count, how many guests are seated, the guest limit and the find-my-table link.
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
GET/api/v1/seat/tables
Tables on a chart (powerkit_seat_tables)
Every table on a seating chart with id, shape, capacity, how many guests are at it and who they are.
event_id string
The id as returned by a list tool.
GET/api/v1/seat/guests
Guests on a chart (powerkit_seat_guests)
The guest list for a seating chart with ids, party, meal, notes, table and check-in. Search by name or show only unseated guests.
event_id string
The id as returned by a list tool.
q? string
Part of a guest or party name.
unseated_only? boolean, default false
unseated only
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
POST/api/v1/seat/add/guests
Add guests to a chart (powerkit_seat_add_guests)
Adds guests to a seating chart (unseated). Party groups people who should sit together. Stops at the plan's guest limit per chart (50 on Free, 500 on Pro, unlimited on Business) and says how many did not fit.
event_id string
The id as returned by a list tool.
guests array
guests
POST/api/v1/seat/assign
Seat a guest (powerkit_seat_assign)
Moves a guest to a table (or unseats them with no table_id). Refuses a table that is already full unless allow_over_capacity is true.
event_id string
The id as returned by a list tool.
guest_id string
The id as returned by a list tool.
table_id? string
Leave out to unseat.
allow_over_capacity? boolean, default false
allow over capacity

Forms

EndpointArguments
GET/api/v1/forms/list
List forms (powerkit_forms_list)
PowerForms on this account: titles, public links, whether each is taking responses, and response counts.
none
GET/api/v1/form/responses
Form responses (powerkit_form_responses)
Responses to one form, newest first, with every answer. Pass the form id from powerkit_forms_list.
id string
The id as returned by a list tool.
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.

Waivers

EndpointArguments
GET/api/v1/waivers/list
List waivers (powerkit_waivers_list)
PowerWaivers on this account: titles, signing links, whether each is taking signatures, and how many have been signed.
none
GET/api/v1/waiver/signatures
Signed waivers (powerkit_waiver_signatures)
Signed copies of one waiver, newest first: who signed, for which participant, when, and whether it is still valid.
id string
The id as returned by a list tool.
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
GET/api/v1/waiver/check
Check for a current waiver (powerkit_waiver_check)
Looks up whether someone has signed a waiver that is still valid, by name, email or phone. Use it at check-in: "does Marcus Bell have a waiver on file?"
who string
Name, email or phone.

Loyalty

EndpointArguments
GET/api/v1/loyalty/programs
List loyalty programs (powerkit_loyalty_programs)
PowerLoyalty programs on this account: type (punch card, visits, points, spend, tiers, milestones), the reward and what it takes, members, visits in the last 30 days, and the join link to print.
none
GET/api/v1/loyalty/customers
List loyalty customers (powerkit_loyalty_customers)
Loyalty members, newest visit first, with each card's progress, visits and rewards waiting. Search by name or email.
search? string
Part of a name or email.
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
POST/api/v1/loyalty/stamp
Add a stamp (powerkit_loyalty_stamp)
Adds a stamp (or the visit's points) to a customer's loyalty card, like staff adding one by hand. Respects the program's cooldown and daily limit, and unlocks the reward when the card fills up. Spend programs need the purchase amount. Pass the same idempotency_key on a retry and the stamp is not added twice.
customer string
Customer name, email, customer id or the code on their card.
program_id? string
Program id from powerkit_loyalty_programs. Optional when the account has one live program.
amount? number
Spend programs only: the purchase amount in US dollars.
reason? string
Why it was added by hand (kept in the audit log).
idempotency_key? string
Any unique string for this stamp. Reusing it never stamps twice.
GET/api/v1/loyalty/rewards
List rewards (powerkit_loyalty_rewards)
Rewards customers have earned: ready to redeem, redeemed or expired, with the six-character code staff can type to redeem.
status? string: available | redeemed | expired | all, default "available"
Which rewards.
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
POST/api/v1/loyalty/redeemdestructive
Redeem a reward (powerkit_loyalty_redeem)
Marks a customer's reward as used. It can only be redeemed once and cannot be undone, so confirm with the person first. Pass the reward id from powerkit_loyalty_rewards or the six-character code.
reward string
Reward id or six-character reward code.
GET/api/v1/loyalty/stats
Loyalty stats (powerkit_loyalty_stats)
How the loyalty program is doing: members, new members and visits over a period, rewards unlocked and redeemed, the repeat-visit rate and the top regulars.
days? integer, default 30
How many days back.
POST/api/v1/loyalty/create/program
Create a loyalty program (powerkit_loyalty_create_program)
Creates a PowerLoyalty program that is live right away and returns its id, join link, join QR image links (PNG and SVG) and the stamp and kiosk screens. Types: punch (punch card), visits (visits), points (points), spend (spend), tiers (tiers), milestones (milestones). Change rules later with powerkit_loyalty_update_program and the look with powerkit_loyalty_update_design.
name string
Program name customers see, like "Fade Club".
reward? string
What a full card earns, like "A free haircut". Defaults by type.
type? string: punch | visits | points | spend | tiers | milestones, default "punch"
How customers earn: punch (punch card), visits (visits), points (points), spend (spend), tiers (tiers), milestones (milestones).
threshold? integer
Stamps (punch, visits, milestones) or points (points, spend, tiers) needed for the reward. Default 10 stamps or 100 points.
template? string
Card template key from powerkit_loyalty_templates, like "barber-pole". Default "paper-punch".
points_per_visit? integer
Points each visit earns. Punch cards and visits: 1 (one stamp). Points and tiers: default 10.
points_per_dollar? integer
Spend programs only: points per US dollar. Default 1.
business_name? string
Business name on every card. Only used when none is saved yet (see powerkit_loyalty_update_settings).
GET/api/v1/loyalty/get/program
Get a loyalty program (powerkit_loyalty_get_program)
Everything about one program: type, reward and threshold, rules (cooldown, daily cap, reward expiry, what happens after a reward, tiers, milestones, promo days), terms, the full card design, stats, and links (join page, join QR PNG and SVG, stamp screen, kiosk, printable sign).
program_id? string
Program id from powerkit_loyalty_programs. Optional when the account has one live program.
POST/api/v1/loyalty/update/program
Update loyalty rules and rewards (powerkit_loyalty_update_program)
Changes a program's rules and rewards. Only the fields you pass change. tiers, milestones and promo replace the saved lists. Existing stamps and rewards are kept.
program_id string
Program id from powerkit_loyalty_programs (the slug or exact name also work).
name? string
Program name.
reward? string
What a full card earns.
type? string: punch | visits | points | spend | tiers | milestones
How customers earn: punch (punch card), visits (visits), points (points), spend (spend), tiers (tiers), milestones (milestones).
threshold? integer
Stamps or points needed for the reward.
points_per_visit? integer
Points per visit (1 for punch cards).
points_per_dollar? integer
Spend programs: points per US dollar.
cooldown_minutes? integer
Minimum minutes between two stamps for one customer. 0 turns it off.
max_stamps_per_day? integer
Most stamps one customer can get in a day. 0 means no limit.
reward_expires_days? integer
Days a reward stays valid. 0 means it never expires.
after_reward? string: new_card | wait_for_redeem
new_card: a fresh card starts right away. wait_for_redeem: no stamps until the reward is redeemed.
qr_seconds? integer
How often the stamp QR changes, 20 to 120 seconds.
terms? string
Program terms customers accept when they join.
tiers? array
Tier levels by lifetime points (tiers programs). Replaces the saved list; [] removes them.
milestones? array
Extra one-time rewards at visit counts. Replaces the saved list; [] removes them.
promo? object
Double or triple stamp days. Replaces the saved promo.
promo_off? boolean
true turns promo days off.
POST/api/v1/loyalty/update/design
Update the card design (powerkit_loyalty_update_design)
Changes how the loyalty card looks: template, words, colors, layout, pattern, font, stamp shape and icon, animations, and the logo. Only the fields you pass change. logo_url must be a public https link to a PNG, JPG, WEBP, GIF or SVG under 5 MB; it is downloaded and stored like an upload. Valid values: powerkit_loyalty_design_options and powerkit_loyalty_templates.
program_id string
Program id from powerkit_loyalty_programs (the slug or exact name also work).
template? string
Template key from powerkit_loyalty_templates. Switching resets colors, layout, pattern, font and stamps to that template; title, instructions and logo stay.
title? string
Card title. Empty string uses the program name.
instructions? string
One line customers see under the card. Empty string uses the template default.
bg? string
Background color, #RRGGBB.
bg2? string
Second background color (gradient), #RRGGBB.
ink? string
Text color, #RRGGBB. Keep it readable on bg.
accent? string
Stamp color, #RRGGBB.
layout? string: grid | ticket | boarding | ring | bar | path | passport | stack | coins | pie | cup | member | sticker | chest | blank
How progress is drawn. See powerkit_loyalty_design_options.
pattern? string: none | dots | stripes | diagonal | grid | waves | confetti | paper | kraft | guilloche | holo | checker | circles | bubbles | chevron | sunburst | linen | neon | marble
Background pattern.
font? string: archivo | serif | mono | script | rounded | condensed | slab
Typeface.
shape? string: circle | square | star | heart | hex | shield | drop | ticket | badge | diamond
Stamp shape.
icon? string: bean | espresso | croissant | bread | pizza | burger | icecream | donut | boba | smoothie | citrus | sushi | taco | egg | coffee | fork | wine | cake | truck | pole | scissors | razor | comb | polish | lotus | hand | lash | brow | lipstick | drop | braid | crown | dumbbell | glove | yoga | run | bike | whistle | music | trophy | heart | bubbles | car | wrench | oil | tire | moto | bag | sneaker | shirt | gem | ring | book | flower | candle | plug | gift | tag | paw | house | leaf | apple | film | ticket | joystick | pins | lock | gamepad | mic | passport | camera | palette | brush | needle | washer | hanger | spray | broom | briefcase | chest | sparkle | coin | plane | star | check | bolt | smile | sun | stamp | diamond | key | cart
Stamp icon key. See powerkit_loyalty_design_options.
anim? string: rubber | ink | bean | snip | burst | coin | diamond | heart | confetti | punch | fireworks | fill | check | flip | neon | trophy | gift | vip | pizza | scoop
Animation when a stamp is added.
effect? string: confetti | fireworks | sparkle | coins | hearts | glow | bubbles
Celebration when the card fills up.
logo_url? string
https link to the logo image. Replaces the card logo.
remove_logo? boolean
true removes the card logo; the stamp icon shows instead.
POST/api/v1/loyalty/duplicate/program
Copy a loyalty program (powerkit_loyalty_duplicate_program)
Copies a program's design and rules into a new program. The copy starts paused with no members; resume it with powerkit_loyalty_resume_program.
program_id string
Program id from powerkit_loyalty_programs (the slug or exact name also work).
POST/api/v1/loyalty/pause/program
Pause a loyalty program (powerkit_loyalty_pause_program)
Pauses a program: customers can still open their cards, but nobody can join or get stamped until it is resumed.
program_id string
Program id from powerkit_loyalty_programs (the slug or exact name also work).
POST/api/v1/loyalty/resume/program
Resume a loyalty program (powerkit_loyalty_resume_program)
Turns a paused program back on so customers can join and get stamped.
program_id string
Program id from powerkit_loyalty_programs (the slug or exact name also work).
POST/api/v1/loyalty/delete/programdestructive
Delete a loyalty program (powerkit_loyalty_delete_program)
Permanently deletes a program with its cards, stamp history and rewards. It cannot be undone. Ask the person first and only pass confirm: true after they say yes. Customers keep their cards in other programs. To stop it for now, use powerkit_loyalty_pause_program instead.
program_id string
The program id from powerkit_loyalty_programs.
confirm? boolean
Must be true. Set it only after the person confirmed the delete.
POST/api/v1/loyalty/join/qr
Style the join QR (powerkit_loyalty_join_qr)
Customizes the join QR code (the one customers scan to join) with the same options as the PowerQR designer, and returns PNG and SVG download links. Pass no style fields to just get the links and current style. The PNG uses the colors with square dots; the SVG has every option, including the logo or icon.
program_id? string
Program id from powerkit_loyalty_programs. Optional when the account has one live program.
fg? string
Dot color, #RRGGBB. Keep it dark on a light background.
eye? string
Corner (eye) color, #RRGGBB.
bg? string
Background color, #RRGGBB, or "transparent".
modules? string: square | rounded | dots | tiny | stars | diamonds | hearts | classy | plus | bars | lines
Dot shape: square, rounded, dots, tiny, stars, diamonds, hearts, classy, plus, bars, lines.
eyes? string: square | rounded | circle | leaf
Corner shape: square, rounded, circle, leaf.
center? string: logo | brand | icon | none
Middle of the code: logo (the logo_url image), brand (the account logo), icon (see icon) or none.
icon? string: star | heart | bullseye | check | sun | palm | golf | basketball | football | soccer | trophy | dumbbell | bank | dollar | house | key | car | truck | wrench | fork | coffee | pizza | wine | cake | music | ticket | camera | phone | mail | chat | calendar | clock | pin | globe | wifi | bag | cart | tag | percent | gift | crown | gem | ring | paw | tooth | medical | leaf | scissors | grad | book | church | briefcase | user | smile | bolt | tree | snowflake
Built-in icon for the middle when center is icon.
logo_url? string
https link to a logo for the middle (PNG, JPG, WEBP, GIF or SVG, under 5 MB).
reset? boolean
true goes back to the default style.
GET/api/v1/loyalty/templates
List card templates (powerkit_loyalty_templates)
The 100 loyalty card templates with key, name, category and default look (layout, colors, pattern, font, stamp shape, icon, animations). Filter by category: classic, food, beauty, fitness, auto, retail, fun, services, premium. Pass a key to powerkit_loyalty_create_program or powerkit_loyalty_update_design.
category? string: classic | food | beauty | fitness | auto | retail | fun | services | premium
Only this category.
search? string
Part of a name or key, like "barber".
limit? integer, default 100
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
GET/api/v1/loyalty/design/options
Card design options (powerkit_loyalty_design_options)
Every valid value for the card design (layout, pattern, font, stamp shape, stamp icon, stamp animation, completion effect), the template categories, the program types and the join QR options (dot shapes, corner shapes, center icons).
none
GET/api/v1/loyalty/get/settings
Loyalty business settings (powerkit_loyalty_get_settings)
The business details shown on every card and in loyalty emails (name, phone, reply email, address, website, logo) and whether a kiosk PIN is set.
none
POST/api/v1/loyalty/update/settings
Update loyalty business settings (powerkit_loyalty_update_settings)
Changes the business details on every card and in loyalty emails. Only the fields you pass change. logo_url must be a public https link to a PNG, JPG, WEBP, GIF or SVG under 5 MB.
business_name? string
Business name at the top of every card.
phone? string
Phone number.
email? string
Where customer replies to loyalty emails go. Empty uses the account email.
address? string
Street address, shown on cards and in email footers.
website? string
Website. https:// is added when missing.
logo_url? string
https link to the business logo (used in emails and the kiosk).
remove_logo? boolean
true removes the business logo.
POST/api/v1/loyalty/set/kiosk/pin
Set the kiosk PIN (powerkit_loyalty_set_kiosk_pin)
Sets the PIN staff type to leave kiosk mode on a counter tablet (4 to 8 digits), or removes it. Kiosk mode is on the Business plan.
pin? string
The new PIN, 4 to 8 digits.
remove? boolean
true removes the PIN.
POST/api/v1/loyalty/enroll/customer
Add a loyalty customer (powerkit_loyalty_enroll_customer)
Adds a customer to a program by name and email (or adds a known customer to another program) and emails them the link to their card. A new customer counts against the plan's customer limit. Marketing email stays off unless the customer told the business they want it; then pass marketing_opt_in: true. Account emails (welcome, rewards) always go.
name string
Customer's name.
email string
Customer's email. Their card link goes here.
program_id? string
Program id from powerkit_loyalty_programs. Optional when the account has one live program.
starting_stamps? integer
Stamps (or points) carried over from a paper card. Logged as a correction.
send_welcome? boolean, default true
Email them the welcome message with their card link.
marketing_opt_in? boolean, default false
true only if the customer asked for offers and news by email. Never assume it.
GET/api/v1/loyalty/get/customer
Get a loyalty customer (powerkit_loyalty_get_customer)
One customer's details: email consent, every card with progress, visits and tier, rewards (with codes for the ones ready to redeem) and recent activity.
customer string
Customer name, email, customer id or the code on their card.
POST/api/v1/loyalty/send/card/link
Email a customer their card link (powerkit_loyalty_send_card_link)
Emails a customer the private link to their loyalty card, for example when they lost it or changed phones.
customer string
Customer name, email, customer id or card code.
POST/api/v1/loyalty/adjust
Correct stamps or points (powerkit_loyalty_adjust)
Adds or removes stamps or points on a customer's card by hand, with a reason kept in the audit log. Use a positive number to add and a negative one to remove. It is a correction, not a visit, so cooldowns do not apply. A full card still unlocks its reward.
customer string
Customer name, email, customer id or card code.
program_id? string
Program id from powerkit_loyalty_programs. Optional when the account has one live program.
stamps integer
How many stamps (punch, visits, milestones) or points (other types) to add; negative removes.
reason string
Why, for the audit log, like "Moved from paper card".
idempotency_key? string
Any unique string. Reusing it never applies the correction twice.
POST/api/v1/loyalty/delete/customerdestructive
Delete a customer's data (powerkit_loyalty_delete_customer)
Removes a customer's name and email and closes their cards (their stamp history stays without personal details). Use it when a customer asks to be forgotten. It cannot be undone: ask the person first and pass confirm: true only after they say yes.
customer string
Customer email or customer id.
confirm? boolean
Must be true. Set it only after the person confirmed.
GET/api/v1/loyalty/activity
Loyalty activity and ledger (powerkit_loyalty_activity)
The audit log (who joined, stamps by hand, corrections, redemptions, refused or unusual scans, settings changes) or the stamp ledger (every stamp, correction and reward, with points and source). Newest first.
kind? string: audit | ledger, default "audit"
audit: what happened and who did it. ledger: every points entry.
program_id? string
Ledger only: one program.
customer? string
Ledger only: one customer (name, email, id or card code).
flagged_only? boolean, default false
Audit only: just the unusual activity.
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
GET/api/v1/loyalty/staff/list
List loyalty staff (powerkit_loyalty_staff_list)
Staff logins (staff and managers) and kiosk devices, with the plan's staff limit. Kiosk devices include their link. Roles: staff stamps cards and redeems rewards; manager also corrects points and exports.
none
POST/api/v1/loyalty/staff/add
Add a staff member (powerkit_loyalty_staff_add)
Adds a staff login and emails them a private sign-in link (no PowerKit account needed). Counts against the plan's staff limit (Free 1, Pro 3, Business 10). Roles: staff (stamps and redeems) or manager (also corrections and exports).
name string
Their name.
email string
Where the sign-in link goes.
role? string: staff | manager, default "staff"
staff or manager.
POST/api/v1/loyalty/staff/set/role
Change a staff role (powerkit_loyalty_staff_set_role)
Changes a staff member between staff and manager. It applies on their next tap; their sign-in link keeps working.
staff_id string
Staff id from powerkit_loyalty_staff_list.
role string: staff | manager
staff or manager.
POST/api/v1/loyalty/staff/removedestructive
Remove a staff member or kiosk (powerkit_loyalty_staff_remove)
Removes a staff login or kiosk device. Their link stops working right away. Confirm with the person first.
staff_id string
Staff or kiosk id from powerkit_loyalty_staff_list.
POST/api/v1/loyalty/staff/send/link
Resend a staff sign-in link (powerkit_loyalty_staff_send_link)
Emails a staff member their private sign-in link again.
staff_id string
Staff id from powerkit_loyalty_staff_list.
POST/api/v1/loyalty/kiosk/add
Add a kiosk device (powerkit_loyalty_kiosk_add)
Creates a kiosk link that turns a counter tablet into a self-serve stamp station for one program. Business plan; not for spend programs. Returns the link to open on the tablet. Set a PIN with powerkit_loyalty_set_kiosk_pin.
program_id string
Program id from powerkit_loyalty_programs (the slug or exact name also work).
name? string
Device name, like "Front counter iPad".
GET/api/v1/loyalty/email/templates
List loyalty emails (powerkit_loyalty_email_templates)
The loyalty email templates: account emails (go to every member) and marketing emails (only to customers who opted in, with an unsubscribe link). Shows on or off, whether it was customized, whether this plan can edit it, and sends in the last 30 days.
none
GET/api/v1/loyalty/email/get
Get a loyalty email (powerkit_loyalty_email_get)
One loyalty email: subject, body with {{merge_tags}}, on or off, and a preview with the sample customer Maria.
key string: welcome | card_ready | stamp_added | reward_unlocked | reward_redeemed | program_changes | halfway | one_left | miss_you | winback | birthday | anniversary | double_day | weekend_bonus | vip | new_reward | reward_reminder | limited_promo | thank_you
Email key from powerkit_loyalty_email_templates.
POST/api/v1/loyalty/email/update
Edit a loyalty email (powerkit_loyalty_email_update)
Changes a loyalty email's subject and body, turns it on or off, or resets it to the original text. Body: plain text, blank line between paragraphs, merge tags like {{first_name}}, {{reward}}, {{stamps}}; a button to the card is added for you. Free edits the welcome and reward emails; Pro edits more; Business edits all. Any plan can turn an email on or off.
key string: welcome | card_ready | stamp_added | reward_unlocked | reward_redeemed | program_changes | halfway | one_left | miss_you | winback | birthday | anniversary | double_day | weekend_bonus | vip | new_reward | reward_reminder | limited_promo | thank_you
Email key from powerkit_loyalty_email_templates.
subject? string
New subject line.
body? string
New message text.
enabled? boolean
true sends this email, false stops it.
reset? boolean
true goes back to the original subject and text.
POST/api/v1/loyalty/email/test
Send a test email (powerkit_loyalty_email_test)
Sends the account owner a test of a loyalty email with the sample customer Maria. Pass subject and body to test a draft before saving it.
key string: welcome | card_ready | stamp_added | reward_unlocked | reward_redeemed | program_changes | halfway | one_left | miss_you | winback | birthday | anniversary | double_day | weekend_bonus | vip | new_reward | reward_reminder | limited_promo | thank_you
Email key.
subject? string
Draft subject to test.
body? string
Draft body to test.
GET/api/v1/loyalty/campaigns
List loyalty campaigns (powerkit_loyalty_campaigns)
The automated campaigns (Business plan) with when each one sends and whether it is on, plus one-off sends that are scheduled or done. Campaign timing is fixed by its trigger (for example 14, 30 or 60 days without a visit); use powerkit_loyalty_email_schedule to pick a time for a one-off send.
none
POST/api/v1/loyalty/campaigns/set
Turn campaigns on or off (powerkit_loyalty_campaigns_set)
Turns automated campaigns on or off (Business plan). Triggers: no_visit_14, no_visit_30, no_visit_60, halfway, one_left, unredeemed, birthday, anniversary, vip, promo_day. Campaigns only email customers who opted in, at most once per occasion.
enable? array
Triggers to turn on.
disable? array
Triggers to turn off.
POST/api/v1/loyalty/email/schedule
Schedule a one-off email (powerkit_loyalty_email_schedule)
Sends a marketing email (or "program_changes", which goes to every member) to a program's members now or at a set time. Pro and Business. Marketing emails skip anyone who has not opted in. Emails: program_changes, halfway, one_left, miss_you, winback, birthday, anniversary, double_day, weekend_bonus, vip, new_reward, reward_reminder, limited_promo, thank_you.
key string: program_changes | halfway | one_left | miss_you | winback | birthday | anniversary | double_day | weekend_bonus | vip | new_reward | reward_reminder | limited_promo | thank_you
Which email.
program_id? string
Only members of this program. Leave out for every program.
send_at? string
When, as YYYY-MM-DDTHH:MM in the account time zone (or an ISO time with Z). Leave out to send in the next few minutes.
POST/api/v1/loyalty/email/cancel
Cancel a scheduled email (powerkit_loyalty_email_cancel)
Cancels a one-off send that has not gone out yet. Ids come from powerkit_loyalty_campaigns.
send_id string
The one-off send id.

Waitlist

EndpointArguments
GET/api/v1/waitlist/overview
Waitlist overview (powerkit_waitlist_overview)
Every PowerWaitlist location right now: how many are waiting and being served, staff available, the round robin rule, whether check-in is open, the delay, today's numbers and the public check-in link.
none
GET/api/v1/waitlist/queue
List the waitlist (powerkit_waitlist_queue)
Customers in line at a location, in order, with ticket number, status, place in line, approximate wait, service and staff. which=active (default) is everyone waiting, called or in service; which=today adds finished visits.
location? string
Location id, name or link name. Optional when the account has one location.
which? string: active | today, default "active"
active or today.
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
GET/api/v1/waitlist/entry
One customer in line (powerkit_waitlist_entry)
Everything about one check-in: details, place in line, times, the timeline of actions and the emails and texts sent.
customer string
The customer: check-in id, ticket number today (like 24 or "024") or their name.
location? string
Location id, name or link name. Optional when the account has one location.
GET/api/v1/waitlist/staff
List waitlist staff (powerkit_waitlist_staff)
Staff at each location with their availability (available, break, offline), who they are serving, how many are waiting for them, the services they do, their weight for weighted round robin and role.
location? string
Location id, name or link name. Optional when the account has one location.
GET/api/v1/waitlist/services
List waitlist services (powerkit_waitlist_services)
Services customers can pick, with the minutes used for wait estimates and whether each is offered.
none
GET/api/v1/waitlist/stats
Waitlist reports (powerkit_waitlist_stats)
Check-ins, customers served, average, median and longest wait, average service time, no-show rate, cancellations, peak hours, most requested services, staff utilization and the fairness table (served, assignments, skips, manual overrides) for a period. Repeat-customer numbers are estimates.
days? integer, default 7
How many days back.
location? string
Location id, name or link name. Optional when the account has one location.
GET/api/v1/waitlist/settings
Waitlist settings and options (powerkit_waitlist_settings)
Current settings (business name, theme, welcome, instructions, labels, kiosk idle reset, almost-next threshold, automatic no-show minutes, retention) plus the themes, round robin strategies and kiosk modes you can choose from.
none
GET/api/v1/waitlist/templates
Waitlist email and text templates (powerkit_waitlist_templates)
The nine customer emails and eight text messages, whether each is on, and their current wording with merge tags like {{first_name}}, {{number}}, {{wait}}, {{staff}}, {{service}} and {{status_link}}.
none
GET/api/v1/waitlist/twilio/status
Text message (Twilio) status (powerkit_waitlist_twilio_status)
Whether the merchant's own Twilio account is connected and working, the sender, the last error and the webhook URLs to paste into Twilio. Never returns secrets: keys show their last four characters at most. Saving credentials is done in the dashboard (Notifications), not here.
none
GET/api/v1/waitlist/qr
Waitlist QR codes (powerkit_waitlist_qr)
The QR codes for a location: business check-in, find-my-place (status recovery), appointment check-in, one per staff member and one per service, with the link each opens and the styled SVG to download.
location? string
Location id, name or link name. Optional when the account has one location.
GET/api/v1/waitlist/kiosks
Kiosk devices (powerkit_waitlist_kiosks)
Kiosk tablets set up for the waitlist: name, location, mode (interactive, QR display, queue board or hybrid) and when each was last used. Kiosk links are not listed; copy them in the dashboard or make a new one with powerkit_waitlist_kiosk_create.
none
GET/api/v1/waitlist/activity
Waitlist activity log (powerkit_waitlist_activity)
The audit log: check-ins, calls, skips, reassignments (manual overrides), transfers, setting changes and failed kiosk PINs, newest first, with who did each.
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
GET/api/v1/waitlist/notifications
Waitlist delivery log (powerkit_waitlist_notifications)
Emails and texts sent to customers with their delivery status and any error in plain language (for example a Twilio trial account, A2P 10DLC or an opted-out number).
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
POST/api/v1/waitlist/check/in
Check a customer in (powerkit_waitlist_check_in)
Adds a customer to the line, like the front desk. Optional: service, a specific staff member (otherwise first available and round robin), priority, notes, phone and email. Set text_consent only when the customer agreed to text updates. Pass idempotency_key so a retry never adds them twice.
name string
name
location? string
Location id, name or link name. Optional when the account has one location.
phone? string
phone
email? string
email
service? string
Service name or id.
staff? string
Staff name or id. Leave out for first available.
priority? string: normal | priority | urgent, default "normal"
priority
notes? string
notes
text_consent? boolean, default false
True only if the customer agreed to texts about this visit.
idempotency_key? string
Any unique string. Retrying with the same key never acts twice.
POST/api/v1/waitlist/call/next
Call the next customer (powerkit_waitlist_call_next)
Calls the next customer for a staff member: their own line first, then the shared first-available line (unless a manager assigns), by priority and arrival. Two calls at once never get the same customer. Sends the "it's your turn" email or text.
staff string
Staff name or id.
location? string
Location id, name or link name. Optional when the account has one location.
idempotency_key? string
Any unique string. Retrying with the same key never acts twice.
POST/api/v1/waitlist/call
Call a specific customer (powerkit_waitlist_call)
Calls one waiting customer now (out of order if needed), optionally for a named staff member.
customer string
The customer: check-in id, ticket number today (like 24 or "024") or their name.
staff? string
staff
location? string
Location id, name or link name. Optional when the account has one location.
idempotency_key? string
Any unique string. Retrying with the same key never acts twice.
POST/api/v1/waitlist/start
Start service (powerkit_waitlist_start)
Marks a called (or waiting) customer as in service.
customer string
The customer: check-in id, ticket number today (like 24 or "024") or their name.
staff? string
staff
location? string
Location id, name or link name. Optional when the account has one location.
idempotency_key? string
Any unique string. Retrying with the same key never acts twice.
POST/api/v1/waitlist/complete
Complete service (powerkit_waitlist_complete)
Marks a customer as done. Sends the optional thank-you email and frees the staff member for the next walk-in.
customer string
The customer: check-in id, ticket number today (like 24 or "024") or their name.
location? string
Location id, name or link name. Optional when the account has one location.
idempotency_key? string
Any unique string. Retrying with the same key never acts twice.
POST/api/v1/waitlist/skip
Skip a customer (powerkit_waitlist_skip)
Puts a waiting or called customer back in line just behind the next person, so they are called again soon. Counted in fairness reports.
customer string
The customer: check-in id, ticket number today (like 24 or "024") or their name.
location? string
Location id, name or link name. Optional when the account has one location.
idempotency_key? string
Any unique string. Retrying with the same key never acts twice.
POST/api/v1/waitlist/no/showdestructive
Mark a no show (powerkit_waitlist_no_show)
Marks a customer as a no show and takes them out of line (they get a "we missed you" text if they opted in). Ask the person first and pass confirm: true.
customer string
The customer: check-in id, ticket number today (like 24 or "024") or their name.
location? string
Location id, name or link name. Optional when the account has one location.
confirm? boolean
Must be true. Ask the person before calling this.
POST/api/v1/waitlist/canceldestructive
Cancel a check-in (powerkit_waitlist_cancel)
Cancels a customer's check-in and removes them from the line. Ask the person first and pass confirm: true.
customer string
The customer: check-in id, ticket number today (like 24 or "024") or their name.
location? string
Location id, name or link name. Optional when the account has one location.
confirm? boolean
Must be true. Ask the person before calling this.
POST/api/v1/waitlist/requeue
Put a customer back in line (powerkit_waitlist_requeue)
Undoes a no show or cancellation: the customer is waiting again in their original spot.
customer string
The customer: check-in id, ticket number today (like 24 or "024") or their name.
location? string
Location id, name or link name. Optional when the account has one location.
POST/api/v1/waitlist/reassign
Reassign a customer (powerkit_waitlist_reassign)
Moves a customer to another staff member, or back to the first-available line (leave staff out). Keeps their place by arrival time and is logged as a manual override.
customer string
The customer: check-in id, ticket number today (like 24 or "024") or their name.
staff? string
Staff name or id; leave out for the first-available line.
location? string
Location id, name or link name. Optional when the account has one location.
POST/api/v1/waitlist/transfer
Transfer to another location (powerkit_waitlist_transfer)
Moves a customer to another location's line (Business plan with more than one location). They keep their original arrival time and get a new number there.
customer string
The customer: check-in id, ticket number today (like 24 or "024") or their name.
to_location string
Location id or name.
location? string
Location id, name or link name. Optional when the account has one location.
POST/api/v1/waitlist/update/entry
Edit a customer in line (powerkit_waitlist_update_entry)
Changes a check-in's name, phone, email, service, notes or priority (normal, priority, urgent).
customer string
The customer: check-in id, ticket number today (like 24 or "024") or their name.
location? string
Location id, name or link name. Optional when the account has one location.
name? string
name
phone? string
phone
email? string
email
service? string
Service name or id, or "none".
notes? string
notes
priority? string: normal | priority | urgent
priority
POST/api/v1/waitlist/send/text
Text one customer (powerkit_waitlist_send_text)
Sends a short operational text about this visit to one customer who agreed to texts, through the merchant's own Twilio. Never for marketing.
customer string
The customer: check-in id, ticket number today (like 24 or "024") or their name.
message string
message
location? string
Location id, name or link name. Optional when the account has one location.
POST/api/v1/waitlist/queue/status
Open, pause or close check-in (powerkit_waitlist_queue_status)
Opens check-in, pauses it (no new check-ins for now) or closes it for the day, for a location's line or one staff member's line. Everyone already in line is still served. Closing needs confirm: true.
status string: open | paused | closed
status
location? string
Location id, name or link name. Optional when the account has one location.
staff? string
Only this person's line.
confirm? boolean
Must be true. Ask the person before calling this.
POST/api/v1/waitlist/announce/delay
Announce a delay (powerkit_waitlist_announce_delay)
Tells everyone waiting at a location that you are running late (emails and texts, once each) and adds the delay to wait estimates. minutes: 0 clears it.
minutes integer
minutes
location? string
Location id, name or link name. Optional when the account has one location.
POST/api/v1/waitlist/staff/status
Set staff availability (powerkit_waitlist_staff_status)
Marks a staff member available, on a break (optionally for some minutes, then back automatically) or offline. Going offline sends their first-available walk-ins back to the shared line; people who asked for them by name keep their place.
staff string
staff
status string: available | break | offline
status
minutes? integer
Break length.
location? string
Location id, name or link name. Optional when the account has one location.
POST/api/v1/waitlist/location/save
Create or update a location (powerkit_waitlist_location_save)
Creates a waitlist location (with its check-in link and shared line) or updates one: name, time zone, address and opening hours. Hours look like {"mon":"09:00-18:00","sun":"closed"}; leave hours out to take check-ins whenever check-in is open.
location? string
Leave out to create a new location.
name? string
name
timezone? string
IANA time zone, like America/New_York.
address? string
address
hours? object
Day (mon..sun) to "HH:MM-HH:MM" or "closed".
always_open? boolean
always open
POST/api/v1/waitlist/location/archivedestructive
Archive a location (powerkit_waitlist_location_archive)
Archives a location: its check-in link stops working; history is kept. Refused while anyone is still in line there. Ask the person first and pass confirm: true.
location string
location
confirm? boolean
Must be true. Ask the person before calling this.
POST/api/v1/waitlist/service/save
Create or update a service (powerkit_waitlist_service_save)
Adds a service customers can pick, or changes one: name, minutes (the starting wait estimate), description, whether it is offered, and which location (leave out for every location).
service? string
Leave out to create.
name? string
name
minutes? integer
minutes
description? string
description
offered? boolean
offered
location? string
Location id, name or link name. Optional when the account has one location.
POST/api/v1/waitlist/service/deletedestructive
Delete a service (powerkit_waitlist_service_delete)
Deletes a service. Past visits keep their history. Ask the person first and pass confirm: true.
service string
service
confirm? boolean
Must be true. Ask the person before calling this.
POST/api/v1/waitlist/staff/save
Add or update a staff member (powerkit_waitlist_staff_save)
Adds a staff member (respecting the plan's staff limit) or updates one: name, email for their private sign-in link, role (staff or manager), weight for weighted round robin, short bio, location, and the services they do (empty list means every service). New staff with an email get their sign-in link by email.
staff? string
Leave out to add someone.
name? string
name
email? string
email
role? string: staff | manager
role
weight? integer
weight
bio? string
bio
location? string
Location id, name or link name. Optional when the account has one location.
services? array
Service names or ids this person does.
POST/api/v1/waitlist/staff/removedestructive
Remove a staff member (powerkit_waitlist_staff_remove)
Removes a staff member: their sign-in link stops working, and customers waiting for them move to the first-available line with their place kept. Ask the person first and pass confirm: true.
staff string
staff
confirm? boolean
Must be true. Ask the person before calling this.
POST/api/v1/waitlist/staff/send/link
Email a staff sign-in link (powerkit_waitlist_staff_send_link)
Emails a staff member their private sign-in link for their own queue on their phone. Set new_link true to also sign them out everywhere and make a fresh link (if the old one was shared).
staff string
staff
new_link? boolean, default false
new link
POST/api/v1/waitlist/strategy
Set the round robin rule (powerkit_waitlist_strategy)
Chooses how first-available walk-ins are shared at a location: next_available, strict (rotation), least_busy, shortest_wait, weighted, service (skills first) or manager (nobody auto-assigned). Free has next_available and strict; the rest need Pro.
strategy string: next_available | strict | least_busy | shortest_wait | weighted | service | manager
strategy
location? string
Location id, name or link name. Optional when the account has one location.
POST/api/v1/waitlist/settings/update
Update waitlist settings (powerkit_waitlist_settings_update)
Changes settings: business name, theme (a key from powerkit_waitlist_settings, or custom with colors on Pro), welcome message, status page instructions, what staff and services are called, kiosk idle reset seconds, when to send "almost next", automatic no-show minutes, whether to ask for phone and email, and how long contact details are kept.
business? string
business
theme? string
theme
welcome? string
welcome
instructions? string
instructions
staff_label? string
staff label
service_label? string
service label
idle_seconds? integer
idle seconds
near_count? integer
near count
noshow_minutes? integer
noshow minutes
ask_phone? boolean
ask phone
ask_email? boolean
ask email
allow_leave? boolean
allow leave
retention_days? integer
retention days
custom_colors? object
For theme "custom" (Pro and Business). Colors as #RRGGBB.
POST/api/v1/waitlist/kiosk/pin
Set or remove the kiosk PIN (powerkit_waitlist_kiosk_pin)
Sets the 4 to 8 digit PIN needed to exit kiosk mode, or removes it (clear: true). The PIN is stored hashed.
pin? string
pin
clear? boolean, default false
clear
POST/api/v1/waitlist/kiosk/create
Make a kiosk link (powerkit_waitlist_kiosk_create)
Makes a kiosk link for a tablet or TV at a location: interactive check-in, QR display, queue board (numbers only) or hybrid. Anyone with the link can use that screen, so give it only to the device; remove it any time with powerkit_waitlist_kiosk_remove.
name string
name
mode? string: interactive | qr | board | hybrid, default "hybrid"
mode
location? string
Location id, name or link name. Optional when the account has one location.
POST/api/v1/waitlist/kiosk/removedestructive
Remove a kiosk (powerkit_waitlist_kiosk_remove)
Switches a kiosk link off: that tablet stops working right away. Ask the person first and pass confirm: true.
kiosk string
Kiosk id or name.
confirm? boolean
Must be true. Ask the person before calling this.
POST/api/v1/waitlist/template/update
Edit an email or text template (powerkit_waitlist_template_update)
Turns a customer email or text on or off, or changes its wording (email wording needs Pro). Use merge tags like {{first_name}}, {{business}}, {{number}}, {{position}}, {{wait}}, {{staff}}, {{service}}, {{status_link}} and {{delay}}. Keys come from powerkit_waitlist_templates.
key string
key
subject? string
subject
body? string
body
on? boolean
on
POST/api/v1/waitlist/template/test
Send a test email (powerkit_waitlist_template_test)
Sends one email template, filled with sample details, to an address (the account's own email by default).
key string
key
to? string
to
POST/api/v1/waitlist/twilio/toggle
Turn text messages on or off (powerkit_waitlist_twilio_toggle)
Turns customer texts on or off without touching the saved Twilio credentials. Connecting Twilio (entering keys) is done in the dashboard so secrets never pass through a chat.
on boolean
on
POST/api/v1/waitlist/twilio/test
Send a test text (powerkit_waitlist_twilio_test)
Sends a test text through the merchant's own Twilio to a phone number and reports what Twilio said, in plain language.
to string
to
POST/api/v1/waitlist/qr/style
Style a waitlist QR code (powerkit_waitlist_qr_style)
Changes the look of one waitlist QR code: dot color, corner color, background, dot style, corner style and an optional built-in icon in the middle. Types and keys come from powerkit_waitlist_qr. A low-contrast combination is refused so the code always scans.
type string: business | status | appointment | staff | service
type
key? string
Staff or service id for those types.
location? string
Location id, name or link name. Optional when the account has one location.
color? string
color
corner_color? string
corner color
background? string
background
dots? string: square | rounded | dots | tiny | stars | diamonds | hearts | classy | plus | bars | lines
dots
corners? string: square | rounded | circle | leaf
corners
icon? string
A built-in icon (star, heart, bullseye, check, sun, palm, golf, basketball, football, soccer, trophy, dumbbell...) or "none".

Support and invites

EndpointArguments
GET/api/v1/invite/link
My invite link (powerkit_invite_link)
The invite-a-friend link and code for this account, with how many friends joined, how many went paid and how many free months were earned. Both sides get a free month when an invited friend starts a paid plan, up to 12 a year.
none
GET/api/v1/support/tickets
My support tickets (powerkit_support_tickets)
The support tickets on this account, newest first. Pass ticket_id to read one ticket with its whole message thread.
ticket_id? string
Read this ticket and its messages instead of listing.
POST/api/v1/support/open
Open a support ticket (powerkit_support_open)
Opens a support ticket with PowerKit Pro from this account. The team answers by email and on the Help page. Use when the person asks for help the tools cannot give.
subject string
A short subject.
message string
What happened and what they expected.
product? string: account | learn | form | book | waitlist | loyalty | qr | link | card | review | quote | waiver | menu | cert | program | seat
Which tool it is about (a product key, or "account" for login and billing). Leave out for a general question.

Other

EndpointArguments
GET/api/v1/learn/courses
List courses (powerkit_learn_courses)
PowerLMS courses on this account with status, price, enrolled and completed counts, students waiting to pay, and the public course page link.
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
GET/api/v1/learn/course/get
Get a course (powerkit_learn_course_get)
One course in full: details, the curriculum in order (sections and lessons with ids and types), upcoming classes, and sales.
course_id string
The id as returned by a list tool.
POST/api/v1/learn/course/create
Create a course (powerkit_learn_course_create)
Creates a course with an optional price, outcomes and a first set of lessons. It starts as a draft unless publish is true (publishing needs at least one lesson, and a paid course needs a way to pay set up in the dashboard). Returns the course page link.
title string
title
subtitle? string
subtitle
description? string
description
outcomes? array
What students will be able to do, one per item.
format? string: self | cohort | hybrid, default "self"
format
price? number
Price in US dollars. 0 or empty for free.
lessons? array
lessons
publish? boolean, default false
publish
POST/api/v1/learn/lesson/add
Add a lesson (powerkit_learn_lesson_add)
Adds a lesson to the end of a course: video (YouTube, Vimeo or Loom link), reading text, embed, quiz, live class or in-person class.
course_id string
The id as returned by a list tool.
title string
title
kind? string: video | text | file | embed | quiz | assignment | scorm | live | inperson, default "text"
kind
body? string
body
video_url? string
video url
drip_days? integer, default 0
drip days
GET/api/v1/learn/students
List students in a course (powerkit_learn_students)
Students in a course with status (active, completed, waiting for payment), payment method, the reference code for manual payments, lessons done and classes attended.
course_id string
The id as returned by a list tool.
status? string: pending_payment | active | completed | refunded | expired | cancelled
status
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
GET/api/v1/learn/gradebook
Course gradebook (powerkit_learn_gradebook)
Every active or finished student in a course with their best quiz scores, assignment grades, SCORM results, lessons done and classes attended.
course_id string
The id as returned by a list tool.
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
GET/api/v1/learn/members
List all-access members (powerkit_learn_members)
People on the instructor's monthly all-access membership (every published course), with status (Active, Payment failed, Cancelled), monthly price and start date.
status? string: active | past_due | cancelled
status
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
POST/api/v1/learn/enroll
Enroll students (powerkit_learn_enroll)
Adds students to a course by name and email and emails each one a welcome link (students without a password are asked to choose one). Set paid to count the course price as a sale (for people who paid you directly or a sponsor).
course_id string
The id as returned by a list tool.
students array
students
paid? boolean, default false
paid
POST/api/v1/learn/mark/paid
Mark a student paid (powerkit_learn_mark_paid)
Confirms a cash, Zelle or $cashtag payment for an enrollment that is waiting for payment, opens the course for the student and emails them a link to the course. Use the enrollment id or the reference code the student put in their payment note.
course_id string
The id as returned by a list tool.
enrollment_id? string
enrollment id
reference? string
The code like L7K2QX shown to the student.
POST/api/v1/learn/class/schedule
Schedule classes (powerkit_learn_class_schedule)
Schedules a live or in-person class for a course, optionally repeating weekly. Google Meet links are made automatically when the account has Google Calendar connected; for Zoom or another service pass the link; for in person pass the room or address. Times are in the account's time zone.
course_id string
The id as returned by a list tool.
title? string
title
starts string
Local start time, YYYY-MM-DDTHH:MM.
minutes? integer, default 60
minutes
provider? string: meet | zoom | link | room, default "meet"
provider
join_url? string
join url
location? string
location
repeat_weeks? integer, default 1
repeat weeks
GET/api/v1/learn/sales
Course sales (powerkit_learn_sales)
PowerLMS sales on this account: total, the last 30 days, by payment method, and by course.
none
GET/api/v1/learn/roster/list
Member roster (powerkit_learn_roster_list)
Lists the member roster of this account's school: the people who may take its members-only courses. Shows whether each membership is current. Filter with search (name or email) and current_only.
search? string
search
current_only? boolean, default false
current only
limit? integer, default 50
How many to return (1 to 200).
offset? integer, default 0
How many to skip, for the next page.
POST/api/v1/learn/roster/add
Add to the member roster (powerkit_learn_roster_add)
Adds or updates people on this school's member roster (who may take members-only courses). Each member needs an email; name, status (default Active), level and member_through (YYYY-MM-DD, the last day of membership) are optional. Set full_list to true when this is the whole member list: anyone added earlier through the connector or API who is not in it is marked Lapsed.
members array
members
full_list? boolean, default false
full list
POST/api/v1/learn/roster/removedestructive
Remove from the member roster (powerkit_learn_roster_remove)
Removes people from this school's member roster by email. Courses they already enrolled in stay open to them.
emails array
emails
POST/api/v1/learn/course/build
Build a whole course (powerkit_learn_course_build)
Builds a complete PowerLMS course in one call: details, modules (sections), lessons with text, photos and videos, quizzes (multiple choice, true/false, select all, fill in the blank, short answer), a final test, an optional certificate and publishing. Use this when someone describes a course they want: agree on the outline with them first, then call this once with every module, lesson and question, and edit afterwards with the smaller course tools. Every question is checked before anything is saved, so a mistake creates nothing. Quizzes need questions, or students can never finish the course. Lesson text: blank lines separate blocks. Special blocks: "## Heading", "> Callout note", lines that start with "- " for bullets, "![Caption](https://image-url)" for a photo with an optional next line "Credit: ..." under it, and "@video https://youtu.be/..." for an extra YouTube or Vimeo video inside the text. **bold** works inside a paragraph and links are clickable.
title string
Course title.
subtitle? string
One line under the title on the course page.
description? string
What the course is about, for the course page.
outcomes? array
What students will be able to do, one per item.
instructor_name? string
Shown on the course page. Defaults to the account name.
instructor_bio? string
A short bio for the course page.
price? number
US dollars. 0 or empty for free.
cover_image_url? string
A wide image: an https link (it is downloaded and saved to the account) or a /files/... path already on this account.
cert_hours? string
Hours printed on the certificate, for example "3".
format? string: self | cohort | hybrid, default "self"
self (at their own pace), cohort (live classes on a schedule) or hybrid.
quiz_pass? integer, default 70
Percent needed to pass each quiz.
certificate? boolean, default true
Issue a certificate automatically when a student finishes (on plans with certificates).
discussion? boolean, default true
Turn on the course discussion board and live chat.
modules array
Every module in order, each with its lessons. Put a final test in its own last module.
publish? boolean, default false
Publish right away. Leave false so the person can review the draft first.
visibility? string: public | members | staff, default "public"
Who can take the course: public (anyone), members (people on this school's member roster) or staff (this school's own team, hidden from the website).
auto_assign? string: none | admin | staff | instructor, default "none"
Onboarding: give the course automatically to every member of this school's team with that role once it is published.
POST/api/v1/learn/course/update
Update a course (powerkit_learn_course_update)
Changes a course's details: title, subtitle, description, outcomes, instructor, price, cover image, quiz pass mark, certificate hours, discussion board, certificate on or off, and who can take it (public, members only or staff only). Only the fields you send change.
course_id string
The id as returned by a list tool.
title? string
New course title.
subtitle? string
One line under the title on the course page.
description? string
What the course is about, for the course page.
outcomes? array
What students will be able to do, one per item.
instructor_name? string
Shown on the course page. Defaults to the account name.
instructor_bio? string
A short bio for the course page.
price? number
US dollars. 0 or empty for free.
cover_image_url? string
A wide image: an https link (it is downloaded and saved to the account) or a /files/... path already on this account.
cert_hours? string
Hours printed on the certificate, for example "3".
quiz_pass? integer
Percent needed to pass each quiz.
discussion? boolean
Course discussion board and live chat on or off.
certificate? boolean
Issue a certificate when a student finishes (on plans with certificates).
auto_assign? string: none | admin | staff | instructor
Onboarding: give the course automatically to every member of this school's team with that role (admin covers super admins), now (once the course is published) and when people join or change role. none turns it off. Usually paired with visibility staff.
visibility? string: public | members | staff
Who can take the course: public (anyone), members (people on this school's member roster whose membership is current) or staff (this school's own team, hidden from the website).
POST/api/v1/learn/module/add
Add a module (powerkit_learn_module_add)
Adds a module (section) at the end of a course, optionally with its lessons and quiz questions. Returns the module id, which powerkit_learn_lesson_update can move lessons into.
course_id string
The id as returned by a list tool.
title string
Module name.
lessons? array
Lessons to add to the new module, in order.
GET/api/v1/learn/lesson/get
Read a lesson (powerkit_learn_lesson_get)
One lesson in full: its text, video link, settings and, for quizzes, every question with its choices, right answer and id.
lesson_id string
The id as returned by a list tool.
POST/api/v1/learn/lesson/update
Update a lesson (powerkit_learn_lesson_update)
Changes a lesson's title, type, text, video, length, free preview, drip days, quiz tries or module. Only the fields you send change. Lesson text: blank lines separate blocks. Special blocks: "## Heading", "> Callout note", lines that start with "- " for bullets, "![Caption](https://image-url)" for a photo with an optional next line "Credit: ..." under it, and "@video https://youtu.be/..." for an extra YouTube or Vimeo video inside the text. **bold** works inside a paragraph and links are clickable.
lesson_id string
The id as returned by a list tool.
title? string
New lesson title.
kind? string: video | text | file | embed | quiz | assignment | scorm | live | inperson
New lesson type: text, video, quiz, assignment, embed, live, inperson, scorm.
body? string
The full new lesson text (it replaces the old text).
video_url? string
YouTube, Vimeo or Loom link. An empty string removes it.
minutes? integer
About how long the lesson takes.
preview? boolean
True lets anyone open the lesson from the course page before enrolling.
drip_days? integer
Days after enrolling before the lesson opens. 0 = right away.
attempts? integer
Quizzes: tries allowed, 0 = unlimited.
module_id? string
Move the lesson to the end of this module (ids from powerkit_learn_course_get, as section ids).
POST/api/v1/learn/questions/add
Add quiz questions (powerkit_learn_questions_add)
Adds questions to the end of a quiz lesson: multiple_choice, true_false, select_all, fill_blank or short_answer (the instructor grades written answers). Questions with a problem are skipped and listed.
lesson_id string
The id as returned by a list tool.
questions array
The questions to add, in order.
POST/api/v1/learn/question/deletedestructive
Delete a quiz question (powerkit_learn_question_delete)
Removes one question from a quiz (question ids come from powerkit_learn_lesson_get).
question_id string
The id as returned by a list tool.
POST/api/v1/learn/lesson/deletedestructive
Delete a lesson (powerkit_learn_lesson_delete)
Deletes a lesson and its quiz questions, in two steps. Step 1: call with lesson_id only. Nothing is deleted; it returns the lesson and a confirmation code. Show that to the person and get their approval. Step 2: once they approve, call again with confirm_code set to that code. Students lose their progress on the lesson. Cannot be undone.
lesson_id string
The id as returned by a list tool.
confirm_code? string
User confirmation. Leave empty for the preview. Set it to the code from the preview only after the person has approved deleting that lesson.
POST/api/v1/learn/course/publish
Publish or unpublish a course (powerkit_learn_course_publish)
Publishes a course (its course page opens for enrollment) or takes it back to draft. Publishing checks that the course has lessons, every quiz has questions and a paid course has a way to pay.
course_id string
The id as returned by a list tool.
publish? boolean, default true
True publishes, false takes the course back to draft.